Expand description
Provides the macros needed to write fvm contracts
§Basic Usage
Macros can be used in contract for simplify contract preparation process, like this:
use fvm_macros::contract;
use fvm_macros::storage;
use fvm_std::collections::hyper_map::HyperMap;
#[storage]
pub struct SetHash {
map: HyperMap<String, String>,
}
#[contract]
impl SetHash {
fn new() -> Self {
Self { map: HyperMap::new() }
}
pub fn set_hash(&mut self, key: String, value: String) {
self.map.insert(key, value);
}
pub fn get_hash(&mut self, key: String) -> &String {
self.map.get(&key).unwrap()
}
}
§Contract Mode
Now write contract have two mode:
- normal mode
Contract with normal mode limited data storage format, and user can write contract more
convenient. User can use all macros except advance_contract
.
- advance mode
Contract with advance mode not limited data storage format, and it must open advance
feature with fvm-std
and ‘fvm-macros’ lib to use this mode. The execute speed of contract
in this mode would be fast then the contract in normal mode.
Attribute Macros§
- advance_
contract - Mark method implementation as advance contract method
- contract
- Mark method implementation as contract method
- cross
- Generate cross call attribute this macro has two ways to use.
- parallel_
call_ method - Mark parallel call method
- parallel_
contract - Parallel level 1
- parallel_
cross - Used while cross call the parallel
the attribute has three fields.
address
: cross contract addressaddress_index
: ifaddress
is empty, then you should declare the cross address in function params, this is the index of params.methods
: the name of cross call the methodscns_name
: CNS of contract.cns_index
: CNS of contract index. - parallel_
field - Parallel level 2
This attribute could have two fields.
field_name
andpara_index
.field_name
point out which StoreField will parallelpara_index
the para index of this StoreField, used forHyperMap
- storage
- Generate storage attribute for struct