1. 程式人生 > >既為支付而生,何必捨本逐末:人人都能上手的閃電網路實戰

既為支付而生,何必捨本逐末:人人都能上手的閃電網路實戰

2018這一年,筆者一直在思考一個問題:區塊鏈行業最強需求(應用)場景是什麼?

我的結論是--支付!前不久以太坊創始人VB發表言論,也認為當前環境下,支付是數字貨幣最強需求。既為支付而生,何必捨本逐末,挖空心思,研究如何用它來養豬。

數字支付,似乎諱莫如深。但事實並非如此,如果我說,只要你有比特幣,不需要登陸/認證,輸個手機號,掃個二維碼,你就能給任何手機充值,你信嗎?

本文試圖用最簡單的語言和方式:

  1. 教會大家使用閃電網路,完成一筆真實的現網支付;

  2. 如果你懂點技術,進而可以建立自己的LN node,在網上收取手續費;

  3. 可以建立自己的支援閃電網路支付的網店和實體店。

 

簡單的閃電網路

閃電網路(Lightning Network,簡稱LN),2015年就已經發布了技術白皮書,2017年底上線比特幣主網,可以實現“即時到賬”的比特幣“微支付”,是比特幣的側鏈技術,理論上費用可以是0,實際現網中,基本是每位元組1聰(1BTC=1億聰)。

如果你只想看看現網怎麼完成一筆真實的閃電網路支付,可以直接跳到第三節。

有人通過閃電網路支付了千分之一聰,用以證明LN微支付能力:

舊時王謝堂前燕,飛入尋常百姓家

讀者們都聽說過比特幣,但真正用比特幣去支付的卻寥寥無幾,更不要說用過閃電網路。其實,閃電網路支付非常簡單,下面通過這個視訊,讓我們瞭解一下:

https://v.qq.com/x/page/w1355n9gfpu.html

這是一個在比特幣測試網路上完成的LN支付過程,其中通過手機模擬軟體,把手機上App的操作也錄屏在視訊裡面了,可以清晰的看到支付的全過程。後面會給大家介紹真實網路的支付。

閃電網路的由來和現狀

2017年下半年的比特幣擴容之爭,大家分道揚鑣:比特幣核心團隊(core)發展閃電網路,礦工分叉了大區塊BCH。2018年底,閃電網路上線主網已經有1年的時間,節點數呈現指數級增長,達到了近5000,相關應用和錢包也呈現爆發式增長。同時,2019年去中心化交易會逐步普及,除了支付,閃電網路也是去中心化交易所的實現之一。

閃電網路現狀:近5000節點(node),15000支付通道(channel),500BTC能力。

閃電網路支付比對

如果從安裝軟體開始,整個過程還是比較複雜的。LN支付相對而言,沒有認證,登陸等過程,會更簡單。

複雜的閃電網路

操作複雜

一年前,閃電網路剛剛上線的時候,還沒有可以安裝在手機上的App錢包支援,當時也只有BlockStream(BS)公司提供網店可以嘗試。筆者嘗試買了幾件衣服,大概過程是這樣的:

  • 在筆記本上搭建了一個Linux環境;

  • 在Linux上安裝一個BTC全節點,同步將近200GB的資料,當時大概用了不到2天同步完成;

  • 下載BlockStream公司的LN實現軟體(C語言編寫),沒有安裝包,需要自己編譯;

  • 執行LN node服務程序; 

  • 命令列生成一個BTC地址,用自己另外一個手機比特幣錢包轉賬到這個地址;

  • 執行LN命令,跟BS公司的LN node建立一個channel,在channel上充值一定量的BTC。當然,這些都是linux上的命令列操作,完全沒有圖形化管理;

  • 開啟瀏覽器,在BS商店選擇商品,生成一個LN支付invoice(就是一長串字元),把這段字元複製下來;

  • 在linux上繼續呼叫LN支付命令,命令引數帶上上面生成的invoice,完成支付。果然是秒確認。之後會收到郵件確認,等待收貨。

完成以上內容,成就感滿滿,你感覺不是完成了一次支付,而是做了一個登月工程!這種要是能推而廣之,真是見鬼了。

當然,隨著手機側App普及,這個過程變成了掃一掃,點一點就能夠完成。

技術實現複雜

要理解閃電網路後臺的實現技術,你需要很多的技術知識,比如隔離見證(SW)/多重簽名/雜湊時間鎖合約等等,每一個技術要想講明白,透徹,都要很大的篇幅。這裡簡單描述,不想讓大家讀不下去的感覺。

閃電網路首先是把資金存入一個2 of 2的多重簽名地址,雙方簽名確認最初的狀態,然後每一次支付,都是消耗這裡面的資金,每次會根據交易後雙方新的金額生成一個新的雙方簽名的交易,而不是在原有交易上追加。

 

