一.什么是IBC?
IBC是鏈間通信協議的縮寫(Inter-Blockchain Communication Protocol)。通過數據包交換在多個不同的區塊鏈網絡之間轉移數據和狀態信息。最初的用途更多是通過IBC協議實現跨鏈通證轉移。
IBC的目標是在兩個獨立的七層網絡之間傳遞應用信息,所以需要鏈外的relay把數據包在鏈A和鏈B的網絡之間做中繼。鏈B收到鏈A的數據后必須能獨立驗證它所包含的證明信息,該證明代表了鏈A上的某個狀態(及其對應操作)的真實性。為了讓IBC協議能夠工作,必須依賴基礎的信任機制,要相信鏈A和鏈B里各自的共識算法,也要相信輕客戶端驗證,通過對區塊頭信息的驗證,證明在區塊鏈上曾經發生過的事情。
二.如何實現IBC?
1.連接的生命周期
1.1 建立連接
在兩條鏈之間首先要建立“連接”,也就是彼此的初始信任關系;在連接建立的那一瞬間兩條鏈要交換基礎的信任數據(信任根)-- 對PoS網絡來說就是兩條鏈的驗證人公鑰集,信任根必須是可以由第三方獨立驗真的。
1.2 保持連接
在整個連接期間要持續不斷獲得對方的新區塊頭,基於信任根和連續的區塊頭,可以從連接建立時對方的區塊高度,連續驗證后續任意高度區塊頭的正確性;這些區塊頭是驗證IBC數據包的信任基礎。
1.3 斷開連接
當出現分叉或安全事件的時候,要及時關閉連接;這可以通過鏈上治理或自動作弊檢測來觸發。
2.數據包、回執和超時處理
2.1 數據包
是由元數據(數據頭)和不透明數據載荷(數據體)組成的報文。數據頭包含類型、順序號、源鏈ID、目標鏈ID、超時參數;數據體則包含需要區塊鏈應用層來理解和處理的數據,也就是源鏈狀態變化的證明。
2.2 回執
是“反向”數據包,B鏈收到並處理完來自A鏈的數據包后,會給A鏈發一個對應的回執。
2.3 超時處理
源鏈在發送數據包時,可以在數據頭里指定一個由目標鏈上的區塊高度或時間戳表示的超時參數;目標鏈對收到的超時數據包將不予處理,而源鏈如果在發送的數據包超時后還未收到回執,就會對數據包對應的鏈上狀態做回滾操作。
3.嚴格排序的消息傳送
要想讓整套系統工作,數據包的傳遞必須保持嚴格的全局排序:
· 共識算法確保鏈上交易的處理遵循單一精准排序。
· IBC協議確保關於鏈上交易處理狀態的消息在跨鏈傳遞的過程中遵循單一精准排序。
· IBC用通道機制實現排序控制:每條鏈為每個連接都維持發送和接收兩個通道,每個通道維持一個計數器,發送通道的計數器為流出消息生成順序號,接收通道的計數器則用於校驗流入消息的順序號。
· 嚴格的排序保證是對全局狀態一致性進行推導的前提條件。
4.共識要求
IBC協議安全需要共識算法的最終性來防止雙花,不同共識算法的最終性表現不一樣:
· Tendermint和PBFT類共識算法滿足即時最終性(最理想)
· 以太坊的Casper FFG共識算法提供快速最終性
· 比特幣類共識算法(PoW, Tezos)提供概率最終性,需要應用層選擇安全閾值
三.IBC規范和開發進展
圍繞IBC協議規范相關活動的關鍵討論和交付物:
https://github.com/cosmos/ics
https://github.com/cosmos/ics/tree/master/spec
IBC協議的代碼實現:
https://github.com/cosmos/cosmos-sdk
IBC工作組:
telegram: ibcprotocol