TPS
網(wǎng)絡(luò)擁堵钻心、轉(zhuǎn)賬時間長、交易緩慢苇瓣、交易費(fèi)用高等一直是比特幣被詬病的問題〕ス裕客觀看待击罪,比特幣TPS低有利有弊。以太坊Vitalik提出了當(dāng)前區(qū)塊鏈技術(shù)面臨的不可能三角:去中心化(Decentralization)贪薪、安全性(safety)和可擴(kuò)展性(Scalability)媳禁。可擴(kuò)展性主要也是指TPS画切。
比特幣現(xiàn)在每秒處理7筆交易竣稽,以太坊每秒25筆交易,通過優(yōu)化可能會提高到50或100霍弹,visa每秒的交易處理能力是2000筆丧枪,EOS號稱優(yōu)化后TPS可達(dá)百萬,2017天貓雙11創(chuàng)下了32.5萬筆/秒交易創(chuàng)建的紀(jì)錄庞萍,在這個數(shù)字后面拧烦,更是每秒多達(dá)幾千萬次的數(shù)據(jù)庫寫入(數(shù)據(jù)來源于公眾號:阿里巴巴數(shù)據(jù)庫技術(shù))。
所有的區(qū)塊鏈都會遇到不可能三角問題钝计。針對于區(qū)塊鏈的擴(kuò)展性恋博,有多種解決方案,比如:側(cè)鏈私恬、閃電網(wǎng)絡(luò)(雷電網(wǎng)絡(luò))债沮、分片、DAG等本鸣。
上周參加了一個分享會疫衩,研究了一下閃電網(wǎng)絡(luò),這篇文章主要寫一下自己的理解荣德。因?yàn)殚W電網(wǎng)絡(luò)原論文晦(ying)澀(wen)難(bu)懂(hao)闷煤,如果有發(fā)現(xiàn)理解的不對的地方童芹,請指正。
<<The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments>>
閃電網(wǎng)絡(luò)-總體思想
- 閃電網(wǎng)絡(luò)本質(zhì)是針對擴(kuò)展性的一種鏈下(off-chain)解決方案鲤拿。
- 假如Alice和Bob經(jīng)常發(fā)生比特幣轉(zhuǎn)賬假褪,Alice和Bob可以約定兩個人都轉(zhuǎn)50個比特幣到一個 2-2多重簽名,這個簽名地址的幣只有Alice和Bob同時簽名才可以使用近顷。
- 在發(fā)生轉(zhuǎn)賬之前生音,Alice和Bob維護(hù)一個這些幣的歸屬副本,既:現(xiàn)在 2-2簽名中有100個btc窒升,其中50個歸屬于Alice缀遍,50個歸屬于Bob。
- 這時就可以認(rèn)為Alice和Bob打開了一個雙向支付通道饱须,以后Alice和Bob之間的轉(zhuǎn)賬都可以視為歸屬副本的更新域醇。
- Alice向Bob轉(zhuǎn)了1個BTC,則兩個人更新歸屬副本為:Alice-49BTC, Bob-51BTC冤寿,并且將原來的副本廢棄歹苦。
- <font color='red'>副本并不廣播到鏈上青伤,所以是off-chain方案督怜。</font>
- 當(dāng)Alice和Bob決定不再有合作關(guān)系時,兩個人可以將最新的副本廣播到鏈上狠角,按照歸屬副本的內(nèi)容号杠,將2-2簽名中的幣分別轉(zhuǎn)給Alice和Bob,視為關(guān)閉通道丰歌。
- Alice想向Cavol轉(zhuǎn)10個BTC姨蟋,但是Alice和Cavol之間還沒有建立通道。Bob既和Alice有雙向支付通道立帖,又和Cavol有雙向支付通道眼溶,Alice可以支付給Bob 10BTC,然后由Bob代轉(zhuǎn)給Cavol晓勇,Bob做為中間人堂飞,可以收取少量手續(xù)費(fèi)。
- 所有用戶之間的通道連接關(guān)系組成網(wǎng)絡(luò)绑咱,既為閃電網(wǎng)絡(luò)绰筛。
具體實(shí)現(xiàn)
閃電網(wǎng)絡(luò)的第一步是Alice和Bob之間需要打開通道,打開通道的本質(zhì)是Alice和Bob約定轉(zhuǎn)一定數(shù)量的比特幣(>=0)到一個2-2簽名地址描融,但是這里存在兩個問題:
- 如何確保兩個人都會轉(zhuǎn)幣铝噩?既不存在Alice已經(jīng)轉(zhuǎn)了,Bob故意作惡不轉(zhuǎn)窿克,導(dǎo)致Alice轉(zhuǎn)的幣取不出來的情況骏庸?
- 如何保證Alice和Bob轉(zhuǎn)了以后毛甲,可以不相互依賴對方的情況下,能夠保證把幣取回來敞恋?因?yàn)榇嬖谶@樣的情況丽啡,可能Alice轉(zhuǎn)了10BTC,而Bob轉(zhuǎn)了1BTC硬猫,理論上如果Bob作惡的話补箍,Bob可以敲詐Alice。
通道建立
閃電網(wǎng)絡(luò)提出了RSMC(序列到期可撤銷合約)啸蜜,具體過程:
- 比特幣的交易結(jié)構(gòu)是UTXO坑雅,Alice和Bob首先交換各自準(zhǔn)備轉(zhuǎn)到2-2簽名中的UTXO輸入,既各拿出5BTC衬横,用于構(gòu)建Funding Tx裹粤,輸出為Alice和Bob的2/2多重簽名,這個簽名的輸出此后只能同時具有Alice和Bob的簽名才能花掉蜂林。而且遥诉,最重要的是,<font color='red'>此時Alice和Bob均不對Funding Tx進(jìn)行簽名噪叙,也不廣播到鏈上矮锈,因?yàn)闆]有簽名,即使廣播到鏈上也會被立刻拒絕睁蕾。</font> 這一步主要是為了解決第一個問題苞笨,保證不會出現(xiàn)有一個人轉(zhuǎn)幣了而另一個人沒有轉(zhuǎn)幣。
- 為了解決第二個問題子眶,雙方需要構(gòu)建Commitment Tx瀑凝。Alice基于未廣播的2-2簽名構(gòu)造兩個合約C1a和RD1a,C1a的內(nèi)容為:直接轉(zhuǎn)給Alice5個BTC臭杰,剩下5個BTC轉(zhuǎn)到新合約RD1a粤咪,RD1a的內(nèi)容為,1000個確認(rèn)以后Bob才可以花掉RD1a里面的5個BTC渴杆。然后Alice把C1a和RD1a都轉(zhuǎn)交給Bob寥枝。同樣,Bob也基于未廣播的2-2簽名将塑,構(gòu)造兩個合約C1b和RD1b脉顿,其中C1b的內(nèi)容為直接轉(zhuǎn)給Bob 5個BTC,剩下5個BTC轉(zhuǎn)到新合約RD1b点寥,RD1b的內(nèi)容為艾疟,1000個確認(rèn)以后Alice才可以花掉RD1b里面的5個BTC。然后Bob把C1b和RD1b都轉(zhuǎn)交給Alice。
- 到這一步蔽莱,由于并未對Funding Tx進(jìn)行簽名弟疆,任何一方均無法作惡,任何一方也不會有任何損失盗冷。
- 雙方均完成對Commitment Tx的簽名并交換后怠苔,就可以對第一步中的Funding Tx進(jìn)行簽名,并交換仪糖。此時柑司,F(xiàn)unding Tx是完整的交易,就可以廣播到鏈上锅劝。
- 上述過程就是創(chuàng)建RSMC的全部過程攒驰,此時Alice和Bob之間的通道就已經(jīng)打開。
- 這里面有幾個關(guān)鍵點(diǎn):
- Commitment Tx基于Funding Tx故爵,但是Funding Tx并未廣播到鏈上玻粪,如何信任Commitment Tx?這里依賴了隔離見證的一些知識诬垂,SIGHASH_NOINPUT指令可以解決這個問題劲室。
- 為什么Commitment Tx創(chuàng)建以后,F(xiàn)unding Tx就可以簽名畫押了呢结窘?首先很洋,Alice簽名的C1a和RD1a,轉(zhuǎn)交給了Bob晦鞋,Bob只要對這兩個合約簽名廣播蹲缠,就可以保證1000個確認(rèn)以后棺克,收回之前投入的5BTC悠垛。同理,Bob簽名的C1b和RD1b也都轉(zhuǎn)交給了Alice娜谊,Alice對這兩個簽名廣播以后确买,等1000個確認(rèn)也可以拿回自己的5BTC。
- 大家應(yīng)該發(fā)現(xiàn)這里有一個非常妙的地方纱皆,Alice和Bob都把半簽的合約交給對方湾趾,都等待對方做最后的簽名和廣播,但是誰簽名和廣播派草,誰就會延遲獲得自己的幣搀缠。最后的結(jié)果就是,誰都不愿意先去廣播近迁,就會導(dǎo)致兩方的通道可以長時間保持艺普。
- C1a,C1b, RD1a, RD1b這四個合約記錄了Alice和Bob雙向支付通道中幣的歸屬副本。
更新狀態(tài)
現(xiàn)在Alice和Bob的通道已經(jīng)建立歧譬,Alice向Bob轉(zhuǎn)1BTC岸浑,怎么操作?
- Alice向Bob轉(zhuǎn)1BTC瑰步,Alice變?yōu)?BTC,Bob變?yōu)?BTC,需要創(chuàng)建新的Commitment Tx,與上面的過程類似矢洲,半簽以后交換,生成C2a, RD2a, C2b, RD2b缩焦。
- 此時兩個狀態(tài)均是有效的读虏,那么最核心的問題來了,如何才能徹底廢棄掉C1a和C1b呢袁滥?因?yàn)榫蚱珹lice很有可能把Bob之前給他的C1b簽名以后廣播到鏈上,導(dǎo)致Bob承受1BTC的損失呻拌。RSMC采用了一個非常巧妙的方法葱轩,雙方在每一次簽名Commitment Tx時都使用不同的秘鑰對,Bob在接受Alice第二個半簽C2a時藐握,需要Alice將C1a中使用的私鑰交給Bob靴拱,表示愛麗絲放棄C1a,承認(rèn)C2a猾普。C1b也是同樣對待袜炕。
- 假設(shè),Alice已經(jīng)簽名了C2a初家,但是Alice故意把C1b廣播到區(qū)塊鏈上偎窘,Bob會馬上拿到自己的5BTC,Alice會等1000個確認(rèn)以后才能拿到剩下的5BTC。這個時間內(nèi)溜在,如果Bob監(jiān)控到Alice作假陌知,可以拿著Alice簽過名的C1a和以及Alice交換過來的私鑰,直接從區(qū)塊鏈上取走剩下的5個BTC掖肋。既:不誠實(shí)的人會失去所有的幣仆葡。
網(wǎng)絡(luò)
假設(shè)A想給C轉(zhuǎn)1個BTC,但是A和C之間沒有雙向轉(zhuǎn)支付通道志笼,但是B和A沿盅、C都有通道,那么A可以直接在鏈上給C轉(zhuǎn)1個BTC纫溃,也可以和C建議通道以后再轉(zhuǎn)腰涧,也可以拜托B幫忙轉(zhuǎn)1BTC。A通過雙向支付通道 經(jīng)由B給C轉(zhuǎn)1BTC的過程紊浩,就是閃電網(wǎng)絡(luò)的應(yīng)用窖铡。在不可信的情況下揍很,轉(zhuǎn)賬過程如何操作?哈希時間鎖定合約(HTLC)万伤!
- 為了完成這次交易窒悔,A會先給C發(fā)一個隨機(jī)數(shù)字R,接著C會對R進(jìn)行簽名敌买,生成一個哈希H简珠,并返回給A。
- 然后A就找到B虹钮,如果B能夠給出生成簽名H的key聋庵,那么A就同意更新渠道的支付分配,為B轉(zhuǎn)1個BTC芙粱。實(shí)際上祭玉,A和B會先更新Commitment Tx,A生成三個交易春畔,C1a,RD1a和HTLC(a)脱货,C1a和RD1a的內(nèi)容同上面的RSMC,HTLC(a)的內(nèi)容為律姨,如果B找到可簽名H的key振峻,B可以直接拿走HTLC中的1BTC,否則HTLC(a)中的1BTC在一定的鎖定期之后择份,A可以重新花掉扣孟。
- 之后B會拿著H去找C,用1個BTC來換簽名key荣赶,同時更新B和C的支付分配凤价。更新過程同A和B之間一樣,基于HTLC拔创。因?yàn)楹灻膋ey就是從C這里生成的利诺,所以他肯定知道,而且理論上也只有他才知道伏蚊。接著C將簽名用的key告訴B立轧,并更新了其渠道的支付分配格粪。
- 同理躏吊,B使用key從A那里也拿到了1BTC,A以脫鏈的形式付給C一個BTC帐萎。
- 這里有兩個需要注意的問題比伏,A和B之間以及B和C之間的支付分配都會重新創(chuàng)建Commitment Tx,而每個Commitment Tx帶有鎖定時間(如之間的1000個確認(rèn)),A和B之間的鎖定時間需要長于B和C之間的鎖定時間疆导,防止在B拿到key之后赁项,A和B之間的鎖定時間已經(jīng)到期,B會拿不到幣。
- 第二個問題是:在B找C拿key的過程中悠菜,A和B之間的通道可以隨時斷開舰攒,B不需要信任A在此期間會關(guān)閉通道,因?yàn)榧词笰作惡悔醋,故意關(guān)閉通道摩窃,HTLC(a)中的幣,A還需要等到一定的鎖定期以后才能花掉芬骄,只要B在這個鎖定期內(nèi)拿到簽名所用的key猾愿,就可以從HTLC(a)中拿走1BTC。
- B作為中間人账阻,可以收取少量的費(fèi)用蒂秘。
- 通道之間的交易,實(shí)際上無需確認(rèn)等待淘太,瞬時完成的姻僧,對于比特幣的TPS有大量的提升。
閃電網(wǎng)絡(luò)有利有弊蒲牧,有人看好有人看衰段化,不可否認(rèn)兩點(diǎn)是:鏈下節(jié)點(diǎn)會相對中心化;比特幣交易速度會有大幅提升造成,交易費(fèi)也會顯著降低显熏。
閃電網(wǎng)絡(luò)可以用來做跨鏈,甚至有團(tuán)隊(duì)用閃電網(wǎng)絡(luò)做去中心化交易所晒屎,值得期待喘蟆。
文章里面沒有圖,主要是圖不太容易畫明白鼓鲁,抱歉蕴轨。
相關(guān)資料,公眾號后臺回復(fù)”閃電網(wǎng)絡(luò)“獲取骇吭。