摘要:文件地址智能合約文件由部分組成定義類型的別名各個(gè)類型的數(shù)據(jù)結(jié)構(gòu)智能合約的數(shù)據(jù)結(jié)構(gòu)體李嘉圖條款注格式不支持注釋,上面的雙斜線大家理解就好。是李嘉圖合約,剛剛被加入到智能合約中,官方還沒(méi)有進(jìn)一步說(shuō)明。
詳解 EOS 智能合約的 abi 文件
這次向大家介紹 eosio.token 智能合約的最后一個(gè)文件 —— abi文件。ABI 全稱 Application Binary Interface,中文名“應(yīng)用程序二進(jìn)制接口”,顧名思義是一個(gè)接口文件,描述了智能合約與上層應(yīng)用之間的數(shù)據(jù)交換格式。abi 文件格式類似 JSON,具備很好的可讀性,有利于智能合約工程師與上層應(yīng)用工程師之間的工作銜接。eosio.token.abi 文件地址: https://github.com/EOSIO/eos/...
EOS 智能合約 abi 文件由 5 部分組成:
{ "types":[...], //定義類型的別名 "structs":[...], //各個(gè)類型的數(shù)據(jù)結(jié)構(gòu) "actions":[...], //智能合約的 action "tables":[...], //數(shù)據(jù)結(jié)構(gòu)體 "ricardian_clauses":[...] //李嘉圖條款 }
注:JSON 格式不支持注釋,上面的雙斜線大家理解就好。
我們將按照 actions -> structs -> tables -> structs -> types -> ricardian_clauses 的順序了解 EOS 智能合約 abi 的開(kāi)發(fā)方法。
actionsaction 部分的作用是聲明智能合約有哪些可以調(diào)用的 action。如下所示。
"actions": [{ "name": "transfer", "type": "transfer", "ricardian_contract": "" },{ "name": "issue", "type": "issue", "ricardian_contract": "" }, { "name": "create", "type": "create", "ricardian_contract": "" } ]
其中每一項(xiàng)的 name 就是 action 的名字,type 用來(lái)在 structs 中查找數(shù)據(jù)結(jié)構(gòu)。ricardian_contract 是李嘉圖合約,剛剛被加入到 EOS 智能合約中,官方還沒(méi)有進(jìn)一步說(shuō)明。
structs剛才的只聲明了三個(gè) action 的名稱,我們還要在 structs 里聲明各個(gè) action 需要傳入的參數(shù),如下所示。
"structs": [{ "name": "transfer", "base": "", "fields": [ {"name":"from", "type":"account_name"}, {"name":"to", "type":"account_name"}, {"name":"quantity", "type":"asset"}, {"name":"memo", "type":"string"} ] },{ "name": "create", "base": "", "fields": [ {"name":"issuer", "type":"account_name"}, {"name":"maximum_supply", "type":"asset"}, {"name":"can_freeze", "type":"uint8"}, {"name":"can_recall", "type":"uint8"}, {"name":"can_whitelist", "type":"uint8"} ] },{ "name": "issue", "base": "", "fields": [ {"name":"to", "type":"account_name"}, {"name":"quantity", "type":"asset"}, {"name":"memo", "type":"string"} ] } ]
EOS 系統(tǒng)會(huì)根據(jù) actions 部分中聲明的 type ,在 structs 部分尋找對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)據(jù)結(jié)構(gòu)的 fields 中,會(huì)列出每個(gè)參數(shù)的名稱和類型。
tablestables 列出了 智能合約中需要建立的數(shù)據(jù)表名稱,以及數(shù)據(jù)表中所儲(chǔ)存的結(jié)構(gòu)體名稱。
"tables": [{ "name": "accounts", "type": "account", "index_type": "i64", "key_names" : ["currency"], "key_types" : ["uint64"] },{ "name": "stat", "type": "currency_stats", "index_type": "i64", "key_names" : ["currency"], "key_types" : ["uint64"] } ]
其中的 type 就是數(shù)據(jù)表中所儲(chǔ)存的結(jié)構(gòu)體名稱。
structs為什么又回到 structs 了呢,因?yàn)椴还馐?action 里的項(xiàng)目需要在 structs 里列出詳細(xì)的數(shù)據(jù)結(jié)構(gòu),tables 中的項(xiàng)目也需要。
"structs": [{ "name": "account", "base": "", "fields": [ {"name":"balance", "type":"asset"}, {"name":"frozen", "type":"uint8"}, {"name":"whitelist", "type":"uint8"} ] },{ "name": "currency_stats", "base": "", "fields": [ {"name":"supply", "type":"asset"}, {"name":"max_supply", "type":"asset"}, {"name":"issuer", "type":"account_name"}, {"name":"can_freeze", "type":"uint8"}, {"name":"can_recall", "type":"uint8"}, {"name":"can_whitelist", "type":"uint8"}, {"name":"is_frozen", "type":"uint8"}, {"name":"enforce_whitelist", "type":"uint8"} ] } ]types
types 部分用來(lái)建立類型的別名,比如你想給 account_name 類型建立一個(gè)別名:
"types": [{ "new_type_name": "account_name", "type": "name" } ]
這樣在這個(gè) abi 文件里就可以用 name 來(lái)代替 account_name了。
ricardian_clauses有關(guān)李嘉圖條款的部分 EOS 官方還在開(kāi)發(fā)中。
【許曉笛】 EOS智能合約案例解析(1)
【許曉笛】 EOS智能合約案例解析(2)
圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 在各大平臺(tái)都長(zhǎng)期有優(yōu)質(zhì)免費(fèi)公開(kāi)課,歡迎報(bào)名收看。
公開(kāi)課地址:https://ke.qq.com/course/345101
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24418.html
摘要:構(gòu)造函數(shù)為空,參數(shù)為智能合約賬戶名。每個(gè)智能合約類都要繼承類類構(gòu)造函數(shù)創(chuàng)建代幣函數(shù)聲明函數(shù),這個(gè)函數(shù)用來(lái)新建一種代幣,并輸入代幣的各種屬性,同時(shí)函數(shù)也是一個(gè)。 詳解 EOS 智能合約的 hpp 文件 為了幫助大家熟悉 EOS 智能合約,EOS 官方提供了一個(gè)代幣(資產(chǎn))智能合約 Demo —— eosio.token。eosio.token 智能合約目前還不是特別完善,個(gè)別功能還沒(méi)有完...
摘要:相關(guān)文章和視頻推薦許曉笛智能合約案例解析許曉笛智能合約案例解析圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 詳解 EOS 智能合約的 cpp 文件 之前的文章介紹了 eosio.token 智能合約的 hpp 文件,這次向大家介紹 eosio.token.cpp 文件,cpp 文件即 C++ 代碼文件,智能合約所有的業(yè)務(wù)邏輯內(nèi)容都是在 cpp 文件中實(shí)現(xiàn)的。 eosio.t...
摘要:相關(guān)文章和視頻推薦許曉笛智能合約案例解析圓方圓學(xué)院匯集大批區(qū)塊鏈名師,打造精品的區(qū)塊鏈技術(shù)課程。 Daniel Larimer 在他的博客介紹了EOS新的智能合約架構(gòu)(EOS團(tuán)隊(duì)的開(kāi)發(fā)速度實(shí)在是太嚇人,根本追不上)。他給出了最簡(jiǎn)單的一個(gè)新幣種的智能合約代碼,僅有49行就能完成一個(gè)新幣種的開(kāi)發(fā),一個(gè)新的愛(ài)息歐就誕生了。讓我們一步一步實(shí)現(xiàn)吧。 首先實(shí)現(xiàn)私有成員,建立一個(gè) account 結(jié)...
摘要:為了解決這個(gè)問(wèn)題,采取了三步用戶賬戶自定義分級(jí)權(quán)限。用戶權(quán)限與智能合約之間的映射。圖中不難看出,權(quán)限是賬戶最高權(quán)限,可以執(zhí)行權(quán)限。如果沒(méi)有發(fā)現(xiàn)任何符合的映射,會(huì)直接檢查本次執(zhí)行是否滿足了權(quán)限,若不足,會(huì)檢查。 到底什么叫智能合約? 名詞解釋:本篇文章出現(xiàn)很多 Action 和 Active,Action (動(dòng)作)為 EOS 中賬戶可以接受的動(dòng)作,也就是別人可以對(duì)你做什么;Active ...
摘要:對(duì)于很多沒(méi)有中間語(yǔ)言的字節(jié)碼的編程語(yǔ)言來(lái)說(shuō),根本不存在解釋執(zhí)行與編譯執(zhí)行的選項(xiàng),比如傳統(tǒng)只能編譯執(zhí)行,直接將代碼編譯成為可執(zhí)行的二進(jìn)制機(jī)器碼,我們電腦上文件就是編譯的成果。 Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解釋器,用來(lái)解釋執(zhí)行 WebAssembly 智能合約,加上之前的編譯執(zhí)行,EOS 智能合約有了兩種執(zhí)行方式。 對(duì)于很...
閱讀 3115·2021-10-13 09:40
閱讀 3971·2021-09-22 15:51
閱讀 1512·2021-09-22 15:48
閱讀 1081·2021-09-06 15:00
閱讀 1806·2019-08-30 15:43
閱讀 2372·2019-08-29 18:35
閱讀 1684·2019-08-29 16:18
閱讀 3630·2019-08-29 12:49