跨鏈作為區塊鏈一種不可或缺的技術,我們研究跨鏈,以更好地了解區塊鏈之間是如何相互通信。
最初構建區塊鏈時,他們設想能夠提供“一刀切”的解決方案,這意味著所有交易,智能合約或其他任何事物都在單個鏈上執行。 但是,現在很明顯,這樣的系統不太實用,尤其是在存在可伸縮性限制和創新約束的情況下。
跨鏈是兩個相對獨立的區塊鏈之間的互操作性。換句話說,由于區塊鏈是以標準化的方式構建的,因此它允許區塊鏈彼此通信。跨鏈實施主要以資產交換和資產轉移為代表,既是區塊鏈世界的重要組成部分,也是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, value string) (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和該區域,而不必信任網絡中的所有其他區域。
責任編輯;zl
評論
查看更多