原文標題:《 UNDERSTANDING THE LIGHTNING NETWORK, PART 1: BUILDING A BIDIRECTIONAL BITCOIN PAYMENT CHANNEL 》
原文作者: AARON VAN WIRDUM
原文編譯: 阿劍,以太坊愛好者

閃電網絡(Lightning Network)可能是比特幣區塊鏈上最受期待的創新(編者注:原文撰寫於 2016 年)。這種支付方案最早由 Joseph Poon 和 Tadge Dryja 在一年多以前提出,號稱能支持用戶之間在鏈下發送無限次的交易,而且成本極低——還能借用比特幣網絡提供的安全性。
至少有三家公司——Poon 和 Dryja 的 Lightning、Blockstream 和 Blockchain 正在開發這種技術的實現。但在技術人員的小圈子之外,很少有人理解「微支付的未來」如何能引爆比特幣的潛能。
在本系列文章裏,Bitcoin Magazine 嘗試列舉閃電網絡最基礎的磚石,並展示這些東西如何能組合出閃電網絡這種即將到來的協議。
本系列的第一篇文章將列舉必要的模塊並展示這些模塊如何能組合起來創建「智能合約」;這個概念可以用來理解閃電網絡的第一個前提:雙向的支付通道。
(提示:非常熟悉比特幣的讀者可以跳過對這些模塊的介紹。)
比特幣協議的核心是所謂的「事務」的概念;一般來說,一筆事務總是關聯着另一筆前序事務,並且可以用在未來的事務中。每筆事務都包括 輸入,指向 轉出 比特幣的地址;以及 輸出,指向 收到 比特幣的地址。此外,爲了發送比特幣,輸入還必須滿足一些條件,比如要提供數字簽名來證明發送者具有輸入地址的「所有權」。同時,輸出也會確立這些比特幣在日後使用時候的新條件,在 後序事務 發出的時候必須滿足。
(譯者注:把比特幣想象成一張張有面額的支票,在使用時,支票自身給出了資金的來源,而在使用後又會形成新的支票。所以對每一張支票來說,都有形成這張支票的事務,也即是前序事務;而當這些支票被再次花用時,那筆事務就可稱爲後序事務。)
閃電網絡的一個關鍵特性是,它是由或多或少的常規比特幣事務組成的。只是,這些事務一般不會在比特幣網絡裏傳播。相反,這些事務都是用戶保存在節點本地的——只不過,它們隨時可以放到比特幣網絡中傳播。

-(譯者注:如圖所示,比特幣就像支票一樣可以拆分,且其流轉會形成清晰的鏈條。)-
閃電網絡所需的第二個模塊可能不需要太多解釋,因爲它可以說是比特幣協議本身的存在理由:多重支付的防範措施。如果兩筆事務(或者說輸入)依賴於同一個輸出,那只有其中一筆纔會得到整個網絡的確認。
謹記:即使尚未確認的事務之間發生了衝突,最終也只有一筆會得到確認。

閃電網絡的第三個模塊也很好理解:多簽名地址。(或者更廣義地說:P2SH 地址(腳本哈希值地址)。)
顧名思義,多簽名地址就是需要多個私鑰來「解鎖」、使用比特幣的地址。多簽名地址的條件可以設置得很多樣。比如,可以要求在 3 把私鑰中要有 2 把參與,才能轉出比特幣;或者是其它的數量要求(比如 2/5,3/4,等等)。
閃電網絡一般使用 2-2 的多簽名要求。要從這樣的地址中轉出比特幣需要提供跟這兩把私鑰相關的兩個簽名,少一個都不行。

第四個模塊是時間鎖。時間鎖功能可以在一個輸出中放置一個鎖定條件,讓這些比特幣僅在未來某個時間之後才能花用(也即被用作一筆事務的輸入)。
有兩種類型的時間鎖:1)絕對時間鎖,叫做 CheckLockTimeVerify(CLTV);2)相對時間鎖,CheckSequenceVerify(CSV)。CLTV 會鎖定比特幣直至未來某個(可以說是)具體的具體:一個具體時間和日期,或者一個具體的區塊高度;而 CSV 只會使用相對時間。當一個 CVS 輸出上鍊之後,就要等待一定數量的區塊後,這筆輸出才能花用。

第五個,也是最後一個模塊——密碼學——也是比特幣本身最基礎的模塊。但在閃電網絡中,用法有所不同。
簡而言之,一個「祕密值」是一個很長而且獨一無二的數字串,是幾乎不可能猜測出來的,一臺電腦暴力運算無數次也猜不出來。而通過特殊的計算,這個祕密值又可以「打散」成一個不同的數,叫做「哈希值」。有趣之處正是這裏:知道這個祕密值得人可以很容易地計算出其哈希值,但反之不成立,拿着哈希值你是反推不出那個祕密值的。
在比特幣區塊鏈上,這個機關又可以用在「鎖定比特幣」上(實際上,鎖定比特幣就是比特幣協議運行的方式)。舉個例子,你可以在一個輸出中包含一個哈希值,要求後序的事務只有包含該哈希值對應的祕密值才能花費這筆輸出。

