框架使用的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進行相容的計劃。