LiquiDEX 兩步原子切換式通訊協定解析:掌握最新區塊鏈技術!

長話短說:LiquiDEX 是一個在 Liquid網絡上執行兩步原子交換(atomic swaps)的協議,它只需要交換方的單次交互,這極大地改善了用戶體驗。而使用該協議,我們可以構建出更復雜系統的構建塊,例如自動 OTC 交易柜臺、拍賣系統甚至去中心化交易所 (DEX)。

注:LiquiDEX的產品還不可用。

一文了解兩步原子交換協議LiquiDEX

簡介:Liquid網絡和原子交換技術

Liquid網絡是一個具有發行資產和保密交易(CT)的比特幣側鏈。

Liquid 的原生資產是 L-BTC(Liquid bitcoin),它相當于比特幣的一個錨定幣。

和以太坊一樣,用戶也可以在Liquid 網絡上發行代表數字資產的token,一個例子就是Tether USD(USDT)。

和比特幣一樣,Liquid使用了一種UTXO模型,而它們的交易結構也相似。

下面是一筆簡化的比特幣交易,其中Alice 發送 1 BTC 給 Bob:

0.6 BTC Alice -> 1 BTC Bob

0.5 BTC Alice 0.1 BTC Alice (找零)

下面則是一筆簡化的Liquid 交易,Alice 向 Bob 發送 0.5 L-BTC以及1000 USDT:

1.1 L-BTC Alice -> 0.5 L-BTC Bob

5000 USDt Alice 0.6 L-BTC Alice (找零)

1000 USDt Bob

4000 UDSt Alice (找零)

然而,因為使用了保密交易(CT)技術,Liquid網絡的輸入和輸出是不可見的,因此外部觀察者無法看到實際金額和資產。

這對交易者來說特別有用,通常而言,交易者并不想透露他們的操作,因為這些信息可能會影響到市場價格。

在上面的例子中,所有的輸入都屬于Alice,但情況并非一定如此:一些輸入可能屬于Alice,而另一些輸入可能屬于 Bob。

假設 Alice 想用L-BTC交換一些USDT,而Bob 想做相反的事情,則Alice 和 Bob 可以合作構建這樣的交易:

0.6 L-BTC Alice -> 0.5 L-BTC Bob

1000 USDt Bob 0.1 L-BTC Alice (找零)

600 USDt Alice

400 UDSt Bob (找零)

交易完成后,Alice 發送了0.5 L-BTC 并收到了600 USDT, 而Bob 發送了 600 USDT,并收到了 0.5 L-BTC。

交易要麼發生,要麼不發生(它不會部分發生),這使得交易是“原子”的,這就是一筆P2P 原子交換交易,Alice 和 Bob 交換了一些資產,他們之間彼此并不信任,也不需要信任一個第三方。

Liquid Swap Tool:3步原子交換

在 Liquid 上支持原子交換的第一個實現是Liquid Swap Tool,它使用了一個三步協議。

其中第一步是 Alice 提出一筆swap交易:

liquidswap-cli propose L-BTC 0.5 USDt 600 –output proposal.txt

第二步是Bob 接受這個提議:

liquidswap-cli accept proposal.txt –output accepted.txt

然而這筆交易還沒有準備好被廣播,我們需要第三步,其中Alice來最終確定這個提議:

liquidswap-cli finalize accepted.txt –send

這 3 個步驟是使swap交易與標準交易無法區分的必要步驟。但是,它也存在著一些缺點。

該協議分析起來會更復雜。由于不同的原因,它可能會在不同的步驟失敗,也許是提議格式不正確,交易不再有利可圖,那麼一方可能會中止協議。

Alice 還需要在線才能完成協議。 如果 Alice 花費太多時間來完成,Bob 可能會進行另一次swap交易并使他接受的提議無效。

這使得用戶體驗變得繁瑣,并且很難將這些swap交易集成到其他服務中。

而一個兩步協議將解決大多數的問題,事實上,兩步協議的用戶體驗非常類似于“發送交易”:Alice詢問她想要交換什麼,然后最終交換發生。

在過去的幾個月里,我們構建出了LiquiDEX這個想法。

LiquiDEX: 兩步原子交換

LiquiDEX 是一個在 Liquid 網絡上執行原子交換的兩步協議。

該協議涉及到了兩方:Maker 和 Taker,其中Maker 想要發送一些資產并接收一些其他資產作為交換,它創建 LiquiDEX 提議并發送給 Taker。Taker 接受該提議,并在 Liquid網絡上結算swap交易。

提案規范