在閃電網絡出現之前,就已經有「支付通道」的概念了。標準的支付通道是用於特定用途的,因此也很侷限:它們都是單向的通道。Alice 可以在鏈下向 Bob 發起多比支付,但 Bob 沒法用同一個通道給 Alice 支付。
而閃電網絡的一個關鍵特性就是,Poon 和 Dryja 提出的免信任的雙向支付通道。
要建立一個雙向的支付通道,參與的雙方都必須首先對一筆開啓通道事務達成共識。這筆開啓事務決定了他們倆各要在這個通道中存入多少比特幣。
假設 Alice 想給 Bob 發送 1 btc。因爲他們倆都預期以後會有頻繁往來,他們決定開啓一個雙向的支付通道。(在通道里發送 1 btc 可能有點太大了,畢竟通道可能對小額支付更有用——但也是完全可以做到的。)
要開啓這個通道,Alice 和 Bob 每人都發送 5 btc 到一個 2-2 的多簽名地址裏。這就是「通道開啓事務」。這個地址裏面的錢,只有 Alice 和 Bob 簽名同一筆事務才能花用。
此外,Alice 和 Bot 都各自創建一個祕密值(也就是一串數字),然後交換哈希值。
現在,Alice 創建一筆通道開啓事務的後序事務,且這是一筆「承諾事務」。在這筆承諾事務裏,Alice 把 4 btc 發給她自己,而 6 btc 發送給第二個多簽名地址;這個多簽名地址更有趣:Bob 可以獨自解鎖這個地址,但是,要等(Alice 的事務上鍊後的)1-00 個區塊之後,Bob 才能花裏面的錢(這是一個相對時間鎖);Alice 也可以獨自打開這個地址,前提是她 也 擁有 Bob 給她的哈希值所對應的祕密值。(當然,Alice 是完全不知道這個祕密值的——她只有 Bob 給她的哈希值——所以只是表面上可以這麼做而已。)(譯者注:即,這第二個多籤地址既有時間鎖,也有哈希鎖。)
Alice 簽名了她的承諾事務。但是她不會把這筆事務廣播出去!相反,她只會把這筆事務發給 Bob。
同時,Bob 也做剛好對稱的操作。他也創建一筆承諾事務,把 6 btc 發給自己,4btc 發給一個新的多籤地址。Alice 在等待 1000 個區塊後就可以獨自解鎖這個地址,或者 Bob 可以拿 Alice 的祕密值來解鎖這個地址。
Bob 簽名了這筆事務,然後發給了 Alice。
交換完了這些承諾事務和哈希值之後,他們再共同簽名並把那筆通道開啓事務廣播出去,使之能夠上鍊。現在,一個雙向的支付通道就開好了。
開啓通道之後,Alice 和 Bob 都可以簽名和廣播他們從地方那裏得到的、部分有效的承諾事務。如果 Alice 廣播了(Bob 發給她的承諾事務),則 Bob 會立即得到 6 btc。如果 Bod 廣播了,則 Alice 會立即拿到 4 btc。但簽名和廣播事務的那個,必須等待 1000 個區塊才能解鎖那個後序的多簽名地址,把剩餘的比特幣拿走。

不過,這就是支付通道的關鍵技巧:不去簽名和廣播他們得到的承諾交易。
(譯者注:先交互承諾事務,再廣播通道開啓事務,是爲了避免對手欺詐;而獲得承諾事務之後,不必廣播,也可以獲得安全性保證了。)
後來,Bob 想給 Alice 發回 1 btc,他們想更新這個通道的狀態,使之回到 5:5 的狀態。要實現這一點,Alice 和 Bob 需要做兩件事。
首先,雙方都要把上面所講的流程再做一遍(除了開啓事務的那部分,因爲已經記錄在鏈上了)。這一次,Alice 和 Bob 都把 5 btc 分配給對方,都把 5 btc 分配給那個多簽名地址。這些後續的多簽名地址的條件是類似的,只不過,他們都需要生成 新的 祕密值:Alice 和 Bob 都要提供 新的 哈希值。他們都簽名自己的新承諾事務,併發送給對方。
其次,Alice 和 Bob 都把他們的 第一個 祕密值(用在第一次承諾事務中的那個)交給對方。
這時候,Alice 和 Bob 都能簽名和廣播他們最新得到的這筆承諾事務。他們的對手會立即獲得 5 btc,而廣播這自己則必須等待 1000 個區塊。就這樣,通道的狀態更新了。
但是,有什麼能阻止 Bob 廣播舊的承諾事務呢?那筆承諾事務會給他分配 6 btc,比 5 btc 要多 ……
阻止 Bob 的,當然就是他的第一個祕密值,也就是他已經給了 Alice 的那個祕密值。
因爲,這時候 Bob 已經無法隨心所欲地簽名和廣播更老的那筆承諾事務了,因爲 Alice 已經知道了 Bob 的第一個祕密值。如果 Bob 要簽名和廣播(Alice 給他的那筆)更老的承諾事務,他會立即把 4 btc 發給 Alice …… 且他自己要等 1000 個區塊才能申領,但是,Alice 已經知道他的祕密值了,所以她可以利用這段時間先發制人,直接把剩下的 6 btc 也提走!
而且,因爲 Bob 也有了 Alice 的祕密值,所以對 Bob 來說同樣如此!要是 Alice 想簽名和廣播舊的承諾事務,Bob 就可以偷走她放在通道里所有的 btc 了!
這就意味着 Alice 和 Bob 都要重組的激勵不去耍小手段,只廣播最近的狀態。

好了,有了雙向的支付通道之後,我們要把它拓展成一個支付網絡。這就是我們第二篇的主題。
感謝 Rusty Russell 和 Joseph Poon 的專門反饋。
原文鏈接
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia