本文将介绍如何使用EOSIO自带的合约"Currency",实现创建钱包-创建账户-执行合约 的完整流程
前一篇文章介绍了如何使用Docker搭建并运行EOSIO本地节点,本文将继续介绍如何在Docker环境下,使用系统自带的合约"Currency",实现 创建钱包 - 创建账户 - 执行合约 的完整流程。
在学习文章内容之前,建议先了解EOS中Account、Permission、Active以及Action的基本概念,文末有相关的参考资料。
由于本文是在Docker环境下开发,因此部分命令与官方文档不一致(主要是文件目录地址),但是执行步骤是一致的,使用本地环境的同学可以参考官方文档的命令。
下载eosio/eos镜像
docker pull eosio/eos
启动nodeos节点
docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos /opt/eosio/bin/nodeosd.sh arg1 arg2
进入nodeos节点调试界面,后续的命令都在该界面中执行。
docker exec -it nodeos /bin/bash
通过cleos wallet create命令创建钱包。
cleos wallet create
将Bios合约关联到eosio
账户上,它将使eosio
账户获得超级管理员权限,能够直接操控其它账户的资源以及执行特殊API。
cleos set contract eosio ../contracts/eosio.bios -p
为账户创建OwnerKey和ActiveKey,注意 create key 命令需要执行两次。
cleos create key # OwnerKey
cleos create key # ActiveKey
这两次命令将生成两组private key和public key,分别对应OwnerKey和ActiveKey。
分别将两组private key导入钱包
cleos wallet import
cleos wallet import
通过 cleos create account
命令创建 currency
账户,并由eosio
账户为其授权。
cleos create account eosio currency \ \
验证currency账户是否创建成功。
cleos get account currency
上传之前,验证区块链中是否已经存在currency账户
cleos get code currency
如果返回hash code都为0,则说明账户不存在
![屏幕快照 2018-04-14 上午11.00.47](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.00.47.png)
上传currency账户
cleos set contract currency contracts/currency
![屏幕快照 2018-04-14 上午11.01.16](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.01.16.png)
再次验证currency账户是否已经存在
cleos get code currency
hash code不为0,上传成功。
![屏幕快照 2018-04-14 上午11.01.24](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.01.24.png)
执行currency合约的create action与issue action,
cleos push action currency create '{"issuer":"currency","maximum_supply":"1000000.0000 CUR","can_freeze":"0","can_recall":"0","can_whitelist":"0"}' --permission currency@active
cleos push action currency issue '{"to":"currency","quantity":"1000.0000 CUR","memo":""}' --permission currency@active
执行完毕后,验证currency账户中的余额(balance)是否已经正确初始化。
cleos get table currency currency accounts
可以看到balance的值为1000.0000 CUR,初始化成功。
![屏幕快照 2018-04-14 上午11.03.12](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.03.12.png)
现在我们通过智能合约来执行一次转账操作,从currency账户转账20.0000 CUR到eosio账户。
转账之前看看两个账户的余额。
cleos get table currency currency accounts
cleos get table currency eosio accounts
currency账户的余额(balance)为1000.0000 CUR,而eosio账户没有余额。
![屏幕快照 2018-04-14 上午11.06.34](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.06.34.png)
开始转账。
cleos push action currency transfer '{"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}' --permission currency@active
转账完成后,再次查询余额,currency账户是980,eosio账户则是20,转账成功。
![屏幕快照 2018-04-14 上午11.08.07](https://wangtao-1256981172.cos.ap-guangzhou.myqcloud.com/屏幕快照 2018-04-14 上午11.08.07.png)
至此,整个流程结束。
通过官方提供的currency合约,我们体验了 创建钱包 - 创建账户 - 执行合约 的整个流程,这样可以让大家对EOS合约的执行步骤有一个初步印象。
至于在执行过程当中,涉及到一些更细节的问题,比如何编写智能合约,cleos命令的具体语法以及作用,如果暂时不明白也没有关系,后续的文章我们再一步步的深入学习。
EOSIO开发(一)使用Docker构建本地环境
EOSIO开发(二)运行合约样例
EOSIO开发(三)钱包、账户与账户权限之概念篇
EOSIO开发(四)- nodeos、keosd与cleos
EOSIO开发(五)- 钱包之实战篇
EOSIO开发(六)- 账户之实战篇
EOSIO开发(七)- 使用CLion查看EOS代码
EOSIO开发(八)- 智能合约基础概念
EOS WIKI-Local-Environment
Accounts & Permissions
深入理解 EOS 账户权限映射
https://www.taowong.com/blog/2018/06/27/eos-develop-2.html