1. 程式人生 > >IOST——打造一個真正可用的去中心化區塊鏈基礎架構

IOST——打造一個真正可用的去中心化區塊鏈基礎架構

致 IOST 社群:

在過去的幾年中,各個區塊鏈專案都面臨著一個難題,即“不可能三角”——在可拓展性、安全性和去中心化之間尋求平衡並不容易,不少專案會因為走捷徑而破壞了區塊鏈的可靠性。IOST技術團隊一直致力於尋找“不可能三角”的解決方案,努力打造一個真正可用的去中心化基礎架構。

經過不懈的努力,9月30日,IOST 測試網路的第二版 “Everest v1.0” 上線了!

這一版本測試網的主要功能包括:

1.支援使用 JavaScript 編寫智慧合約——GitHub 顯示,這是世界上最受歡迎的程式語言

2.第一個支援智慧合約域名系統(DNS)的區塊鏈,也是第一個支援靈活訪問權控制(包括合約升級和刪除)的區塊鏈

3.第一個在儲存層支援多版本並行控制(MVCC)的區塊鏈,並使用 MVCC 快取實現高效能儲存

4.全新的虛擬機器系統,解決了許多 EVM 和 EOS虛擬機器的設計問題,並實現了benchmark合約執行EOS 10倍、Ethereum 200 倍的效能表現

Everest v1.0 凝聚著IOST技術團隊過去一年的技術研究成果,也揭開了IOST 區塊鏈開發的新篇章。從今年六月份釋出第一版測試網Everest 0.5至今,我們一直努力進行技術升級,如今釋出的 v1.0 則是另一個重要的里程碑。

Everest v1.0 和其他區塊鏈的簡單對比:

在這裡插入圖片描述

Everest v1.0 主要亮點

  1. 新合約系統支援 JavaScript

可插拔的多語言支援:這版本IOST 實現了智慧合約的多語言支援。目前我們支援基於 V8 引擎的 JavaScript 智慧合約程式設計,同時支援Golang模組高效能的合約交易。

智慧合約的許可權系統:現在IOST智慧合約支援多重簽名。智慧合約可以檢查呼叫棧,回答如 “ABI 是被誰呼叫的” 的問題。智慧合約還新增了支援特殊的許可權設定,例如升級和移除合約。這可以在很大程度上解決以太坊等平臺中出現的合約難以管理和維護問題。

共識結果的生成:在執行之後,智慧合約會生成一個 TxReceipt 在區塊中尋求共識。我們支援使用 “遠端程序呼叫”(RPC)追蹤上鍊交易的 TxReceipt,讓整個網路透明可信。

通用的 ABI 介面支援:IOST 智慧合約現在支援通過 ABI 和網路進行互動。更復雜的資料結構可以被解析為 JSON 字串,這可以讓開發者在編寫和呼叫合約時更自由、更方便。

  1. V8 引擎的虛擬機器全新設計

我們相信好的虛擬引擎需要設計優雅、簡單易用,還需要保證安全。通過比較 EVM、EOS、C Lua (在 Everest v0.5 中採用) 和 V8,我們從根本上解決了 EVM 和 EOS 許多不合理的設計,並在 V8 引擎上打造了 IOST 的虛擬機器。

虛擬機器的核心是 VMManager,包含三個主要功能:

VM 入口:入口是外部模組請求進行互動的介面,包括 RPC 請求、區塊驗證、Tx 驗證等等。再通過預處理和格式化後,工作會被交給 VMWorker。這是為所有請求提供的一個統一入口。

VMWorker 生命週期管理:Worker 的數量會依據系統的工作負荷而動態調整,並且會重複使用 worker。每一個 worker 還會採用 JavaScript 熱啟動和熱點沙盒快找技術來減少虛擬機器的頻繁建立,減少讀取程式碼時 CPU 和記憶體的負荷。這樣我們可以增加系統的吞吐量,允許 IOST V8 虛擬機器在處理如 fomo3D 這樣擁有海量使用者的智慧合約時遊刃有餘。在我們的預試驗中,我們已經達到了和 v0.5 相近的交易吞吐量指標。在未來的幾週中,我們會繼續改進和優化生命週期管理。

