Crosslink 2019 Taiwan|LibraBridge: 橋接 Libra 與 Ethereum

AndyLin
AndyLin
Oct 26 · 7 min read

十月19–20日於台北矽谷會議中心舉行的 Crosslink 2019 Taiwan,由 Taipei Ethereum Meetup 合計共40多位志工協力舉辦,吸引了上百位來自全球的區塊鏈開發者社群齊聚。自從 Facebook 在今年六月公布 Libra 計劃之後,造成全球政府、金融機構以及區塊鏈產業的熱烈關注,其中也有許多區塊鏈開發者對於 Libra 的技術及應用產生很大的興趣。在19日上午其中一場演講由來自區塊鏈技術開發公司 AMIS 的軟體工程師 Bun Hsu,分享了其開發的專案「LibraBridge: 橋接 Libra 與 Ethereum」,透過實作 MVP 來實現 Libra 與 ETH 之間的 Swap 互換。

LibraBridge: 橋接 Libra 與 Ethereum — Bun Hsu(source: Crosslink 2019 Taiwan)

在演講的前半段,講者先介紹了在驗證 Libra 交易所需具備的基本知識;後半段則介紹其實作的 LibraBridge,並現場 demo。

一、驗證 Libra 交易

首先,先介紹驗證 Libra 交易需要具備的基本知識,包括 Merkle tree, transaction info 以及 transaction accumulator 等。區塊鏈網路中的 client node 分為 full node, light node, relay node,在這裡會著重在 light node 輕節點。輕節點不需擁有區塊鏈上所有的資料,只需透過 block header 中的 Merkle root 即可驗證交易。

接著介紹 Libra 的交易資訊,稱為 Transaction Information,主要分為 RawTransaction, SignedTransaction 以及 TransactionInfo 三部分,內容如下圖所示。

Libra Transaction Tree (source)

因為 Merkle root 的值在每次新節點加進來後都會改變,導致 Merkle tree 會不斷變大,因此,Libra 中的 transaction tree 被稱為 transaction accumulator。

Data stricture in the Libra protocol(source

接著,講者以一個範例來說明上述內容。

從 gRPC client 收到交易後會顯示以下內容:

version: 44767
signed_transaction {
signed_txn: "..."
}
proof {
ledger_info_to_transaction_info_proof {
bitmap: 45055
non_default_siblings: "..."
non_default_siblings: "..."
non_default_siblings: "..."
...
}
transaction_info {
signed_transaction_hash: "..."
state_root_hash: "..."
event_root_hash: "..."
major_status: 4001
}
}
events {
...
}

Version

每一個交易都有其唯一的版本號碼,也就是在 transaction accumulator 中 leaf node 的位置。以下圖為例,藍色節點的交易 version 為 4,二進制表示為 100,其中 0 表示向左,1 表示向右,因此我們可以從 root 出發,向右一次、向左兩次後找到此交易。此概念和 Plasma Cash 相似。

Transaction version(source

bitmap & non_default_siblings

bitmap 表示哪個 siblings 為 default,1 表示 non-default;0 為 default。因為 transaction accumulator 會一直變大,大多數時間都不會是 full binary tree,因此,需要 default(placeholder) 來維持樹的結構。

bitmap & non_default_siblings(source

transaction_info

交易的細節。其中,major_status: 4001 表示交易已被節點執行。而因為目前 Libra 不會消耗 gas,因此 gas_used 為 0 而未顯示。

在前半段演講結束前,講者也展示了用 Solidity 語言來驗證 Libra transaction Merkle proof 的程式碼。

Solidity snippet

而在後半段演講,講者先介紹了 LibraBridge 的應用場景。

二、透過可信任的第三方來執行 LIB-ETH 交換

目前要進行 Libra token 和 ETH 的交換,必須透過可信任的第三方來確保交易執行。舉例來說,假設參與方(使用者)擁有 Libra token,而託管方(MAX 交易所)有賣 ETH,參與方想要和託管方進行幣幣交換的方法為從 MAX 交易所入金 Libra 並與之交換 ETH,但前提是相信 MAX 交易所會如期出金,不會作惡。

但此時會有個問題產生:是否可在不完全信任託管方(MAX 交易所)的情況下來實現 LIB-ETH 的幣幣交換呢?

三、LibraBridge — Trustless custodian between Libra and Ethereum

在 LibraBridge 的實作中,藉由兩個 function 來實現無需託管信任的 LIB-ETH 幣幣交換:

  • Deposit:託管方傳送較多的 ETH 至合約中作為保證金。
  • Challenge:參與方可以質疑託管方是否實現承諾(在合約中驗證 Libra transaction Merkle proof)

以下分別討論正常情況及違約挑戰的情況:

Case 1: 正常情況

在正常的情況下,首先託管方會在合約中存入保證金,同時被鎖定直到一定時間後才能被託管方取回。而當使用者(參與方)想與託管方進行幣幣交換時,會先查詢合約上是否有足夠的保證金,若驗證通過,使用者將 Libra 代幣存入託管方,而當託管方確認後,則會傳送等值的 ETH 給使用者。

Case 1(source

Case 2: 託管方違約

若託管方收到 Libra 後卻沒轉送 ETH 給使用者,則託管方即違約,使用者可以透過合約中的 Challenge 功能來執行違約挑戰,使用者可以出示 Libra 轉帳證明作為憑據,在驗證過 Libra transaction Merkle proof 後,合約上的押金(保證金)會被削減以歸還給使用者作為補償。

Case 2(source

Demo

在演講的最後,講者也現場 demo 了 LibraBridge 的實作,有興趣的讀者也可以參考其官方錄製的 demo 影片

而這場演講裡提到的內容,讀者也可參考 AMIS 的 Medium 文章github

Taipei Ethereum Meetup

台北以太坊社群專欄

AndyLin

Written by

AndyLin

區塊鏈|資料科學|網路科技

Taipei Ethereum Meetup

台北以太坊社群專欄

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade