本教程介紹如何使用Liquid側鏈的c-lightning來建立閃電支付通道。使用這些支付通道,用戶能夠實時、私有地交易Liquid-BTC。php
Liquid網絡包含有對私密交易和資產發行的支持,所以用戶可使用閃電支付通道交易任何在Liquid網絡上發行的資產,例如通證化的發幣、加密資產等等。另外,對鏈上BTC和支付通道L-BTC的兌換的支持工做也在進行中。java
使用Liquid網絡上的c-lightning和比特幣主網上流程同樣,所以若是你熟悉哪些步驟的話,這個教程就會很容易 —— 雖然原本就是件容易的事。node
首先咱們須要一個同步的比特幣節點和一個同步的Elements節點,才能在Liquid側鏈上開啓閃電支付通道。你能夠參考如下連接安裝bitcoin節點軟件和elements節點軟件:python
一旦兩個節點都完成同步,安裝了必須的依賴:git
~$ sudo apt-get install -y \ autoconf automake build-essential git libtool libgmp-dev \ libsqlite3-dev python python3 net-tools zlib1g-dev libsodium-dev
而後從Christian Decker的github倉庫拉取lightening-elements分支:github
~$ git clone https://github.com/cdecker/lightning ~$ cd lightning ~/lightning$ git fetch --all ~/lightning$ git checkout lightning-elements
如今使用源代碼構建:sql
~/lightning$ ./configure ~/lightning$ make
構建完成後,就能夠獲得lightingd/lightningd
和cli/lightning-cli
。json
若是但願快速掌握區塊鏈應用的開發,推薦匯智網的 區塊鏈應用開發系列教程, 內容涵蓋比特幣、以太坊、eos、超級帳本fabric和tendermint等多種區塊鏈, 以及 java、go、nodejs、python、php、dart等多種開發語言網絡
lightningd
提供了一個--network
參數來選擇要在哪一個鏈上運行,例如比特幣主鏈、測試鏈、私有開發鏈等。lightning-elements分支也支持liquid側鏈,所以咱們使用這個選項:socket
~/lightning$ ./lightningd/lightningd --network liquid ... <other arguments>
它會開始和Liquid側鏈同步:
~/lighting$ ./lightningd/lightningd --network liquid 2019-06-29T23:14:40.599Z lightning_gossipd(29574): We seem to be missing gossip messages 2019-06-29T23:14:40.689Z lightningd(29562): -------------------------------------------------- 2019-06-29T23:14:40.689Z lightningd(29562): Server started with public key 02954a618a5684fbb7454d0c1bc87579d5164c35829fccc54d9f4df1a369356b48, alias $ OUDFIRE (color #02954a) and lightningd v0.6rc1-1998-g6d4c40f 2019-06-29T23:22:46.297Z lightningd(29562): JSON-RPC shutdown grubles@thinky:~/builds/lightning$ ./lightningd/lightningd --network liquid --log-level debug 2019-06-29T23:22:55.640Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_channeld 2019-06-29T23:22:55.641Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_closingd 2019-06-29T23:22:55.642Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_connectd 2019-06-29T23:22:55.643Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_gossipd 2019-06-29T23:22:55.645Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_hsmd 2019-06-29T23:22:55.646Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_onchaind 2019-06-29T23:22:55.647Z lightningd(29963): testing /home/grubles/builds/lightning/lightningd/lightning_openingd 2019-06-29T23:22:55.677Z lightning_hsmd(29973): pid 29973, msgfd 17 2019-06-29T23:22:55.687Z lightning_connectd(29974): pid 29974, msgfd 20 2019-06-29T23:22:55.688Z lightning_hsmd(29973): Client: Received message 11 from client 2019-06-29T23:22:55.688Z lightning_hsmd(29973): Client: Received message 9 from client 2019-06-29T23:22:55.688Z lightning_hsmd(29973): new_client: 0 2019-06-29T23:22:55.806Z lightning_connectd(29974): Broken DNS resolver detected, will check for dummy replies 2019-06-29T23:22:55.806Z lightning_connectd(29974): Created IPv6 listener on port 9735 2019-06-29T23:22:55.806Z lightning_connectd(29974): Failed to connect 10 socket: Network is unreachable 2019-06-29T23:22:55.806Z lightning_connectd(29974): Created IPv4 listener on port 9735 2019-06-29T23:22:55.806Z lightning_connectd(29974): REPLY WIRE_CONNECTCTL_INIT_REPLY with 0 fds 2019-06-29T23:22:55.807Z lightning_gossipd(29975): pid 29975, msgfd 19 2019-06-29T23:22:55.822Z lightning_hsmd(29973): Client: Received message 9 from client 2019-06-29T23:22:55.822Z lightning_hsmd(29973): new_client: 0 2019-06-29T23:22:55.822Z lightning_gossipd(29975): gossip_store_compact_offline: 0 deleted, 0 copied 2019-06-29T23:22:55.822Z lightning_gossipd(29975): total store load time: 0 msec 2019-06-29T23:22:55.822Z lightning_gossipd(29975): gossip_store: Read 0/0/0/0 cannounce/cupdate/nannounce/cdelete from store (0 deleted) in 1 bytes 2019-06-29T23:22:55.823Z lightning_gossipd(29975): We seem to be missing gossip messages 2019-06-29T23:22:55.859Z lightningd(29963): Adding block 367714: 8173bffd993028ee63fd46adc808d9820f752c550140028f2fd7ca67b654cdcc 2019-06-29T23:22:55.893Z lightningd(29963): Smoothed feerate estimate for urgent initialized to polled estimate 250 2019-06-29T23:22:55.893Z lightningd(29963): ... feerate estimate for urgent hit floor 253 2019-06-29T23:22:55.893Z lightningd(29963): Feerate estimate for urgent set to 253 (was 0) 2019-06-29T23:22:55.893Z lightningd(29963): Smoothed feerate estimate for normal initialized to polled estimate 250 2019-06-29T23:22:55.893Z lightningd(29963): ... feerate estimate for normal hit floor 253 2019-06-29T23:22:55.893Z lightningd(29963): Feerate estimate for normal set to 253 (was 0) 2019-06-29T23:22:55.893Z lightningd(29963): Smoothed feerate estimate for slow initialized to polled estimate 250 2019-06-29T23:22:55.893Z lightningd(29963): ... feerate estimate for slow hit floor 253 2019-06-29T23:22:55.893Z lightningd(29963): Feerate estimate for slow set to 253 (was 0) 2019-06-29T23:22:55.894Z lightningd(29963): Loaded 0 channels from DB 2019-06-29T23:22:55.894Z jsonrpc Listening on 'lightning-rpc' 2019-06-29T23:22:55.894Z lightning_connectd(29974): REPLY WIRE_CONNECTCTL_ACTIVATE_REPLY with 0 fds 2019-06-29T23:22:55.894Z lightningd(29963): -------------------------------------------------- 2019-06-29T23:22:55.894Z lightningd(29963): Server started with public key 02954a618a5684fbb7454d0c1bc87579d5164c35829fccc54d9f4df1a369356b48, alias LOUDFIRE (color #02954a) and lightningd v0.6rc1-1998-g6d4c40f 2019-06-29T23:22:55.895Z plugin-autoclean autocleaning not active 2019-06-29T23:22:55.907Z lightningd(29963): Adding block 367715: 9efb9d3cc313bd403225a8a461603157c74b7c8878169c5140cafa808f3dd71f 2019-06-29T23:22:55.937Z lightningd(29963): Adding block 367716: 6b2df8e54a58a933d7d5e19e76428e06a6447db8254d875a966536b6e7eadbda 2019-06-29T23:22:55.980Z lightningd(29963): Adding block 367717: 2fed71e138f77b8ab6e3f286f308be829fb436154d83aa83a58275ac3745735f 2019-06-29T23:22:56.003Z lightningd(29963): Adding block 367718: aaf417b0e696d737b3e49ab24c0d1562f930be5a44e84136ef9b60a49ce70f65 2019-06-29T23:22:56.040Z lightningd(29963): Adding block 367719: 2563e72d0e7cade03e4005bba463baf80f06a310c373453bb1b22a1395ef46a3 2019-06-29T23:22:56.066Z lightningd(29963): Adding block 367720: dd33dd008c96fdb8f44018fe1d361fa84d7a444f41b1b522c69a9a21e0ce5353 2019-06-29T23:22:56.102Z lightningd(29963): Adding block 367721: 96b0fb6c2ffce86fad91fd001130c37674778312a9f13cccbbffecfd75d21d3a 2019-06-29T23:22:56.132Z lightningd(29963): Adding block 367722: 4fcf8c4b922eeaa604a6c86d3fbfcfd2f6380fad02b0c3150af524d7008fcbcd 2019-06-29T23:22:56.163Z lightningd(29963): Adding block 367723: ac7f818271dd1c7e4dd6bc0e7a4a578edb3ec18cf686cfe7390ab432f4d7cdc5 2019-06-29T23:22:56.199Z lightningd(29963): Adding block 367724: d1b6790da7dca153dd247efeaf11f0592df469cc588b92f07f954521a66cefb6 2019-06-29T23:22:56.235Z lightningd(29963): Adding block 367725: f0a4824ee24e0f327571bdc0acb238162a001be00f12d203e9f15fffba9de20b 2019-06-29T23:22:56.263Z lightningd(29963): Adding block 367726: c6e9b5088c32313272a2235b6865e416f8130a51b5c8fcae5329f80dc6ed1b88 2019-06-29T23:22:56.305Z lightningd(29963): Adding block 367727: 3564d2781de473b6c5cb83cfb819f77523cc4e3a53b3dd19244eeb9d5498aa1a 2019-06-29T23:22:56.336Z lightningd(29963): Adding block 367728: a3b0362a5b6dfc9060f36baa1eb801281eb29438fa0c5287bcba043c6c6a9e02 2019-06-29T23:22:56.398Z lightningd(29963): Adding block 367729: 7b741e9d21e6da7c10807734b8380ea133fafefe10d8e4ba5933ad3c15331317
如今咱們能夠開始充值一個地址以便開啓閃電通道。只須要使用lightning-cli來生成一個p2sh-segwit地址,而後向它發送一些L-BTC。
要獲取Liquid-BTC(L-BTC),要麼從某個Liquid成員交易所購買,例如Bitfinex、The Rock Trading或者shapeshift.ai,或者按如下指南進行手工錨定。
首先生成一個p2sh-segwit地址:
~/lightning$ ./cli/lightning-cli newaddr p2sh-segwit { "address" : "Gqkico7M9JGyQmk2TjFgqXwYMrrT2ExwXL", "p2sh-segwit" : "Gqkico7M9JGyQmk2TjFgqXwYMrrT2ExwXL" }
而後向這個地址轉一些L-BTC,而後鏈接到Liquid LIghting對等節點。鏈接命令格式以下:
connect public_key@ip_address:port
在本教程中,咱們使用一個局域網上的對等節點:
~/lightning$ ./cli/lightning-cli connect 0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead@192.168.1.230 { "id" : "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead" }
可使用listpeers
命令查看鏈接的對等節點:
~/lightning$ ./cli/lightning-cli listpeers { "peers" : [ { "id" : "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead", "connected" : true, "netaddr" : [ "192.168.1.230:9735" ], "globalfeatures" : "", "localfeatures" : "aa", "channels" : [] } ] }
L-BTC交易應該已經有確認了,由於在Liquid側臉上的結算時間很快(1~2分鐘):
~/lightnint$ ./cli/lightning-cli listfunds { "outputs" : [ { "txid" : "1ca26aa0c5938997b82abd9de25e5207bedb08bf46635ff40b067e2e91d735e4", "output" : 0, "value" : 100000, "amount_msat" : "100000000msat", "address" : "Gqkico7M9JGyQmk2TjFgqXwYMrrT2ExwXL", "status" : "confirmed" }, ], "channels" : [] }
能夠看到,value值爲100000,對應0.00100000 L-BTC。
如今咱們開啓通道。命令格式以下:
fundchannel <peer id> <amount in satoshis>
amount
參數能夠是all
,以便使用錢包中全部可用的L-BTC:
~/lighting$ ./cli/lightning-cli fundchannel 0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead 100000
命令執行後,將會輸出16進製表示的交易字符串、交易ID和通道ID:
{ "tx" : "020000000102167ff7b6501b78069db92d0dc1abc56bd12e3e12a049a7e668ea0023ed68db9f00000000171600144c36e234a654d79b3c052a98c087ca51a69077a9ffffffffe435d7912e7e060bf45f6346bf08dbbe07525ee29dbd2ab8978993c5a06aa21c00000000171600144c36e234a654d79b3c052a98c087ca51a69077a9ffffffff03016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f0100000000000186a000220020f6c2e31f79596b12c103fa6b6d42dbe422e42bf3ca208247301ebb6a34f16f2e016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f010000000000957e5d00160014aefd2d126fc8f9bbbeea3aad39dab5564c7b92ae016d521c38ec1ea15734ae22b7c46064412829c0d0579f0a713d1c04ede979026f010000000000000192000000000000000002483045022100fe77d62b82afb07cf77a4a332cec1e5bce9f9419ca17c7c7385515790c9c4e1102202ac8d4f74f9c4d40fb51515ea12603e3bea1d3fb5749beab475a3de9bc861b7e0121022b46e22dea88d566d894d98e406b1a24b8b985821457875dd4fc909dd2522bfc0000000247304402203f43266df0423aedc1a4c78999f470e34fd698ab993787644f76885c9c372ed802204665f7ff9644ff7f9b7c3a13ec16bf1ed96120a1d348aaa7a96fc1df49c9d6090121022b46e22dea88d566d894d98e406b1a24b8b985821457875dd4fc909dd2522bfc00000000000000", "txid" : "e6dda930c3fca7102bae1222928d022b3cf8664667a1b3b33680955ad2c0cf41", "channel_id" : "41cfc0d25a958036b3b3a1674666f83c2b028d922212ae2b10a7fcc330a9dde6" }
使用listpeers
命令查看的話,能夠看到通道的狀態爲:
~/lightning$ ./cli/lightning-cli listpeers { "peers" : [ { [35/1969] "id" : "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead", "connected" : true, "netaddr" : [ "192.168.1.230:9735" ], "globalfeatures" : "", "localfeatures" : "aa", "channels" : [ { "state" : "CHANNELD_AWAITING_LOCKIN", "scratch_txid" : "1668cfe52945cef47f9310c07292b773f4a1c2c113d0a84fd905f01409931948", "owner" : "lightning_channeld", "channel_id" : "41cfc0d25a958036b3b3a1674666f83c2b028d922212ae2b10a7fcc330a9dde6", "funding_txid" : "e6dda930c3fca7102bae1222928d022b3cf8664667a1b3b33680955ad2c0cf41", "private" : false, "funding_allocation_msat" : { "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead" : 0, "0298f02eaad77c7c8c3d64bd5f8604c80593dc454918b28353d1ea814e541111f0" : 100000000 }, "funding_msat" : { "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead" : "0msat", "0298f02eaad77c7c8c3d64bd5f8604c80593dc454918b28353d1ea814e541111f0" : "100000000msat" }, "msatoshi_to_us" : 100000000, "to_us_msat" : "100000000msat", "msatoshi_to_us_min" : 100000000, "min_to_us_msat" : "100000000msat", "msatoshi_to_us_max" : 100000000, "max_to_us_msat" : "100000000msat", "msatoshi_total" : 100000000, "total_msat" : "100000000msat", "dust_limit_satoshis" : 546, "dust_limit_msat" : "546000msat", "max_total_htlc_in_msat" : "18446744073709551615msat", "their_channel_reserve_satoshis" : 1000, "their_reserve_msat" : "1000000msat", "our_channel_reserve_satoshis" : 1000, "our_reserve_msat" : "1000000msat", "spendable_msatoshi" : 98774000, "spendable_msat" : "98774000msat", "htlc_minimum_msat" : 0, "minimum_htlc_in_msat" : "0msat", "their_to_self_delay" : 144, "our_to_self_delay" : 144, "max_accepted_htlcs" : 483, "status" : [ "CHANNELD_AWAITING_LOCKIN:Funding needs 2 more confirmations for lockin." ], "in_payments_offered" : 0, "in_msatoshi_offered" : 0, "in_offered_msat" : "0msat", "in_payments_fulfilled" : 0, "in_msatoshi_fulfilled" : 0, "in_fulfilled_msat" : "0msat", "out_payments_offered" : 0, "out_msatoshi_offered" : 0, "out_offered_msat" : "0msat", "out_payments_fulfilled" : 0, "out_msatoshi_fulfilled" : 0, "out_fulfilled_msat" : "0msat", "htlcs" : [] } ] } ] }
在3個Liquid區塊後(3分鐘),listpeers
將顯示「CHANNELD_NORMAL:Funding transaction locked」。
如今閃電通道已經開啓了!
如今本地網絡已經有了一個鏈接對等節點的通道,咱們能夠生成一個閃電發票,而後發送L-BTC微支付。
生成發票的命令格式以下:
invoice msatoshi label description
在下面的示例中,將建立一個100萬satoshi的L-BTC的發票,使用標籤「test1」 和描述「testing lightning on liquid」 。發票自己是一長串看起來隨機的字符,ln開頭:
~/lightning$ ./cli/lightning-cli invoice 1 test1 "testing lightning on liquid" { "payment_hash" : "1c03f18a5e3f36a7100c6524794cef9ef8873f3fb22ed5ec6311936e794b71cb", "expires_at" : 1562629445, "bolt11" : "lnex10p1pw34xk9pp5rsplrzj78um2wyqvv5j8jn80nmugw0elkghdtmrrzxfku72tw89sdpvw3jhxarfdenjqmrfva58gmnfdenjqmmwypkxjut4d9jqxqyjw5qcqp2mvzgw7fk48sn0n3jwuycs9ahqtl4nc7qp8j69g6sfphjyktztcnyqtsynjjykqc30820p5avqaf9af2mcsjctwwxj8avkpjfv2vh0dqq2wyzpa", }
在發送節點上,咱們可使用decodepay來解碼bech32編碼的閃電發票:
~/lightning$ ./cli/lightning-cli decodepay lnex10p1pw34xk9pp5rsplrzj78um2wyqvv5j8jn80nmugw0elkghdtmrrzxfku72tw89sdpvw3jhxarfdenjqmrfva58gmnfdenjqmmwypkxjut4d9jqxqyjw5qcqp2mvzgw7fk48sn0n3jwuycs9ahqtl4nc7qp8j69g6sfphjyktztcnyqtsynjjykqc30820p5avqaf9af2mcsjctwwxj8avkpjfv2vh0dqq2wyzpa { "currency" : "ex", "created_at" : 1562024645, "expiry" : 604800, "payee" : "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead", "msatoshi" : 1, "amount_msat" : "1msat", "description" : "testing lightning on liquid", "min_final_cltv_expiry" : 10, "payment_hash" : "1c03f18a5e3f36a7100c6524794cef9ef8873f3fb22ed5ec6311936e794b71cb", "signature" : "3045022100db04877936a9e137ce3277098817b702ff59e3c009e5a2a350486f2259625e260220402e049ca44b031179d4f0d3ac07525ea55bc42585b9c691facb0649629977b4" }
在發送節點上,使用pay命令來支付 0.00000000001 L-BTC:
~/lightnint$ ./cli/lightning-cli pay lnex10p1pw34xk9pp5rsplrzj78um2wyqvv5j8jn80nmugw0elkghdtmrrzxfku72tw89sdpvw3jhxarfdenjqmrfva58gmnfdenjqmmwypkxjut4d9jqxqyjw5qcqp2mvzgw7fk48sn0n3jwuycs9ahqtl4nc7qp8j69g6sfphjyktztcnyqtsynjjykqc30820p5avqaf9af2mcsjctwwxj8avkpjfv2vh0dqq2wyzpa { "id" : 1, "payment_hash" : "1c03f18a5e3f36a7100c6524794cef9ef8873f3fb22ed5ec6311936e794b71cb", "destination" : "0322d8d3fb7e77a88f373fa369a3e91cb63a24f1313c480ae09c5ffc56dbef7ead", "msatoshi" : 1, "amount_msat" : "1msat", "msatoshi_sent" : 1, "amount_sent_msat" : "1msat", "created_at" : 1562024759, "status" : "complete", "payment_preimage" : "7c6357460a3782ed806c8661b0b20c65287ecdc9cf7c6a9c2e85399ffff88f15", "bolt11" : "lnex10p1pw34xk9pp5rsplrzj78um2wyqvv5j8jn80nmugw0elkghdtmrrzxfku72tw89sdpvw3jhxarfdenjqmrfva58gmnfdenjqmmwypkxjut4d9jqxqyjw5qcqp2mvzgw7fk48sn0n3jwuycs9ahqtl4nc7qp8j69g6sfphjyktztcnyqtsynjjykqc30820p5avqaf9af2mcsjctwwxj8avkpjfv2vh0dqq2wyzpa" }
"status" 的值爲"complete",表示支付已經完成,發票已經支付!
能夠在兩個節點間隨意發送一些L-BTC。在昨晚測試以後,能夠按以下步驟關閉通道。
在其中一個節點上,使用close命令發起一個通道關閉:
~/lightnint$ ./cli/lightning-cli close <channel id>
上面的命令將會在鏈上提交關閉交易,通道將被關閉。
原文連接: 用Liquid網絡學習比特幣閃電支付 — 匯智網