EOS智能合约开发(四):智能合约部署及调试(附编程示例)

EOS智能合约开发(一):EOS环境搭建和创建节点
EOS智能合约开发(二):EOS创建和管理钱包
EOS智能合约开发(三):EOS创建和管理账号

部署智能合约的示例代码如下:

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

其中,eosio是要部署的账号,就是你用哪个账号去部署智能合约;

build/contracts/eosio.bios表示的是路径;

eos.bios是生成一个智能合约的目录。

运行Token合约

第一步,Token智能合约部署,代码如下:

cleos set contracteosio.token build/contracts/eosio.token -p eosio.token

第二步,调用create函数,代码如下:

$ cleos push actioneosio.token create ‘[ “eosio”, “1000000000.0000 EOS”, 0, 0, 0]’ -p eosio.token

调用create函数,设定到币的最大数目,开始创建我的token。

怎么调用一个action呢?我们都是通过cloes命令行调用action,不过后面跟的参数不一样。push action,这两个都是固定的,后面是合约的名称。

eosio是账号名,后面数字表示设定token总量是10亿,币的名称是EOS币,后面有3个0,代表的是三个参数:can freeze、can recall、can whitelist。这3个参数设置为0,一共传了5个参数,通过这样的方法,去调用整个的合约create的函数。

第三步,转移100个pdj币到user用户,代码如下:

$cleos push actioneosio.token issue '[ "user", "100.0000 EOS","memo" ]' -p eosio

Issue这个操作是用来发币,它后面跟了3个参数:

一个是user,表示这个币发给谁;

数字表示要给这个用户转多少钱,我这里转了100多个user的token;

最后一个参数是是一个备注,相当于转账留言。

第四步、从user用户转移25个PDJ币给tester用户,代码如下:

$cleos push actioneosio.token transfer '[ "user", "tester", "25.0000EOS", "m" ]' -p user

这是一个转账合约的运行过程,先部署合约,然后调用create,可以转账,既可以转到user,也可以从一个user用户转到test用户,整个过程在user wiki文档上也写得比较清楚的。

调试智能合约

现在user官方网站推荐的一个调试方法就是print,把信息打印出来。这个必须要我们搭建本地节点,因为如果没有本地节点,相当于你print打印在别人的节点上,你根本看不到这个打印信息是什么,所以说你必须要搭建一个本地节点。搭建本地节点后,你运行智能合约,就会看到print出来的输出结果。

EOS智能合约的RPC接口

其实智能合约整个只完成了DApp最核心的一部分,就是基本上和资金有关系的一些关键操作,其实大部分的接口、界面,还得我们用JavaScript、HTML去做。

那我们这些DApp其它写界面的操作,怎么去调用智能合约呢?都是通过user智能合约RPC接口调用,智能合约的RPC接口文档链接是:https://eosio.github.io/eos/group__eosiorpc.htm

RPC的接口我们除了用C++或者用编程的方法去调用一些接口,我们可以用curl这种最简单的方法去调用这个接口。curl它相当于模拟了一个浏览器的操作,我可以向我的运行节点的RPC端口发消息。

这里面我可以给大家展示,我列了3个。

1.get_info:获得节点信息。通过调用这个接口,它会返回我运行节点,比如说server version,就是我运行节点这个节点的版本号;head blocknum,是我当前挖到哪个块了。
用法:curl http://127.0.0.1:8888/v1/chain/get_info

2.get_block:获得一个块的信息。调用该接口,指定块号(blocknum),就可以获得指定块的详细信息。

用法:
$ curl http://127.0.0.1:8888/v1/chain/get_block -X POST -d'{"block_num_or_id":5}'

3.get_account:获得某个账号的信息。调用这个接口,可以获得当前我的一个账号信息

用法:
$ curlhttp://127.0.0.1:8888/v1/chain/get_account -X POST -d'{"account_name":"inita"}'

EOS智能合约编程示例:HelloPDJ

下面有一个编程示例,给大家展示一下我怎么样写智能合约的。它这个智能合约可以用C语言(一种计算机程序语言)来写,也可以用C++(一种计算机程序语言)来写,这里面我就用C++来写。示例代码如下:

// hello.cpp源代码

include

 #include <eosiolib/print.hpp>
 using namespace eosio;
 class hello : public eosio::contract {
    public: using contract::contract;
    /// @abi action
     void hi( account_name user )
              {print( “Hello, ”, name{user} ); }
};
EOSIO_ABI( hello, (hi) )

如果我自己写了一个智能合约,怎么去编译和部署呢?编译的步骤大概是这样的:

第一步,编译hello文件

$ eosiocpp -o hello.wasthello.cpp
$ eosiocpp -g hello.abihello.cpp

第二步,创建账号

$cleos create account eosio hello.codeEOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 ...

第三步,部署合约

cleos set contract hello.code../hello -p hello.code

第四步,调用合约

cleos push action hello.codehi '["user"]' -p user

至此,一个完整的EOS智能合约开发就算完成了

知识星球二维码380.png

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、付费专栏及课程。

余额充值