比特幣Lightning網(wǎng)絡(luò)技術(shù)本身提出來比較早虐唠,但是最近才興起起來确徙,因?yàn)楸忍貛啪W(wǎng)絡(luò)實(shí)在是太不堪重負(fù)了氢烘,大量的交易等待被打包叛复,高昂的交易費(fèi)用使得比特幣擴(kuò)容方案的選擇越來越緊迫仔引。Lightning網(wǎng)絡(luò)就是擴(kuò)容方案的一種,采用鏈下交易的形式褐奥,只是開始和結(jié)束需要在鏈上廣播交易咖耘,其他的交易完全在鏈下實(shí)現(xiàn),避免了主鏈上交易確認(rèn)的擁堵撬码,可以實(shí)現(xiàn)快速確認(rèn)儿倒,這也就是閃電網(wǎng)絡(luò)名稱的由來,非常適合于大量小額交易的場(chǎng)景呜笑。
現(xiàn)在來聊聊Lightning網(wǎng)絡(luò)的技術(shù)實(shí)現(xiàn)夫否,先請(qǐng)出我們的主人公Alice和Bob,大家都喜歡用這兩個(gè)人名叫胁,我也不免俗了凰慈。
第一步
Alice和Bob在需要交易之前先要各自拿出一筆錢來放進(jìn)一個(gè)共同的多重簽名賬戶,這個(gè)賬戶一般的說法叫channel(通道)驼鹅,通道里是交易保證金微谓,保證雙方都有錢進(jìn)行交易,不會(huì)開空頭支票输钩,另外還約束了交易金額的范圍豺型。這個(gè)多重簽名是2/2多重簽名賬戶,也就是必須Alice和Bob兩個(gè)人同時(shí)簽名才可以動(dòng)用這筆賬戶的錢买乃。后面所用到的賬戶很多都是這樣的2/2多重簽名賬戶姻氨,我在這里叫聯(lián)名賬戶。
這里假設(shè)Alice和Bob各出0.5個(gè)BTC放進(jìn)這個(gè)聯(lián)名賬戶剪验,當(dāng)然不一定是各0.5肴焊,金額可以雙方協(xié)商而定。
這個(gè)過程是需要在比特幣主鏈上做的碉咆,相當(dāng)于雙方先放了一部分押金在那里。
第二步
Alice和Bob各拿出一張白紙來擬定鏈下交易的合約蛀恩,內(nèi)容是什么呢疫铜?先來看Alice寫的:
這張紙上寫了兩筆交易
- 第一筆是從Alice & Bob聯(lián)名賬戶轉(zhuǎn)到 1. Alice2 & Bob聯(lián)名賬戶和2. Bob賬戶。注意這里出現(xiàn)了個(gè)Alice2双谆,其實(shí)這也是Alice本人壳咕,只是她新創(chuàng)建了個(gè)賬號(hào)席揽,以后每個(gè)合約都會(huì)創(chuàng)建一個(gè)新的賬號(hào)。Alice2 & Bob聯(lián)名賬戶是個(gè)臨時(shí)賬戶谓厘,這個(gè)賬戶的錢最終是要轉(zhuǎn)給Alice本人的幌羞,這個(gè)可以從第二筆交易中看到。
-
第二筆交易是從Alice2 & Bob聯(lián)名賬戶轉(zhuǎn)到Alice賬戶竟稳,但是下面有個(gè)sequence 1000是什么属桦?這個(gè)是表示延遲1000個(gè)塊才打包這筆交易,也就是Alice這筆0.5BTC的到賬相對(duì)于第一步交易中Bob的到賬要晚得多他爸。為什么會(huì)有這么奇怪的交易呢聂宾?因?yàn)長(zhǎng)ightning網(wǎng)絡(luò)為了鼓勵(lì)大家多用這種方式交易,約定誰先終止通道诊笤,也就是集齊兩個(gè)簽名系谐,誰的錢就要后到賬,另外還有一個(gè)原因是防止一方作弊讨跟,這個(gè)后面會(huì)談到纪他。
從這個(gè)合約上來看都是對(duì)方占好處,我方吃虧晾匠,為什么要這樣呢茶袒?因?yàn)榈认乱媒o對(duì)方簽名的,沒有好處對(duì)方怎么肯簽名混聊?不過也問題不大弹谁,因?yàn)閷?duì)方也要擬定一個(gè)相反的合約給我來簽名。
Alice擬定好這個(gè)合約以后將這份合約交給Bob簽名句喜,Bob簽好名以后再還給Alice预愤,現(xiàn)在這份合約變成了:
Alice簽名仍然空著,因?yàn)樗坏┖灻鸵馕吨鴥蓚€(gè)簽名被集齊咳胃,通道被關(guān)閉植康,交易會(huì)在主鏈上廣播,這個(gè)應(yīng)該是最后一步做的展懈,也就是全部交易都做完的情況下销睁,一方簽名來關(guān)閉通道。
而Bob也會(huì)擬定一份合約存崖,不過和Alice正好相反冻记,并給Alice簽名,簽好名的合約為:
第三步
以上是初始狀態(tài)来惧,下面開始正式交易冗栗,交易前還需要做一件事,那就是Alice把Alice2密鑰交給Bob,Bob將Bob2的密鑰交給Alice隅居,以后每次交易前都需要這么做钠至!
這個(gè)是防止一方作弊的!很重要胎源!
假設(shè)Bob賣給Alice一部iphone棉钧,Alice付給Bob0.1BTC,那么兩人又各拿出一張白紙來擬定新的合約涕蚤,Alice擬好合約以后交給Bob簽名宪卿,新合約如下:
看起來和合約1差不多,只是金額有變化赞季。Bob也會(huì)擬定一份合約2愧捕,并給Alice簽名。
既然合約2出現(xiàn)了申钩,那么合約1就要給廢止了次绘,因?yàn)楹霞s2比合約1新,而且相互沖突撒遣。試想一下Alice拿著新iphone邮偎,又拿著合約1去主鏈上廣播,那么她賬戶的錢沒變义黎,還白得一部iphone禾进,Bob豈不是虧死?
那么怎么廢止合約1呢廉涕?不要告訴我當(dāng)場(chǎng)撕掉合約1那張紙泻云,現(xiàn)在是高科技時(shí)代,復(fù)制備份一份又有何難狐蜕。
從技術(shù)角度要怎么解決這個(gè)問題宠纯?那就需要用到上面交換的密鑰了。
如果Alice拿到iphone后拿著合約1來簽名层释,那么合約1變成這樣:
Alice簽名了第一筆交易后婆瓜,順便也把第二筆交易用Alice2密鑰簽名了,因?yàn)榈诙P交易不簽名的話她拿不到錢贡羔,但是第二筆交易有個(gè)sequence廉白,所以Alice只好等。但是因?yàn)榈谝还P交易很快確認(rèn)乖寒,Bob賬戶里得到了0.5BTC猴蹂,Bob一看不對(duì)啊,我應(yīng)該得0.6BTC啊楣嘁,所以Alice一定是作弊了磅轻!Bob有什么辦法追回?fù)p失覆获?別忘了Bob手里還握有Alice2的密鑰呢,該是它發(fā)揮作用的時(shí)候了瓢省!仔細(xì)看合約1第一筆交易的第一個(gè)輸出賬戶,那是Alice2 & Bob聯(lián)名賬戶痊班,現(xiàn)在Bob兩個(gè)密鑰都有了勤婚,那就成Bob個(gè)人賬戶了,于是Bob趕緊創(chuàng)建一筆新的交易涤伐,將這個(gè)聯(lián)名賬戶的錢都轉(zhuǎn)給自己:
最后Bob得到了0.5BTC+0.5BTC=1.0BTC馒胆,Alice得到了一部iphone,但損失了初始聯(lián)名賬戶里的0.5BTC凝果,等于用0.5BTC買了個(gè)iphone祝迂,按目前的行情是接近3500美刀,真是虧大發(fā)了器净,得不償失靶亡ā!
由此可見山害,雙方還是要規(guī)規(guī)矩矩的纠俭,作弊要付出太大的代價(jià),Lighting網(wǎng)絡(luò)在這方面做得不錯(cuò)浪慌。
對(duì)了這種技術(shù)官方名稱叫RSMC(序列到期可撤銷合約)冤荆。