區塊鏈研究實驗室 以太坊上的廣義狀態通道

2021-09-24 04:06:04 字數 3565 閱讀 2905

狀態通道是可用於分布式應用程式的基礎技術。它們可以用於與一組已定義的參與者進行任何互動,例如付款或類似象棋或撲克的遊戲。「通道化」這些應用程式使其成本大大降低,並減少了當今區塊鏈應用程式中不可接受的高延遲,從而實現了使用者預期的類似網路的響應時間。

儘管如此,在當今的以太坊應用中,狀態通道的利用率仍然很低。每個想要使用狀態通道的專案必須有效地構建自己的自定義實現,從而導致冗餘和不必要的風險。其次,現有的狀態通道實現仍然將太多的操作置於鏈上,並以其他的方式危害隱私。

實現乙個保護隱私的通用狀態通道,使用模組化元件構建,支援單個通道內的多個並行操作,並允許使用者公升級通道設計,而無需任何鏈上操作。

通過為構建安全、高效能的應用程式提供框架和標準模組化元件,使開發人員能夠輕鬆地利用狀態通道。

我們的**描述了一種狀態通道設計,它在保持安全的同時盡可能少地將資料鏈放置在其中。我們相信它將成為構建安全和優化狀態通道的標準參考,這是以太坊社群長期需要的。

狀態通道技術

狀態通道通過將區塊鏈狀態的一部分「鎖定」到乙個由一組定義的參與者控制的多簽名合同中來工作。被「鎖定」的狀態稱為狀態存款。例如,這可能是一定數量的以太或erc20令牌,但也可能是cryptokitty或ens網域名稱。

在狀態存款被鎖定,通道的參與者使用鏈外訊息交換和簽署有效的以太坊交易,而不將它們部署到鏈上。這些事務可以隨時放到鏈上。

更新頻道的狀態總是在一致同意的情況下進行。所有當事方簽署(並保留其自己的副本)每個鏈下交易。因為這些「狀態更新」完全是在鏈外進行的,所以它們的交易費用為零,並且它們的速度僅受其底層通訊協議的限制。

因此,狀態通道提供「即時」交易,即各方無需等待任何區塊鏈確認。應用程式可以立即將已完成的操作並將其顯示給使用者,而無需等待設定數量的確認。這就是狀態通道如何提供類似web的響應時間。

我們稱之為即時終結。在共識研究中,「最終性」是指狀態交易不被逆轉的程度。在狀態通道的上下文中,如果不能阻止alice實現區塊鏈上的操作(如果他們選擇的話),則操作是最終的。

如果州頻道的最新「更新」表示「alice=5eth,bob=1eth」,則該狀態為「最終」狀態。記住,更新是乙個由alice和bob簽名的有效事務,任何一方都可以隨時在鏈上部署它。只要我們假定alice可以在某個時間點將該事務廣播到網際網路,她就可以將該事務視為最終事務。

狀態通道的核心屬性是僅在必要時才能返回區塊鏈。如果正確構建了乙個狀態通道,那麼所有各方都可以進行即時終結的快速操作。如果出現任何問題,各方總是可以選擇將最新版本的狀態部署到區塊鏈。

最小化鏈上操作

現有的特定於應用程式的狀態通道實現要求使用者為他們想要使用的每個應用程式開啟乙個新的通道,支付昂貴的交易費用。例如,兩個使用者將進行乙個鏈上交易,在他們之間開啟乙個支付渠道,他們需要進行另乙個鏈上交易,以進行乙個棋局。

我們的狀態通道將鏈上需求最小化到極端,將盡可能多的邏輯轉移到鏈外層。這導致了我們**中最重要的觀點之一:乙個足夠強大的多簽名錢包是任何單個狀態通道唯一必要的鏈上元件。

將邏輯從鏈上移開可以使我們獲得比現有通道更大的優勢。我們可以將新的應用程式安裝到乙個狀態通道中,而無需進行鏈操作。我們甚至可以公升級或重新設計乙個狀態通道,而不需要鏈上交易或費用。

這種方法還具有顯著的隱私優勢。正確構造,用於保證狀態存款的多簽名錢包應與任何其他多簽名錢包不可區分。在鏈上,沒有辦法區分常見的multisig和用於建立狀態通道的multisig。

反事實技術

我們可以使用所謂的「反事例項項化」來實現這些結果。解釋這種技術需要首先定義術語。

「反事實」是指可能是真的,但不是。在討論狀態通道時,這是乙個非常有用的概念,我們花了很多時間對可能發生在鏈上的事情進行推理,但事實並非如此。

在狀態通道中,我們稱「反事實x」來描述乙個案例,其中:

x可能發生在鏈上,但不會發生

任何參與者都可以單方面使x在鏈上發生

因此,參與者可以表現為x發生在鏈上

