八、分片的難題 —— 跨片交易完整性
在分片的方案中,每個分片上可以運行一到多個 DApp,不論 DApp 在不在同一分片,都要能互操作。首先要明確什么是跨片互操作?因為分片也都是
區塊鏈,所以跨片等同于跨鏈。
大家知道區塊鏈可以看成是分布式共識維護的狀態機,狀態機通過交易執行完成狀態轉移。跨鏈的互操作應該引發雙方的狀態轉移,也就是兩個互操作的鏈都執行了交易,而且執行交易之后的狀態具有一致性。
或者說一個跨鏈交易要引起兩條鏈乃至多條鏈的狀態改變,而且這些改變要么都成功,要么都不成功,不存在中間狀態。這跟企業計算里分布式交易的概念上非常類似。
只不過傳統分布式交易的參與者通常是多個數據庫,而跨鏈交易的參與者是多條區塊鏈。非技術背景的同學可能不熟悉狀態機和分布式交易的概念。因為跨鏈交易的概念對理解本次分享的結論很重要,我再用非技術語言解釋一下。
假設你要從工行賬戶轉 1 萬塊錢到建行賬戶,這筆轉賬交易其實就是從工行賬戶上減掉 1 萬,在建行賬戶增加一萬。工行和建行各自都有數據庫存儲賬戶余額,那么就要有一個機制,保證兩個數據庫的操作,一加一減,在任何情況下要么都成功,要么都失敗。
如果沒有這樣的保證,工行賬戶減掉了,建行賬戶沒加上,你少了 1 萬塊錢,你肯定不干。如果工行賬戶沒減掉,建行賬戶加上了,你多了 1 萬塊,銀行肯定不干。
這就叫分布式交易的完整性或者原子性。簡單吧?其實做起挺難的,因為不論是工行建行哪家的服務器停電、斷網、軟件崩潰等等,各種極端條件,都要保證交易完整。在區塊鏈上,轉賬變成了轉通證。
某通證發行在 A 鏈上,通過跨鏈轉 10 個通證到 B 鏈,跨鏈交易完成后,A 鏈上的 10 個通證被凍結了,B 鏈上多了 10 個通證。這兩個狀態改變在任何條件下,要么都成功,要么都失敗。
由于區塊鏈可能分叉,跨片交易要比傳統的分布式交易更復雜。我們看圖,如果跨片交易在分片 1 上的部分是在 A 塊里被打包,在分片 2 上被 X’ 塊打包。兩個分片都可能出現分叉,A 塊和 X’ 塊也就可能成為被廢棄的孤塊。也就是跨片交易可能部分成功部分失敗,完整性被破壞
怎么解決這個問題呢?我們來分析一下,造成跨鏈交易完整性被破壞的根本原因是,交易的多個部分被打包進區塊,但是鏈可以重組,塊可以變成孤塊。
說白了就是交易進了區塊,但是靠不住,有可能反悔,正式說法是沒有明確最終性。最終性 finality 就是區塊必然被包含進區塊鏈。
在
比特幣區塊鏈上,某個區塊后面連的區塊越多,它被逆轉或者說放棄掉的可能性就越低,但是永遠不能 100% 確定,所以稱為概率最終性或者漸進一致性。解決這個問題的辦法就是,要有機制讓區塊具有明確的最終性,不能含糊。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。