介面和 State 資料庫管理:這能保證 IOST 交易的原子性(避免只有一部分內容儲存到了資料庫),允許交易出錯或 gas 不足時退回整個交易。與此同時,State 資料庫也對內容實現了兩層快取,最終才儲存到 RocksDB 中。這能實現更短的跨版本資料訪問時間,在處理臨時資料時能得到更好的效能。

在這裡插入圖片描述
圖 1:IOST 虛擬機器結構

  1. 帶有 MVCC 快取的高效能儲存層

MVCC 快取:考慮到區塊鏈資料處理的模式,我們採用 MVCC 快取來處理請求,同時併發將其寫入快取。這樣提高了資料層的效能與易用性。

動態資料庫訪問:IOST 儲存層提供資料的最終儲存。我們採用了鍵值資料庫形式,可以在不同的 SLA 情形中接入不同的資料庫。

Commit Manager:儲存功能的最外層,用來進行多版本資料的管理與維護。這樣可以讓上層將其當作普通資料庫進行使用,並能自由切換資料庫至任意版本。

在這裡插入圖片描述
圖 2:IOST 儲存層的架構

  1. 帶有快速發現和廣播功能的完全去中心化網路層

我們搭建的是一個完全去中心化的網路拓撲結構,擁有快速的節點發現和對交易、區塊的全網廣播。與此同時,我們希望限制網路中的冗餘內容,並實現節點間的安全資料傳輸。通過研究和測試,我們決定使用功能完備的 libp2p 的庫作為網路層的基礎。

節點發現和連線:為了避免資料被監聽和篡改,我們在 TCP 協議之上添加了 TLS 加密協議。為了更好地利用每一個 TCP 連線,我們採用了 “多路複用” 的方式來收發資料,在不同的節點間動態建立多個通道來最大化頻寬利用。對於每個節點,我們使用 Kademlia 來維護他們的路由表。這意味著我們可以在網路中避免資料監聽和篡改。

資料傳輸:為了減少頻寬佔用、加速資料傳輸,我們使用 Protocol Buffer 將所有結構化的資料進行序列化,並使用 Snappy 演算法進行壓縮。在我們的測試中,這一方案可以將資料尺寸減少 80% 以上。

區域網穿透:我們使用 UPnP 協議實現區域網穿透。UPnP 和 UDP 打孔或 STUN 等別的協議不同——他不需要暴露埠即可公佈伺服器。這意味著你可以用家用電腦接入我們的網路、和其他節點進行通訊,無需擁有一個雲端的伺服器。

Everest v1.0 將成為 IOST 主網的堅實基礎。我們開發的腳步正按照之前的計劃穩步前行,甚至比計劃中實現了更多的功能。和許多跳票和推遲版本釋出的區塊鏈專案不同,IOST 正不懈前行、保持領先位置——主網計劃於2019年第一季度釋出,這比最初的計劃提前了好幾個月。

Everest v1.0 的釋出是我們守時守約、不斷開發、保證進度的又一證明。在此我們感謝在全球各地日夜加班的朋友們,是你們讓 IOST Everest v1.0 成為了現實。我們非常激動能夠和社群分享 Everest v1.0 釋出的訊息,並且即刻就會投身到 2019 年第一季度的主網開發工作中去!

在此我們邀請大家加入我們的開發者社群。我們的開發團隊互助有愛、相互幫助、相互促進,共同解決問題。IOST 在此歡迎所有開發者參與到我們的社群建設中來。

你可以在這裡找到我們:

開發者網站:
https://developers.iost.io

Slack 開發者社群:
https://invite.iost.io

歡迎大家來參與測試我們的測試網路。同往常一樣,我們歡迎各路的想法和意見,並期待能夠繼續改進 IOST 區塊鏈。

Happy hacking!

IOST 開發團隊