版本:數字,可選的非負整數,默認為 0,

tx:字符串,十六進制編碼的簽名 Liquid 交易,

輸入:對象數組,交易輸入的非盲信息;item具有以下屬性:Asset:字符串,十六進制編碼的資產,聰:以聰為單位的整數數量,assetblinder:字符串,十六進制編碼的資產盲注,amountblinder: 字符串,十六進制編碼的數量盲注,

輸出:對象數組,交易輸出的非盲信息;item具有相同的輸入對象格式。

Asset、assetblinder 和 amountblinder 與 Elements Core 一致地進行十六進制序列化,這與它們的字節序列化相反。

LiquiDEX 提案格式定義了 Maker 和 Taker 必須達成一致的內容。其他一切都可以由雙方任意選擇以實現所需的行為。

讓我們分析一個他們可能選擇做什麼的例子。

第 1 步:Maker 制作提議(proposal)

Maker 有一個UTXO U_xA持有x數量的A資產,而他想要將其資產交換成y數量的B資產。

Maker創建了一筆交易,花費單個UTXO U_xA并接收y數量的B資產。

Maker屏蔽(blinds)這個輸出。在實踐中,這有一些重要的挑戰,權衡和實現細節將在下一節中討論。

Maker 使用SIGHASH_SINGLE | SIGHASH_ANYONECANPAY 對(唯一)輸入進行簽名,這允許 Taker 添加更多的輸入和輸出,而不會使 Maker 簽名無效。

其他Maker按照上述規定創建 LiquiDEX 提議,并將提議發送給 Taker。

第 2 步:Taker 接受提議(proposal)

Taker 收到提議,并進行一些驗證,其中可能包括:

輸入和輸出數組的長度為 1;

tx 是有效的 Liquid 交易;

tx 有 1 個輸入和 1 個輸出;

tx 輸入未花費;

tx 已簽名,并且簽名與SIGHASH_SINGLE | SIGHASH_ANYONECANPAY有效;

輸出承諾(commitment)匹配輸出的非盲信息;

先前的輸出承諾匹配輸入的非盲信息;

Taker 添加一個輸出,該輸出接收x數量的A資產。

Taker為交易提供資金,即他為資產B和費用添加輸入,根據需要更改輸出,以及顯式費用輸出。

Taker使用提議中的非盲信息來屏蔽交易。

Taker用SIGHASH_ALL對新添加的輸入進行簽名。

Taker廣播交易,一旦這筆交易被納入一個區塊,這筆swap交換交易就被結算了。

優點與缺點

LiquiDEX 有一些權衡,我們在這里總結一下。

優點:

更好的用戶體驗。

對swap交易參與者的要求較低,Maker 提出提議,然后可以離線,然后Taker接受提議,幾分鐘后完成結算;

協議更容易分析。

更容易集成到更復雜的系統中。

Maker 不會從 Taker 那里了解到破盲信息(unblinding information)。

缺點:

Maker 發送單個 UTXO,如果金額不是所需的,則需要進行額外的交易。

更少的匿名性,LiquiDEX交換是可識別的,因為SIGHASH_SINGLE | SIGHASH_ANYONECANPAY在交易中可見。

用例

現在,我們來展示一些 LiquiDEX 支持的應用例子。

1、提出相互排斥的提議

假設Maker想要把L-BTC賣掉換成USDT或L-CAD,他可以使用相同的 UTXO提出兩個提議,一個發送L-BTC 并接收 USDT,另一個發送L-BTC 并接收 L-CAD。由于 UTXO 只能使用一次,所以他要麼是收到USDT,要麼是收到L-CAD。

2、接受批量提議

Taker可以使用多個提議構建其交易,例如:

1 L-BTC maker1 -> 1000 USDt maker1

2 L-BTC maker2 2000 USDt maker2

3000 USDt taker 3 L-BTC taker

3、自動化OTC交易柜臺

我們還可以實現一項服務,它接受用戶的提議并負責匹配它們,這種服務既可以使用其他用戶的資金,也可以使用自己的流動性資金。

4、拍賣

Alice 發行了一種新資產,我們稱之為 NFT。Alice 可以為此舉行拍賣會,她公布了自己想要發送的輸出的資產、數量和盲注(blinder),并將接受交換L-BTC(或她想要接收的任何其他資產)的提議。過了一段時間后,她會接受對她來說更有利可圖的提議。

如果她想以一定的價格出售該NFT資產,那麼她可以提出提議并希望有人接受它。

5、去中心化交易所(DEX)

