如果你今天想要使用比特幣來做支付,不僅需要一筆不小的手續費,甚至需要好幾個小時才能完成交易;因此「閃電網路」的概念誕生了,它的概念是將原先在「鏈上」交易的手續,移到「鏈下」來處理。藉由這技術,原先速度緩慢的交易,能夠在極短的時間內被完成,並讓比特幣的可擴充性變得更大,而且成本極低。
(背景補充:新手科普 | 解決「比特幣、以太坊燃眉之急」的 Layer2 解決方案)
(背景補充:GaloyMoney 創辦人:近一周「2萬名薩爾瓦多民眾」透過閃電網路交易,手續費不到5美元)
閃
電網路(Lightning Network)最早由 Joseph Poon 和 Tadge Dryja 在 2015 年提出,號稱能支持用戶之間在鏈下發送無限次的交易,而且成本極低—— 還能藉用比特幣網路提供的安全性。但在技術人員的小圈子之外,很少有人理解「 微支付的未來 」如何能引爆比特幣的潛能。
本系列的第一篇文章將列舉必要的模塊並展示這些模塊如何能組合起來創建「 智能合約 」;這個概念可以用來理解閃電網路的第一個前提:雙向的支付通道。
模塊#1:未確認的交易(Unconfirmed Transactions)
比特幣協議的核心是所謂的「 交易 」 的概念;一般來說,一筆交易總是關聯著另一筆前序交易,並且包含在未來的交易中。此外,為了發送比特幣,輸入還必須滿足一些條件,比如要提供數字簽名來證明發送者具有輸入地址的「 所有權 」;同時,輸出也會確立這些比特幣在日後使用時候的新條件。
把比特幣想像成一張張有面額的支票,在使用時,支票自身給出了資金的來源,而在使用後又會形成新的支票。所以對每一張支票來說,都有形成這張支票的交易,也即是前序交易;而當這些支票被再次花用時,那筆交易就可稱為後序交易。
在閃電網路的一個關鍵特性是,不管現在有多少筆比特幣交易,這些交易一般不會在比特幣網路裡傳播。取而代之的是這些交易都保存在本地的節點 —— 只不過,它們隨時可以放到比特幣網路中傳播。
模塊#2:杜絕多重支付(Double-Spend Protection)
閃電網路所需的第二個模塊可能不需要太多解釋,因為它可以說是比特幣協議本身的存在理由:多重支付的防範措施。如果兩筆交易依賴於同一個輸出,那只有其中一筆才會得到整個網路的確認。
即使尚未確認的交易之間發生了衝突,最終也只有一筆會得到確認。
模塊#3:多重簽名(Multisig)
閃電網路的第三個模塊也很好理解:多簽名地址
顧名思義,多簽名地址就是需要多個私鑰來「 解鎖 」使用比特幣的地址。多簽名地址的條件可以設置得很多樣。比如,可以要求在 3 把私鑰中要有2 把參與,才能轉出比特幣;或者是其它的數量要求( 譬如 2 / 5,3 / 4,等等)
閃電網路一般使用 2-2 的多簽名要求。要從這樣的地址中轉出比特幣需要提供跟這兩把私鑰相關的兩個簽名,少一個都不行。
模塊#4:時間鎖(Time-Locks)
第四個模塊是時間鎖。時間鎖功能可以在一個輸出中放置一個鎖定條件,讓這些比特幣僅在未來某個時間之後才能花用。
有兩種類型的時間鎖:
- 1、絕對時間鎖,叫做 CheckLockTimeVerify(CLTV)
CLTV 會鎖定比特幣直至未來某個具體時間:一個具體時間、日期,或者一個具體的區塊高度 - 2、相對時間鎖,叫做 CheckSequenceVerify(CSV)
CSV 只會使用相對時間。當一個CVS 輸出上鏈之後,就要等待一定數量的區塊後,這筆輸出才能花用。
模塊#5:哈希值和秘密值
第五個,也是最後一個模塊—— 密碼學—— 是比特幣本身最基礎的組成。但在閃電網路中,用法有所不同。
簡而言之,一個「 秘密值 」是一個很長而且獨一無二的數字串,且幾乎不可能猜測出來的,一台電腦暴力運算無數次也猜不出來。而通過特殊的計算,這個秘密值又可以「 打散 」 成一個不同的數,叫做「 哈希值 」。而有趣之處正是這裡:知道這個秘密值的人可以很容易地計算出其哈希值,但反之卻不成立,拿著哈希值你是反推不出那個秘密值的。
在比特幣區塊鏈上,這個機關又可以用在「 鎖定比特幣 」 上( 實際上,鎖定比特幣就是比特幣協議運行的方式 )。舉個例子,你可以在一個輸出中包含一個哈希值,要求後序的交易只有包含該哈希值對應的秘密值才能花費這筆輸出。
第一個挑戰:雙向的支付通道
在閃電網路出現之前,就已經有「 支付通道 」的概念了。但標準的支付通道是用於特定用途的且都是單向的通道,因此也很侷限。例如:Alice 可以在鏈下向 Bob 發起多筆支付,但 Bob 沒法用同一個通道給 Alice 支付。
而閃電網路的一個關鍵特性就是, Poon 和 Dryja 提出的免信任的雙向支付通道。
開啟通道
要建立一個雙向的支付通道,參與的雙方首先都必須對開啟雙向支付通道達成共識。通道開啟時,他們雙方各自需要決定在這個通道中存入多少比特幣。
假設 Alice 想給 Bob 發送 1 btc。因為他們倆都預期以後會有頻繁往來,他們決定開啟一個雙向的支付通道。(在通道裡發送1 btc 可能有點太大了,畢竟通道可能對小額支付更有用 —— 但也是完全可以做到的。)
要開啟這個通道,Alice 和 Bob 每人都發送 5 btc 到一個 2-2 的多簽名地址裡。這就是「 開啟通道交易 」。這個地址裡面的錢,只有 Alice 和 Bob 簽名同一筆交易才能花用。
此外,Alice 和 Bot 都各自創建一個Secret Key ( 密鑰 ) ,然後交換 Hash ( 鎖頭 )。
現在,Alice 這一筆承諾交易裡,Alice 把 4 btc 發給她自己,而 6 btc 發送給多簽名地址,這個多簽名地址有點有趣,Bob 可以獨自解鎖這個地址,但是,要等 Alice 的交易上鏈(廣播)後的 1000 個區塊之後,Bob 才能花裡面的錢(這是一個相對時間鎖)。Alice 也無法獨自打開這個地址,除非她知道 Bob 的 Secret Key 。
Alice 簽名了她的承諾交易。但是她不會把這筆交易廣播出去!相反,她只會把這筆交易發給Bob。同時,Bob 也做了對稱的操作。他也創建一筆承諾交易,把 6 btc 發給自己,4btc 發送給多簽名地址。
現在,如果 Alice 廣播了( Bob 發給她的承諾交易),則 Bob 會立即得到 6 btc;如果 Bob 廣播了,則 Alice 會立即拿到 4 btc。但簽名和廣播交易的那個,必須等待 1,000 個區塊後,才能解鎖那個後序的多簽名地址,把剩餘的比特幣拿走。
先交互承諾交易,再廣播通道開啟交易,是為了避免對手欺詐;而獲得承諾交易之後,不必廣播,也可以獲得安全性保證了。
更新通道
後來,Bob 想給 Alice 發回1 btc,他們想更新這個通道的狀態,使之回到 5:5 的狀態。要實現這一點,Alice 和Bob 需要做兩件事。
首先,雙方都要把上面所講的流程再做一遍。這一次,Alice 和 Bob 都把 5 btc 分配給對方,並把5 btc 分配給那個多簽名地址。只不過,他們都需要生成新的哈希值,並發送給對方。
其次,Alice 和 Bob 都把他們的第一個 Secret Key(用在第一次承諾交易中的那個)給對方。
這時候,Alice 和 Bob 都能簽名和廣播他們最新得到的這筆承諾交易。他們的對手會立即獲得 5 btc,而廣播的自己則必須等待 1,000 個區塊。就這樣,通道的狀態更新了。
但是,有什麼能阻止 Bob 廣播舊的承諾交易呢?那筆承諾交易會給他分配 6 btc,比5 btc 要多……
能阻止 Bob 的,就是他的第一個 Secret Key( 他已經給了Alice 的那個 Secret Key )
因為,Alice 已經知道了 Bob 的第一個 Secret Key。如果 Bob 要簽名和廣播( Alice 給他的那筆)更舊的承諾交易,他會立即把 4 btc 發給Alice …… 且他自己要等1000 個區塊才能申領,但是,Alice 已經知道他的秘密值了,所以她可以利用這段時間先發制人,直接把剩下的 6 btc 也提走!
而且,因為 Bob 也有了Alice 的秘密值,所以對 Bob 來說同樣如此!要是 Alice 想簽名和廣播舊的承諾交易,Bob 就可以偷走她放在通道裡所有的 btc 了!
這就意味著 Alice 和 Bob 都會被鼓勵要公平,只廣播最近的狀態。
好了,有了網絡的支付通道之後,我們就可以形成一個支付網路了。這就是我們第二篇的主題。
📍相關報導📍
比特幣新教主 Jack Dorsey : BTC是世界共通語言、推特「遲早」會整合閃電網路
美國國稅局IRS欲尋追蹤「匿名幣、比特幣閃電網路」工具,鏈下交易也不安全了?
奈及利亞企業家欲在非洲部署「太陽能驅動」的閃電網路節點
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務