有路由(routing)的概念,類似於BGP路由協議,理論上你可以通過中間node把一筆錢支付給網路上的任何一個node。而中間經過每一個node,就要生成一個雜湊時間鎖交易(HTLC),在時間鎖到期時間內,最終收款方確認到賬,中間所有交易一步步確認,保證過程中沒有欺詐。

由於LN支付過程可能產生大量交易,交易的主要標識就是交易hash,為了使這個值唯一,引入了隔離見證(SW),把交易簽名部分拉出來放到交易最後。

是不是很複雜,真的不能再說了,否則講不完了。

實戰

閒話少敘,過程大概如下:先安裝一個支援LN的錢包,開通一條支付通道(channel),同時在channel上存入一定的btc,然後就可以掃碼支付了。如果不想玩了,關閉通道,剩餘的幣就回到錢包。

完成一次真實的閃電網路支付

我們以支付話費為例展開介紹。

1. 安裝錢包

下載一個支援閃電網路的錢包,這裡有幾乎所有錢包的彙總:

http://lightningnetworkstores.com/wallets

筆者強烈建議使用第一個錢包:Eclair,當前只有安卓版,開源軟體。Github下載地址:https://github.com/ACINQ/eclair-wallet/releases

Google應用商店下載地址:

https://play.google.com/store/apps/details?id=fr.acinq.eclair.wallet.mainnet2&hl=en_US

使用錢包大家務必謹慎,一些惡意錢包可能造成資金被盜。除此之外,個別錢包我也測試過,可能不夠穩定,閃退,不知道現在好了沒有。上面推薦的這個錢包很穩定。

安裝後傳送一點點BTC到錢包地址,大概0.003BTC左右即可。

2. 開通一條支付通道(channel)

去https://1ml.com/,隨便選擇一個活躍(active)的節點(node),比如Bitrefill這個LN Node:

030[email protected]52.50.244.44:9735

注意要選擇後面帶有@IP:埠的這種,這種是有公網IP的節點,沒有公網IP的沒辦法跟它建立channel。

錢包滑到最右邊“lightning channels”,點選右下角的“+”,出現下面介面:

4個選項任選其一。最簡單的就是選擇最後一個“acinq node”,這個是跟Eclair的node建立channel。本處選擇第二個掃描二維碼方式建立。輸入channel繫結的金額(比如0.002BTC),交易費可以選擇1聰/位元組,點選“確定”即可。不要把錢包所有的錢都充值到channel,會失敗,原因是你需要付礦工費。如果你錢包裡面有0.003BTC,可以在這裡輸入0.002BTC。需要6個主網上的區塊確認,channel才能顯示為正常可用狀態“normal”,這個時間當前大概在1小時左右。

這裡需要特別說明,選擇建立channel的node,哪個都沒有關係,只要是活躍的(active)即可,如果沒有公網ip的,會提示你不能建立channel。閃電網路通過技術保證了整個過程不需要對其他node有任何信任(trustless),理論上任何一個active的node都一樣,通過routing路由方式到其他node完全可達。

同時,開通channel不需要對端node的確認,你想連誰就連誰。

 

3. 掃碼

在channel顯示“normal”後,進入要購買商品或者服務的網店。這裡我們選擇https://www.bitrefill.com/vouchers/lightning——LN上最著名的網店。不需要註冊,找到“China”,然後在輸入欄輸入自己的手機號碼,建議是中國移動的號碼(電信和聯通我沒有嘗試成功,有興趣可以試試),點選後面的對號。

選擇話費金額,選擇第一個支付方式“lightning btc”,出現支付二維碼和對應的具體支付BTC數量,這個數值是根據交易所的實時報價所得,15分鐘內有效。

錢包介面向左滑動到“transaction history”,點選右下角的箭頭,出現下圖介面:

一般選擇第二個掃描二維碼方式:“scan a payment request”,掃描網店提供的支付二維碼既可以完成。

稍等幾秒鐘,介面還沒有顯示成功,你很可能已經收到中國移動發來的充值成功確認簡訊了。

不要認為是中國移動支援btc支付,其實就是國內的某個代理的充值,而且代理收到的也不是btc,而是普通的人民幣,所有轉換由Bitrefill這個網店完成。

支付的BTC數量,不能超過你存入channel的數量,跟你Eclair錢包有多少BTC無關。你可以多次支付,直到channel裡面的btc用光為止。

4. 關閉channel

當你不再想支付的時候,記得關閉channel,這樣,剩餘在channel上的錢,才能重新回到你的錢包。

Channel關閉通常有3種情況,最後錢都會回到你的錢包:雙方協商關閉/一方已經下線,另一方強制關閉/channel到期,通常是開通的時候約定的,預設30天。

