導語:Zen Protocol 可同時處理多份智能合約,再加上獨特的代幣發行機制,讓它擁有了超越ETH的潛力。
1.惱人的可伸縮性
可伸縮性(Scalability )是讓任何區塊鏈項目都十分頭疼的問題。
理論上,比特幣每秒最多可處理約7筆交易,但實際上只有3-4筆。目前以太坊每秒能處理約6筆交易,可理論上每秒最多可處理約12筆。比特幣的區塊通常滿負荷運行,導致交易延遲。**以太坊在頻繁使用時也面臨著類似的問題 **——在2017年6月份的Status(英文縮寫SNT,一個開源的聊天平臺,以及是一個支持以太坊去中心化應用dApp的移動瀏覽器) ICO(inital coin offering)期間,以太坊的交易速度比平常慢了數小時。
以太坊代幣(token)是運行在以太坊虛擬機(Ethereum Virtual Machine,以下簡稱EVM)上的,每一筆交易都會導致EVM狀態改變,并且所有的交易只能按順序依次處理。這就導致以太坊在交易吞吐量方面存在瓶頸——以太坊網絡受到礦工運行智能合約速度的限制,智能合約一旦運行,就會導致EVM狀態更新,最終導致以太坊處理交易速度降低。
2.擁堵的天敵——并行計算
計算領域中有一個重要概念是可并行性(parallelism) ,即同時執行多個任務的能力。以太坊網絡不具有并行計算的能力,因為每一筆交易都會改變EVM的狀態,并且后續也可能無法合并這些狀態。沒辦法,以太坊網絡只能一個接一個,依次處理每一筆交易。
Zen Protocol 沒有像EVM這樣的全網共享狀態,這意味著我們可以并行處理智能合約。什么意思呢?
假設現在有兩份智能合約——α和β 需要處理。運行智能合約α需要271毫秒,β則需要463毫秒。如果我們只能按順序依次執行智能合約,那么必須運行先α,再運行β。即先花費271毫秒,再花費463毫秒,整個過程需要734毫秒才能處理完畢。
如果可以并行處理智能合約,那么我們就可以同時啟動α和β。也就是說,經過271毫秒后,α已運行完畢,同時,β仍在運行;又過了192毫秒,β已經運行完畢。至此,兩份智能合約處理完畢。整個過程耗時463毫秒——和處理單個最耗時的智能合約時長一樣。
這就是并行計算的優勢。那如果我們想運行α100次,該怎么辦呢?假如必須按順序依次處理智能合約,那么將耗時27100毫秒,即27.1秒。而如果我們可以并行處理智能合約,那么整個過程仍然只需要27毫秒—— 足足快了100倍!
很明顯,如果可以并行處理智能合約,就可以提高交易吞吐量。在所有條件相同的情況下,可并行處理的智能合約數量才是制約交易量的最大因素。如你所知,現代計算機已經擁有并行計算的能力,服務器也可以成百上千地同時運行。
當然啦,并非所有的交易都可以并行處理。而如果同一個區塊中,一筆交易的處理必須要依賴于另一筆交易的處理,那么就只能按順序處理這些交易。話說回來,這種處理方式也有它的好處,即這些交易不會影響其他單獨交易的時間。正如其運行在類似以太坊這樣的單線程處理環境中一樣。
假設我們有三份智能合約要處理:α,β和γ,其中γ取決于β,這些智能合約分別需要耗時7,4和3毫秒。如果單線程處理,那么我們必須先運行α,然后運行β,最后運行γ,總共耗時14毫秒。如果可以并行處理這三份智能合約,那么我們可以同時啟動α和β——在4毫秒之后,β已處理完畢并且開始處理γ;在7毫秒之后,全部處理完畢!
以太坊在 ICO時經常遇到交易延遲的問題,因為無論是什么智能合約,一旦運行都必將導致EVM的狀態更新,進而導致交易網絡用擁堵不堪。恰好Zen Protocol 沒有類似的全網共享狀態,因此在Zen Protocol 上發起ICO,其他不相關的交易就不會影響交易處理時間。
這種優勢是巨大的。以太坊網絡上的各種代幣(除了以太代幣ETH)都是EVM的一部分,這意味著更改帳戶余額必須通過智能合約更改EVM的狀態。
Zen Protocol 設計了一流的代幣發行機制,即其他代幣的運行方式與Zen Protocol 的原生代幣完全相同。它們是UTXO(Unspent Transaction Output,即消費的交易輸出),并且在Zen Protocol 網絡上交易不一定都會運用智能合約——你可以像消費比特幣一樣消費它們,十分簡便。
因此,在Zen Protocol 上智能合約可以并行處理,簡單交易甚至不涉及智能合約。
僅憑這一點,Zen Protocol 已比以太坊的性能意見有了顯著提升。但是,我們可以做得更好。
3.編譯代碼的優勢
以太坊使用“燃料系統”為礦工支付運行智能合約消耗的計算資源,智能合約由EVM生成。為了使用以太坊智能合約,用戶支付“燃料費”作為交易費用。
在執行智能合約之前,以太坊礦工會查找執行該合約的“燃料費”。如果用戶支付了足夠的費用,則礦工從用戶支付的燃氣費中減去執行該指令的消耗的費用,然后在EVM上執行該命令,最后EVM會更新狀態。這個過程一直持續到用戶支付的費用消耗完畢,或者礦工執行完所有智能合同。
在Zen Protocol 中,智能合約中包含著執行智能合約需要消耗費用的信息。當曠工我們執行智能合約時,不需要跟蹤記錄燃料使用情況,因為執行智能合約之前我們就知道了執行的成本。因此,我們不需要浪費時間查看燃料價格,檢查剩余燃料,還得從剩余燃料中減去執行命令的燃料費用。
正因為不關心燃料價格,所以我們不需要將智能合約設定為一整套指令 ——只需要保留其源代碼即可。基于此,我們不用像以太坊那樣逐一按順序執行智能合約指令,即我們可以讓礦工編譯(compile)源代碼,而不是像以太坊那樣解釋(interpret)指令。
這里稍微解釋下兩者的異同:
編譯(compile):即在整個程序源代碼運行之前,將其翻譯成為另外一種代碼,然后等待被執行,產物則是另一份代碼。
解釋(interpret):即在運行程序時一行一行讀懂然后執行源代碼,產物是運行結果。
編譯代碼比解釋代碼快了幾個數量級,并且編譯代碼也更容易自動優化。例如,有時可以用2個機器指令執行計算,而不是5條。編譯時我們可能會自動進行此優化,但在逐個解釋說明時則可能無法實現。
4.總結
總而言之,Zen Protocol 有如下優勢:
可以并行處理智能合約。即在所有其他條件相同時,我們可以在更短的時間內處理更多的智能合約;
智能合約處理速度更快。即使是相同的智能合約,在Zen Protocol 上運行得更快;
最后,Zen Protocol 擁有一流的代幣發行機制,常用的轉移代幣功能也不需要使用智能合約。
原文:https://blog.zenprotocol.com/zen-protocol-and-scalability-e0f9bf8483b8,作者Asher Manning,翻譯:謝行知
如果覺得文章不錯,歡迎打賞哦~~ ZEN錢包:
zen1qsa2qkrgx0vp3e0tnngx6apae92fuchpctjt6n8gdjr375gclnqusqcam2g