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智能合約需要多種文件組成,接下來我們來看看是哪幾種文件透揣。
通常一個簡單的智能合約需要有.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ā)其他語言芳绩,很期待編寫智能合約變得簡單掀亥。