Creating custom state
Custom state can be added to a contract by defining a data type which will hold
it. Data type is a rust structure or enum, which implements strict_encoding
traits. The simplest way to add this implementation is through derive macros:
#[derive(Clone, Eq, PartialEq, Debug)]
#[derive(StrictDumb, StrictType, StrictEncode, StrictDecode)]
#[strict_type(lib = LIB_NAME_RGB_CONTRACT)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(crate = "serde_crate", rename_all = "camelCase")
)]
pub struct Nominal {
ticker: Ticker,
name: ContractName,
details: Option<ContractDetails>,
precision: Precision,
}
impl StrictSerialize for Nominal {}
impl StrictDeserialize for Nominal {}
Once declared, the type can be compiled into a type library:
let lib = LibBuilder::new(libname!(LIB_NAME_RGB_CONTRACT))
.process::<Nominal>()?
.compile(none!())?;
let types = SystemBuilder::new()
.import(lib)?
.finalize()?;