一組用戶可使用點對點的方式在彼此之間中繼提議,以維護一個去中心化的訂單簿,這將是一個去中心化的交易所(DEX)。

當我們確信這個想法實際上是可行的之后,我們就開始對越來越復雜的原型進行迭代。

原型1:Unblinded

第一次迭代的所有輸入和輸入都是非盲的。它需要一個 Elements Core 節點以及一個沒有額外依賴項的小型 Python 腳本來運行協議。

原型 2:Makers Blinds

然后我們增加了對taker使用盲輸入和輸出的支持。

這需要一個額外的依賴項wally‌來執行一些加密操作。

原型3:Blinded Case(遇到了問題)

剩下的步驟是允許maker 也使用盲輸入,我們這樣做了,但不幸的是,實際的實現失敗了。

使用保密交易(CT),非盲信息在輸出字段之一(范圍證明——rangeproof)中加密。當收到交易時,這個非盲信息被解密并用于支出。然而,交易簽名不涵蓋此類字段。因此,Taker 可以替換其價值,而 Maker 將無法blind這筆交易。

解決這個問題的一個方法,是在本地保存每個提議的非盲信息,而不依賴于rangeproof數據。不幸的是,這與elements-cli 是不兼容的。 因此,我們不得不尋找新的想法來完成我們的實施。

BEWallet

我們需要一個讓我們能以最少的開銷進行實驗的錢包。我們選擇從使用 Electrum 服務器的Blockstream GDK Rust‌ 實現開始。這個想法是去除所有不需要的功能,以獲得一個非常簡單但有效的 Liquid Electrum 錢包。經過了數個月的努力之后,我們搞出了BEWallet。

然后我們添加了 LiquiDEX 支持,在這樣做的同時,我們試圖最大限度地減少用戶應該備份的數據量。Electrum 錢包(單簽名)備份通常包含一個BIP39助記詞,但LiquiDEX還需要其他的東西。瑣碎的辦法是堅持所有提出的提議,但我們可以做得更好。

首先,我們可以確定性地推導出資產blinder以及金額blinder 。此外,交易有一個 Maker 不使用的字段,即 nonce commitment。此字段已簽名,因此可用于存儲一些有用的數據。我們想為資產存儲 32 個字節,為數量存儲 8 個字節,但我們只有 32 個字節(和 1 個位)可用。

我們選擇使用 AES GCM IV 加密 nonce 字段中的金額,因為我們已經將其作為加密本地數據庫的依賴項。

相反,資產將被迫違背資產承諾。當提出提議時,錢包將保留它可能在本地收到的資產。在揭盲時,它會嘗試所有先前保留的資產,直到找到匹配項為止。

如果我們在另一臺設備上恢復錢包呢?我們可以導出上一個錢包中的資產列表,如果丟失了,我們可能會記住它,因為我們可能只交易最受歡迎的資產,或者我們甚至可找到在 Liquid 上發行過的所有資產并嘗試所有這些資產。

不管怎樣,這可能會在未來進行一些改進,我們只是想要一些現在有效的東西。BEWallet 在早期仍然是一個附帶項目,它可能會存在漏洞,因此要測試的話,請使用少量的資金。

使用BEWallet-cli進行Swap交換

安裝BEWallet錢包:

git clone https://github.com/LeoComandini/BEWallet-cli.git

cd BEWallet-cli

cargo install .

Maker 列出其代幣以選擇要交換的代幣:

$ bewallet-cli –mainnet –electrum-url blockstream.info:995 –data-root $PWD –mnemonic “$MNEMONIC” get-coins | jq

[

{

“txo”: {

“outpoint”: “[elements]aa7c75c05f5944802eb4eda0c19fddbfcc230f032e5135bceeb56faf7af6e423:0”,

“script_pubkey”: “a9145118eba7d058857216c7d190186fbb7b296cc05887”,

“height”: 799437

},

“unblinded”: {

“asset”: “beebee1a548fbb20280e539b697de076d87859a25c2983ebc55f2d8bec40abc3”,

“asset_blinder”: “299999a36875bdb950a232de77f4d81fecf7fc073bb93e28940929e4b130edbc”,

“amount_blinder”: “c44f9bdb17a0754231305b36fcd046de567210689cc6de1eb11778a51b921d52”,

“amount”: 5

}

}

]

然后制作提議:

$ bewallet-cli –mainnet –electrum-url blockstream.info:995 –data-root $PWD –mnemonic “$MNEMONIC” liquidex-make –txid aa7c75c05f5944802eb4eda0c19fddbfcc230f032e5135bceeb56faf7af6e423 –vout 0 –asset 8026fa969633b7b6f504f99dde71335d633b43d18314c501055fcd88b9fcb8de –rate 1

