Neo3 Preview2,加速開發創新ing

買賣虛擬貨幣
本期 Neo Live 邀請到了 NGD 協議組技術經理 盧川,向大家介紹 Neo3 Preview2 的新版本內容與效能亮點。以下是全場活動的文字版內容實錄:距離上個版本釋出,大概已有半年多。目前釋出的 Preview2 相對穩定,底層的功能架構也基本確定。生態基礎工具方,可以基於當前版本進行開發;個人開發者也可以基於當前版本體驗 Neo3 的部分特性。Neo3 程序

本次 Preview2 版本包含的內容,佔 Neo3 總內容的 44%,當前開發進度完成 84%。

由於一些重要元件如 neofs β 版本、Oracle、新的治理機制,大部分已開發差不多,處於待整合狀態,所以還未包含在本版本中,將陸續被包含在後續的版本中。基於當前的開發進度,我們預計 Neo3 會在下半年上線。

回到 Preview2 上,總共改動 228 處, VM 改動 48 處,core-64 處,編譯器外掛等改動 116 處,意味著 Neo3 每天都在前進。

下面我將從三個方面介紹 Preview2 的整體內容:架構重新設計、經濟模型調整、開發體驗提升。

架構重新設計

在架構上,Preview2 相當於重新設計的一條鏈。

四個方面有了較大的改進,分別是:

1. 效能穩定性
2. 穩定性
3. 安全性
4. 模組化

效能提升

Neo3-VM, 實際上是全新設計的 VM,其效能也有了較大改進。

我們引入了物件引用計數器,管理資源使用情況。這使得我們能夠將之前的 6 項約束檢查,減少到 4 項。並將其中最常檢查項棧元素檢查,從時間複雜度從 O(n) 提高到 O(1),整體執行效率提升 50%, 其中一部分常用指令提高了 16 倍。

實際上,VM 的效能提升遠遠比節點效能提升更難!

節點效能上面,我們最佳化了交易驗證邏輯,快取資料減少不必要的重複計算工作,並移除了費時的 C# Linq 語法等。

這些改進,對比 Preview1 效能提升了 4 倍。同時,當前我們還在進一步實驗並行驗籤技術與其他改進方法(如 dBFT3.0, 新共識機制等),會進一步提升 TPS 數倍。

穩定性

在穩定性上:

1. 新增了自適應資料壓縮機制,對於比較大資料傳輸進行自動傳輸,可節省其 90% 的頻寬。

2. 區塊同步機制引入了 ping/pong 定時同步區塊高度機制,有效的提升了網路穩定性,避免了在之前網路上出現的同步卡頓現象。

3. 自 dBFT2.0 上線之後,測試網的出塊穩定性比之前有了明顯的改善,平均出塊時間變得更加平穩。並在其基礎上,新增了節點恢復機制,對於節點滯後或節點掉線,都可以自動恢復並加入到共識網路中。

安全

安全上,主要分為三塊:

1. 共識演算法是區塊鏈資料一致性的最重要保證環節。來自國外的 NeoResearch 社羣團隊,在數學模型層面,首次證明了 dBFT2.0 的演算法安全性,演算法在理論層面不存在分叉風險,保證了 Neo 的 One Block One Finality (一個區塊即確認)特性。

2. 從合約層面來看,合約漏洞已經是區塊鏈上耳熟能詳的名詞,累計已有上億資產因合約存在漏洞被盜。

合約安全,可以分為兩類:

1. 開發者開發時候存在的漏洞,如資料溢位,方法漏洞等。

2. 潛在的合約機制問題,比如之前以太坊上面曾發生過 approve 的機制漏洞問題,導致資產丟失問題。

我們在 Neo3 上,引入了合約許可權控制機制,賦予了開發者更加精細的控制力度,劃分為兩類:

1. Call 級別,內部合約在呼叫其他合約時,尤其是第三方提供的服務合約,可以對其加許可權控制,限制其訪問級別,如不允許修改狀態,防止潛藏的第三方合約攻擊漏洞等。

2. Manifest 級別,部署合約的時候,可以配置合約只允許被那些合約訪問,以及訪問什麼方法。防止惡意使用者透過其他合約繞過許可權檢查。

