林宏信

軟體開發者、音樂創作者、自由軟體愛好者。現就讀五專 Website: wancat.cc XMPP: [email protected]

雫教你用婚姻理解比特幣閃電網路

吉田春和水谷雫在經歷多年的風風雨雨後,兩人終成眷屬,準備要結婚了。然而雫想起她那廢物老爸敗家的歷史,又考量春過去突然消失的不良紀錄,希望把兩人的財產算清楚,誰也不吃虧。想要阻止這一切的春就主張:「每次我們之間的轉帳都要經過銀行,手續費太貴了」。誰也想不到精明的雫竟然想到一個方法,可以讓兩人在不需信任彼此(又不用現金)的情況下,利用離婚協議書,完成無須手續費的離線轉帳。
動漫《鄰座的怪同學》

雫:首先,我們在結婚的時候,要在結婚協議書上載明兩人「帶入多少資產進入婚姻」。

結婚同意書:

兩人於婚姻中財產:
吉田春:500000
水谷雫:300000

簽名:吉田春水谷雫 2022.02.10

雫:接著將這張結婚證書提交到了戶政事務所,我們就會正式結婚了。

春:那要怎麼轉帳呢?

雫:當我們要轉帳時,就要簽一張離婚協議書,寫上新的財產分配。例如當我要轉給你 10000 元時,我們就簽一張離婚協議書:

離婚協議書:

兩人協議分配財產如下:
吉田春:510000
水谷雫:290000

簽名:吉田春水谷雫 (尚無時間戳)

雫:當你要再給我 2000 時,我們再用上張協議書的金額,算出新的餘額。

離婚協議書:

兩人協議分配財產如下:
吉田春:508000
水谷雫:292000

簽名:吉田春水谷雫 (尚無時間戳)

雫:透過這種方式,我們就可以用 0 手續費完成無限多筆交易。因為兩人都已經簽了名,兩人又各自有一份,因此只要任何一方想要,隨時都可以將離婚協議書交到戶政事務所,將財產結算。

春聽了之後毛骨悚然,知道自己随時有可能會被離婚,想要力挽狂瀾。

春:那我跟妳結婚之後,一次都不要簽離婚協議書,妳就拿我沒轍了吧!妳就得一輩子當我老婆!

雫:那可不行,所以你得先簽好第一份離婚協議書,我才會簽下結婚同意書。

春嚇了一跳,翻開雫剛才給他的結婚同意書下面,果真就附了一張離婚協議書。

離婚協議書:

兩人協議分配財產如下:
吉田春:500000
水谷雫:300000

簽名:吉田春水谷雫 (尚無時間戳)

春:不行不行,妳這個作法有個 bug,如果結婚後都是妳給我錢,財產變成例如我 600000、妳 200000,但最後妳卻交了我們一開始的離婚協議書,妳不就淨賺 100000 嗎?

雫聽了後覺得有道理,低頭開始深思。正當春覺得應該可以安心的時候,雫抬起了頭。

雫:你說的有道理,所以我們要加入另外一個保險措施。

雫拿出兩張新的離婚協議書,拿出筆在上方加字。

離婚協議書(吉田春持有):

兩人協議分配財產如下:
水谷雫:300000

帳戶 1:500000
過了一個月後,將帳戶 1 的所有錢轉給吉田春


簽名:水谷雫 (尚無時間戳)
離婚協議書(水谷雫持有):

兩人協議分配財產如下:
吉田春:500000

帳戶 2:300000
過了一個月後,將帳戶 2 的所有錢轉給水谷雫


簽名:吉田春 (尚無時間戳)

春:為什麼要把錢先轉到其他帳戶再轉回來給我?而且妳的合約跟我的合約,怎麼內容是相反的啊?

雫:你仔細觀察,我已經簽名、交給你的協議書,是對我有利(我會立刻拿到錢)、而對你不利的(你要等待一個月)。反過來,你簽名交給我的協議書,則是對你有利、對我不利。因此我若將我手上的協議書擅自交出去,我就必須等待一個月才能拿到錢。

春:那又怎麼樣?反正就等一個月就好了嘛!

雫:還沒完呢!接下來我們每次轉帳,都要開一個新的銀行帳號(不用存錢進去),並將上一個帳號的密碼給---對方。例如我轉給你 10000 元:

離婚協議書(吉田春持有):

兩人協議分配財產如下:
水谷雫:290000
帳戶 3:510000
過了一個月後,將帳戶 3 的所有錢轉給吉田春

簽名:水谷雫 (尚無時間戳)
離婚協議書(水谷雫持有):

