深度瞭解NEO3 Preview1的改進與最佳化

買賣虛擬貨幣
NEO3的Preview1版本在系統架構、穩定性和效能等多個方面進行了最佳化與改進,同時對定價模型進行了重新設計,從而大大降低了開發成本。所有這些變更旨在全面支援基於NEO3的大規模商業應用的開發和落地。下面總結了NEO3 Preview1中的一些特性。後續版本中將包含更多新功能,敬請期待。NEO3 Preview1 部分特性簡介 「架構最佳化」賬戶模型智慧合約
- 原生合約- 合約Manifest與ScriptHeader- 新增的智慧合約APIs 交易- 使用單一的交易型別實現與區塊鏈的互動- 有限作用域的見證人簽名
- 儲存合約執行結果 區塊 NeoVM「穩定性增強」「效能增強」「定價模型」
系統費網路費操作碼費用與NEO2.x的比較架構最佳化· 賬戶模型
NEO2.x中可以透過兩種方式在NEO上建立資產。第一種是使用RegisterTransaction交易建立全域性資產,第二種則是透過編寫智慧合約來建立合約資產。事實上,全域性資產的使用是很少的,而合約資產因其靈活性與功能性成為了大多數應用程式的選擇。由於全域性資產沒有與智慧合約進行整合,要想在智慧合約中對全域性資產進行管理是非常困難的。因此,在NEO3中,所有基於UTXO的全域性資產都被移除並替換,取而代之的是基於合約的賬戶模型。NEO和GAS實現為原生合約同時符合NEP-5、NEP-10規範,從而統一了所有資產的操作方式。· 智慧合約- 原生合約原生合約是使用原生程式碼實現的,而不是在NeoVM中執行的opcode指令碼,並以互操作服務的形式供NeoVM使用。原生合約公開其服務名稱,供其他合約呼叫。當前包含NeoToken、GasToken與PolicyContract三種原生合約。1. NeoToken,簡稱NEO,Neo的管理通證,用於執行對Neo網路的管理權,符合NEP-5標準。
2. GasToken,簡稱GAS,Neo的燃料通證,用於支付手續費,符合NEP-5標準。3. PolicyContract,配置共識策略的合約,儲存了共識過程中相關引數,包含區塊最大交易數、低優先順序交易數和大小限制、每位元組的網路費等。-  合約Manifest 和ScriptHeader

當前每個合約都需要提供一個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

免責聲明:

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

推荐阅读

;