最好的方式第一種:協商關閉,錢瞬間結算併產生比特幣主網交易,返回錢包。

錢包滑動到最右“lightning channels”,點選你之前建立的channel,選擇“close channel”,顯示如下:

不要選擇“I want to force-close this channel”,這個是在對方node已經不線上的情況下強制關閉channel,你的幣會在預設144個區塊(大概24小時)確認後到賬,很慢,直接點選“close channel”,大概幾秒鐘後會產生一個比特幣主網的交易,channel裡面沒有用完的錢會發送到你的錢包地址,已經支付給商家的幣,會發送給商家。

構建一個LN node(類似server)

  • Lightning Labs – this is the company that develops LND (Lightning Network Daemon)

  • ACINQ — a French company whose product is called Eclair

  • Blockstream team — they are implementing the c-lightning client and Lightning gateway for e-commerce services

  • https://github.com/PierreRochard/node-launcher Bitcoin and Lightning node launcher for macOS, and Windows

上一節介紹的Eclair只是一個閃電網路的輕錢包,要想建設一個線上實時提供服務的LN node,類似server的概念,以上4個產品可以實現。相對而言,閃電網路的錢包就多了去了。

無論哪一個實現,前提都是要在同一臺機器上先安裝一個BTC全節點,同步完將近200GB的資料,否則LN程序啟動會失敗。當然你也可以在測試網路上實現,只要同步9GB左右的資料即可。

  • BS公司的c-lightning應該是第一個閃電網路實現,Linux下安裝執行,需要自己編譯,Github地址如下:https://github.com/ElementsProject/lightning

  • ACINQ跟Eclair是同一家公司的產品,可以在windows下安裝實現,對於很多入門者更加簡單直觀。

  • node-launcher可以在蘋果Mac和windows上安裝實現。

  • Lightning Labs的LND需要Linux環境。

有興趣的可以選擇上面任何一個進行測試。

當然,以上實現都可以藉助docker方式,快速部署,省去了很多繁瑣的配置。

另外,如果你要建立一個能夠被別人連線建立channel的node,需要有一個公網IP地址,私網nat地址在LN網路上看不到。

建立LN node的意義是什麼呢,跟普通閃電網路錢包的差異在哪裡?

建立LN node後,你可以服務他人,同時收取一定的手續費,類似於比特幣主網上的礦工的角色。閃電網路上的node越多,就越健康,不會因為個別node下線造成支付失敗。

支付的場景和周邊

下文介紹幾個閃電網路的擴充套件:

去中心化交易是當前一個熱門發展方向,而閃電網路就是其中的實現方式之一。我知道bitfinex很早就上線了,而且用的是以太坊技術。最近發現BS公司公佈的合作伙伴中也有bitfinex,說明交易所也在多方面嘗試這個新鮮事物。

BTCpay,一鍵開店,支援閃電網路和多種數字貨幣支付的平臺。可以構建一個去中心化的支付公司。

最早接受比特幣支付的實體店,往往是店員拿來計算器,把客戶選擇商品對應的法幣根據自己認為合理的兌換價格,換算成比特幣,然後開啟自己的比特幣錢包,輸入付款金額,使用者掃描完成付款。

這種情況在BTCpay出現後一去不復返了。這個軟體平臺通過web方式,可以讓商家一鍵開店,簡單輸入自己商品的描述和法幣的價格,輸入自己接受數字貨幣的錢包地址,然後就可以讓使用者在web介面點選支付,當前已經支援閃電網路支付方式。

產品通過自動查詢幣安和hitbtc兩個交易所的價格實時更新網店商品法幣對應數字貨幣的價格,國內無法查詢,如果測試,最好在國外的雲平臺上測試。由於開源,比價的交易所可以自己隨意選擇。

 

樹莓派上構建LN node

樹莓派,售價大概300~500人民幣,可以理解成一個開放式的“手機”,使用arm cpu,可以搭建一個幾乎零功耗的LN node,24小時現網線上。一般會建議配合一個行動硬碟儲存BTC全節點資料(200GB左右),筆者剛剛查詢,當前一個400GB的SD卡也就500多塊錢,就不用外掛硬碟了。

搭建方式可參考如下連結:

https://medium.com/@jacobsteeves/raspberry-pi-lightning-network-w-no-external-drive-5-steps-d4fba98ac8cb

作者:Bob,安全行業老兵,對加解密技術爛熟於胸,看不到傳統安全行業有任何新意,擁抱區塊鏈的原因是想找點好玩的。自認為,一個東西你真的懂了,你會把它很簡單的講解出來,如果說得雲裡霧裡,天花亂墜,要麼是吹牛的需要,要麼就是不懂!

 

推薦閱讀: