04-11 EOS合約介紹

EOS合約虛擬機架構(gòu)

EOS操作系統(tǒng)軟件的目的是可以支持多種虛擬機,同時可以按需求增加新的虛擬機涝滴。

以太虛擬機(EVM)
這個虛擬機已經(jīng)被用于大多數(shù)現(xiàn)有的智能合約吧黄,并且可以在EOS系統(tǒng)區(qū)塊鏈上使用肺魁√泶桑可以想象,在EOS操作系統(tǒng)區(qū)塊鏈上痢士,EVM合約可以在內(nèi)部沙箱中運行彪薛,只需要少量適配就可以與其他EOS應(yīng)用程序交互。

Wren
Wren(http://wren.io)是一種小型的怠蹂、快速的善延、基于類別的編程語言。短小精悍城侧、易于文檔記錄和理解的代碼庫易遣。具有非常好的性能,并且可以很容易地嵌入C++應(yīng)用程序中嫌佑。

Web Assembly(WASM)
WASM是構(gòu)建高性能Web應(yīng)用程序的新興Web標(biāo)準(zhǔn)豆茫,通過少量適配就可以被明確定義和沙箱化。WASM的好處在于業(yè)界廣泛支持屋摇,因此可以用熟悉的語言開發(fā)開發(fā)智能合約揩魂,例如C或C++/Rust。

以太發(fā)人員已經(jīng)開始適配WASM炮温,以提供適當(dāng)?shù)纳诚洳⑹褂靡蕴籛ASM定義(https://github.com/ewasm/design)火脉。這種方法很容易改編后用于EOS系統(tǒng)軟件集成。

EOS的賬戶設(shè)計

比特幣/以太坊使用私鑰和地址概念的賬戶系統(tǒng)兵睛。
EOS使用一個可讀的12個字符來創(chuàng)建賬戶。

?  eos-contracts kcleos get account hellomykey11                                           
created: 2018-11-16T06:54:10.500
permissions: 
     owner     1:    1 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
        active     1:    1 EOS58idArYhygKSaT6i9q4PjXoaSYC5bv93NEfWh5qipASzpAMxyG, 1 hellomykey11@eosio.code
memory: 
     quota:     539.8 KiB    used:     521.8 KiB  

net bandwidth: 
     delegated:       1.0000 EOS           (total staked delegated to account from others)
     used:             268.2 KiB  
     available:        437.9 KiB  
     limit:              706 KiB  

cpu bandwidth:
     delegated:       1.0000 EOS           (total staked delegated to account from others)
     used:             54.73 ms   
     available:        78.12 ms   
     limit:            132.8 ms   

EOS balances: 
     liquid:          307.9120 EOS
     staked:            0.0000 EOS
     unstaking:         0.0000 EOS
     total:           307.9120 EOS

賬戶的消息處理

  • 每個賬戶都可以發(fā)送結(jié)構(gòu)化消息到其他賬戶
  • 賬戶可以定義消息被接收后的處理腳本(合約)
  • 每個賬戶有自己獨有的數(shù)據(jù)庫
  • 賬戶的消息處理程序可以向其他賬戶發(fā)送消息

消息和自動的消息處理程序的組合是EOS定義智能合約的方式
mykey創(chuàng)建賬戶:
https://eosq.app/tx/f99f8057290488bd6c11b9fdab70197a8a50efcccada62acc6b0b18a4988a1bb

ETH EOS 合約升級設(shè)計差異
"code is law" vs "intent of code is law"
李嘉圖合約,社區(qū)治理

https://medium.com/@bytemaster/the-intent-of-code-is-law-c0e0cd318032

EOS合約開發(fā)

  1. Action handler and Action Apply Context

Smart contracts provide action handlers to do the work of requested actions. Each time an action runs, i.e., the action is "applied" by running the apply method in the contract implementation, EOSIO creates a new action "apply" context within which the action runs. The diagram below illustrates key elements of the action "apply" context.

image.png

helloworld合約

#include <eosiolib/eosio.hpp>

class hello : public eosio::contract {
  public:
      using contract::contract;

      /// @abi action 
      void hi( account_name user ) {
         print( "Hello, ", name{user} );
      }
};

extern "C" { 
   void apply( uint64_t receiver, uint64_t code, uint64_t action ) { 
      auto self = receiver; 
      if( action == N(onerror)) { 
         /* onerror is only valid if it is for the "eosio" code account and authorized by "eosio"'s "active permission */ 
         eosio_assert(code == N(eosio), "onerror action's are only valid from the \"eosio\" system account"); 
      } 
      if( code == self || action == N(onerror) ) { 
         hello thiscontract( self ); 
         switch( action ) { 
            EOSIO_API( hello, (hi) ) 
         } 
      } 
   } 
} 
  1. 合約數(shù)據(jù)持久化存儲 Multi-Index API

EOS中引入了Multi-Index多索引容器祖很,Multi-Index基于boost中的Multi-Index開發(fā)笛丙。Multi-Index API 提供了EOSIO數(shù)據(jù)庫的C++接口瓤介,它可以存儲任意數(shù)據(jù)類型能颁。通過API能夠讀取和修改EOSIO數(shù)據(jù)庫中的持久狀態(tài)。

eosio::multi_index在概念上被視為傳統(tǒng)數(shù)據(jù)庫中的表格鳖目,其中行是容器中的單個對象笨鸡,列是容器中對象的成員屬性姜钳,并且索引通過與一個鍵兼容的鍵提供對對象的快速查找對象成員屬性。

https://github.com/EOSIO/eos/blob/v1.6.0/contracts/eosiolib/multi_index.hpp

https://www.boost.org/doc/libs/1_66_0/libs/multi_index/doc/index.html

class token : public contract {
         ...
         struct account {
            asset    balance;

            uint64_t primary_key()const { return balance.symbol.name(); }
         };

         struct currency_stats {
            asset          supply;
            asset          max_supply;
            account_name   issuer;

            uint64_t primary_key()const { return supply.symbol.name(); }
         };

         typedef eosio::multi_index<N(accounts), account> accounts;
         typedef eosio::multi_index<N(stat), currency_stats> stats;
        ...
};

  1. EOSIO合約基礎(chǔ)庫eosiolib
    智能合約開發(fā)最重要的eosiolib庫形耗,現(xiàn)在已經(jīng)整合到eosio.cdt項目中了哥桥。
    https://github.com/EOSIO/eosio.cdt

eosiolib庫,位于eosio.cdt/libraries/eosiolib目錄激涤,共有40個C/C++文件拟糕,下面這張圖描述了這些文件之間的引用關(guān)系:

image.png
  • db.h
  • action.h
  • crypto.h
  • system.h
  1. 開發(fā)環(huán)境

vscode + cpp plugin
EOS Studio, https://www.eosstudio.io/

開發(fā)庫不成熟,對比以太openzeppelin倦踢。
開發(fā)測試組件缺乏送滞,合約測試麻煩。缺乏想truffle一樣的輕量級的開發(fā)環(huán)境辱挥。(mykey的開發(fā)主要是js/shell腳本在kylin測試網(wǎng)測試犁嗅。本地的測試使用docker。)
基礎(chǔ)工具待完善晤碘,交易的資源費用預(yù)估等愧哟。

https://github.com/OpenZeppelin/openzeppelin-solidity
https://hub.docker.com/r/eosio/eos-dev

https://github.com/eostea/eos-wiki

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哼蛆,隨后出現(xiàn)的幾起案子蕊梧,更是在濱河造成了極大的恐慌,老刑警劉巖腮介,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肥矢,死亡現(xiàn)場離奇詭異,居然都是意外死亡叠洗,警方通過查閱死者的電腦和手機甘改,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灭抑,“玉大人十艾,你說我怎么就攤上這事√诮冢” “怎么了忘嫉?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵荤牍,是天一觀的道長。 經(jīng)常有香客問我庆冕,道長康吵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任访递,我火速辦了婚禮晦嵌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拷姿。我一直安慰自己惭载,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布响巢。 她就那樣靜靜地躺著棕兼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抵乓。 梳的紋絲不亂的頭發(fā)上伴挚,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音灾炭,去河邊找鬼茎芋。 笑死,一個胖子當(dāng)著我的面吹牛蜈出,可吹牛的內(nèi)容都是我干的田弥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铡原,長吁一口氣:“原來是場噩夢啊……” “哼偷厦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燕刻,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤只泼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卵洗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體请唱,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年过蹂,在試婚紗的時候發(fā)現(xiàn)自己被綠了十绑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酷勺,死狀恐怖本橙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脆诉,我是刑警寧澤甚亭,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布贷币,位于F島的核電站,受9級特大地震影響狂鞋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潜的,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一骚揍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啰挪,春花似錦信不、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锰什,卻和暖如春下硕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汁胆。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工梭姓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫩码。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓誉尖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铸题。 傳聞我的和親對象是個殘疾皇子铡恕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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

  • 簡介 本篇文章,將跟大家介紹eos私鏈的激活丢间、基礎(chǔ)智能合約的安裝探熔,以及為大家演示轉(zhuǎn)賬等基礎(chǔ)操作。還沒有安裝eos私...
    guaiguaihw閱讀 2,449評論 3 2
  • EOS 資源匯總 A curated list of EOS Ecosystem by [SuperONE](ht...
    shenciyou閱讀 3,929評論 0 21
  • 彭小六在閱讀與寫作方面比我更成功烘挫,但我由衷的為他感到高興祭刚。因為他幾乎堅持每天都會閱讀一本書,會把自己的思緒畫出來在...
    闌十三閱讀 824評論 0 11
  • 2018-11-28 姓名:郭祥華 組別:315期六項精進努力一組 【日精進打卡第362】 【知~學(xué)習(xí)】 背誦《六...
    華英雄_712d閱讀 127評論 0 0
  • 今天站樁前是著急的墙牌,因為今天要去上nlp涡驮,一開始時,就是去感受自己的著急呼吸很短喜滨,到肩膀捉捅,然后就去感受自己的著急,...
    木子的芽閱讀 244評論 0 0