Icon Link计数器

以下是一个简单的合约示例,实现了一个计数器。initialize_counter()increment_counter() ABI 方法都返回当前设置的值。

forc template --template-name counter my_counter_project
contract;
 
abi TestContract {
    #[storage(write)]
    fn initialize_counter(value: u64) -> u64;
 
    #[storage(read, write)]
    fn increment_counter(amount: u64) -> u64;
}
 
storage {
    counter: u64 = 0,
}
 
impl TestContract for Contract {
    #[storage(write)]
    fn initialize_counter(value: u64) -> u64 {
        storage.counter.write(value);
        value
    }
 
    #[storage(read, write)]
    fn increment_counter(amount: u64) -> u64 {
        let incremented = storage.counter.read() + amount;
        storage.counter.write(incremented);
        incremented
    }
}