例如,想象一下alice和bob之間的支付渠道。alice通過頻道向bob傳送4個eth,這實際上意味著雙方都簽署了乙個交易。任何一方都可以隨時在鏈上部署此交易,但事實並非如此。所以我們可以說「反事實的alice給了bob4 eth」。這使他們能夠像已經發生的交易一樣行動-在適當的威脅模型中,這是最終的交易。

反事例項項化

在上面的部分中,我們說我們的方法允許您將新應用程式安裝到狀態通道中,而無需任何鏈上操作或費用。這怎麼可能?

這種能力的關鍵是我們所謂的反事例項項化。在上面的部分中,我們描述了alice和bob之間的反事實交易。但我們也可以建立反事實合約。反事例項項化是指在不實際將合同部署到鏈上的情況下例項化合同。當乙個合約被反事實地例項化時,通道中的所有當事方就好像它已經被部署了,即使它沒有。這種技術可以讓我們將幾乎所有的通道邏輯從鏈上移開。

反事例項項化是通過讓使用者簽署並共享對multisig錢包的承諾來實現的。這些承諾表明,如果反事實例示的合同在鏈上被例示,multisig wallet(持有狀態存款)將檢視例示的合同,並根據該合同的狀態轉移適當的狀態存款。

為了實現這一點,在部署合同之前,我們需要在承諾中引用反事實的例項化合同。為此,我們引入了乙個全域性登錄檔:乙個鏈上合約,它將任何反事實合約的唯一確定性位址對映到實際的鏈上部署的位址。用於生成確定性位址的雜湊函式可以是任何考慮到位元組碼、其所有者(即多簽名錢包位址)的函式)和唯一識別符號。

例如,我們可能有乙個合約「c」,其中包含位元組碼和構造函式引數「initcode」。使用引數「initcode」對登錄檔執行函式呼叫的結果是將乙個條目新增到登錄檔中;其鍵是反事實位址,其值是實際的鏈上部署位址。

registry(registryaddress).resolve(counte***ctualaddress)

物件導向的通道設計

我們的通道設計允許開發人員對狀態通道採用物件導向的方法。任何單個狀態通道都將由幾個反事實物件-組成,例如支付通道物件或棋類遊戲通道物件。因為這些都是反事實的例項,所以它們不需要向通道中新增費用-只需要雙方簽署承諾。

例如,alice和bob可以在任何時候選擇反事實地在他們的通道內例項化乙個合約,比如,定義乙個西洋棋遊戲的合約。然後,他們可以相互交換狀態更新,這些更新引用了反事實的例示遊戲,以便真正玩西洋棋,所有這些都不需要鏈上費用。

我們相信這種物件導向的方法提供了許多顯著的好處:

應用程式開發人員可以針對定義良好的api程式設計,插入每個通道所需的核心元件。

我們可以確保,只要核心元件經過嚴格審核並保持安全,應用程式開發人員**中的錯誤就可以隔離到它控制的狀態。

應用程式開發人員可以通過反事實定址重用現有元件,就像他們將重用以太坊合同一樣,例如,乙個可以證明是公平的隨機性源。

使用者可以在有爭議的情況下保護隱私,只需將有爭議的物件鏈結起來。

我們可以在正常執行期間傳遞的訊息和發生爭議時需要發布的事務之間的權衡曲線上訪問更多的點,在某些情況下,這使我們可以跨通道分攤對過時狀態的響應。

結論

側鏈和plasma等其他技術進行比較

審查現有的狀態通道設計

深入研究相關威脅模型

元通道廣義狀態通道的示例結構

區塊鏈研究實驗室 深入解析Solidity合約

這次主要討論solidity背後的運作原理,到底乙個solidity合約經過編譯到部署上鏈之間的過程是如何運作的,以及後續呼叫合約時的流程,知道得越多就越能寫出安全可靠的合約。我們都知道乙個solidity程式 寫完之後,必須將它編譯成byte code,才能透過交易部署至鏈上,變成所謂的智慧型合約...

區塊鏈研究實驗室除錯大揭秘!

除錯solidity 非常困難。隨著時間的流逝,諸如ganache,remix和solidity test helpers之類的工具使它變得更容易,但仍然存在bug。使用ganache進行除錯的gui將有助於減輕許多這些痛苦,並允許開發人員視覺化地處理和除錯合同。現在有一種方法可以做到這一點!本教程...

區塊鏈研究實驗室 智慧型合約資料下溢攻擊案例分析

儘管dao合同並未成為下溢攻擊的受害者,但我們可以利用現有的babydao合同 來更好地了解這種過於常見的攻擊方式。首先我們了解uint256是什麼。uint256是256位的無符號整數 無符號,只有正整數 以太坊虛擬機器被設計為使用256位作為其字大小,或者由計算機的cpu一次處理的位數。由於ev...