維基鏈智慧合約知多少

買賣虛擬貨幣
智慧合約是一種旨在以資訊化方式傳播、驗證或執行合同的計算機協議。基於區塊鏈技術實現的智慧合約,支援可程式設計合約,具有去中心化、不可篡改、過程透明可追蹤等優點,是由合約制定者在鏈下構建的一套以數字形式定義的共識,釋出至鏈上儲存,並於鏈上執行。任意使用者透過私鑰簽名以提供必要的身份證明成為共識參與者,其執行的過程是原子性的,獲得的結果也是冥等的。實現合約框架的方式作為承載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進行相容的計劃。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;