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