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<eosiolib/eosio.hpp>
#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智能合约开发就算完成了

EOS智能合约开发(四):智能合约部署及调试(附编程示例)的更多相关文章
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...
- 区块链学习(四)truffle部署编译智能合约以太坊私有链
前面我们介绍了以太坊私有链的搭建以及多节点私有链网络,这次我们介绍如何使用truffle框架来部署编译智能合约到我们之前搭建的私有链网络中. 搭建环境及需使用的工具:ubuntu18.04 Truf ...
- eos 智能合约开发体验
eos编译安装 eos 特性 数据存储 eos投票智能合约开发 eos投票智能合约部署测试 注意避坑 eos编译安装 ERROR: Could not find a package configura ...
- EOS智能合约开发(三):EOS创建和管理账号
没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...
- eos智能合约开发最佳实践
安全问题 1.可能的错误 智能合约终止 限制转账限额 限制速率 有效途径来进行bug修复和提升 2.谨慎发布智能合约 对智能合约进行彻底的测试 并在任何新的攻击手法被发现后及时制止 赏金计划和审计合约 ...
- 【精】EOS智能合约:system系统合约源码分析
系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...
- Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例
前言 在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方 ...
- 智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...
随机推荐
- MongoDB 生产环境笔记
目录 MongoDB 生产环境笔记 一.vm.zone_reclaim_mode 参数 二.添加 swap 分区 三.设置 swappiness 参数 四.内核和文件系统版本 五.禁用 Transpa ...
- 使用Python开发chrome插件
本文由 伯乐在线 - xianhu 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonspot.com.欢迎加入翻译小组. 谷歌Chrome插件是使用HTML.JavaScrip ...
- Webpack编译结果浅析
如今Webpack已经是一个不可或缺的前端构建工具,借助这个构建工具,我们可以使用比较新的技术(浏览器不能直接支持)来开发. 你是否好奇你写的代码经过Webpack构建之后会生成什么东西?是否有时调试 ...
- 数据挖掘(二)——Knn算法的java实现
1.K-近邻算法(Knn) 其原理为在一个样本空间中,有一些已知分类的样本,当出现一个未知分类的样本,则根据距离这个未知样本最近的k个样本来决定. 举例:爱情电影和动作电影,它们中都存在吻戏和动作,出 ...
- [转]angular2: including thirdparty js scripts in component
本文转自:https://stackoverflow.com/questions/35570746/angular2-including-thirdparty-js-scripts-in-compon ...
- 在.net中怎么解析json串 [Error reading JObject from JsonReader. Current JsonReader item is not an obj]
编辑时间:2017-05-10,增加一种转化list的方法 一.以前知道一种解析json串的方法,觉得有点麻烦.就从别的地方搜到了另一种 string json = vlt.getlist(); JO ...
- WPF 水平进度条
WPF设计界面过程中,有时需要设计一种可以手动滑动修改并实时显示的进度条 进度条,效果如下: 颜色.图标.节点什么的,都可以重新替换. 前端XAML代码: <UserControl x:Clas ...
- 从零开始学安全(二十二)●PHP日期date参数表
$date=new DateTime(); echo $date->format("Y-m-d h:i:s");
- springMVC_07乱码及restful风格
乱码的解决 通过过滤器解决乱码问题:CharacterEncodingFilter 配置web.xml文件 <filter> <filter-name>encoding< ...
- Java 泛型中的PECS原则
在泛型编程时,使用部分限定的形参时,<? super T>和<? extends T>的使用场景容易混淆,PECS原则可以帮助我们很好记住它们: 生产者(Producer)使用 ...