兩人協議分配財產如下:
吉田春:510000
帳戶 4:290000
過了一個月後,將帳戶 4 的所有錢轉給水谷雫
簽名:吉田春 (尚無時間戳)
水谷雫拿到了帳戶 1 的密碼,吉田春拿到了帳戶 2 的密碼。

春:哦~如此一來,如果妳擅自交了第一份、妳有 300000 的離婚協議書,而非我們最後一張協議書,因為我有妳前面所有帳號的密碼,我就可以把妳的錢從帳戶 2 全部轉走!讓妳血本無歸,因此妳就只能夠交我們簽的最新一張離婚協議書。

雫:沒錯!就是這樣。如此一來,我們就可以不經過銀行,卻以政府的公信力來進行交易,而不需要信任彼此!就算你哪天擅自跳上遠洋漁船跑去捕鮪魚,好幾年都不回來,我也可以將離婚協議書交出去,只要等一個月,就可以拿回我的錢,你也不用怕會被我吭。欸天啊!你不覺得我這個想法很棒嗎?正好可以解決比特幣手續費高昂、速度又慢的問題,也許可以做一番事業出來。

雫:我和你的角色,就是區塊鏈上的兩個地址(Address)。戶政事務所就是區塊鏈。我們的結婚證書,就是開啟一個支付通道(Payment Channel)。而每一次的離婚協議書,就是結算交易。中間作為保險的銀行帳號,則是新產生的比特幣錢包地址,密碼就是該地址的私鑰。哇!春,你覺得我會不會改寫了人類歷史了?

春:如果是雫的話,我相信妳一定可以的!

於是雫隔天就向公司提出了這個構想,公司立馬著手開發,並任命雫為計劃負責人。經過了幾年的努力,閃電網路問世,在不犧牲安全性和去中心化的條件下,解決了比特幣手續費與速度的問題,改變了行動支付生態,薩爾瓦多甚至改用比特幣作為法定貨幣,其中一般日常消費,就是透過閃電網路進行。

真實的閃電網路

雫和春各別擁有一個比特幣錢包,地址分別為 bc1shizuku 和 bc1haru(實際錢包長度不只如此)。今天當雫與春開啟一個支付通道,兩人就像是上文的結婚系統一般,可以用 0 手續費進行快速的交易,以下示範整個建立通道流程:

首先,雫和春開啟一個多簽錢包(multi-sig wallet),多簽錢包就是需要每一方的簽名,才能改變錢包中的資產。開啟多簽錢包的交易就稱為充值事務(funding transaction),就像是上文中的結婚同意書一樣,會記錄雙方將多少錢帶入這個多簽錢包(婚姻)。

funding transaction

bc1shizuku -> 1 BTC
bc1haru -> 2 BTC

signed by: bc1shizuku, bc1haru

bc1shizuku 就會有 1 BTC 被轉到多簽錢包,bc1haru 則會有 2 BTC 被轉到多簽錢包。接下來若春要付雫 0.1 BTC,多簽錢包中的餘額就要改為 bc1shizuku 1.1 BTC、bc1haru 1.9 BTC,雙方就會簽署一個承諾事務(commitment transaction),就對應到上文中的離婚協議書,只要將這個承諾事務發佈到比特幣網路上,通道就會以該內容結算,並關閉通道,對應到上文的離婚。

commitment transaction

bc1shizuku -> 1.1 BTC
bc1haru -> 1.9 BTC

signed by: bc1shizuku, bc1haru

但因為兩人接下來還會繼續交易,沒有理由現在就關閉通道。儘管比特幣區塊鏈上還沒有寫上這筆交易資訊,但因為雙方都「只要想,隨時可以關閉通道並結算」,所以可以保障這筆交易是有效的。

撤消密鑰 Revocation Key

如何避免對方送出了過去的承諾事務,就是運用上文提到的交換帳號密碼技巧,也就是撤消密鑰(Revocation Key),只是換成了比特幣中的錢包。將上面的轉帳 0.1 BTC 加上撤消密鑰:

commitment transaction (owned by bc1haru)

bc1shizuku -> 1.1 BTC

bc1revocationkey1 -> 1.9 BTC
wait 1000 blocks:
bc1haru -> 1.9 BTC

signed by: bc1shizuku
commitment transaction (owned by bc1shizuku)

bc1haru -> 1.9 BTC

bc1revocationkey2 -> 1.1 BTC
wait 1000 blocks:
bc1shizuku -> 1.1 BTC

signed by: bc1haru

跟上文的邏輯相同,雙方持有的都是對自己不利的合約,會將給自己的錢凍結 1000 區塊才能轉進自己的地址。與此同時,會將上一次的撤消金鑰交給對方,因此如果將不是最後一次的承諾事務發佈到區塊鏈,對方就有 1000 個區塊的時間可以把你的錢搶過來,作為不誠實的懲罰。