{“version”:0,”tx”:”02000000010123e4f67aaf6fb5eebc35512e030f23ccbfdd9fc1a0edb42e8044595fc0757caa00000000171600149fec391992ea13a5e29fd55bd38050bfef83d5c4feffffff010aa630e1848d2c5853a6aaef9a36ab0e5f677ed3c9642825acc3f3e3cd2d5e2f63098af87f31f095ce416a8a32bac2a715f2d3920f511a93d9295fbf149010b1a38702d30da456e26ff055f8d69ea5cd144aaffc3e36314d1dea552b0c217d6ecb04f817a914b9eab96318ef4f7b60858a0586ff474a7024061b8700000000000002483045022100a91c9d744d19fe22231561b9ee89aa0674b6b876d63835fb807a441a041c0c5b02201e336469acad3ee94b0a73b609d1e73f5de93e6068a93e44a08720fb1bc6f6948321034a6c4485c1b5a26f61225f575a3ff0dda62bfb52c7008e9c592e68aa87d557f2000000″,”inputs”:[{“asset”:”beebee1a548fbb20280e539b697de076d87859a25c2983ebc55f2d8bec40abc3″,”asset_blinder”:”299999a36875bdb950a232de77f4d81fecf7fc073bb93e28940929e4b130edbc”,”amount_blinder”:”c44f9bdb17a0754231305b36fcd046de567210689cc6de1eb11778a51b921d52″,”amount”:5}],”outputs”:[{“asset”:”8026fa969633b7b6f504f99dde71335d633b43d18314c501055fcd88b9fcb8de”,”asset_blinder”:”ee390be3dd1e53d1f723e1007234fa3074691a7d5f1cfdbd75e0255284ee40b1″,”amount_blinder”:”70b0d48bc015e4930d4688ca67379e4a637a78c70f573fc009cf1cc1bfe32e3a”,”amount”:5}]}

并將該提議發送給接受它的Taker:

$ bewallet-cli --mainnet --electrum-url blockstream.info:995 --data-root $PWD --mnemonic "$MNEMONIC" liquidex-take --proposal '{"version":0,"tx":"02000000010123e4f67aaf6fb5eebc35512e030f23ccbfdd9fc1a0edb42e8044595fc0757caa00000000171600149fec391992ea13a5e29fd55bd38050bfef83d5c4feffffff010aa630e1848d2c5853a6aaef9a36ab0e5f677ed3c9642825acc3f3e3cd2d5e2f63098af87f31f095ce416a8a32bac2a715f2d3920f511a93d9295fbf149010b1a38702d30da456e26ff055f8d69ea5cd144aaffc3e36314d1dea552b0c217d6ecb04f817a914b9eab96318ef4f7b60858a0586ff474a7024061b8700000000000002483045022100a91c9d744d19fe22231561b9ee89aa0674b6b876d63835fb807a441a041c0c5b02201e336469acad3ee94b0a73b609d1e73f5de93e6068a93e44a08720fb1bc6f6948321034a6c4485c1b5a26f61225f575a3ff0dda62bfb52c7008e9c592e68aa87d557f2000000","inputs":[{"asset":"beebee1a548fbb20280e539b697de076d87859a25c2983ebc55f2d8bec40abc3","asset_blinder":"299999a36875bdb950a232de77f4d81fecf7fc073bb93e28940929e4b130edbc","amount_blinder":"c44f9bdb17a0754231305b36fcd046de567210689cc6de1eb11778a51b921d52","amount":5}],"outputs":[{"asset":"8026fa969633b7b6f504f99dde71335d633b43d18314c501055fcd88b9fcb8de","asset_blinder":"ee390be3dd1e53d1f723e1007234fa3074691a7d5f1cfdbd75e0255284ee40b1","amount_blinder":"70b0d48bc015e4930d4688ca67379e4a637a78c70f573fc009cf1cc1bfe32e3a","amount":5}]}' --broadcast

1980adeb659579e3d5fca673ab00e2f9a4fb933bfcabc0d52946ad3260552882

這導致了這筆交易‌,它可以被maker 部分揭盲,而被taker完全揭盲。

請注意,可以使用 taker-cli.py 和一個Elements 節點執行 Taker 步驟。

可能的改進

BEWallet LiquiDEX 實現現在已經可以工作了,但它遠非完美,我們削減了一些內容,在不久的將來,我們還會實施很多可能的優化和界面改進。其中有幾個改進是我們很想去實現的,但我們必須要多等待一點時間。

