基于安全可靠的跨區(qū)塊鏈交易機(jī)制Atomic swap介紹
掃描二維碼
隨時(shí)隨地手機(jī)看文章
Atomic swap:不經(jīng)由第三方完成的安全可靠的跨區(qū)塊鏈交易
因?yàn)榧用茇泿沤灰姿粫r(shí)傳出被駭客攻擊、被凍結(jié)、甚至卷款倒閉的事情,人們開始意識(shí)到把錢放在交易所的大金庫(kù)其實(shí)是不太安全的,也有一些去中心化交易所的方案被提出來,試著在保障使用者資產(chǎn)安全的前提下交易。
然而,這些基于以太坊智慧合約實(shí)現(xiàn)的去中心化交易所,都有一個(gè)最大的局限,就是它們只能交易Ether本身和存在以太坊主鏈上的token,比起傳統(tǒng)交易所能處理Bitcoin, Ethereum, Monero, Zcash之間的各種幣/幣交易,去中心化交易所的功能顯得陽(yáng)春許多。
因?yàn)閰^(qū)塊鏈創(chuàng)造的安全交易機(jī)制,作用范圍終究只限于同一條鏈上,目前要做跨鏈交易就只能把錢交由第三方保管,完成互換后再發(fā)還給擁有者。所以我們想試著找到一個(gè)方法,能夠達(dá)成
只要雙方互相約定,就能安全的達(dá)成跨鏈的資產(chǎn)交易
這乍看之下好像很簡(jiǎn)單,就是一手交錢一手交貨嘛。但實(shí)際上,我們?cè)谌粘I钪兄阅軐?shí)現(xiàn)所謂的付錢取貨,其實(shí)仰賴了很多東西,比方說信任,比方說法律,比方說監(jiān)視器和防盜門。而場(chǎng)景一旦換到網(wǎng)路世界,事情就變得沒那么單純。
比方說小時(shí)候玩的線上游戲吧,有些人會(huì)用點(diǎn)數(shù)卡序號(hào)去跟其他玩家換游戲幣,但永遠(yuǎn)都存在一個(gè)無(wú)解的問題:先給點(diǎn)數(shù)還是先給幣?我怎么知道如果先給了對(duì)方會(huì)不會(huì)直接跑掉?
加密貨幣交易也有同樣的問題,當(dāng)你的交易對(duì)手是某個(gè)網(wǎng)路上不具名的人,你們要如何相信彼此能完成一筆交易而不被對(duì)方騙?或者說,怎么保證只要對(duì)方只要拿了我的錢就一定會(huì)給我貨?
交易的原子性
所謂的原子性(Atomic) 指的是一筆交易應(yīng)該像原子一樣,被視為最小的,不可再分割(雖然原子好像可以) 的單位。也就是說,我給你錢你給我貨這兩件事情呢,必須要同時(shí)發(fā)生,否則就同時(shí)不發(fā)生。
為了創(chuàng)造這樣的特性,我們會(huì)用上一些區(qū)塊鏈的神奇黑魔法,以Bitcoin來說是雜湊函數(shù)和時(shí)間鎖;至于Ethereum的話就是智慧合約。
交易的過程大致上是這樣子的,假設(shè)我和一位匿名網(wǎng)友達(dá)成共識(shí),要用我持有的10 BTC交換他的100 ETH。首先我們需要知道彼此的收付款地址,為了后續(xù)說明方便,這里假設(shè)它們分別是:
BTC_in
BTC_out
ETH_in
ETH_out
再來,為了完成這筆交易,我需要為這筆交易創(chuàng)造一個(gè)秘密,具體來說會(huì)是一段只有我自己知道的字串,并算出這個(gè)秘密的雜湊值。
這里我選用的秘密是:早安我的朋友
接著,我發(fā)送一筆交易,將我的10 BTC從BTC_out轉(zhuǎn)出到一個(gè)特殊的暫存位置( P2SH ),并且規(guī)定這筆錢有兩種方式可以轉(zhuǎn)走:一種是如果出示那個(gè)可以被Hash變成46f34 …8f4的秘密,就把錢交給BTC_in;另一種是如果錢放了兩個(gè)小時(shí)還沒被領(lǐng)走,那BTC_out就可以把錢領(lǐng)回去。
對(duì)方也要做類似的事情,把100 ETH 從ETH_out 轉(zhuǎn)到暫存的智慧合約,規(guī)定只要ETH_in 向合約出示能變成46f34…8f4 的正確秘密就可以把錢領(lǐng)走,否則一小時(shí)后ETH_out 可以把錢拿回去。
等這些設(shè)定都完成了之后,我就可以對(duì)合約說「早安我的朋友」,然后把對(duì)方的100 ETH 領(lǐng)走,同時(shí)因?yàn)閰^(qū)塊鏈資料是公開的,對(duì)方看得到我用來領(lǐng)錢的秘密,當(dāng)然也就來把我的10 BTC 拿走,交易就算順利完成啦。
這里有兩個(gè)值得注意的小細(xì)節(jié),第一個(gè)是領(lǐng)錢的規(guī)則,并不是任何知道秘密的人都可以領(lǐng),要是指定的交易對(duì)手說出秘密才可以。這是因?yàn)閰^(qū)塊鏈上的資訊人人可見,所以當(dāng)我在廣播交易的同時(shí),所有人都會(huì)看到早安我的朋友,甚至有可能搶先在我的交易被確認(rèn)之前,用同個(gè)秘密去把錢偷走,所以不能只認(rèn)秘密,要同時(shí)限制收款人才行。
第二個(gè)是兩人的提款時(shí)限是不一樣的,因?yàn)榧幢汶p方都用同一組雜湊,一開始卻只有我單方面知道秘密,所以當(dāng)前面的設(shè)置完成之后,什么時(shí)候執(zhí)行交易的主動(dòng)權(quán)握在我手上。若是兩邊的時(shí)限一樣,我就可以在到期前不久打出領(lǐng)ETH 的指令,并趁對(duì)方來得及反應(yīng)之前把本來的BTC 抽走。所以通常對(duì)方會(huì)把時(shí)限訂得比擁有秘密的人設(shè)定的時(shí)限再早一點(diǎn),確保就算被壓死線也還有足夠的時(shí)間拿到應(yīng)得的錢。
所以說,整個(gè)換手的過程,就是我選了一支密碼學(xué)鑰匙,并構(gòu)造了一個(gè)可以被這支鑰匙解開的鎖。基于神奇的數(shù)學(xué)魔法,鎖是沒辦法回推鑰匙的形狀的。所以我安心的把自己的錢鎖起來,并給對(duì)方一個(gè)一模一樣的鎖,對(duì)方也安心的把他的錢用這個(gè)鎖給鎖起來,因?yàn)樗?,只要我亮出鑰匙來取他的錢,他絕對(duì)可以用同一把鑰匙拿走我的錢。
不同區(qū)塊鏈上的兩筆交易,用同一個(gè)雜湊鎖,產(chǎn)生了關(guān)聯(lián)
于是跨鏈交易的原子性就得到了保證,只有可能兩邊都給對(duì)方錢,否則就是兩邊都取回本來的錢,(理論上) 絕對(duì)不會(huì)有某一方拿了就跑的情況。而且更重要的是,這整個(gè)過程完全沒有第三方介入,雖然也需要把錢暫時(shí)鎖定,但這和放進(jìn)交易所的大金庫(kù)有著根本的不同。藉由區(qū)塊鏈本身的鎖定機(jī)制,錢的控制權(quán)還是在擁有者手上,不會(huì)沒事就被盜。
拒絕付款攻擊
原子互換保證了兩個(gè)相依的交易會(huì)同時(shí)發(fā)生或同時(shí)不發(fā)生,卻不保證交易會(huì)發(fā)生,所以它仍然存在著一些待解的問題。這和第三方托管的場(chǎng)外交易有點(diǎn)類似,因?yàn)榻灰讖脑O(shè)置到完成并不是及時(shí)的,所以我們一定要為彼此保留一個(gè)緩沖的時(shí)間,讓付款流程可以被完成,但這個(gè)時(shí)間差有被利用的可能。
因?yàn)樵O(shè)置好的交易不見得會(huì)被執(zhí)行,對(duì)于有心人來說,這就成了絕佳的套利機(jī)會(huì)。我可以找人假意提出交易,待對(duì)手鎖定資產(chǎn)之后,自己不急著按下同意付款的按鈕,而是好整以暇的盯盤,一旦發(fā)現(xiàn)市場(chǎng)上的匯率出現(xiàn)波動(dòng),就立刻完成交易,并同時(shí)在另一邊以市價(jià)對(duì)沖,套取中間的價(jià)差。而如果時(shí)間到還沒有出現(xiàn)套利的機(jī)會(huì),就拒絕付款,再找人發(fā)起交易,重復(fù)攻擊。
以BTC:ETH = 1:10,鎖定時(shí)間2小時(shí)/1小時(shí)為例,攻擊者有1 小時(shí)的機(jī)會(huì)可以故意拖延。如果是雙方都鎖定,在這段時(shí)間內(nèi)匯率變成1:9,本來的BTC 方可以零風(fēng)險(xiǎn)套走10% 利潤(rùn)。
我們假設(shè)有交易的意思表示就代表對(duì)當(dāng)前的匯率滿意,也就是被攻擊的人心胸寬大不計(jì)較中間的匯差,這仍然會(huì)造成些許損失。首先是機(jī)會(huì)成本,盡管當(dāng)事人給了一段緩沖期,但他本來不預(yù)期會(huì)被鎖定到最后一刻,這段時(shí)間如果有更好的交易機(jī)會(huì)出現(xiàn),這筆錢也沒辦法參與,潛在的獲利即是損失。
再來是區(qū)塊鏈的使用成本,雖然交易前的設(shè)置階段還沒有真的轉(zhuǎn)帳,但是對(duì)于處理它的礦工而言,這仍然是一筆交易,也要收取一定數(shù)量的手續(xù)費(fèi),所以如果對(duì)方根本沒有誠(chéng)意跟你做交易,其實(shí)這手續(xù)費(fèi)就是白花了。
面對(duì)這些潛在的道德危機(jī),完全去中心化的原子互換技術(shù)上還無(wú)法克服,在人人自危的情況下,愿意和陌生人使用這種交易方式的人勢(shì)必很少。固然有些變通方法,比方說縮短鎖定期,但伴隨而來的卻是不方便和失竊風(fēng)險(xiǎn)。至于其他的解決方案,比方說建立外源的評(píng)價(jià)系統(tǒng),或者用支付通道之類的第二層架構(gòu),則又會(huì)帶來程度不一的中心化。這可能也算是某種易用性與安全性與去中心化的三難吧。