区块链 xuperchain 命令行 部署使用EVM 合约 教程

偏执的太偏执、 2022-10-17 04:08 498阅读 0赞

一、创建合约账户

  1. # 16位数字组成的字符串
  2. ./xchain-cli account new --account 1111111111111111

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70

  1. # 增加fee参数,重新执行
  2. ./xchain-cli account new --account 1111111111111111 --fee 1001

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70 1

命令运行后就会调用xchain的系统合约功能 NewAccount 创建一个名为 XC1111111111111111@xuper (如果链名字为xuper)的账号

给该账户充钱,以便对后面的合约进行部署

  1. ./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000000000 --keys data/keys/
  2. ./xchain-cli account balance XC1111111111111111@xuper -H 127.0.0.1:37101

二、开启evm合约功能

1. 修改每个节点的conf/xchain.yaml

确保evm合约功能开启

  1. vim conf/xchain.yaml

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70 2

2. 重启每个节点

暂时没有停止命令,所以使用

  1. ps -ef | grep xchain

查找到进程号,然后kill。

本文直接采用重启机器。

然后,启动每个节点

  1. nohup ./xchain &

2021060114303022.png

等一会确认每个节点是否连上

  1. ./xchain-cli status -H 192.168.92.129:37101

20210601143106853.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70 3

三、编译

1. 安装solc编译器

请参见https://solidity-cn.readthedocs.io/zh/latest/installing-solidity.html。

  1. sudo snap install solc
  2. solc --version
  3. // solc, the solidity compiler commandline interface
  4. // Version: 0.5.9+commit.c68bc34e.Darwin.appleclang

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70 4

2. 编写智能合约

我们以contractsdk/evm/example中的counter合约为例

  1. pragma solidity >=0.0.0;
  2. contract Counter {
  3. address owner;
  4. mapping (string => uint256) values;
  5. constructor() public{
  6. owner = msg.sender;
  7. }
  8. function increase(string memory key) public payable{
  9. values[key] = values[key] + 1;
  10. }
  11. function get(string memory key) view public returns (uint) {
  12. return values[key];
  13. }
  14. function getOwner() view public returns (address) {
  15. return owner;
  16. }
  17. }

3. 编译合约

  1. cd ../core/contractsdk/evm/example/counter
  2. // 通过solc编译合约源码
  3. solc --bin --abi Counter.sol -o .
  4. // 合约二进制文件和abi文件分别存放在当前目录下,Counter.bin和Counter.abi

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMyODgxOTA_size_16_color_FFFFFF_t_70 5

四、部署合约

  1. cd ~/xuper/xuperchain/output
  2. ./xchain-cli evm deploy --account XC1111111111111111@xuper --cname counterevm --fee 5200000 ../core/contractsdk/evm/example/counter/Counter.bin --abi ../core/contractsdk/evm/example/counter/Counter.abi
  • --abi Counter.abi :表示部署需要使用的abi文件,用于合约方法参数编解码
  • ``-a ``:如果合约需要构造函数,通过-a进行指定。与c++、golang等合约的部署和调用方式相同。

counterevm为自定义的合约的名字,后面查询时也是使用这个名字

20210601153239614.png

五、合约调用

调用solidity合约。通过合约名直接发起合约调用和查询。

  1. # 调用solidity合约,increase方法,counterevm为合约名
  2. ./xchain-cli evm invoke --method increase -a '{"key":"test"}' counterevm --fee 22787517
  3. # 调用solidity合约,get方法,counterevm为合约名
  4. ./xchain-cli evm query --method get -a '{"key":"test"}' counterevm
  5. # 调用结果,其中0表示返回值的次序,1为返回值
  6. # key,value: 0 1

20210601154129580.png

参考

https://xuper.baidu.com/n/xuperdoc/advanced_usage/contract_accounts.html

发表评论

表情:
评论列表 (有 0 条评论,498人围观)

还没有评论,来说两句吧...

相关阅读

    相关 区块 智能合约 简介

    根据谷歌趋势数据显示,目前,程序员对智能合约编程的兴趣已经处于历史最高水平,其中中国高居全球榜首,随着区块链技术的发展,相信日后智能合约将会与我们的生活密切相关,今天就为大家介