EOS Dawn 3.0 智能合约 -- 新格式
1、简介
随着EOS Dawn 3.0发布,智能合约的坑又要重新踩了o(╥﹏╥)o;
3.0不仅将原来本身就在链里的基础合约独立出来,简单的介绍见3.0合约改变,合约的书写方式也有巨大变化,相比之前更加“面向对象”;
这边文章就从最简单的hello合约,讲解下,详细的例子会在之后文章介绍;
2、2.0的合约格式
先来看看2.0的最基础的智能合约如何编写:
#include <eoslib/eos.hpp>
namespace hello {
/**
* @abi action
* @abi table
* 上面两行,分别用于在执行eoscpp -g的时候,自动生成action和table
*/
struct printinfo {
account_name sender;
eosio::string info;
};
void print_hello ( const hello::printinfo& data ) {
require_auth(data.sender);
eosio::print( "Hello World: ", eosio::name(data.sender), "->", data.info, "\n" );
}
}
extern "C" {
/**
* init为初始化函数,当合约上传或更新的时候执行。
*/
void init() {
eosio::print( "Init World!\n" );
}
/// apply函数,执行合约的时候,调用该函数,并根据code、action选择的进行的操作。
void apply( uint64_t code, uint64_t action ) {
if( code == N(hello) ) {
if( action == N(printinfo) ) {
hello::print_hello( eosio::current_message<hello::printinfo>() );
}
} else {
assert(0, "unknown code");
}
}
} // extern "C"
重要地方都已经给出解释,以后该格式也不是重点,也不在多解释。
2、3.0的合约格式
而3.0的智能合约更加的“面向对象”,来看看和上面功能一样的智能合约在3.0下的实现方式:
/**
* @file hello.cpp
* @author redbutterfly
*/
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public eosio::contract {
public:
using std::string;
using contract::contract;
/// 执行eosiocpp 时生成action
/// @abi action
void printinfo( account_name sender, std::string info ) {
eosio::print( "Hello World: ", name{data.sender}, "->", data.info, "\n" );
}
private:
/// 执行eosiocpp 时生成table
/// @abi table
struct message {
account_name sender;
std::string info;
/// 序列化该结构,用于table时候查询
EOSLIB_SERIALIZE( message, (sender)(info) )
};
};
EOSIO_ABI( hello, (printinfo) )
可以看出,这种格式比较舒适,面向对象的风格;
- 首先,定义继承自contract的智能合约结构体,在public下实现智能合约的action接口,然后在private下实现table等结构(注释中的@还是需要添加);
- 其次,在定义结构体的时候,需要使用EOSLIB_SERIALIZE( structname, (param)...),将结构体进行序列化,table存储的时候,才能正常序列化;
- 最后,使用EOSIO_ABI(classname, (action)...),同样序列化操作,在abi生成的时候,正确生成abi;
3、生成合约文件
生成合约的方式依然没有变:
eosiocpp -g hello.abi hello.cpp //生成abi文件
eosiocpp -o hello.wast hello.cpp //生成wast文件
然后,使用cleos set contract hello ./hello -p hello部署即可
3、总结
本篇主要简单描述下,EOS Dwan 3.0下,智能合约的新编写方式,下篇写简单数据库功能的智能合约。
作者:redbutterfly
链接:https://www.jianshu.com/p/03d8b096340c
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
EOS Dawn 3.0 智能合约 -- 新格式的更多相关文章
- [blockchain-035]eos的部署安装智能合约
0.参考资料 https://github.com/EOSIO/eos/wiki 1. eos的github地址 https://github.com/EOSIO/eos 2.下载eos源码 git ...
- 【精解】EOS智能合约演练
EOS,智能合约,abi,wasm,cleos,eosiocpp,开发调试,钱包,账户,签名权限 热身 本文旨在针对EOS智能合约进行一个完整的实操演练,过程中深入熟悉掌握整个EOS智能合约的流程,过 ...
- eosio.cdt:EOS智能合约工具集
目前EOS已经迎来了1.5.x时代,很多内容都有了较大的改变.其中智能合约的工作流程发生了改变,EOSIO为智能合约提供了独立且功能完整的工具集eosio.cdt.该工具集基于WASM平台,可解耦于e ...
- 比特股-去中心化交易所, STEEM - 去中心化社区, EOS - 下一代智能合约
libsnark 是实现了 zkSNARK 模式的 C++ 库.zkSNARK 是一个证明/验证计算完整性的加密方法,也即零知识验证的算法, https://github.com/scipr-lab/ ...
- Truffle 4.0、Geth 1.7.2、TestRPC在私有链上搭建智能合约
目录 目录 1.什么是 Truffle? 2.适合 Truffle 开发的客户端 3.Truffle的源代码地址 4.如何安装? 4.1.安装 Go-Ethereum 1.7.2 4.2.安装 Tru ...
- [转]EOS智能合约 & 私链激活 & 基本操作
链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...
- EOS智能合约授权限制和数据存储
EOS智能合约授权限制和数据存储 在EOS合约中,调用合约需要来自账户的授权,同时还要指定需要调用的动作.当然,有的合约并不是所有账户都可以调用的,这就需要用到授权限制.接下来我们就来看看如何限制合约 ...
- 【精】EOS智能合约:system系统合约源码分析
系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...
- EOS开发基础之六:使用cleos命令行客户端操作EOS——智能合约之eosio.msig和eosio.system
上一节我们搞了老半天,也没整明白Exchange这个合约到底干啥用的.就它官方提供的说法,是用于货币的创造和交易.我没整明白,所以去看了下代码,发现代码头文件里面有下面这段话: This contra ...
随机推荐
- 【SDOI2009】SuperGCD
[题目链接] 点击打开链接 [算法] 1.关于求最大公约数的算法 若使用辗转相除法,那么显然会超时 不妨这样思考 : 要求gcd(a,b), 若a为偶数,b为偶数,则gcd(a,b) = 2 * gc ...
- 【Codeforces 947A】 Primal Sport
[题目链接] 点击打开链接 [算法] 不难看出,x1的范围是[x2-P(x2)+1,x2],x0的范围是[x1-P(x1)+1,x1] 我们可以先做一遍线性筛,然后暴力就可以了 [代码] #inclu ...
- VC将同一份代码同时编译为Dll和Exe的方法
开发中经常遇到这样的情况,需要开发一个某某功能的接口Dll,但是Dll不能直接调试,你至少需要一个Loader 但是Loader和Dll本身不在同一个工程里,虽然都在本机的话并不影响源码级调试,但是总 ...
- servlet 3 文件上传
1.up.jsp <%@ page language="java" pageEncoding="utf-8"%> <form action=& ...
- 看鸟哥的Linux私房菜的一些命令自我总结(二)
-关于执行文件路径的变量 $PATH -查看文件与目录 ls -a :全部的文件,连同隐藏文件一起列出来 -d :仅列出目录本身,而不是列出目录内的文件数据 -i :列出inode号码 - ...
- PKI体系下的 SSL TLS HTTPS 详解
背景: SSL(Secure Socket Layer 安全套接层)是一个加密函数库,它可以将应用层上所有明文传输的数据,通过调用SSL库,即可摇身一变成为安全通信连接,SSL最初是由网景公司(Net ...
- 极限和连续 limits + Continue
上一节我们将导数定义为切线的斜率,这是一种几何解释.我们求出了1/x的斜率为 -1/x2 求出了 f(x) = xn 的斜率是 f”(x) = n*xn-1 这些几何的推导都是根据y-y0 = k ...
- Beta版本冲刺第二天!
该作业所属课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业地址:https://edu.cnblogs.com/c ...
- UITableViewCell添加点击时改变字体的颜色、背景、图标
改变字体颜色:cell.textLabel.highlightedTextColor 改变背景颜色:cell.selectedBackgroundView (必须是图片哦) 改变图标颜色:cell.i ...
- selenium自动化测试实例
11.1使用JavaScripExecutor单击元素 被测试网页:http://www.sogou.com Java代码 public class NewTest { WebDriver ...