EOS Dawn 3.0 智能合約 -- 新格式

一、簡介

隨着EOS Dawn 3.0發佈,智能合約的坑又要從新踩了o(╥﹏╥)o;
3.0不只將原來自己就在鏈裏的基礎合約獨立出來,簡單的介紹見3.0合約改變,合約的書寫方式也有巨大變化,相比以前更加「面向對象」;
這邊文章就從最簡單的hello合約,講解下,詳細的例子會在以後文章介紹;數據庫

二、2.0的合約格式

先來看看2.0的最基礎的智能合約如何編寫:app

#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" 

重要地方都已經給出解釋,之後該格式也不是重點,也不在多解釋。函數

二、3.0的合約格式

而3.0的智能合約更加的「面向對象」,來看看和上面功能同樣的智能合約在3.0下的實現方式:ui

/** * @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) ) 

能夠看出,這種格式比較溫馨,面向對象的風格;spa

  • 首先,定義繼承自contract的智能合約結構體,在public下實現智能合約的action接口,而後在private下實現table等結構(註釋中的@仍是須要添加)
  • 其次,在定義結構體的時候,須要使用EOSLIB_SERIALIZE( structname, (param)...),將結構體進行序列化,table存儲的時候,才能正常序列化;
  • 最後,使用EOSIO_ABI(classname, (action)...),一樣序列化操做,在abi生成的時候,正確生成abi;

三、生成合約文件

生成合約的方式依然沒有變:3d

eosiocpp -g hello.abi hello.cpp //生成abi文件 eosiocpp -o hello.wast hello.cpp //生成wast文件 

而後,使用cleos set contract hello ./hello -p hello部署便可code

三、總結

本篇主要簡單描述下,EOS Dwan 3.0下,智能合約的新編寫方式,下篇寫簡單數據庫功能的智能合約。對象

做者:redbutterfly 連接:https://www.jianshu.com/p/03d8b096340c 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索