區(qū)塊鏈中的原子互換是什么
原子互換是區(qū)塊鏈上的一種不用到第三方的去中心化的加密貨幣交換算法。它可以讓遠(yuǎn)在異地的兩個(gè)賬戶(hù)交換不同的貨幣,而不用擔(dān)心對(duì)方捐款逃跑或者賴(lài)賬。雖然不是完美解決方案, 但是底線(xiàn)是起碼不會(huì)讓交易的任何一方損失錢(qián)。各原種資料看了遍,終于自己能說(shuō)通了。 下面就說(shuō)說(shuō)我對(duì)這個(gè)算法的理解。 總分總的思路 :)
?
交易雙方為 A 和 B. 除了利用普通交易中的簽名認(rèn)證,還有加了一些維度的限制。
(1) Hashlock. 一個(gè)用 x 作為 原像的哈希函數(shù) hash(x) 。 只有揭露 x 的時(shí)候, 這個(gè)交易才能被鏈確認(rèn)。 這里的揭露我們可以認(rèn)為是鏈上的任何人都可以知道x 的值了。也就是在鏈上廣播了。
(2) Timelock. 對(duì)于交易最終能夠確認(rèn)(能夠上鏈得到公認(rèn)), 設(shè)置了一個(gè)可以看成自動(dòng)回滾的定時(shí)器。只有到 TImelock 以后才能 觸發(fā), 去確認(rèn)(上鏈)。
HashLock 和 TImeLock 也是構(gòu)成Hash TIme Locked Contracts 的部分,在閃電網(wǎng)絡(luò)中也用得到。
原子互換聰明在雙方都各自發(fā)出兩個(gè)交易(transacTIon- TX)。 一個(gè)是應(yīng)有的轉(zhuǎn)錢(qián)交易,一個(gè)是自己的撤資交易, 用來(lái)’保底’。 一共四個(gè)交易。而不是我們普通想的兩個(gè)交易。
這時(shí)候讀者可以想想怎么利用這四個(gè)交易, HashLock, TimeLock 來(lái)完成這個(gè)原子互換?
下面是過(guò)程 A 用 1 個(gè) BTC 換 B 的 3 個(gè) ETH :)
1 。 A 隨機(jī)出一個(gè)數(shù)字 x, 并且 hash(x)。 這個(gè)其實(shí)有點(diǎn)作為數(shù)字信物一樣的東西,回頭就會(huì)知道, 而且是由首先創(chuàng)造交易的人做哈希并且保存x 先。
2. A 創(chuàng)建 交易 TX1 :把 1 個(gè) BTC 送到 B 的 public key 賬戶(hù)(地址)中。 但是這個(gè)交易實(shí)現(xiàn)是要有條件的, A 又不傻。下面兩個(gè)條件之一符合就可以:
要么: B揭露 x 并且有 B 的簽名
要么: 有 A 和 B 兩方的簽名
3. A 創(chuàng)建交易 TX2?—?保底交易: 把 1 BTC 從 TX1 發(fā)回到 A 自己 public key 賬戶(hù)(地址)
并且 lock 48 hours. 回頭會(huì)說(shuō)為什么 48 hours. 這個(gè)交易A 自己先Sign掉。
4. A 發(fā) TX2(保底交易) 給 B
5. B 簽了 TX2 然后還給 A. 這時(shí)候注意 TX2 已經(jīng)有了雙方的簽名,但是48小時(shí)的Locktime 在那里,撤資時(shí)機(jī)未到。
6. 時(shí)間點(diǎn)1?—?A 提交 TX1 到網(wǎng)絡(luò)上。但這時(shí)還沒(méi)有發(fā)到 B 的 public key. 因?yàn)锽還沒(méi)有揭露x.
B 這邊也是大約類(lèi)似的動(dòng)作
7. B 創(chuàng)建 交易 TX3 :把 3 個(gè) ETH 送到 A 的 public key 賬戶(hù)(地址)中。 但是這個(gè)交易實(shí)現(xiàn)是要有條件的, B 也不傻。下面兩個(gè)條件之一符合就可以:
要么: A 揭露 x 并且有 A 的簽名
要么: 有 A 和 B 兩方的簽名
8. B 創(chuàng)建交易 TX4?—?保底交易: 把 3 ETH 從 TX3 發(fā)回到 B 自己 public key 賬戶(hù)(地址)
并且 lock 24 hours. 這個(gè)交易 B 自己先Sign掉。
9. B 發(fā) TX4(保底交易) 給 A
10. A 簽了 TX4 然后還給 B. 這時(shí)候注意 TX4也已經(jīng)有了雙方的簽名,但是24小時(shí)的Locktime 在那里,撤資時(shí)機(jī)未到。
11. 時(shí)間點(diǎn)2- B 提交 TX3 到網(wǎng)絡(luò)上
這里我第一次看的時(shí)候總覺(jué)得很危險(xiǎn),因?yàn)锳 知道 x, 并且可以隨時(shí)簽名,TX 提交的時(shí)候 A 不就直接卷錢(qián)跑了嗎? 但是原子互換的聰明之處也在這里,當(dāng)A想 “卷款”, 也就是使用了 TX3, 獲得 3 ETH, 但是這個(gè)操作有side effect: 也會(huì)使得 x 上鏈并且被廣播。所以 B 也就知道了原像 x, 也能使用TX4.
12. 時(shí)間點(diǎn)3- A 使用了 TX3,獲得了3 ETH。 因?yàn)锳 有原像, 并且自己of course 可以私鑰簽名。 但是如上面所說(shuō) 原像x 會(huì)被廣播公開(kāi)。
13. 時(shí)間點(diǎn)4- B 從鏈上拿到 原像 x, 并且of course 自己私鑰簽名,就能使用 TX4 咯。
總結(jié)下:
這樣其實(shí) 我們可以看到 交易的兩個(gè)條件: 拿到原像和對(duì)方簽名是對(duì)應(yīng)交易成功時(shí)的條件。 雙方的簽名條件是用來(lái)執(zhí)行保底交易,達(dá)成撤資條件的。 而且在 雙方開(kāi)始把真正交易提交網(wǎng)絡(luò)之前, 先要把雙發(fā)的保底交易給sign 咯。 比如上面的步驟 4,5,8,9。 這樣也對(duì),和實(shí)際生活中一樣,先把丑話(huà)說(shuō)前頭, 而且有個(gè)時(shí)間鎖,誰(shuí)也不能賴(lài)。
還有就是上鎖時(shí)間,誰(shuí)先發(fā)送保底交易,誰(shuí)的鎖的時(shí)間就要比對(duì)方長(zhǎng)。這樣才能給對(duì)方足夠的時(shí)間來(lái)確認(rèn)。 因?yàn)閷?duì)方操作類(lèi)似對(duì)稱(chēng),所以時(shí)間在兩倍。
當(dāng)然,原子互換并不完美, 有一些局限性,比如要相同的哈希算法, 上鎖時(shí)間可能過(guò)長(zhǎng),匯率影響等等。 讀者有興趣就自己搜搜吧。