跨鏈:詳解Cosmos跨鏈間是如何相互通訊

買賣虛擬貨幣

跨鏈作為區塊鏈一種不可或缺的技術,我們研究跨鏈,以更好地瞭解區塊鏈之間是如何相互通訊。

最初構建區塊鏈時,他們設想能夠提供“一刀切”的解決方案,這意味著所有交易,智慧合約或其他任何事物都在單個鏈上執行。 但是,現在很明顯,這樣的系統不太實用,尤其是在存在可伸縮性限制和創新約束的情況下。

跨鏈是兩個相對獨立的區塊鏈之間的互操作性。換句話說,由於區塊鏈是以標準化的方式構建的,因此它允許區塊鏈彼此通訊。跨鏈實施主要以資產交換和資產轉移為代表,既是區塊鏈世界的重要組成部分,也是PPIO的重要研究方向。使用交叉鏈,可以避免單鏈的侷限性。今天,我們將探討Cosmos跨鏈協議的邏輯結構。

根據不同的基礎技術,跨鏈的相互作用可以分為同構的跨鏈和異類的跨鏈。對於同構鏈,安全機制,共識演算法,網路拓撲和塊生成驗證邏輯是一致的,它們之間的跨鏈互動相對簡單。

另一方面,異構鏈的跨鏈互動相對複雜,並且包括諸如針對比特幣的PoW演算法和針對Tendermint的PBFT共識演算法之類的技術。區塊組成和確定性保證機制差異很大,因此直接設計跨鏈互動機制並不容易。異構鏈之間的跨鏈互動通常需要第三方輔助服務。

如何實現跨鏈同構?

基於Tendermint開發的鏈可以採用同構跨鏈。 Cosmos中同構鏈之間的資產轉移原理如下。

由於Tendermint使用PBFT+POS共識演算法,因此只有在2/3個驗證者同意的情況下,才會將區塊提交到網路。可以透過檢查區塊頭以驗證區塊頭在特定鏈中是否合法來驗證驗證器資訊。例如Tendermint正在開發兩條鏈:鏈A和鏈B。現在假設資產需要在鏈上轉移。首先,兩個鏈A和B將相互註冊。在註冊過程中,A和B認識到它們的獨立性。然後鏈將相互傳送各自的創世塊和ChainID(用於表示不同的鏈)。由於創世塊包含驗證者資訊,因此在註冊後,A和B鏈將具有另一條鏈的驗證者資訊以及區塊頭資訊。

現在,需要將A中的資產轉移到B。首先使用者可以將跨鏈交易包Tx傳送到A。A執行packageTx,銷燬或鎖定相關資產,然後將packageTx寫入出口。出口可視為放置所有外部通知的跨鏈交易的郵箱。

為了將在鏈A中發生的事件通知鏈B,需要一箇中繼器。中繼器負責將跨鏈訊息從鏈A的出口轉發到鏈B的出口。在這種情況下,中繼器在鏈A的出口中查詢packageTx,並獲得packageTx的Merkle證明。該資訊被打包到IBC Package PostTx事務中併傳送到鏈B,鏈B查詢關於packageTx位置的區塊頭資訊。它還將區塊頭資訊打包到IBCUpdate Chain Tx中,並將其傳送到鏈B。注意中繼器支付了IBC Package PostTx和IBCUpdate Chain Tx的交易成本。

鏈B接收到IBCPacketPostTx事務後,它首先透過該鏈中的驗證器檢查IBCUpdateChainTx中的區塊頭是否為鏈A的一部分,然後驗證IBCPacketPostTx中跨鏈事務的Merkle證明是否等於該區塊IBCUpdateChainTx中的頭雜湊。當所有支票都透過時,B鏈開始執行相關操作(對於B鏈,這意味著生成相關資產等)。

同構跨鏈實現方法

Cosmos中的跨鏈由IBC協議實現。 Cosmos生態系統中定義了以下IBC協議軟體包:IBCRegisterChainTx,IBCUpdateChainTx,IBCPacketCreateTx,IBCPacketPostTx。

IBCRegisterChainTx

在跨鏈的開頭使用以下程式碼註冊和傳送創世紀區塊。驗證者會將其交給另一方。此程式碼只能執行一次,多次執行將報告錯誤。

type IBCRegisterChainTx struct {
BlockchainGenesis
}

type BlockchainGenesis struct {
ChainID string
Genesis string
}

IBCUpdateChainTx

用於將當前鏈上的最新區塊資訊,區塊高度和區塊頭資訊傳輸到另一個鏈。

type IBCUpdateChainTx struct {
Header tm.Header
Commit tm.Commit
// TODO: NextValidators
}

IBCPacketCreateTx

當鏈條接收到交易包時,它將執行跨鏈交易並將相關資訊放入出口。

type IBCPacketCreateTx struct {
Packet
}
type Packet struct {
SrcChainID string
DstChainID string
Sequence   uint64
Type       string// redundant now that Type() is a method on Payload ?
Payload    Payload
}

IBCPacketPostTx

跨鏈交易執行後,此軟體包包含Merkle證明,然後由中繼器將其傳送到另一個鏈。

