擴展性解決方案的實現已經到來!本文將探索一些當前已經可以實現的擴展性解決方案,不同方案的相對權衡折衷之處,同時分享一些可用於開發使用的開發者資源。
背景:擴展性問題
“為何擴展性很難實現?我經常談論有關‘擴展性的三難困境’(scalability trilemma),即區塊鏈系統必須在不同的特性之間進行權衡。它們很難同時都具備三個特性,其中之一就是去中心化,另一個就是擴展性,第三個就是安全性。" -- Vitalik Buterin,2017年11月諸如比特幣 (Bitcoin) 和 以太坊 (Ethereum) 等無需許可的公鏈平臺已經在第一層 (Layer 1) 選擇了優化安全性和去中心化程度,而不是高交易吞吐量。任何想要成為驗證者 (validator) 的人都可以參與,且成為驗證者要求只需要相當少的時間和資金投入。
在 PoW 機制中參與挖礦的節點保護整個區塊鏈網絡免受 51% 攻擊 (按照2019年4月份的價格計算,這種攻擊在以太坊區塊鏈和比特幣區塊鏈上的攻擊成本分別為每小時約10萬美元和超過35萬美元)。
以太坊的真正無需許可的去中心化屬性和高安全性使其成為全球經濟信任層的首選平臺,並確保了該平臺上的區塊鏈應用程序的安全。
然而,安全性和去中心化是以擴展性為代價的。當前以太坊每秒處理的交易量約為5筆,並且如果每秒處理的交易量為6筆就會出現超負荷問題,且理論上每秒處理的簡單交易的限制為14-15筆。對於任何主流的現存消費者或金融應用來說,這個數字都是九牛一毛的。
“其核心限制是,像以太坊這樣的公共區塊鏈要求網絡中的每個節點都要處理每一筆交易。” --Josh Stark,2018年2月在以太坊2.0階段,以太坊基金會 (EF) 有著一個升級以太坊區塊鏈基礎設施的先進路線圖,將在接下來的幾年中大大地改善以太坊的擴展性。
但是,很多項目當前就在以太坊平臺上搭建應用程序,這些程序現在就需要實現擴展!此外,基於這些應用的實際用例,即便 Serenity (Eth 2.0) 已經實現,那你可能也不希望所有的交易都運行在以太坊主網 (即第一層) 之上,而是選擇第二層解決方案。
當前的主要挑戰
- 緩慢-- 交易吞吐量低,滿塊 (full block) 情況下的網絡延遲依賴性;
- 昂貴-- 用戶必須為每筆交易支付 gas 費用
- 用戶體驗不佳-- 用戶必須為每筆交易進行簽名並等待交易被確認,之後下一筆交易才能被執行。
擴展性方案
當前可以實現的用於擴展交易吞吐量的擴展性方案,當然還存在其他一些包含鏈下計算和其他擴展向量的解決方案,但本文將主要探討以下擴展性方案:
- 鏈下消息簽名 (元交易) -- 使用以太坊密鑰對 (key pairs) 在鏈下對消息進行簽名,存儲併發出事件,或將事件傳遞給 P2P,然後根據這些消息上的內容和簽名更新鏈上的狀態;
- 支付通道-- 交易雙方之間實現價值交換的鏈下通道,並在鏈上對交易;
- 狀態通道-- 實現交易雙方之間多次更新狀態的鏈下通道,並在鏈上對這筆交易進行最終的狀態更新;
- 側鏈 x 橋接 (bridges) -- 功能齊全的側鏈通過橋接只能合約和中繼機制來錨定以太坊主網;
- Plasma 鏈-- 功能齊全的子鏈 (child chain) 會定期地將其狀態樹 (state tree) 提交至根鏈 (即以太坊主網) 之上。
擴展性方案的折衷之處
擴展性方案的描述 & 實現
下方的擴展性方案都是開源的,可用於開發者搭建應用程序,儘管所有的擴展性方案都處於發展中,並且在將應用部署到主網之間,強烈建議進行安全審計 (下方涉及到實現擴展性方案的項目,不包括尚未發佈可用產品或者代幣庫的項目)。
01. 消息簽名
- 用戶通過密鑰對 (公鑰 + 私鑰) 使用 keccak256 哈希算法,在鏈下對消息進行簽名;
- 消息可以存儲在 IPFS (星際文件系統) 或者 DB (數據庫) 中,之後分批處理成一筆鏈上交易;
- 消息也可以通過 P2P 傳遞,並且一旦消息 (通過公鑰) 被驗證為來源於有效或者授權的一方,則該消息就可以被作為 oracle 輸入到主網的智能合約中;
- 之後智能合約就會接收並執行該信息;
- 在 ETH Berlin 會議期間,MakerDAO 就使用消息簽名的方法,提議了一個鏈下價格預測的解決方案。
相關資源:
- Karl Floersch -- 哈希算法和消息簽名基礎知識:
https://cryptoeconomics.study/
- Mario Conti -- 通過鏈下簽名消息進行價格預測 (price oracle):
https://view.ly/v/Rt275OYzLCI1
- Vitalik Buterin -- 預言機:
https://blog.ethereum.org/2014/07/22/ethereum-and-oracles/
02. 支付通道 & 狀態通道
狀態通道(state channels) 包含三個主要步驟:
- 交易雙方將初始的區塊鏈狀態 (比如雙方的餘額) 鎖定在一個智能合約中,該智能合約非常類似於一個多重簽名的錢包。這確保了只有當雙方都已經對更新進行簽名之後,錢包中的資金才能被解鎖並進行轉移。
- 雙方通過在批次之間傳遞狀態更新 (比如餘額的更新) 來實現交易。如果雙方同意,則對某個狀態更新進行“簽名”,該狀態更新會被提交給智能合約中以便解鎖資金;
- 當雙方完成交易時,他們各自都會將狀態更新提交給智能合約。如果雙方提交的狀態更新相匹配,那雙方的區塊鏈的狀態 (比如雙方的餘額) 將會被解鎖,該狀態通常會與雙方的初始狀態不一樣。
支付通道 (payment channels):
支付通道是一種受到限制的狀態通道解決方案,僅限於 ETH 或者 ERC20 代幣的支付。其簡化的結構允許更大的吞吐量和更高效的設計,因為只有一個 (或幾個) 狀態會被更新,即淨餘額 (net balance)。
爭議解決:
- 交易雙方簽名的每個狀態更新都會被分配一個“nounce”,也即一個獨特的用於確認此次更新的數字。較新的 nouce 會取締舊的 nonce。
- 一旦 A 方提交了一個狀態更新,一個挑戰期 (challenge period) 就會啟動。在該挑戰期期間,B 方可以提交一個帶有更新的 nonce 的狀態更新。當挑戰期結束時,帶有最新 nonce 的更新將被用於解鎖區塊鏈狀態,並適當地分配資金。
現有的項目 & 實現:
- Raiden (雷電網絡)是對於以太坊擴容的一種鏈下支付通道解決方案,可以為以太坊帶來近距離即時支付,低交易費用和高擴展性。該網絡能與以太坊及所有符合 ERC20 規範的數字代幣良好協作。查看鏈接訪問更多內容:
https://kauri.io/article/e875bf0e94444f86b3dcdebc730f6c7f/v1/raiden:-generalized-state-channels
- Connext正在搭建一個開源 P2P 微支付基礎設施,該項目的首個產品在以太坊區塊鏈上使用了支付通道。支付通道運行將許多的鏈下交易聚合為數量更少的鏈上交易。查看鏈接訪問更多內容:
https://kauri.io/article/ea598e8c666c413e8df0a6dd106a1c28/v1/connext:-peer-to-peer-payment-channels
03. 側鏈 x 橋接 (bridge)
橋接(或中繼)將來自側鏈的信息傳遞到主網,其側鏈運行著自己的共識算法。在主網絡上鎖定值或狀態(或者兩者一起),並在側鏈上運行 dApp,收集和處理交易。
- 用戶從主網上抵押以太幣或者 ERC20 代幣來橋接合約
- dApp 根據需要運行,然後用戶將其以太幣或者 ERC20 撤回主網
- 用戶僅支付兩筆交易的 gas -- 抵押和撤回
- 用戶還可以在側鏈上支付小額交易費用(Loom 和 POA 都有運行成本。Loom 用自己的代幣來收取 dApp 費用,而 POA 要求用戶在側鏈上用 POA 代幣支付 gas 費)
相關資料:
- 觀看視頻:Parity 橋接測試網絡 -- Kovan 以太幣 - ERC20 代幣測試部署
- Melonport 和 Colony 已經在開發實現和測試 Parity 橋接了,Swarm.City 和 Giveth 還在幫助測試任意消息傳遞
- https://wiki.parity.io/Bridge; https://github.com/poanetwork/poa-bridge-contracts
現有項目和實施:
- POA Network是一個基於以太坊的平臺,為智能合約提供開源框架。POA Network 是使用權威證明(Proof of Authority)作為其共識機制的以太坊側鏈。
- Loom 是以太坊第 2 層擴展解決方案,專注於需要非常高吞吐的社交和遊戲 dApp。Loom SDK 可使用支持高可擴展性優化的 dPoS 共識,可以生成一個叫做 dAppChain 的側鏈。
- SKALE的彈性側鏈提供標準全容量側鏈的所有好處,併為真正去中心化的網絡提供安全保障。彈性側鏈性能高、可配置且與以太坊 / Web3 兼容。
04. Plasma 鏈
概覽:
- 初始化 Plasma 區塊鏈。編寫合約並將其提交給根鏈;
- 本地化計算。只需要定期將 Plasma 的區塊哈希提交給區塊鏈;
- 防偽中定義中的共識規則。如果出現無效的區塊,任何人都可以提交防偽聲明,將交易回滾到區塊鏈。
現有項目和實現:
- 包括 FourthStateLabs、OmiseGo、Kyokan、Plasma Group 等項目,查看詳情:
https://kauri.io/article/3103de2a3a874f348013b96d157451be/v7/plasma-roundup:-from-mvp-to-mainnet
- Kyokan MVP實現純粹關注支付用例的最小可行 Plasma,以便 App 開發人員現在就可以體驗 Plasma,查看 MVP 教程:
https://kauri.io/article/7f9e1c04f3964016806becc33003bdf3/v4/minimum-viable-plasma-the-kyokan-implementation
- Plasma Group致力於為更大的以太坊社區創建開放式 Plasma 實現。我們的使命是通過探索 Plasma 框架的全部潛力來推動第 2 層可擴展解決方案向前發展。瞭解更多:
https://kauri.io/public-profile/4c1f7c394b9fdbe23dcbe64e7b537b5354c71b24)
作者 | Andreas Wallendahl
編譯 | Jhonny & Iris
閱讀更多 巴比特 的文章