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