TryTry Liquid,很不错!
bash build_chain.sh -l 127.0.0.1:1 -p 30300,20200,8545 bash nodes/127.0.0.1/start_all.sh
5.2 部署 Node.js SDK
由于 Liquid 当前暂为实验项目,因此目前仅有 FISCO BCOS Node.js SDK 提供的 CLI 工具能够部署及调用 Liquid
5.3 将合约部署至
5.4 调用
使用 Node.js SDK CLI 工具提供的call
子命令,我们可以调用已被部署到链上的
再调用store
函数,对地址0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
进行存值:
./cli.js exec call map_storer 0xf5736213670d32f63b1a598e55753014f710344e store 300 0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
调用get
函数,对上述地址进行取值:
./cli.js exec call map_storer 0xf5736213670d32f63b1a598e55753014f710344e get 0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
成功~
6 源码解读
6.1 Mapping 类型
相对于上一篇的代码,本篇中的代码引入了新的类型——Mapping
。
Mapping
是一种很有用的类型,我们在Solidity
合约中同样能见到它的身影:
如:
mapping(address=>bool) isStake;
在liquid
智能合约中,我们这样定义一个Mapping
:
my_number_map: storage::Mapping<address, u32>,
Mapping
变量的get
操作:
let value = self.my_number_map.get(of).unwrap_or(&0);
Mapping
变量的insert
操作:
self.my_number_map.insert(&of, payload);
6.2 获取当前合约调用者
let caller = self.env().get_caller();
6.3 unwrap_or
unwrap_or
是Rust
错误捕捉方式的一种:
fn unwrap_or<T>(option: Option<T>, default: T) -> T { match option { None => default, Some(value) => value, } }
unwrap_or提供了一个默认值default
,当值为None
时返回default
。
因此,如下语句中,当of
对应的值不存在时,便会返回0
:
let value = self.my_number_map.get(of).unwrap_or(&0);
call
子命令,我们可以调用已被部署到链上的store
函数,对地址0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
进行存值:./cli.js exec call map_storer 0xf5736213670d32f63b1a598e55753014f710344e store 300 0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
get
函数,对上述地址进行取值:./cli.js exec call map_storer 0xf5736213670d32f63b1a598e55753014f710344e get 0x039ced1cd5bea5ace04de8e74c66e312ba4a48af
Mapping
。Mapping
是一种很有用的类型,我们在Solidity
合约中同样能见到它的身影:mapping(address=>bool) isStake;
liquid
智能合约中,我们这样定义一个Mapping
:my_number_map: storage::Mapping<address, u32>,
Mapping
变量的get
操作:let value = self.my_number_map.get(of).unwrap_or(&0);
Mapping
变量的insert
操作:self.my_number_map.insert(&of, payload);
let caller = self.env().get_caller();
unwrap_or
是Rust
错误捕捉方式的一种:fn unwrap_or<T>(option: Option<T>, default: T) -> T { match option { None => default, Some(value) => value, } }
default
,当值为None
时返回default
。of
对应的值不存在时,便会返回0
:let value = self.my_number_map.get(of).unwrap_or(&0);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。