EOSIO BIOS

計算機的 BIOS 內置於硬件中,是啓動操作系統之前計算機加載的第一個內容。本週,我們繼續用操作系統比喻,使處理 EOS.IO 區塊鏈的啓動過程儘可能簡單。我們的區塊鏈現在以一個非常簡單的初始狀態啓動:

  1. 一個獨立帳戶(eosio.system)

  2. 一個獨立的私有密鑰

  3. 一個獨立的塊生產者

這個初始帳戶就像 Linux 系統上的 root 帳戶一樣,除非將其授權給更高級別的操作系統的智能合約之後,否則它具有無限的權力。在這個初始狀態,@ eosio.system 帳戶將上傳操作系統的智能合約,該合約執行以下操作:

  1. 投票,網絡帶寬,CPU 帶寬,內存和存儲的 staking。

  2. 生產者和代理投票創建。

您可以將此初始狀態視爲胚胎幹細胞,它能將已 EOSIO 爲基礎的區塊鏈使用到任意數量的用例以及治理結構中,所有的這些都可以在不需要任何硬分叉的情況下進行更新和調整。

我們從這種方法中獲得了許多好處,因爲它使得 EOSIO 核心軟件更簡單,更容易測試。

動態塊生產者數量

EOSIO 區塊鏈現在支持動態的區塊生產者數量,可以通過對 @eosio.system 智能合約簡單更新進行更改。默認情況下仍然是 21 個生產者,但這不再是硬編碼的。

採用動態數量的主要原因是對於許多私有區塊鏈來說,21 個生產者是小題大做。企業使用私有區塊鏈可能更喜歡只有幾個生產者,而測試網絡或許只需要一個生產者。

測量

從歷史上看,我們已經指出每個交易最多有 1 ms 的運行時間,這由塊生產者主觀地進行測量。我們意識到一些交易可能需要 50 ms 才能運行,同時也希望通過物質獎勵來激勵開發者設計運行時間小於 50us 的交易,以提高效率。在我們的原始模型下,所有交易都使用相同的 CPU,無論是 50us 還是 1 ms,這意味着沒有誘因再優化到 1 ms 以下。

因爲運行時間是主觀的,並且可以根據在同一臺計算機上運行的其他活動而變化,所以不可能產生客觀和可重複的運行時間計量。

我們意識到,在不增加成本的情況下,可以將現有基於時間的費率限制器進行修改,以對所執行的 WASM 指令數目進行客觀估計。這與以太坊如何測量 gas 消耗量相似。通過這個新的客觀測量,我們可以評估限制 (rate limit)CPU,就像我們評估限制帶寬一樣。

塊生產者對 cpu 使用率使用“動態超額認購 (dynamic oversubscription)”算法,與他們對網絡帶寬使用的算法相同。這意味着,當網絡具有空閒的 CPU 容量時,用戶可以獲得更多的每 staked CPU (cpu-per-staked) 代幣,這比他們在完全使用的情況下得到的要多。

除了 CPU 指令計數之外,塊生產者仍將實現主觀運行時間限制。這種主觀限制可以保護網絡免受那些濫用計量算法人員的影響,這些人使用最耗時的操作而不是較省時的操作。

分離 CPU 和網絡帶寬

在之前的更新中,我們表示將會分離出的 RAM,存儲和帶寬(可以認爲 CPU/ 網絡都是帶寬的一部分)。我們意識到,像 Steem 這樣的一些應用程序可能具有較高的網絡帶寬(用於發佈文章)和較低的 CPU 帶寬,而其他應用程序可能具有較低的網絡帶寬(交換訂單),但較高的 CPU 帶寬(訂單撮合)。這意味着不存在一種適合所有情況的方法。

爲了簡單起見,用戶界面仍然可以將這些東西捆綁在一起,供普通用戶使用 ; 然而,權限用戶現在有更多的價格靈活性。

交易壓縮

在爲 c ++ STL 庫添加支持的過程中,我們注意到智能合約可能會變得相當大(50kb),因此會消耗大量的網絡帶寬。可以想象,更復雜的合約可能會超過 200kb。我們也意識到許多應用程序(如 Steem)將非常多可壓縮的內容捆綁在交易中。

我們增加了對 zlib 壓縮交易的支持,這些交易可以爲智能合約上傳減少 60%或更多的帶寬使用,而對於類似 Steem 的內容則可能更高。

網絡更新

P2P 網絡團隊一直在忙着更新代碼,以提高性能和穩定性。本週他們在以下方面取得了重大進展:

  1. 塊—塊廣播只包含交易 ID 而不是重新傳輸塊中的所有交易。這將使帶寬使用減少近 50%。

  2. 大信息支持—廣播巨大信息(如 50kb 智能合約)的網絡協議與小信息(如 200 字節傳輸)的不同。

結論

我們的開發團隊正在努力使 EOSIO 成爲迄今爲止最高效、最通用、最靈活的平臺。

來源鏈接:None