EOSIO开发(二)运行合约样例

本文将介绍如何使用EOSIO自带的合约”Currency”,实现创建钱包-创建账户-执行合约 的完整流程

前言

本文将介绍如何在Docker环境下,使用系统自带的合约”Currency”,实现 创建钱包 - 创建账户 - 执行合约 的完整流程

在学习文章内容之前,建议先了解EOS中Account、Permission、Active以及Action的基本概念,文末有相关的参考资料。

由于本文是在Docker环境下开发,因此部分命令与官方文档不一致(主要是文件目录地址),但是执行步骤是一致的,使用本地环境的同学可以参考官方文档的命令。

执行步骤

  • 启动nodeos节点
  • 创建钱包
  • 加载Bios合约
  • 创建currency账户
  • 上传currency账户到区块链
  • 执行智能合约

启动nodeos节点

下载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

创建成功后,会生成一个随机密码。

 EOSIO开发(二)运行合约样例

加载Bios合约

将Bios合约关联到eosio账户上,它将使eosio账户获得超级管理员权限,能够直接操控其它账户的资源以及执行特殊API。

cleos set contract eosio ../contracts/eosio.bios -p 

创建currency账户

为账户创建OwnerKey和ActiveKey,注意 create key 命令需要执行两次。

cleos create key # OwnerKey 
cleos create key # ActiveKey

这两次命令将生成两组private key和public key,分别对应OwnerKey和ActiveKey。

OwnerKey EOSIO开发(二)运行合约样例

ActiveKey EOSIO开发(二)运行合约样例

分别将两组private key导入钱包

cleos wallet import <private-OwnerKey>

cleos wallet import <private-ActiveKey>

EOSIO开发(二)运行合约样例

通过 cleos create account 命令创建 currency 账户,并由eosio 账户为其授权。

cleos create account eosio currency \<public-OwnerKey> \<public-ActiveKey> 

EOSIO开发(二)运行合约样例

验证currency账户是否创建成功。

cleos get account currency

看到下面的账户信息,则说明创建成功。

 EOSIO开发(二)运行合约样例

上传currency账户到区块链

上传之前,验证区块链中是否已经存在currency账户

cleos get code currency

如果返回hash code都为0,则说明账户不存在

EOSIO开发(二)运行合约样例

上传currency账户

cleos set contract currency contracts/currency

EOSIO开发(二)运行合约样例

再次验证currency账户是否已经存在

cleos get code currency

hash code不为0,上传成功。

 EOSIO开发(二)运行合约样例

执行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 [email protected] 
cleos push action currency issue '{"to":"currency","quantity":"1000.0000 CUR","memo":""}' --permission [email protected]

执行完毕后,验证currency账户中的余额(balance)是否已经正确初始化。

cleos get table currency currency accounts

可以看到balance的值为1000.0000 CUR,初始化成功。

 EOSIO开发(二)运行合约样例

执行智能合约

现在我们通过智能合约来执行一次转账操作,从currency账户转账20.0000 CUR到eosio账户。

转账之前看看两个账户的余额。

cleos get table currency currency accounts 
cleos get table currency eosio accounts

currency账户的余额(balance)为1000.0000 CUR,而eosio账户没有余额。

 EOSIO开发(二)运行合约样例

开始转账。

cleos push action currency transfer '{"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"my first transfer"}' --permission [email protected]

转账完成后,再次查询余额,currency账户是980,eosio账户则是20,转账成功。

EOSIO开发(二)运行合约样例

至此,整个流程结束。

小结

通过官方提供的currency合约,我们体验了 创建钱包 - 创建账户 - 执行合约 的整个流程,这样可以让大家对EOS合约的执行步骤有一个初步印象。

至于在执行过程当中,涉及到一些更细节的问题,比如何编写智能合约,cleos命令的具体语法以及作用,如果暂时不明白也没有关系,后续的文章我们再一步步的深入学习。

转自:https://www.taowong.com/blog/2018/06/27/eos-develop-2.html