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 智能合约 -- 新格式的更多相关文章

  1. [blockchain-035]eos的部署安装智能合约

    0.参考资料 https://github.com/EOSIO/eos/wiki 1. eos的github地址 https://github.com/EOSIO/eos 2.下载eos源码 git ...

  2. 【精解】EOS智能合约演练

    EOS,智能合约,abi,wasm,cleos,eosiocpp,开发调试,钱包,账户,签名权限 热身 本文旨在针对EOS智能合约进行一个完整的实操演练,过程中深入熟悉掌握整个EOS智能合约的流程,过 ...

  3. eosio.cdt:EOS智能合约工具集

    目前EOS已经迎来了1.5.x时代,很多内容都有了较大的改变.其中智能合约的工作流程发生了改变,EOSIO为智能合约提供了独立且功能完整的工具集eosio.cdt.该工具集基于WASM平台,可解耦于e ...

  4. 比特股-去中心化交易所, STEEM - 去中心化社区, EOS - 下一代智能合约

    libsnark 是实现了 zkSNARK 模式的 C++ 库.zkSNARK 是一个证明/验证计算完整性的加密方法,也即零知识验证的算法, https://github.com/scipr-lab/ ...

  5. 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 ...

  6. [转]EOS智能合约 & 私链激活 & 基本操作

    链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...

  7. EOS智能合约授权限制和数据存储

    EOS智能合约授权限制和数据存储 在EOS合约中,调用合约需要来自账户的授权,同时还要指定需要调用的动作.当然,有的合约并不是所有账户都可以调用的,这就需要用到授权限制.接下来我们就来看看如何限制合约 ...

  8. 【精】EOS智能合约:system系统合约源码分析

    系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...

  9. EOS开发基础之六:使用cleos命令行客户端操作EOS——智能合约之eosio.msig和eosio.system

    上一节我们搞了老半天,也没整明白Exchange这个合约到底干啥用的.就它官方提供的说法,是用于货币的创造和交易.我没整明白,所以去看了下代码,发现代码头文件里面有下面这段话: This contra ...

随机推荐

  1. [Selenium] Selenium common Actions Examples

    1.sendKeys() 在文本框中输入字符串 WebElement searchBox = driver.findElement(By.name("q")); searchBox ...

  2. IOS中的沙盒机制

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...

  3. codevs1148传球游戏

    传送门 1148 传球游戏 2008年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description 上体 ...

  4. Makefile的引入及规则

    ARM裸机1期加强版视频课程配套WiKi第9课第5节_Makefile的引入及规则. 文字不能完全替代视频,所以如果你看了这些文章不太懂,建议购买视频进一步学习. 视频购买地址:100ask.taob ...

  5. wcf中事务的操作

    using System; using System.ServiceModel; namespace Larryle.Wcf.ServiceContract.Transaction { [Servic ...

  6. wxPython学习笔记1

    wxpython介绍: wxPython 是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的.功能键全的  GUI 用户界面. wxPython 是作为优 ...

  7. A. Vanya and Table

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  8. Windows下允许redis远程访问

    1.安装很简单,下载安装包安装即可,略过: 下载msi的安装包,会自动安装进服务: 2.远程访问 Redis默认只允许本地访问,要使Redis可以远程访问,需修改配置文件: 我用的redis3.2 , ...

  9. 怎样在github上协同开发

    How to co-work wither parter via github. Github协同开发情景模拟 Github不仅有很多开源的项目可以参考,同样也是协同开发的最佳工具,接下来的就模拟一下 ...

  10. 个人项目开发PSP实践-MyWCprj

    MyWCprj.exe Github仓库地址 1. What is MyWCprj.exe? wc是linux下一个非常好用的代码统计小工具,可以通过 -c .-w .-l等选项分别进行对指定文件的代 ...