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