考慮到智慧合約的安全性,智合約模組採用JavaScript子集作為程式語言,開發者可快速安全的開發智慧合約應用程式。為了讓更多開發者使用智慧合約,布比區塊鏈同時採用WebAssembly技術構建引擎,支援C/C++/python語言編寫智慧合約。
布比區塊鏈智慧合約引擎是Google V8和WebAssembly的創新改進,更好地滿足區塊鏈系統生態友好性需求。Google V8是由Google開發的開源JavaScript引擎,可將JavaScript程式碼直接翻譯成二進位制機器碼在物理機上執行,執行效率高;WebAssembly是一種可移植、載入高效、平臺無關的位元組碼格式,能在平臺上以接近原生的速度執行程式,這是一種全新的 WEB 標準,由 Google、蘋果、微軟、 Mozilla 等幾大公司同時支援和制定。這兩項技術為布比區塊鏈智慧合約提供良好的基礎功能支撐。執行過程如下:
如圖所示,智慧合約的執行過程如下:
使用者A發起簽名交易,目標賬戶為B,B為一個智慧合約賬號,裡面儲存著智慧合約程式碼。假定此時交易被廣播且被打包,節點需要將該交易儲存在區塊鏈上,需要對該交易進行回放和演算。
客戶端(使用C++程式碼實現)呼叫V8引擎,並把合約程式碼載入到引擎裡執行,在執行的過程中如果遇到內建的介面將會產生回撥函式,呼叫客戶端的實現,此時實現了雙向互動功能。
當合約執行過程中,有可能生成新的交易,如合約B觸發了賬號C,如果賬號C僅是普通賬號,那麼只需進行普通轉賬操作即可;如果賬號C是一個合約賬號,那麼將會再次觸發新的合約形成一個遞迴呼叫。合約呼叫合約的遞迴深度為3層,超過3層將會出錯並回退整個交易,這是出於合約實現的複雜度和區塊鏈底層的安全性來考慮和設計。