我們推薦使用者在設定合約許可權時,儘量嚴進寬出,後續涉及到許可權變更時,可透過升級合約配置檔案,來動態更改合約許可權。

另外,我們在 VM 層面,原生的內建了不可變與可變資料型別,允許高層合約中定義常量型別,防止資料被篡改,增加了對資料安全的控制。

模組化

整體上,Neo3 的架構都是重新設計的,相比 Neo2,程式碼更加簡潔與最佳化,比如 Neo3 中的交易型別只有統一的一種,而 2.x 上有 11 中型別的不同交易。

Neo3-VM 的核心程式碼只有 1300 行,184 個指令,但功能比 Neo2-VM 更加靈活,減輕了很多編譯的工作。

另外,Neo3-VM 跟 Neo-core 是完全解耦,完全可以被整合到其他應用場景中,對於一些程式碼愛好者,我們非常鼓勵大家可以看看 Neo3-VM 的程式碼,並用其他語言翻寫。

同時,我們採用了模組化設計,獨立出 RPC 模組,儲存模組等。使用者可根據需求更換儲存方式,如使用 Leveldb,Rocksdb,記憶體等。也可以自定義模組拓展 Neo 功能。

經濟模型

Neo3 上的鏈上治理和經濟模型都有了較大的調整,當前 Preview2 版本中包含了部分經濟模型調整。

合約費用調整

對於合約的儲存,將只收取增量部分的費用,比如原先佔據 10 個位元組的長度,現在要擴大使用 13 位元組的長度,此時費用只收取額外的3位元組費用並附加一個位元組的基礎費。

整體來講,Neo3 的收費比 Neo2.x 有了顯著改善,在 Neo2.x 上部署一個合約需要花費 490 個 GAS,當前 Neo3 上只需要不到 0.04 GAS 的費用。

同時,在後續的版本中,還將進一步調整費用,使其在一個相對市場合理的收費機制。

GAS 收益調整

交易系統手續費上鍊之後,該部分費用將直接被燒掉,不再分給 NEO 的持有者。

相較於 2.x,NEO 持有者有兩部分收益:一是可以去 claim 每個區塊所釋放的 GAS,另外一部分是交易的系統手續費。後者在 Neo3 中被直接燒掉,不再獎勵。

開發友好性

開發友好性,體現在三個方面的改進:

Neo3-VM 提供了更加靈活的功能

1. 移除了舊的臨時棧,並引入了變數槽,包含:全域性變數槽,引數槽,區域性變數槽,極大的減輕了編譯器在解析全域性變數,函式傳參,區域性變數的工作。

因為在之前,上述各種型別的資料,都只能透過計算棧和臨時棧來操作實現,引入了槽之後,可以將對應的資料放在對應的區域上,極大減輕對資料棧的頻繁操作。

2. 新增函式指標,可以用於動態回撥,如迭代器的遍歷,鏈上任務的回撥處理等。

3. 新增了異常控制指令:ASSERT、ABORT,、TRY、ENDTRY 等,允許合約層面主動丟擲異常,豐富合約的表達語義。

合約 API 豐富

在合約 API 上,提供了豐富的 API,並制定了 NEP11:NFT 的標準,以及增加了在合約層面對 JSON 的解析,GAS 剩餘餘額查詢,迭代器,賬戶地址型別轉換等。

實用功能

1. 交易超時機制,使用者可以設定交易在多少個區塊尚未上鍊則作廢,減少無效等待,如交易所對使用者提幣的交易新增區塊有效期。

2. 內部新增了合約計數器,給每個合約賦予 ID 編號,並用其繫結合約的資料儲存區域,當合約升級時,主需要保留該 合約ID,實現了一種無須資料遷移就能完成合約的新升級方式。

3. 在著手設計輕節點,透過限制合約對太舊的交易或區塊進行查詢,為輕節點做準備。

綜上,當前 Preview2 版本,聚焦在效能,安全,合約 API 的豐富上,都有比較大的提升和拓展。

在後續的版本中也將陸續整合各大元件(NNS、MPT、Oracle、NeoID、NeoFS 等),Neo3 的上線也越來越臨近。

感謝大家對 Neo 的支援!

免責聲明:

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

推荐阅读

;