我們想擺脫自定義JSON 格式以使用部分簽名Elements交易,但是這還沒有準備好。

那麼我們寧愿降低 Maker 及其揭盲程序的復雜性,這可以使用 SIGHASH_RANGEPROOF‌ 來完成,這是一種新的sighash類型,其也涵蓋了范圍證明(rangeproof),但是,我們需要等待它的部署。

一旦我們同時擁有兩者,任何支持 PSET 的錢包都可以以最少的更改實現LiquiDEX。

結論

Liquid網絡是具有原生資產的區塊鏈,它允許兩方或多方合作構建交易。這種交易可能包括雙方之間的資產交換,換言之即一筆P2P原子交換。

這個swap交換協議的初始實現分為3個步驟。然而,它有幾個問題,主要是用戶體驗會變糟。

LiquiDEX 是一種執行兩步 P2P 原子交換的協議。這通過要求 Maker 和 Taker 之間的單次交互來改進用戶體驗,并做出合理的妥協。

LiquiDEX 更容易集成到其他系統中,并且可以成為實施 OTC 交易柜臺、拍賣系統、DEX等的構建塊。

而BEWallet則是一個支持LiquiDEX的可用Liquid Electrum 錢包。

發文者:鏈站長,轉載請註明出處:https://www.jmb-bio.com/4161.html

讚! (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Previous 2023 年 2 月 28 日 下午 4:42
Next 2023 年 2 月 28 日 下午 4:49

相關文章

  • PolyYeld Finance 被攻擊事件全解析:代幣 YELD 價格跳水歸零!

    北京時間7月28日,安全公司Rugdoc在推特表示,收益耕作協議PolyYeld Finance遭到攻擊,所有者已宣布合約已被利用并鑄造了大量YELD代幣。CoinGeckko行情顯示,YELD代幣價格直線跳水歸零,狂跌100%。 事件概覽 攻擊如何發生 Event overview PolyYeld Finance 是 Polygon 網絡上的下一代產量農…

    2023 年 2 月 28 日
  • 實現 NFT 中繼資料去中心化:在 OpenSea 上實現 NFT 中繼資料!

    NFT 是附有去中心化所有權的獨一無二的代幣。“誰擁有這個代幣” 這個問題由多臺計算機同時存儲并追蹤,防止有人在未經授權的情況下篡改歸屬。 然而,NFT 的相關媒介附件和內容(統稱 “NFT 元數據”)始終沒有實現去中心化,因為直接在智能合約內存儲和修改數據會產生高昂的 gas 成本。如果沒有去中心化,收藏者就無法相信某個代幣的元數據是完整且不變的。 自 2…

    2023 年 3 月 1 日
  • 未來 Web 應用程式構建展望:探索新的技術方向!

    在未來,我們會怎樣構建 Web 應用程序呢? 如果行業正常發展下去的話,那麼今天我們認為很難、做起來很有價值的事情在明天都會變得很輕松普遍。我想我們會發現很多新的抽象,讓 Google Docs 寫起來也能像今天的普通 Web 應用一樣簡單。 這就引出來一個問題——這些抽象會是什麼樣子?我們今天能發現它們嗎?想要找出答案,一種方法是審視我們在構建 Web 應…

    區塊鏈技術 2023 年 2 月 28 日
  • 閃電網路應用開發速成指南,掌握 Lightning Network!

    如果你想要入門閃電網絡編程,又不在乎所謂正確、最佳的做法,這篇文很適合你。換言之,這篇指南具有很強的 主觀性。如果你偏好 O’Reilly 式的權威文本,這篇文章可能不對你的胃口。但是,如果你想要了解閃電網絡的最小開發環境及其基本內容,不妨讀一讀。我寫本文的目的是提煉出創建閃電網絡應用的基礎知識點,讓新手能夠快速構建和實驗。 我相信,只…

    2023 年 2 月 28 日
  • Coinbase API 教程:Python 在 Coinbase 上的應用!

    加密領域是試驗不同技術的好方法。在本文中,我們將涵蓋以下內容: 如何從Coinbase Pro加載數據到Pandas數據框? 如何轉化和分析歷史加密貨幣市場數據? 如何添加簡單移動平均線(SMA),指數移動平均線(EMA), MACD, MACD信號? 如何使用Plotly和Python可視化加密貨幣市場數據? 本文只展示最相關的Python代碼。 在文章的…

    2023 年 2 月 28 日
每日鏈頭條給你最新幣圈相關資訊!