EOS之Hello智能合約解析

EOS之Hello智能合約解析

EOS的智能合約與以太坊區(qū)別很大雌桑, EOS 的智能合約基于 WebAssembly(WASM) 技術(shù)執(zhí)行用戶生成的應(yīng)用程序和代碼。WASM是一項(xiàng)新興的網(wǎng)絡(luò)標(biāo)準(zhǔn)承粤,得到了谷歌暴区,微軟,蘋果等公司的廣泛支持辛臊。

目前仙粱,用于構(gòu)建編譯為WASM的應(yīng)用程序的最成熟工具鏈?zhǔn)鞘褂肅 / C ++編譯器的clang / llvm。目前EOS的智能合約僅支持C和C ++編寫彻舰。我個人認(rèn)為伐割,EOS的智能合約相較于以太坊的智能合約上手難度要更大一些。一個簡單的EOS智能合約都要由多種種文件構(gòu)成刃唤,而以太坊的solidity就相對簡單了隔心。

智能合約文件組成

前面說到了EOS智能合約需要多種文件組成,接下來我們來看看是哪幾種文件透揣。


image

通常一個簡單的智能合約需要有.cpp济炎、.hpp、.abi這幾種文件。

  • 其中.hpp文件是包含.cpp文件引用的變量、常量和函數(shù)的頭文件浩螺。
  • .cpp文件是包含合約功能的源文件芥炭,用來實(shí)現(xiàn)智能合約的功能和動作等。
  • .abi文件是應(yīng)用程序二進(jìn)制接口文件,是一種基于JSON的描述,通過ABI描述合約,開發(fā)人員和用戶可通過JSON無縫地與智能合約進(jìn)行交互撩轰。
  • CMakeLists.txt和.wast都是編譯時生成的文件,我們不用管它昧廷。

Hello智能合約

了解了各種文件的功能之后堪嫂,我們來解析一下最簡單的hello智能合約。

  • .hpp文件

此hello合約比較簡單木柬,也可以不寫hpp文件皆串,把類與成員定義在 cpp 文件中。

  • 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) )

前面幾行不用多說眉枕,都是c++基本語法恶复。我們重點(diǎn)看“@abi action”后面的幾行代碼。那么問題來了速挑,什么是action呢谤牡?action意為動作。在EOS中姥宝,智能合約的方法稱為動作翅萤,在這里,“hi”就是這個智能合約的動作腊满。當(dāng)有其他賬戶調(diào)用此合約時断序,合約回打印hello回應(yīng)他流纹。而EOSIO_ABI是一種宏,它把類的方法暴露出來违诗,其他賬戶才可以調(diào)用。

  • hello.abi

hello.abi文件通過eosiocpp工具產(chǎn)生疮蹦,我們來看看它的內(nèi)容

{
  "____comment": "This file was generated by eosio-abigen. DO NOT EDIT - 2018-05-04T14:34:07",
  "types": [],
  "structs": [{
      "name": "hi",
      "base": "",
      "fields": [{
          "name": "user",
          "type": "account_name"
        }
      ]
    }
  ],
  "actions": [{
      "name": "hi",
      "type": "hi",
      "ricardian_contract": ""
    }
  ],
  "tables": [],
  "ricardian_clauses": []
}

可以看出abi文件中的數(shù)據(jù)大概可以分為這么幾類:

  • types
  • structs
  • actions
  • tables
  • ricardian_clauses

types應(yīng)該是合約的類型诸迟,

structs應(yīng)該是合約中交易的數(shù)據(jù)結(jié)構(gòu),

actions里包含了合約的所有動作愕乎,

tables中應(yīng)該是合約存儲的數(shù)據(jù)結(jié)構(gòu)阵苇,用于定義合約的數(shù)據(jù)存儲。

而ricardian_clauses則是李嘉圖條款感论,李嘉圖條款是人和機(jī)器都能讀懂的绅项,此hello合約中為空。

總而言之比肄,EOS的智能合約編寫難度還是比較高的快耿。用c++編寫智能合約我個人是不喜歡的,據(jù)說一些積極的第三方也在開發(fā)其他語言芳绩,很期待編寫智能合約變得簡單掀亥。

知識星球二維碼380.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市妥色,隨后出現(xiàn)的幾起案子搪花,更是在濱河造成了極大的恐慌,老刑警劉巖嘹害,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撮竿,死亡現(xiàn)場離奇詭異,居然都是意外死亡笔呀,警方通過查閱死者的電腦和手機(jī)幢踏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凿可,“玉大人惑折,你說我怎么就攤上這事】菖埽” “怎么了惨驶?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敛助。 經(jīng)常有香客問我粗卜,道長,這世上最難降的妖魔是什么纳击? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任续扔,我火速辦了婚禮攻臀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纱昧。我一直安慰自己刨啸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布识脆。 她就那樣靜靜地躺著设联,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灼捂。 梳的紋絲不亂的頭發(fā)上离例,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音悉稠,去河邊找鬼宫蛆。 笑死,一個胖子當(dāng)著我的面吹牛的猛,可吹牛的內(nèi)容都是我干的耀盗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼衰絮,長吁一口氣:“原來是場噩夢啊……” “哼袍冷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猫牡,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤胡诗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淌友,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煌恢,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年震庭,在試婚紗的時候發(fā)現(xiàn)自己被綠了瑰抵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡器联,死狀恐怖二汛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拨拓,我是刑警寧澤肴颊,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站渣磷,受9級特大地震影響婿着,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一竟宋、第九天 我趴在偏房一處隱蔽的房頂上張望提完。 院中可真熱鬧,春花似錦丘侠、人聲如沸徒欣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帚称。三九已至,卻和暖如春秽澳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戏羽。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工担神, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人始花。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓妄讯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酷宵。 傳聞我的和親對象是個殘疾皇子亥贸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1 EOS智能合約的介紹1.1 所需背景知識1.2 EOS智能合約基礎(chǔ)知識1.3 技術(shù)局限性 2 智能合約文件2....
    cenkai88閱讀 30,487評論 5 28
  • 開發(fā)第一個 EOS 智能合約 Hello World! 稍微了解 EOS 系統(tǒng),你就會知道 EOS 的智能合約基于...
    6bca7c813977閱讀 555評論 0 0
  • 1. 賬戶與錢包1.1 創(chuàng)造并管理錢包1.2 生成EOS Keys并導(dǎo)入1.3 備份您的錢包1.4 創(chuàng)建賬戶 2....
    cenkai88閱讀 3,929評論 1 7
  • 上一篇文章我介紹了EOS環(huán)境搭建,在安裝好eos的環(huán)境后男韧,接下來要進(jìn)入的環(huán)節(jié)也就是智能合約的編寫和調(diào)試了朴摊,學(xué)習(xí)任何...
    P叔閱讀 620評論 1 1
  • 今天是嵌入式學(xué)習(xí)畢業(yè)答辯的日子。早上到學(xué)校后此虑,實(shí)驗(yàn)所有操作甚纲,系統(tǒng)還是支持的,可是答辯時候還是狀態(tài)百出朦前,比較郁悶介杆。但...
    流流芳芳閱讀 242評論 0 0