當前每個合約都需要提供一個Manifest檔案來描述其相關屬性,包括Groups, Features, ABI, Permissions, Trusts, SafeMethods等,如下所示:
1. Groups:宣告合約所屬的組。一個Group由一個公鑰和合約雜湊的簽名組成。
2. Features:宣告合約可用的特性。其中屬性值storage表明合約可以訪問儲存區,payable表明合約可以接受資產的轉入。
3. ABI:宣告智慧合約的介面資訊,可以參考NEP-3。介面的基礎屬性包括:
- Hash:16進位制編碼的合約指令碼雜湊;
- EntryPoint:提供了合約入口方法的詳細資訊,包括方法名、方法引數以及方法返回值;
- Methods:由合約方法的詳細資訊構成的陣列;
- Events:由合約事件構成的陣列。
基於ABI資訊,可實現合約間的相互呼叫。
4. Permissions:宣告合約可呼叫的其他合約和方法。執行合約呼叫時,會檢查Permission中配置的許可權,若沒有相應許可權,則呼叫操作會執行失敗。
5. Trusts:宣告合約可以被哪些合約或者哪些合約組安全地呼叫。
6. SafeMethods:宣告哪些方法是SafeMethod,SafeMethod通常是不會修改儲存區,只讀取區塊鏈資料的方法,如果一個方法被標記為安全的,那麼其他合約呼叫該方法時不會給使用者介面返回警告資訊。
- 新增的智慧合約APIs
新增System.Runtime.Notify,允許在合約之間傳遞訊息。例如,考慮一個執行去中心化交易所的合約。當使用者需要充值時,首先他會向該合約轉入一定的NEP-5代幣,然後呼叫其deposit方法進行充值。在deposit方法中,合約可以透過呼叫System.Runtime.Notify來確認使用者是否真正地轉賬了代幣。
此外,還新增了 Neo.Json.Serialize和Neo.Json.Deserialize介面,使合約能夠處理JSON格式的資料,同時簡化合約的開發。
· 交易
- 使用單一的交易型別實現與區塊鏈的互動
在NEO 2.x中,有9種不同的交易型別:
- MinerTransaction
- IssueTransaction
- ClaimTransaction
- EnrollmentTransaction
- RegisterTransaction
- ContractTransaction
- StateTransaction
- PublishTransaction
- InvocationTransaction
這些交易型別要麼與特定的應用程式場景相關,要麼提供更多的功能。但NEO3中只存在一種交易型別,格式如下:
- 有限作用域的見證人簽名
當前交易簽名是全域性有效的,為了讓使用者能更細粒度地控制簽名的作用範圍,NEO3中對交易結構中的cosigners欄位進行了變更,可實現簽名只限於驗證指定合約的功能。Cosigner的結構如下:
Scopes欄位定義了簽名的作用範圍,包括以下四種型別:
- 儲存合約執行的結果
目前,交易執行的結果(成功或失敗)也會被儲存。可以透過查詢交易資訊來確認交易在NeoVM中是否執行成功,例如跨鏈交易的確認。
· 區塊
目前,我們給區塊和區塊見證人的大小設定了上限MaxSize (以更好地防止垃圾交易攻擊),並將區塊時間戳的單位更改為毫秒,從而可用於物聯網應用。
· NeoVM
NeoVM是用於執行智慧合約的輕量級虛擬機器。它的特點是啟動快,資源消耗低,支援多種高階程式語言,允許開發人員使用熟悉的工具構建合約。
在NEO3.0中,透過將操作碼費用的計算轉移至ApplicationEngine並簡化指令,來實現NeoVM與區塊鏈的完全解耦,使其成為一個單純的虛擬機器。下列操作碼已被棄用:APPCALL, TAILCALL, SHA1, SHA256, HASh260, HASH256, CHECKSIG, VERIFY, CHECKMULTISIG, CALL_I, CALL_E, CALL_ED,CALLET, `CALLEDT`等。
這樣做具有以下幾個優點:
- 簡化原生合約的開發
- 增加NeoVM在區塊鏈外的應用場景
- 將NeoVM平滑整合到任何IDE中,並輕鬆除錯智慧合約,而無需載入區塊鏈資料
穩定性增強
委託拜占庭容錯(dBFT)是專門為區塊鏈設計的共識機制。透過投票選舉出一組共識節點,並由這些節點共同生成和驗證區塊。由於共識節點需要在新區塊上鍊之前達成一致,dBFT保證了一區塊終局性,這意味著NEO區塊鏈不會發生分叉,且交易是不可逆的。一旦交易在區塊鏈上得到確認,就不能撤銷或取消。對於金融應用來說,交易的終局性是必要的。
在dBFT2.0中,我們增加了一個恢復機制,大大提高了共識演算法的穩定性。在極少數情況下發生網路故障或節點故障時,可以實現快速恢復。
效能增強
NEO3增加了P2P訊息的自動壓縮機制,節省了大量的儲存空間和頻寬,同時提高了TPS。
部分壓縮樣本如下:
定價模型
· 系統費
系統費是根據NeoVM要執行的指令計算得出的費用,請參考GitHub上NEO3開發指南中的操作碼費用部分,瞭解每個操作碼的具體費用。NEO3取消了每筆交易10 GAS的免費額度,系統費用總額受合約指令碼的指令數量和指令型別影響。計算公式如下所示:
· 網路費
網路費是使用者向NEO網路提交交易時支付的費用,作為共識節點的出塊獎勵。每筆交易的網路費存在一個基礎值,計算公式如下所示。只有當使用者支付的網路費大於或等於此基礎費用時,才會執行交易。否則,交易將被認定為無效交易。
其中,VerificationCost為NeoVM驗證交易簽名執行的指令相對應的費用,tx.size為交易資料的位元組長度,FeePerByte為交易每位元組的費用,目前在PolicyContract定義為0.00001GAS。
· 操作碼費用
NeoVM操作碼費用降低為原來的1/1000左右,可以顯著降低合約開發成本。
· 與NEO2.x的比較
NEO3 Preview1版本可在https://github.com/neo-project/neo-cli/releases/tag/v3.0.0-preview1上下載。
以下是申請NEO3 Preview1 GAS的連結:https://neo.org/testcoin/apply
參考文獻:
[1] Roadmap of NEO 3.0 Development
https://medium.com/neo-smart-economy/roadmap-of-neo-3-0-development-e2ae64edf226
[2] Native Contracts in NEO 3.0
https://medium.com/neo-smart-economy/native-contracts-in-neo-3-0-e786100abf6e
[3] Some Details about Changes in NEO 3.0
https://github.com/neo-ngd/NEO3-Development-Guide/blob/master/README.md#changes-in-neo3
[4] dBFT2.0
https://medium.com/neo-smart-economy/dbft-2-0-3-months-no-sporks-e2ab9fe1065b
[5] Opcode fee in NEO3
https://github.com/neo-ngd/NEO3-Development-Guide/tree/master/en/NeoVM#instructions