智能合約是一種旨在以信息化方式傳播、驗證或執行合同的計算機協議。基于區塊鏈技術實現的智能合約,支持可編程合約,具有去中心化、不可篡
智能合約是一種旨在以信息化方式傳播、驗證或執行合同的計算機協議。基于區塊鏈技術實現的智能合約,支持可編程合約,具有去中心化、不可篡改、過程透明可追蹤等優點,是由合約制定者在鏈下構建的一套以數字形式定義的共識,發布至鏈上存儲,并于鏈上執行。任意用戶通過私鑰簽名以提供必要的身份證明成為共識參與者,其執行的過程是原子性的,獲得的結果也是冥等的。
實現合約框架的方式
作為承載DApp的最重要基石,維基鏈智能合約框架采用Lua語言作為合約的編碼語言。Lua語言具有輕量、可拓展等特性,在游戲開發、獨立應用腳本和數據庫插件方面都已被大量地應用。維基鏈核心功能均由C/C++開發,而Lua代碼可以很容易的被C/C++ 代碼調用,也可以反過來調用C/C++的函數。所以這款學習成本低、兼容性好又具備高性能和安全的語言是構建智能合約框架很好的編程語言。
框架使用的Lua5.3版本的虛擬機,在虛擬機層設計了一個mylib函數庫以開放接口給合約層調用,其遵循了Lua標準函數庫的設計方式。與常見的Lua虛擬機不同,智能合約的代碼會在鏈上所有的節點包括礦工節點和觀察者節點上執行,因此智能合約虛擬機不支持大部分Lua標準函數庫:
維基鏈智能合約框架在具備區塊鏈特性的基礎上,還有以下特點:內部貨幣系統、去中心化部署及運行、代碼風格自由且透明,通過JsonRpc接口或區塊瀏覽器還可以查看每筆合約交易的輸入、輸出信息。
mylib庫的功能
mylib庫是合約與外部環境交互的唯一接口,包含計算、驗證、查詢、資產管理及數據存儲等基礎功能,主要由以下這些接口實現:
具體的使用方法,大家可以在維基鏈開發者中心文檔(見文末)內查詢到。
如何開發智能合約
開始開發前,你需要學習Lua的基本語法,錢包節點的搭建和JsonRpc的使用以及mylib的各函數的使用方式,還需要注意智能合約框架存在以下限制:
a. 每個合約代碼需要在合約代碼頭部引入mylib庫;
b. 合約代碼總長度限制在64KB;
c. 合約參數總長度限制在4096字節;
d. 合約數據庫存儲的Key和Value長度均限制在500字節。
對于合約參數,在虛擬機啟動后會以Byte數組(表)的方式存放在全局變量contract中。目前的最佳實踐是將合約參數進行類似Protobuf方式的編碼,你可以參考在開發者文檔中心里WRC20代幣的智能合約。不管是以何種方式傳遞參數給智能合約,你都需要自行設計編碼工具和合約代碼內的解碼函數。
現在,維基鏈官方提供了在線合約編輯器,你可以很方便地在瀏覽器中開發、調試和發布你的智能合約。社區也有一些編解碼的工具和優秀的合約模板庫供使用參考。
優化升級
維基鏈核心開發團隊仍持續地優化智能合約框架,將Gas計算的范圍和價格調整的更合理,豐富鏈上mylib庫的功能,增加鏈下的智能合約調試開發工具,也有對其他的語言如Solidity和WebAsambly進行兼容的計劃。(維基鏈)