type IBCPacketPostTx struct {
FromChainID     string

// The immediate source of the packet, not always Packet.SrcChainID
FromChainHeight uint64

// The block height in which Packet was committed, to check Proof
Packet
Proof *merkle.IAVLProof // Merkle證明
}

plugin

從上面的協議我們可以看到,這些協議包實際上是一個事務。Tendermint有一個plugin模組,以方便我們擴充套件。 我們可以在plugin中實現介面,並使用IBC plugin執行跨鏈交易。

type Plugin interface {

// Name of this plugin, should be short.
Name() string

// Run a transaction from ABCI DeliverTx
RunTx(store KVStore, ctx CallContext, txBytes []byte) (res abci.Result)

// Other ABCI message handlers
SetOption(store KVStore, key, valuestring) (log string)
InitChain(store KVStore, vals []*abci.Validator)
BeginBlock(store KVStore, hash []byte, header *abci.Header)
EndBlock(store KVStore, height uint64) abci.ResponseEndBlock
}

上面的程式碼是plugin介面的定義。可以看出,該plugin與ABCI介面非常相似,因此IBC事務在deliverTx處交給了該plugin。

// ABCI::DeliverTx
func(app *BaseApp)DeliverTx(txBytes []byte)(res abci.Result) {
// Exec tx
switch tx := tx.(type) {
case *types.SendTx:
// 執行正常交交易
case *types.AppTx:
// 執行plugin中的交易
    plugin := pgz.GetByName(tx.Name)
    res = plugin.RunTx(cache, ctx, tx.Data)
return res

default:
return abci.ErrBaseEncodingError.SetLog("Unknown tx type")
  }
return res
}

異構跨鏈PegZone

對於使用POW共識演算法的鏈,例如比特幣和以太坊,它們如何使用Tendermint的IBC協議跨鏈運作?由於這些鏈中使用了POW演算法,因此我們無法透過驗證器驗證這些鏈的區塊。我們也無法使用Merkle證明來證明這些鏈上跨鏈交易的合法性。此外,POW共識演算法生成的區塊是概率性最終的,並且有可能被回滾。我們需要確保跨鏈交易是真正的最終交易,並且不會回滾。

基於以上考慮,我們使用PegZone方案執行異構跨鏈。PegZone本身實際上是Tendermint開發的代理鏈,它實時跟蹤原始鏈的狀態,並設定安全閾值以等待原始鏈塊的增長。當數字達到安全閾值時,原始鏈狀態被視為具有偽實時終結性(回滾概率小),這與輕客戶端錢包驗證的原理相同。例如比特幣安全閾值通常設定為6,而ETF安全閾值可以設定為20或100。PegZone本身具有實時確定性,可以透過IBC連線到Cosmos Hub以實現跨鏈。

下圖使用PegZone或Peggy以及以太坊作為跨連結的示例。

從上圖可以看出,PegZone可分為五個部分:

1. smart contract:資產託管在以太坊和Cosmos中代幣託管中的作用。它主要提供四種方法:鎖定,解鎖,鑄造和銷燬。

2. witness:這是一個完整的以太坊節點,它監視以太坊合約的事件並等待生成100個區塊。封裝的見證人Tx被提交給PegZone以證明以太坊區塊鏈上的狀態變化。

3. PegZone:PegZone是基於Tendermint的區塊鏈,可維護使用者帳戶資訊,允許使用者之間進行資產轉移並提供交易查詢。

4. signer:Secp256k1用於簽名交易,以便可以透過智慧合約有效地驗證簽名;這對應於智慧合約的驗證者公鑰集。

5. relay:relay負責所有事務轉發。該角色將已簽名的SignTx轉發到智慧合約。

Cosmos Hub角色

在Cosmos中的basecoin跨鏈演示中,兩個鏈(鏈A和鏈B)被跨連結,並相互傳送IBC註冊鏈Tx進行註冊。 跨鏈時,將直接傳送IBC協議包以執行資產的跨鏈操作。但是這種直接連線有問題。隨著訪問網路的區域(相當於一個獨立的區塊鏈)的數量增加,如果直接實現通訊,連結的數量將以平方的順序增加。以連線到網路的100個區域為例。 果每個區域直接需要建立IBC連線,則網路需要n(n-1)/ 2 = 4950個通訊鏈路。如此快速的增長顯然將壓倒整個網路。

Hub的概念可以解決有關此問題的問題。在Cosmos生態系統中,所有區域都將註冊並向集線器傳送IBC軟體包。

Hub執行模式

Hub管理許多區域。所有區域都需要向Hub註冊。Hub跟蹤每個區域的狀態。每個區域將其產生的所有新區塊資訊報告給Hub。同時每個區域還需要同步Hub的狀態。每個區域不是透過區域之間直接通訊,而是透過將IBC傳送到Hub進行間接通訊。

當區域建立與Hub的IBC連線時,它可以自動訪問連線到Hub的其他區域,這意味著一個區域不需要連線到其他區域。

當一個區域從連線到Hub的另一個區域接收令牌時,它只需要信任Hub和該區域,而不必信任網路中的所有其他區域。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;