當兩人真的不需要再進行交易,想要和平分手時,就可以結算最後的餘額,發出一個不帶時間鎖和撤消金鑰的交易,雙方即可立即取回資產,不需等待 1000 個區塊的時間。撤消金鑰與時間鎖的設計是用來避免極端情況的「保險」。和平分手跟強制結束關係就對應到 cooperative-close 與 force-close,強制關閉會讓自己多等不必要的時間,除非必要不建議使用。

如何開始用閃電網路

首先要裝一個支援閃電網路的錢包,我去試用了一大堆後,最推的就是 Phoenix 錢包,它是自由軟體,在 Android 和 iOS 都是原生應用程式(不是 JavaScript 或 Flutter),效能明顯優於其他錢包(Blue、Muun)。其錢包私鑰是用助憶詞儲存,且跟有名的比特幣錢包 Electrum 兼容,不過由於閃電網路的特性(需要儲存承諾事務——離婚協議書),不建議在多個裝置使用同一個地址,可能會發生不可預期的錯誤。

裝完後就可以在 receive 的分頁,找到 "show a Bitcoin address",接著只要把 Bitcoin 轉進這個地址,就會幫你把錢放入閃電網路(多簽錢包、channel)了。注意:該地址只能用來充值,不是你的比特幣地址,也就是你無權動用該地址的資產

當你會用 Phoenix,想要玩更進階,就可以用剛提到的 Electrum,並參考這篇教學,一步一步從開啟通道到結束通道全部體驗一遍,可以學到很多東西。

閃電網路之特性與注意事項

  1. 不宜轉大金額:由於閃電網路是基於交易通道,因此能轉出跟轉入的金額都受限於多簽錢包內的餘額。舉春和雫的例子,當今天春在通道裡有 2 BTC,雫有 1 BTC,那春最多就只能轉給雫 2 BTC,最多也只能從雫那得到 1 BTC。比較易於使用的錢包都會自動幫你開通道,來使交易得以完成,但由於你需要「保存承諾事務」(離婚協議書),若手機弄丟,會有財產遺失的風險。
  2. 一次請款只能收一次款:閃電網路跟單純的比特幣有個很大的不同,比特幣是由付款方輸入收款方地址,然後就能把錢轉過去,不需要收款方的同意;然而閃電網路則需要收款方先產生一張「請款單」,付款方有了請款單才能打錢過去,而且一張請款單只能收一次款(還會有時間限制),其原因跟閃電網路是如何橫跨多個通道轉帳相關,有興趣可參考延伸閱讀,若未來有機會再撰文分享。
  3. 交易有更高的隱私性:由閃電網路不會將每筆交易上鏈,只將「結果」上鏈(在未來關掉通道的某一天),交易也可能是跨越多個通道完成,每個人只能看到自己的通道內發生的交易,在隱私性上有很大的提升。
  4. 有機會做到離線交易:因為閃電網路只需要參與方交換合約,如果兩個人之間有直接的通道,有機會能做到不需要網路也能交易,如使用 NFC、RFID 等技術。
  5. 還是有(不定額的)手續費:有人會以為閃電網路完全沒有手續費,這只有在你與對方有直接的通道才成立,大部分情況下都不會有,這時就需要經過別的通道來「轉交」,經過別人就需要付過路費,路徑越遠越複雜就會越貴,我目前最高遇過是到 $5 TWD,其他通常不到 $0.2 TWD,如果有需要開新的通道可能就會提高到 $50 TWD。

總結閃電網路的合適應用場景:單次、小額、快速的支付,如日常消費。其他如募款、大額轉帳,則更適合直接使用比特幣區塊鏈,現在的手續費也已降到 20 元台幣左右了,跟以太坊動輒數百相比,可說是相當便宜。

搭配了閃電網路的比特幣,真正實現了「去中心化電子現金」的理想。


一天,雫躺在床上,看著手上的結婚戒指,說:

「吶春,我們把離婚協議書都燒了吧!」

春轉過頭,驚訝的看著雫。

「既然現在已經有這麼方便的閃電網路了。比起錢,我還是想永遠跟你在一起」

本文故事純屬虛構,主角名稱來自動漫《鄰座的怪同學》。

延伸閱讀

我很早就已經「聽過」閃電網路,但看了很多文章都沒有一篇能讓我真正搞懂,直到看到大神 Magomed Aliev 的詳細解說,才終於完全了解。於是我也用了自己的方式解釋,希望能讓更多人理解閃電網路的運作。

發表於 wancat.cc

Like my work??
Don't forget to support or like, so I know you are with me..

CC BY-NC-ND 2.0
16

Want to read more ?

Login with one click and join the most diverse creator community.