閃電通道,它的實現(xiàn)機(jī)制其實有個名稱,叫RSMC(Recoverable Sequence Maturity Contract),中文名為“序列到期可撤銷合約”,很拗口吧!所以,我前面一直不敢把它擺出來嚇人。今天,就趁著介紹它兄弟的機(jī)會,讓哥倆的名字也露露面吧。它兄弟的名字叫HTLC(Hashed Timelock Contract),中文名叫做“哈希時間鎖定合約”,也是一奇葩名字。不過沒關(guān)系,叫什么不重要,是什么才重要,大家記住他們的簡稱,然后知道它們是干啥的就行了。
一條條的閃電通道建立后,就可以互相串連起來發(fā)揮作用,構(gòu)成閃電網(wǎng)絡(luò)。串聯(lián)的關(guān)鍵先生便是HTLC這個家伙了。
對于RSMC,其實執(zhí)行的是一種無條件支付,就是說,A支付給B,B直接就接受支付了,不需要滿足什么額外條件。但是HTLC是一種有條件支付,A在支付給B的時候,設(shè)定了一個額外條件,B必須滿足這個條件才行。
這個條件的實行,依賴于一個概念:秘密。
秘密的定義很簡單,其實就是哈希前的原始值,比如S的哈希值為H(S),在這里S就是秘密。假如 A以HTLC的方式發(fā)送比特幣給B,那么他們事先約定好H(S),A在發(fā)送的時候,會在腳本里設(shè)置一個附加條件:如果B在某個指定時間之前,能提供一個秘密S,其哈希值等于H(S),那么 B才能獲得比特幣,否則,這些比特幣仍會回到A的賬戶。
接下來,我們看看如何用HTLC來實現(xiàn)閃電通道與閃電通道的連接。
考慮這么一個場景:A和B之間有閃電通道,B和C之間有閃電通道,但A和C之間沒有直接的閃電通道。現(xiàn)在,A要利用這兩條閃電通道向C支付1個比特幣。
我們來看實現(xiàn)步驟,如圖:
1、C生成一個秘密S,并將S的哈希值H(S)發(fā)給A,或者,A生成秘密,發(fā)給C也行,反正是兩人商定好一對S和H(S);
2、A向與他互聯(lián)的閃電節(jié)點,廣播這么一條信息:誰能20分鐘(隨意指定的一個時間,真實的閃電網(wǎng)絡(luò)轉(zhuǎn)賬,時間可以比這短的多)之內(nèi)提供一個秘密S,它的哈希值是H(S),那么A將發(fā)送1個比特幣給他;
3、B收到這個消息之后,也向他的鄰居閃電節(jié)點,廣播一條信息:誰能在10分鐘(B的時間要設(shè)置得比A小一點,使B獲得秘密后有時間告知A)之內(nèi)提供一個秘密S,它的哈希值是H(S),那么B將發(fā)送1個比特幣給他;
4、C收到B的消息后,告訴B他可以提供秘密S,B又繼續(xù)告訴A;
5、A構(gòu)造一筆額度為1個比特幣的HTLC交易:如果B在20分鐘內(nèi)能提供一個哈希值是H(S)的秘密,B就能獲得這1個比特幣,否則這1個比特幣會退回到A的賬戶;
6、同樣,B也構(gòu)造一筆1個比特幣的HTLC交易:如果C能在10分鐘之內(nèi)提供秘密S,他就能獲得這1個比特幣;
7、C提供秘密S給B,驗證通過后,C拿到1個比特幣;
8、B提供秘密S給A,驗證通過后,B拿到1個比特幣。
這樣,A和C之間雖然沒有直接的閃電通道,但也可以實現(xiàn)閃電轉(zhuǎn)賬。當(dāng)然,B做為中間節(jié)點,一般都會收取一點手續(xù)費。整個閃電網(wǎng)絡(luò),正是由這些一條條點對點的閃電通道,互相連接而構(gòu)成的一個高效轉(zhuǎn)賬網(wǎng)絡(luò)。