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

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

前言

前一篇文章介绍了如何使用Docker搭建并运行EOSIO本地节点,本文将继续介绍如何在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

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

加载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
20180413005

ActiveKey
20180413006

分别将两组private key导入钱包

cleos wallet import <private-OwnerKey>
cleos wallet import <private-ActiveKey>

20180413007

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

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

20180413008

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

cleos get account currency

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

上传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

1、玩过EOS的都知道,EOS本身更新迭代非常之快,所以有些知识点可能与最新版有所出入,希望小伙伴理解!此文档适用于EOS-v1.0.5以上版本和v1.1.x版本,目前的v1.2.x可能会有极少部分出入,比如eosiocpp工具看更新说明再不用安装的状态下就能使用,目前还未测试。有兴趣的小伙伴可以留言交流。 2、当前文档目录结构介绍: #思考研究问题 1、如何保证EOS中发布的智能合约不被随意篡改? #玩转EOS智能合约代码 #玩转客户端cleos 1、先玩转与智能合约相关的操作 #使用eosiocpp工具编译智能合约生成abi文件和wast文件 #编译合约(无法通过) #安装build/programs下工具 #重新编译合约 #部署合约到账户 #购买RAM #测试调用部署的合约 #更新\升级已经部署过的智能合约(相对空的合约) #更新添加新的函数接口(action)合约 #有关require_auth的合约测试 2、玩转智能合约与数据库相关操作 #参考资料 #持久化API (Multi-Index) 1、一般来讲,对数据库的操作无外乎增删改查 2、表结构示例详解 3、Multi_index定义,建立数据表 4、实例化multi_index 5、操作数据,增删改查 #玩转table表 1、Table表producers 2、Table表global 3、Table表voters 4、Table表rammarket (获取RAM实时价格) 5、Table表refunds (查看账户退款信息) 6、Table表namebids (罗列参与竞拍的账户信息) 3、启动nodeos节点出现脏数据 4、查看账户抵押资产,抵押token,赎回token #查看账户余额(可用余额) #查看SYS货币信息,eosio.token是经营货币的合约 #查看公钥对应账户 #查看子账户(控制账户) #查看账户信息 #查看账户抵押信息 #钱不够那就转账,随便耍 #get transaction无结果了解一下 #卖出RAM(卖给系统账户eosio.ram),字节bytes #抵押token获取CPU和net资源 #赎回抵押token,默认三天后到账,执行后可查看账户状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值