區塊鏈-EOS智能合約初體驗
EOS的白皮書上說明,虛擬機的選擇和EOS的系統(協議)本身關係不大,只要支持沙盒以及性能足夠,就可以整合到EOS系統。本文介紹使用WASM虛擬機開發智能合約的流程。
有關智能合約的英文介紹,可以參考github地址:
https://github.com/EOSIO/eos/wiki/Smart-Contract。
1)WASM虛擬機
WASM是構建高性能Web應用程序的新興Web標準,通過少量適配就可以被明確定義和沙箱化。WASM的好處在於業界廣泛支持,因此可以用C或C++開發智能合約。
2)智能合約基礎
EOS的智能合約交互是基於「Action」以及共享資料庫訪問的,並且有兩種交互方式:inline(立即執行)以及Deferred(延遲執行)。
一個Action是一個執行操作,一個交易可以包含多個Action。Action的類型是8個位元組(64bit)的base32編碼的結果(12或者13個位元組)。前12個位元組只能是字元a-z,1-5或者「."。第13個可能的位元組只能是「."以及a-p。
3)創建智能合約
eosiocpp工具可以用來創建智能合約。eosiocpp在你編譯的build/tools/目錄下。eosiocpp的命令行參數如下:
-n參數創建一個智能合約,-o參數生成wast格式文件(wast格式是WASM接受的唯一格式),-g參數生成abi介面文件。
3.1 創建智能合約模版
該命令會在當前目錄下生成test目錄,以及目錄下生成三個文件:
test.cpp的模版代碼如下:
extern "C" {
/// The apply method implements the dispatch of events to this contract
void apply( uint64_t receiver, eosio::name code, eosio::name action ) {
eosio::print( "Hello World: ", eosio::name(code), "->", eosio::name(action), "
" );
}
} // extern "C"
apply時action處理函數。模版代碼,在接受到action時,該智能合約列印code(作用域名稱?)以及action(操作名稱)。
3.2 創建wallet
可以使用lock/unlock命令在鎖定以及解鎖wallet。
3.3 創建key(私鑰和公鑰)並導入wallet
用以下命令導入wallet:
3.4 創建賬戶
在EOS系統中,一個key可以對應多個賬戶。以下命令是創建user賬戶
3.5 準備wast格式文件
eosiocpp -o test.wast test.cpp
3.6 發布智能合約
cleos set contract user test test.wast test.abi
3.7 發送action,觸發智能合約執行
cleos push action user transfer "{"from":"user","to":"testuser","amount":50}" -p user
executed transaction: c2888f5f584cc243ba89a70772a6b00f173c85b3fd5ad903c45b18cc32954f0c 248 bytes 102400 cycles
# user
>>Hello World: user->transfer
上面一行就是智能合約的執行輸出。
TAG:星想法 |