跨鏈原子交換概念介紹:
假設Alice持有BTC,想要換取Bob持有的LV。雙方達成了交易醫意愿,并確定了兌換比例和具體的交易金額。雙方如何進行交易呢?
-如果Alice先把比特幣轉賬給Bob,Alice會擔心萬一Bob收了比特幣就逃跑了、消失了。如果Bob先把LV轉賬給Alice,Bob同樣需要擔心Alice可能會逃跑、消失。
因此,數字貨幣之間的交易,往往需要一個可信第三方,例如交易所或者交易見證人。
那么是否有可能在沒有中介、交易雙方也不完全信任對方的情況下完成交易呢?
跨鏈原子交換,就提供了一種完全依賴鏈上交易、保證兩種數字貨幣之間能夠在無中介的情況下無風險交易的方式。所謂“原子交換”,是指交易要么整體完成,要么整體失敗,不會因一方完成而另一方失敗造成單方損失。
LV-BTC跨鏈原子交換全流程:(假設Alice持有BTC,想要換取Bob持有的LV)
STEP1:Alice發起交易
STEP2:Bob響應交易
STEP3:Alice取走LV
STEP4:Bob取走BTC
說明:當前版本的LV-BTC跨鏈原子交換機僅為全節點錢包內置(0.3.4版本開始支持),用戶需要有操作全節點錢包(命令行方式)的基礎。未來,Lava會進一步完善跨鏈原子交換機的使用體驗。
【STEP 1:Alice發起交易】
“我是Alice,我手里持有BTC,要交換Bob手里持有的LV。我們已經約定好了交易的數量和價格?,F在需要由我來發起跨鏈原子交換!”
1. 首先,自定義一個謎底,比如說 “abcd”,記住千萬不能告訴任何人!
接著,通過getimage獲取相應的謎面(imagehash)。
輸入:自定義的謎底,此處為abcd
返回:{ “preimage”: “abcd”,
“imagehash_SHA256”: “123d4c7ef2d1600a1b3a0f6addc60a10f05a3495c9409f2ecbf4cc095d000a6b”,
“imagehash_RIPEMD160”: “a21c2817130deaa1105afb3b858dbd219ee2da44”}
2. 然后可以開始構造BTC上的HTLC交易:先創建一個BTC凍結地址。
使用createhtlcaddress接口。輸入:
?Bob的BTC地址(私下問bob要):
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?我自己的BTC地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?上面的謎題(選取短的即可):
a21c2817130deaa1105afb3b858dbd219ee2da44
?這筆錢的凍結高度(BTC高度):
1609905 (注意,這里的高度含義是當BTC主網超過這個高度時,我有權直接收回凍結的BTC。)
返回:
{“address”: “2MwjSbwWbq6u3Yyvrz67meWUZ6WaaVqdFbT”,
“redeemScript”:
“63a614a21c2817130deaa1105afb3b858dbd219ee2da448876a914090e217eff3b75215b5d106ad861d40e0d46af776703b19018b17576a91402b6eb3eb965532c942f1c112c585716db12b0636888ac”}
3. 現在,對上面產生的凍結地址:
“2MwjSbwWbq6u3Yyvrz67meWUZ6WaaVqdFbT”
轉入約定數量的BTC。轉賬完成后,這些BTC就暫時凍結在這個地址中了。
凍結完成后,將以下三個信息私下通知給Bob,等待Bob響應即可。
我自己的BTC地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
上面的謎面(選取短的即可):
a21c2817130deaa1105afb3b858dbd219ee2da44
(千萬別把謎底“abcd”告訴Bob?。?/p>
這筆錢的凍結高度(BTC高度):
1609905
【STEP 2:Bob響應交易】
“我是Bob,我手里持有LV,要交換Alice手里持有的BTC。我們已經約定好了交易的數量和價格。Alice已經跨出了第一步,現在我該做什么呢?”
1. 首先,要對Alice發起的交易進行驗證。
假設現在我(Bob)收到了Alice通過微信發給你的三個信息:
?Alice的BTC地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?一個很難解的謎面:
a21c2817130deaa1105afb3b858dbd219ee2da44
?Alice設定的BTC凍結高度:1609905
接下來,我需要驗證Alice給我的信息的真實性和有效性:
首先驗證凍結高度1609905是否已經到達?
→如果主網已經到達了1609905,那么不能再操作,告訴Alice不交易了,讓她取回自己的BTC。
→如果高度未到達,我就可以繼續操作。通過上述信息調用createhtlcaddress接口,復現Alice的操作,依次輸入:
?我(Bob)自己的BTC地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?Alice的BTC地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?上面的謎題:
a21c2817130deaa1105afb3b858dbd219ee2da44
?Alice手中BTC的凍結高度(BTC高度):1609905
返回:
{“address”: “2MwjSbwWbq6u3Yyvrz67meWUZ6WaaVqdFbT”,
“redeemScript”: “63a614a21c2817130deaa1105afb3b858dbd219ee2da448876a914090e217eff3b75215b5d106ad861d40e0d46af776703b19018b17576a91402b6eb3eb965532c942f1c112c585716db12b0636888ac”}
其次驗證Alice是否已經往該凍結地址中轉入BTC?
去瀏覽器上查詢:
“2MwjSbwWbq6u3Yyvrz67meWUZ6WaaVqdFbT”地址的交易記錄,看看Alice有沒有給它轉賬約定數量的BTC。這個數量也就是之后我(Bob)會獲得的BTC數量。
以上驗證步驟,有任何一個地方出現問題,請立即終止交易!
2.驗證通過,Alice沒騙我。下面我需要構造一筆凍結LV的交易,以響應Alice的交易請求。
與Alice流程一樣,我開始構造Lava上的HTLC交易,創建一個Lava的凍結地址。
使用createhtlcaddress接口。依次輸入:
?Alice的Lava地址(私下問Alice要):
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?自己的Lava地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?上面的謎面:
a21c2817130deaa1105afb3b858dbd219ee2da44
?這筆錢的凍結高度(Lava高度):7600 →注意:請確保該Lava高度到來的比Alice設定的BTC高度更早!這一點非常重要!
返回:
{“address”: “2NBzEWiW4T9de94VRRq2RZno1712uSxopG9”,
“redeemScript”: “63a614a21c2817130deaa1105afb3b858dbd219ee2da448876a91402b6eb3eb965532c942f1c112c585716db12b0636702b01db17576a914090e217eff3b75215b5d106ad861d40e0d46af776888ac”}
3. 向凍結地址:
“2NBzEWiW4T9de94VRRq2RZno1712uSxopG9”轉入約定數量的LV。
完成轉賬后,將以下信息私下通知給Alice,等待Alice進一步響應即可:
這筆錢的凍結高度(LAVA高度):7600
【STEP 3:Alice取走LV】
“我是Alice,我手里持有BTC,要交換Bob手里持有的LV?,F在,Bob已經完成對LV的凍結,我需要取走這些LV以完成交易。”
1. 首先是檢驗Bob設定的高度和金額信息是否正確:
獲得Bob發來的Lava高度信息 7600 后,開始用相同的方式推演出Bob的凍結地址。
當然,請確保這個Lava高度 7600 還沒達到, 否則請終止交易(放心,不會有任何損失)。
仍然調用createhtlcaddress:
輸入:
?自己的Lava地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?Bob的Lava地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?自己創的謎題:
a21c2817130deaa1105afb3b858dbd219ee2da44
?這筆錢的凍結高度(Lava高度):7600
返回:
{“address”: “2NBzEWiW4T9de94VRRq2RZno1712uSxopG9”,
“redeemScript”:
“63a614a21c2817130deaa1105afb3b858dbd219ee2da448876a91402b6eb3eb965532c942f1c112c585716db12b0636702b01db17576a914090e217eff3b75215b5d106ad861d40e0d46af776888ac”}
然后,去Lava的主網查看:
“2NBzEWiW4T9de94VRRq2RZno1712uSxopG9”地址上是否有約定好的LV金額。沒有的話就取消交易吧。
2. 以上都確認無誤后,我將要進行最后的步驟:提款走人。
根據Lava瀏覽器查詢結果,我已經知道Bob凍結LV的交易id是:
b05fa0adec37559f98b7b94c775e78f6e93434c0029c3795eae584a69580957b
接著,調用整個交換過程中最復雜的接口spendhtlcwithwallet來將這些LV轉走。
輸入:
?剛才獲取的bob凍結LV交易的txid:
b05fa0adec37559f98b7b94c775e78f6e93434c0029c3795eae584a69580957b
?上面交易中的對應output序號,可以瀏覽器自己查詢看到,也可以用命令行看到,這次是0。我們用命令行來驗證下。確實是0.
?Alice想取走的金額:當然是取走所有約定的金額
?Alice的LV接收地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD (重要,就是接受這筆LV的地址。這是一個我的私人地址。)
?Alice之前設置的謎底:abcd (終于用上了!)
以及Bob構造這筆100lv凍結交易時的信息:
?Alice使用的謎題:
a21c2817130deaa1105afb3b858dbd219ee2da44
?Alice的Lava地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?Bob的Lava地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?這筆錢的凍結高度(Lava高度):7600
?標志位,表示該花費交易是否為贖回交易:
這里填0,表示是正常流程的互換交易;
如果填1,表示是違約后,或者超時后的取回交易。
返回:
02000000017b958095a684e5ea95379c02c03434e9f6785e774cb9b7989f5537ecada05fb000000000bf473044022068d9e6c815d99fedd31b6cd4f205124a8e1da3b2b65042c389ddca873ff708cb02203864c31bf8b8597de9e2f101b006dd0f55877e9854af568df10525297cdabef6012102da788aa6e547746556a27bee415ff3187df45033e3ef7e79fe8d506047bd6fb802abcd514c4f63a614a21c2817130deaa1105afb3b858dbd219ee2da448876a91402b6eb3eb965532c942f1c112c585716db12b0636702b01db17576a914090e217eff3b75215b5d106ad861d40e0d46af776888ac00000000017ccc0b54020000001976a91402b6eb3eb965532c942f1c112c585716db12b06388ac00000000
把以上結果在用sendrawtransaction接口發送到Lava主網。
獲得txid為:
2abc47531de88a6952614702f3c842f24e4d524fc73e16b07934e530f46e9135
【STEP 4:Bob取走BTC】
“我是Bob,我手里持有LV,要交換Alice手里持有的BTC?,F在Alice已經取走了我凍結的LV,現在我要取走Alice凍結的BTC來正式完成這筆交易。”
1. 觀察Lava瀏覽器,我發現之前凍結LV的地址 2NBzEWiW4T9de94VRRq2RZno1712uSxopG9 中出現一筆轉賬交易:
2abc47531de88a6952614702f3c842f24e4d524fc73e16b07934e530f46e9135
這也就是剛才Alice轉走LV的交易。
既然Alice已經利用謎底轉走LV了,那么這個謎底就暴露在區塊鏈上了!調用checkpreimage接口即可獲取Alice公布的謎底:
輸入參數為:
目標txid:
2abc47531de88a6952614702f3c842f24e4d524fc73e16b07934e530f46e9135
返回:
{“Preimage”: “abcd”}
由此,我知道了Alice設置的謎底就是 abcd。
2. 接下來,我也使用spendhtlcwithwallet接口來轉走Alice凍結的BTC:
輸入參數:
?剛才獲取的Alice凍結BTC的txid:
4b879e138ea104569d718f12bb47d7207c908f7f2ee5750ddf127bc8bebf0060
?上面交易中的對應輸出序號,可以瀏覽器自己查詢看到,是0。
?我想轉走的金額:當然是取走所有約定的金額
?我的BTC接收地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442
?Alice之前設置的謎底:abcd (剛才獲得的)
以及Alice構造這筆0.00031BTC凍結交易時的信息:
?Alice使用的謎題:
a21c2817130deaa1105afb3b858dbd219ee2da44
?我的BTC地址:
mgLqJcG6kykw636f4B8BtKjx5HUmnH1442,
?Alice的BTC地址:
mfmJmsGPgoJGPY4yzZsDj4Z5CfpWUQQHHD,
?這筆錢的凍結高度(BTC高度):1609905
?標志位,表示該花費交易是否為贖回交易:
這里填0,表示是正常流程的互換交易,
如果填1,表示是違約后,或者超時后的取回交易。
將上面獲取的結果通過Lava內置的命令sendrawBTCtx發送到BTC主網,即可取回屬于我的BTC,大功告成!
這里需要注意:
1.軟件默認使用的比特幣區塊鏈瀏覽器(https://www.blockcypher.com/)可能有翻墻的問題,可能使sendrawBTCtx發送不成功。我們也可以直接去該網站或者其他比特幣主網瀏覽器上直接發送交易。
2.考慮到BTC網絡交易費用很高,所以做這筆BTC主網交易之前一定要設置好合理的settxfee!具體的btc交易費一般都可以在btc瀏覽器上找到。在第四步Bob使用spendhtlcwithwallet之前,先調用lava全節點的settxfee=btc主網費率即可。
Lava通過PoC共識機制讓人人挖礦成為現實,?大降低了挖礦的門檻和成本。使得挖礦成為每?個人都可以操作的小事情。更通過「跨鏈原?子交換機」使得?戶挖出來的幣有了更加方便、安全的流通?式,使得Lava?態變得更為健康和完善,保證了挖礦?戶的收益,也保持了鏈上的活性。
責任編輯;zl
評論
查看更多