本文将介绍如何在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。
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,则说明账户不存在
上传currency账户
cleos set contract currency contracts/currency
再次验证currency账户是否已经存在
cleos get code currency
hash code不为0,上传成功。
执行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,初始化成功。
现在我们通过智能合约来执行一次转账操作,从currency账户转账20.0000 CUR到eosio账户。
转账之前看看两个账户的余额。
cleos get table currency currency accounts cleos get table currency eosio accounts
currency账户的余额(balance)为1000.0000 CUR,而eosio账户没有余额。
开始转账。
cleos push action currency transfer '{"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}' --permission currency@active
转账完成后,再次查询余额,currency账户是980,eosio账户则是20,转账成功。
至此,整个流程结束。
通过官方提供的currency合约,我们体验了 创建钱包 - 创建账户 - 执行合约 的整个流程,这样可以让大家对EOS合约的执行步骤有一个初步印象。
至于在执行过程当中,涉及到一些更细节的问题,比如何编写智能合约,cleos命令的具体语法以及作用,如果暂时不明白也没有关系,后续的文章我们再一步步的深入学习。
转自:https://www.taowong.com/blog/2018/06/27/eos-develop-2.html