3. 無論轉賬是否成功,在此轉賬操作完成後,兩個區塊鏈上代幣資產的流通總量都不會改變。
跨鏈通訊的體系結構如上圖所示。 為了適應兩個異構系統,通訊處理在每個方向上都是不同的。
BC到BSC架構
BC 是一個基於 Tendermint 的、具有即時終結的區塊鏈。需要至少2/3* N + 1 總投票權的驗證者對每個區塊簽名。 因此可以透過區塊頭和 Merkle證明驗證來驗證區塊交易甚至狀態值是可行的。這一設計已經被研究並實現為“輕客戶端協議”。它被以太坊社羣廣泛討論,也被用於實現Cosmos的跨鏈通訊協議。
從BC到BSC 通訊將在透過 BSC 智慧合約實現的“鏈上輕客戶端”中得到驗證(其中一些是“預編譯”)。在 BC 上發生一些交易和狀態更改之後,如果一個交易被觸發跨鏈通訊,則中繼器將建立並傳遞跨鏈 “資料包”訊息,並作為資料提交到 BSC 上,以“輕客戶端合約”方式儲存。輕客戶端合約將驗證交易包,並在透過驗證後執行交易。透過下述設計保證:
1. BC的區塊狀態將透過區塊頭和pre-commits同步到BSC上的輕客戶端合約,以獲得以下資訊:
a.驗證者簽名的 BC 區塊和應用程式雜湊
b.當前驗證者集合和驗證者集合更新
2. 區塊鏈狀態的鍵值對將根據 Merkle 證明和上面第一點中的資訊進行驗證。
在確認鍵值對準確和可信之後,輕客戶端合約將執行與跨鏈包對應的操作。 BC到BSC的跨鏈操作可以 建立如下資料包:
· 繫結:將BEP2代幣與 BEP2E繫結
· 轉賬:繫結後進行跨鏈轉賬,這意味著BC上的流通將會由於鎖定減少,並出現在BSC上的目標地址中,保證流通量不變
· 錯誤處理:處理 BSC到BC 通訊的任何超時/失敗事件
· BSC驗證人集合更新
為了確保沒有重複、訊息序列正確和超時處理,BC 引入了“通道”概念來管理跨鏈通訊。
對於中繼器,請參考下面的“中繼器”部分。
BSC到BC 架構
BSC 使用了PoSA(基於權益質押的權威證明)共識協議,該協議可能會出現分叉,因此要求對更多的區塊進行確認。一個區塊只有一個驗證者的簽名,因此僅依賴一個區塊不適合驗證來自 BSC的資料。
為了充分利用 BC的驗證者集合資訊,採用了類似於橋接或 Oracle 區塊鏈的思路:
1. 來自BSC的跨鏈通訊請求將作為交易提交併在BSC上執行。交易的執行將發出事件,並且可以在“Oracle”上觀察並將這些事件打包,傳送到BC上。 這種型別的“Oracle”交易包沒有區塊頭、雜湊和 Merkle 證明,而是直接包含操作的跨鏈資訊,如傳送方、接收方和要轉賬的金額。
2. 為了保證 Oracle 的安全性,BC 的驗證者將組建一組“Oracle 中繼器”。 BC 的每個驗證者都應獨立運作一個 Oracle 中繼器。這些Oracle 中繼器將使用相同的秘鑰提交和投票給 BC 的跨鏈通訊包。 任何由超過⅔N+1Oracle中繼器 的投票許可權簽名的交易包,其安全性與由 ⅔N+1 相同法定數量的驗證者的投票許可權簽名的區塊相同。
透過複用同樣的驗證者集合, BC 無需實現一個輕客戶端,並在 BC 上持續更新區塊。這樣的Oracle也有 Oracle ID 和型別,以確保順序和正確的錯誤處理。
超時與錯誤處理
在某些情況下,跨鏈通訊會失敗。 例如,由於合約中的一些編碼錯誤,在 BSC 上無法執行中繼資料包。 在這種場景中使用超時和錯誤處理邏輯。
對於可識別的使用者和系統錯誤或任何預期的異常情況,這兩個網路應該自行修復。例如,當 BC 到 BSC的轉賬失敗時,BSC 將發出一個失敗事件,Oracle 中繼器將在BC 上執行退款;當 BSC 到 BC 的轉賬失敗時,BC 將發出一個退款包給BSC中繼器,以便解鎖款項。
然而,跨鏈通訊的任何步驟都可能發生意外錯誤或異常。在這種情況下,BSC中繼器和Oracle 中繼器將發現相應的跨鏈通道被卡在一個特定的序列中。超時一段時間後,BSC中繼器和 Oracle 中繼器可以請求SkipSequence交易,卡住的序列將被標記為“不可執行”。 將提出相應的警告,社羣必須討論如何處理這種情況,例如透過驗證者進行賠付,或者甚至在下一次網路升級期間清理錯誤鎖定的資金。
跨鏈使用者體驗
理想情況下,使用者希望使用兩條平行鏈的方式與使用一條單鏈的方式相同。它需要將更多複合交易型別新增到跨鏈通訊中以支援這一點,這將增加極大的複雜性、緊密耦合和維護負擔。在這裡,BC和BSC只實現了基本的操作,以在初始啟動時啟用價值流,並將大部分使用者體驗工作透過客戶端實現,如錢包。例如,一個錢包可以讓使用者將代幣直接從BSC傳送訂單到BC的DEX,以一種安全可靠的方式銷售代幣。
跨鏈合約事件
跨鏈合約事件(CCCE)是為了允許智慧合約直接透過合約程式碼觸發跨鏈事件而設計的。 這在下列基礎上成為可能:
1. 可以提供標準的系統合約,以服務於一般智慧合約可呼叫的操作;
2. 標準事件可以由標準合約發出;
3. Oracle 中繼器可以捕獲標準事件,並觸發相應的跨鏈操作;
4. 可以在 BC 上建立專用的、程式碼管理的地址,並由 BSC 合約訪問,這裡它被命名為 “BC的合約地址”(CAoB)。
實現以下標準操作:
1. BSC 到BC的轉賬: 這與普通的 BSC 到 BC 轉賬一樣,都是透過標準合約觸發的。 資金可以轉賬到 BC 上的任何地址,包括轉賬給原始合約中相應 CAoB 。
2. BC內轉賬: 轉賬的完成被視為為一個特殊的跨鏈轉賬,而真正的轉賬是從 CAoB 到任何其他地址(甚至是另一個 CAoB)。
3. BC 到BSC 轉換: 這是以雙通跨鏈通訊的方式實現的。 第一個通道是由 BSC合約觸發並傳輸到 BC 上,然後在第二個通道中,BC 將啟動一個正常的 從BC 到 BSC的跨鏈轉賬,轉賬地址為 CAoB 到 BSC上的合約地址。需要特別注意的是,BSC 合約只在第二個通道轉賬時增加餘額,第二個通道轉賬中的錯誤處理與正常的 BC 到 BSC 轉賬相同。
4. IOC(立即執行或取消)交易: 將資產轉移到BC 的主要目的是交易。該事件將指示將CAoB中某一資產交易為另一資產,並轉移交易的剩餘的目標代幣,並將全部結果轉賬給BSC。BC將透過傳送“IOC”訂單來處理此類中繼事件,如IOC訂單傳遞到交易對上,一旦下一次撮合完成,執行結果將被傳送回BSC,其可以是一種資產,也可以是兩種資產。
5. 拍賣交易:這樣的活動將指示BC發出拍賣交易,將CAoB中一定數額的資產儘可能多地轉換成另一項資產,並在拍賣結束時將所有成果轉回BSC。拍賣功能即將在BC上線。
以下是交易的一些細節:
a.針對交易,雙方都可以有一個(絕對或相對的)價格限制;
b.最終結果將以跨鏈交易包的形式寫入 BSC;
c.跨鏈通訊費用可從轉回 BSC 的資產中收取;
d.BSC 合約反映了 CAoB 的餘額和未完成的訂單。 無論在交易期間發生什麼錯誤,最終狀態都將被傳輸回原始合約並清算其內部狀態。
在上述特點的基礎上,將具有高流動性的跨鏈轉賬和交易功能非常方便地新增到 BSC 的所有智慧合約中。 它將極大地增加在智慧合約 和 dApps 上的應用場景,使幣安雙鏈產生1+1>2的聚合效應。
權益質押與鏈上治理
PoSA實現了分散式的社羣治理。 其核心邏輯可概括如下。 你可以從其他網路中看到類似的想法,特別是 Cosmos 和 EOS 。
1.代幣持有者,包括驗證者,可以將他們的代幣 “繫結”到權益質押中。 代幣持有者可以將他們的代幣委託給任何驗證者或一個驗證者候選物件,然後他們可以選擇一個不同的驗證者或候選物件來重新對他們的代幣進行委託。
2.所有驗證者候選物件都將按其獲得繫結代幣的數量進行排序,排名前列的將成為真正的驗證者。
3.驗證者可以與它們的委託人共享區塊收益。
4.驗證者可能會遭受 “懲罰”,即對他們的不良行為的懲罰,如雙重簽名和/或不穩定性。 這樣的損失也會與他們的委託人共同分擔。
5.驗證者和委託者有一個 “解除繫結期”。在這段時間內,系統確保他們之間仍然保持繫結,當發現惡意拜占庭行為時,作惡人將被及時懲罰。
BC權益質押
理想情況下,這樣的權益質押和獎勵發放邏輯應該包含在區塊鏈中,並在產生新區塊時自動執行。與幣安鏈一樣採用Tendermint共識庫的Cosmos Hub就是這樣工作的。
自設計之日起,BC就一直在準備啟用PoS。另一方面,BSC想要儘可能地與以太坊保持相容,這是一個巨大的挑戰和壓力。當以太坊本身可能在短時間(或更長時間)內遷移到PoS共識協議時,尤其如此。為了保持以太坊的相容性和複用BC的基礎架構,我們在BC上完成了BSC的權益質押邏輯:
1.質押代幣是 BNB,這是因為它是兩個區塊鏈上的原生代幣。
2.在BC上記錄BSC的權益質押和委託行為。
3.BSC 驗證集由它的權益質押和委託邏輯來決定,在BC上構建一個BSC的權益質押模組,並透過跨鏈通訊在每天UTC 00:00:00 由BC傳送到 BSC 。
4.BC上的獎勵分配發生在每天UTC 00:00時刻。
獎勵
驗證者集更新和獎勵分配都發生在每天 的UTC 00:00 。這是為了節省頻繁更新和區塊獎勵分配的成本。頻繁分配獎勵的代價可能是巨大的,因為區塊獎勵是在BSC上收取的,並在BC上分發給BSC驗證者和委託者。(請注意,BC出塊獎勵僅分發給BC驗證者。)
為了確保分配是公平的,這裡引入了一種延後分配的演算法:
1.區塊獎勵不會立即傳送給驗證者,而是計算並積累在智慧合約中;
2.當BSC收到驗證者集更新訊息時,它將觸發跨鏈轉賬,將獎勵轉賬給驗證者的託管地址。 託管地址是由系統控制,因此在向委派者承諾的分配完成之前,獎金是不能用的。
3.為了使同步更簡單,並分配時間以防出現罰沒,第T天的獎勵將在第T + 2 天分配。 在委託者收到獎勵後,剩下的收益將被轉移到驗證者自己的獎勵地址。
懲罰
懲罰是鏈上管理的一部分,以確保惡意或負面行為受到懲罰。 BSC懲罰證據可以由任何人提交。 交易提交要求提交懲罰證據和手續費,如果成功提交,也帶來了更多獎勵。
到目前為止,有兩種可以被懲罰的情況。
雙重簽名
當驗證者故意簽署多個在相同高度的區塊時,這是很嚴重的作惡行為。 協議的實現應該已經考慮到如何防止這種情況發生,因此只有惡意程式碼才能觸發這種情況。 當出現雙重簽名時,驗證者應該立即從驗證者集合中移除。
任何人都可以在 BC 上提交帶有 BSC 雙重簽名的懲罰請求,應該包含兩個具有相同高度的區塊和母區塊,以及違規驗證者的簽名。 在收到證據後,如果 BC 確認該證據是有效的:
1.該驗證者將立刻傳送 BSC “驗證者集合更新”跨鏈訊息,惡意驗證人將從驗證集中剔除;
2.驗證者的權益質押將按照預先設定的金額進行懲罰;
3.一部分被懲罰的BNB 將獎勵給證據提交者。獎勵金額應遠遠大於提交懲罰請求事件的成本
4.剩下的 BNB 將分配給其他驗證者的託管地址,並以與區塊獎勵相同的方式分配給所有委託者。
不穩定性
BSC 的可用性依賴於PoSA共識中驗證者集合中的每個驗證人,當輪到其出塊時,他們能夠及時生成區塊。 驗證者可能由於一些原因而錯過出塊時機,特別是由於硬體、軟體、配置或網路方面的問題。 這種不穩定執行將損害網路的效能,並給系統帶來更多的不穩定性。
BSC有一個內部的合約,負責記錄每個驗證者錯過的區塊。 一旦該指標超過預定義的閾值,驗證者的區塊獎勵將不會被轉移到 BC 進行分發,而是被其他更好的驗證者共享。透過這種方式,執行不良的驗證者會逐漸退出,因為它們的委託者將獲得較少獎勵或沒有獎勵。如果指標仍然高於另一個較高的閾值級別,驗證者將受到懲罰,並將傳輸回BC,在BC中,驗證者的的抵押資產將被罰沒一部分。
引數管理
有許多系統引數來控制 BSC 的行為,如懲罰閾值和數量,跨鏈轉賬費用等。所有這些引數將由 BSC 驗證者透過提案投票過程確定。此過程將在 BC 上進行,系統合約將透過跨鏈通訊來獲取最新引數。
中繼器
中繼器負責提交兩個區塊鏈之間的跨鏈通訊包。 由於並聯鏈結構的異構性,產生了兩種不同型別的中繼器。
BSC中繼器
BC 到 BSC 通訊的中繼器稱為 “BSC 中繼器”,或簡稱為 “中繼器”。 中繼器是一個獨立的程序,任何人都可以在任何地方執行,但是中繼器必須在BSC 註冊並鎖定一定數量的 BNB 。 BSC 將只接受來自注冊中繼器的中繼請求。
它們所中繼的軟體包將由 BSC 上的鏈上輕客戶端進行驗證。中繼成功需要透過足夠的驗證,並在BSC上支付足夠的手續費,因此,應該有激勵性獎勵來鼓勵社羣經營中繼器。
激勵
有兩種主要的溝通方式:
1.客戶端操作,如跨鏈繫結、轉賬和錯誤處理等。 這應該由事件請求者支付。
2.系統同步,例如用於驗證的區塊頭,以及驗證者集更新: 這包含了 BC 的區塊頭和驗證者集更改,並且應該由 BSC 系統獎勵支付。
如果某些中繼器有更快的網路和更好的硬體,它們可以壟斷所有的中繼器包,而不會給其他中繼器留下任何收益。 因此,將有更少的參與者加入中繼,這將鼓勵集中化,但損害網路的效率和安全。 理想情況下,由於 BSC 驗證者的分散化和動態重新選擇,一箇中繼器不可能總是第一個傳遞每個訊息。 但是為了避免進一步的壟斷,獎勵經濟機制也是專門為儘量減少這種機會而設計的:
1.對中繼器的獎勵將只分批次發放,而一次發放將覆蓋多個成功的中繼器包。
2.一箇中繼器可以從批處理分發中獲得的報酬與成功中繼包的數量並不是成比例的。 相反,除了前幾個中繼,在一個批次期間中繼器越多,它將獲得的報酬越少。
註冊也會增加這種壟斷的成本。
Oracle中繼器
BSC 到 BC 通訊的中繼器使用 “Oracle”模型,也就是所謂的 “Oracle 中繼器”。 每個BC驗證者都必須(只有驗證集中的驗證者可以)執行 Oracle 中繼器。 每個 Oracle 中繼器都會觀察 BSC狀態的變化。 一旦它捕獲到跨鏈通訊包,它將提交投票請求。在獲得大於2/3投票支援更改之後,將執行跨鏈操作。
Oracle 中繼器應該等待足夠的區塊來確認 BSC 的最終結果,然後才向 BC 提交和投票跨鏈通訊包。
跨鏈費用將與正常的 BC 區塊獎勵一起分配給 BC 驗證者。
此種 Oracle中繼器依賴於所有驗證者的支援。 由於跨鏈通訊包的所有投票都記錄在區塊鏈上,因此評估 Oracle 中繼器的效能並不難。將來可能會透過引入的另一種懲罰機制來限制表現最差的驗證人的收益。
展望
對於幣安鏈的未來,很難做出一個定論,因為它從未停止進化。雙鏈策略一方面為使用者開啟了快速轉賬與交易的大門,另一方面為使用者開啟了靈活可擴充套件的程式設計之門,但這只是幣安鏈發展的一個階段。以下是一些值得關注的主題,以促進社羣更好地獲得更多的可用性和可擴充套件性:
1.為不同的業務用例新增不同的數字資產模型
2.實現將更多的資料來源,特別是 DEX 市場資料,從幣安鏈 DEX傳輸到BSC
3.提供相容以太坊及其未來升級,以及其他區塊鏈的介面
4.改進錢包和區塊鏈客戶端的可用性