在前面的文章中,我們介紹過 LibraSwap,但實際上透過 Libra SPV,我們可用於搭建 Libra 與 Ethereum 之間的橋樑,稱做 LibraBridge。利用 SPV validation 實作跨鏈的代幣交換不是新的創舉,過去有許多項目利用這個方法來橋接兩個不同的鏈上資產,如下。SPV 是一種用於輕節點驗證交易的方法,透過智能合約的協助,我們可以在合約上驗證來自 Libra 的交易。
下文中,我們將介紹如何在 Libra 與 Ethereum 上搭建一個無需信任的託管服務 (Trustless Custodian)。主要的合約原始碼在這: Libra.sol
問題描述
在上篇介紹 LibraSwap 的文章中,我們實現了 Libra 與 ETH 間的代幣互換,但在僅有一條鏈支持智能合約的情況下,我們無法直接執行原子代幣交換 (Atomic Swap),而必須透過可信任的第三方來確保交易執行,這離去中心化還有點距離。但實際上,透過協定的設計,我們是能夠實現無需信任的託管服務。
舉例來說,假設我手中只有 Libra 代幣,而 MAX 交易所有賣 ETH,我想與其幣幣交換。最簡單的作法就是從 MAX 入金 Libra 並與之交換 ETH,而前提是相信 MAX 會出金。
註: MAX 是一間中心化交易所,但下圖的交易係指鏈上交易,而非來自資料庫更新。
如果問題變成,同樣要做幣幣交換,是否可在不完全信任 MAX 交易所的情況下來實現呢?
方法
情況 1
正常的情況下,首先 MAX 會在 LibraContract 中放入保證金,作為履約保證,而合約內的保證金僅能在一定時間後才能由 MAX 取回,其他時間保證金則由非受第三方控制的合約鎖定與保管。而當用戶想與 MAX 進行幣幣交換時,會先查詢合約上是否有足夠的保證金,如果有的話,則將手上的 Libra 資產傳送到 MAX 的 Libra 地址,而當 MAX 確認後,則會在以太鏈上傳送等值的 ETH 給用戶,以完成本次交易。

情況 2
同樣的,MAX 會抵押保證金,以取得用戶的信任,相信可與之幣幣交換。但若 MAX 收到 Libra 後卻沒轉送 ETH 給用戶,即違約,由於合約內含一個違約挑戰的功能,若用戶可以出示在 Libra 上的轉帳證明,則可遞交證明作為憑據。而鏈外轉帳的證明可由 Libra SPV 來進行交易驗證,當能夠證明某筆交易已經被核定,而這正是 SPV 的既有功能。另一方面,MAX 作為違約的一方,將由公正第三方的合約,削減合約上的押金作為給用戶的歸還,甚至再由保證金多付出該筆交易 x% 的罰金來補償用戶。

其他討論
這是個橋接 Libra 與 Ethereum 的 PoC,一些細節上我們並沒有優化,加上 Libra 在我們過去一個多月的開發中就改版了幾次。但我們相信,若 Move 合約語言成熟,而 Libra 上也可以部署合約交易,我們預期會看到更多的合約應用。以下列出一些未來可以優化的細項:
- 支援 SHA3–256
在目前的 LibraContract 上有關 SPV 的設計,由於 Libra 上是採用 SHA3–256,而 EVM 本身並不支持,僅有 SHA-256, KECCAK-256, RIPEMD-160 及即將升級會支援的 BLAKE2b。故我們先以 KECCAK-256 替換掉 Libra-core 的 SHA3-256 套件,讓 SPV 可以在 EVM 正常運作,作為一種過渡方案。另一種方法則是直接在智能合約中實現 SHA3–256。
- 需要可信任的資訊來源
為了讓 SPV 能夠正確被驗證,輕節點需要向全節點詢問 merkle root 與 merkle branch。但是,如果得到的資訊是錯的,那麼 SPV 驗證則會出錯。目前,由於 Libra 上的全節點僅由聯盟成員所維護,我們姑且可以相信資訊是正確的。
另一種方法是,我們可以將 state root 的版本資訊,由可信方記錄在合約之中,但這件事在 Libra 上成本會相當高因為以下的原因,第一:Libra 每個 tx 就是一個 version,第二:Libra 的交易速度比以太坊快,要記錄的資訊量相對大,第三,即使減少資料紀錄量,每一筆紀錄在鏈上都需要成本
- 需要有安全的輕節點
由於全節點都是由 Libra 聯盟成員所維護,相信未來 Libra 的發展將會在錢包服務上,因此,保護私鑰將成為一大重點。由於 Libra 支援 EdDSA 簽章演算法,加上 iPhone 的 Secure Enclave (SE) 支持 ed25519,或許可以直接將私鑰保管在 SE 中。而另外一種方法則是透過門檻式簽章演算法 (Threshold Signature Scheme) 來保護私鑰,目前 Zengo 的團隊已經在 Libra 的錢包中實現了該種方案。剛好 TSS 也是 AMIS 提供的服務之一,並且我們能夠在算法上提供當責性 (Accontability) 的支持,而這是目前其他 TSS 所缺乏的。
討論
SPV 驗證與協定設計讓我們能夠實現無需信任的託管服務,並無需仰賴區塊鏈都支持智能合約。此外,一個可受信任的託管服務,相較於點對點的直接交易,資金池在流通性上來的更有優勢,但相對也有一些挑戰需要克服。這個專案只是個 prototype,畢竟未來若 Libra 真的成為全球貨幣,讓 Libra 在不同鏈之間進行流通將有助於市場流動,加上 Ethereum 目前在 DeFi 應用的發展,這將會是相當大的優勢。
感謝 AMISChang-Wu Chen提供本文。