溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux下怎么搭建比特幣閃電網(wǎng)絡(luò)節(jié)點

發(fā)布時間:2022-01-25 10:36:18 來源:億速云 閱讀:236 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“Linux下怎么搭建比特幣閃電網(wǎng)絡(luò)節(jié)點”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux下怎么搭建比特幣閃電網(wǎng)絡(luò)節(jié)點”這篇文章吧。

閃電網(wǎng)絡(luò)主要有三種實現(xiàn),Blockstream 用C語言實現(xiàn)的 Lightning,Lightning Labs 個用 Golang 實現(xiàn)的 Lightning Network Daemon (LND),ACINQ 用 Scala 實現(xiàn)的 Eclair。

截止目前(數(shù)據(jù)來源:1ML):

  • 節(jié)點數(shù): 6838

  • 通道數(shù): 30823

  • 網(wǎng)絡(luò)容量: 732.44 BTC

Linxu 服務(wù)器配置:

  • AWS  Ubuntu 18.04

  • 400G SSD

硬盤建議400G以上,因為目前比特幣主網(wǎng)數(shù)據(jù)已經(jīng)200G+了,并且區(qū)塊數(shù)據(jù)還在不斷增加。

安裝 Bitcoind

  1. bitcoind 安裝

    安裝包下載地址

    進入下載目錄

     cd /work/bitcoin/

    下載安裝包

     wget https://bitcoincore.org/bin/bitcoin-core-0.17.1/bitcoin-0.17.1-x86_64-linux-gnu.tar.gz

    解壓安裝包

     tar zxf bitcoin-0.17.1-x86_64-linux-gnu.tar.gz

    創(chuàng)建軟連接

     ln -fs /work/bitcoin/bitcoin-0.17.1/bin/bitcoind /usr/local/bin/bitcoind
     ln -fs /work/bitcoin/bitcoin-0.17.1/bin/bitcoin-cli /usr/local/bin/bitcoin-cli
  2. 創(chuàng)建配置

    創(chuàng)建比特幣的數(shù)據(jù)存儲目錄

     mkdir /work/bitcoin/datadir

    比特幣配置存儲目錄默認(rèn)就是 ~/.bitcoin  這里我們手動創(chuàng)建

     mkdir ~/.bitcoin

    創(chuàng)建比特幣的配置文件

     vi ~/.bitcoin/bitcoin.conf
     
     # ~/.bitcoin/bitcoin.conf
     # 配置我們剛剛創(chuàng)建的數(shù)據(jù)存儲目錄
     datadir=/work/bitcoin/datadir
     # 設(shè)置數(shù)據(jù)庫緩存大小
     dbcache=10240
     # 交易索引 txindex=1就代表全節(jié)點
     txindex=1
     # rpc訪問的user
     rpcuser=user
     # rpc訪問的password
     rpcpassword=password
     # 后臺啟動
     daemon=1
     server=1
     rest=1
     
     # 閃電網(wǎng)絡(luò)需要下面兩行配置的支持
     # 允許在本機端口28332上廣播原始區(qū)塊信息
     zmqpubrawblock=tcp://127.0.0.1:28332
     # 允許在本機端口28333上廣播原始交易信息
     zmqpubrawtx=tcp://127.0.0.1:28333

    創(chuàng)建 service 文件

     sudo touch /etc/systemd/system/bitcoind.service
     sudo chmod 664 /etc/systemd/system/bitcoind.service
     sudo vi /etc/systemd/system/bitcoind.service

    文件中添加如下內(nèi)容

     [Unit]
     Description=Bitcoin deamon service
     After=network.target
     
     [Service]
     User=root
     Group=root
     Type=forking
     PIDFile=/root/.bitcoin/bitcoind.pid
     ExecStart=/disk2/bitcoin/bitcoin-0.17.1/bin/bitcoind -daemon -conf=/root/.bitcoin/bitcoin.conf -pid=/root/.bitcoin/bitcoind.pid
     Restart=on-failure
     KillMode=process
     Restart=always
     TimeoutSec=120
     RestartSec=30
     
     [Install]
     WantedBy=multi-user.target

    保存后退出

  3. 運行

    啟動配置文件

     sudo systemctl enable bitcoind.service
     sudo service bitcoind start

    查看 bitcoind 是否啟動成功

     systemctl status bitcoind.service

    顯示結(jié)果如下代表 bitcoind 啟動成功( Ctrl-C 退出)

     ● bitcoind.service - Bitcoin deamon service
     Loaded: loaded (/etc/systemd/system/bitcoind.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2019-02-21 11:05:01 UTC; 3 weeks 3 days ago
     Main PID: 2542 (bitcoind)

    這時可以使用下面的命令查看 bitcoin 節(jié)點的監(jiān)控日志( Ctrl-C 退出)

     tail -f /work/bitcoin/datadir/debug.log -n 200

    如果一切順利這個時候就可以使用比特幣的 CLI 命令了

     bitcoin-cli getblockchaininfo
     {
     "chain": "main",
     "blocks": 567623,
     "headers": 567623,
     "bestblockhash": "000000000000000000235ebe51a7ac77ccac3edacc69ec6f9a6358ddd169d3af",
     "difficulty": 6068891541676.553,
     "mediantime": 1552901770,
     "verificationprogress": 0.9999975005433924,
     "initialblockdownload": false,
     "chainwork": "000000000000000000000000000000000000000005794deb1981367c12085090",
     "size_on_disk": 237720626781,
     "pruned": false
     ...
     }

    至此比特幣節(jié)點部分搭建完畢,剩下的就是漫長的等待節(jié)點數(shù)據(jù)同步了,我的大概同步了一天。

    注意:

    • 需要停止

       bitcoind

      程序的時候一定要正確停止,千萬不能直接殺進程,不然下次啟動的時候有可能需要很長時間來掃描數(shù)據(jù)庫,可以使用下面的命令來停止

       bitcoind

      服務(wù)

       sudo service bitcoind stop
    • bitcoind 才啟動的時候可能會提示 verifying blocks, 這個是正常的,等一會就好。

搭建 LND

  1. LND 配置

    二進制文件下載地址

    Github LND

    進入用來存放閃電網(wǎng)絡(luò)的數(shù)據(jù) lnd 目錄

     cd /work/lnd

    下載 lnd 編譯好的程序

     wget https://github.com/lightningnetwork/lnd/releases/download/v0.5.2-beta/lnd-linux-amd64-v0.5.2-beta.tar.gz

    解壓下載的文件

     tar -xvf lnd-linux-amd64-v0.5.2-beta.tar.gz

    解壓文件結(jié)構(gòu)很簡單,里面只有兩個可運行的程序 lnd 、lncli

    這里我們創(chuàng)建一個軟連接方便以后使用 lncli 命令

     ln -fs /work/lnd/lnd-linux-amd64-v0.5.2-beta/lncli /usr/local/bin/lncli

    接下來我們創(chuàng)建閃電網(wǎng)絡(luò)的配置文件,默認(rèn)的目錄在 /root/.lnd,我們創(chuàng)建 lnd.conf 文件并填入下面的配置內(nèi)容

     # LND Mainnet: lnd configuration
     # /root/.lnd/lnd.conf
     
     [Application Options]
     # 閃電網(wǎng)絡(luò)的數(shù)據(jù)存儲目錄 如果不指定這個的話 默認(rèn)在 /root/.lnd 路徑下
     datadir=/work/lnd/datadir/data
     # 日志輸出目錄
     logdir=/work/lnd/datadir/logs
     adminmacaroonpath=/work/lnd/datadir/data/chain/bitcoin/mainnet/admin.macaroon
     
     debuglevel=info
     debughtlc=false
     maxpendingchannels=20
     # 別名 自己節(jié)點對外展示的名字 展示在1ml上
     alias=xxx's LND
     color=#68F442
     # rpc監(jiān)聽的地址和端口 默認(rèn)10009
     rpclisten=localhost:10009
     # 對外暴露的本機的外網(wǎng)ip 其他人可以通過這個ip地址連接我們的節(jié)點
     externalip=xx.xx.xx.xx
     # 這兩個用于其它地方服務(wù)器通過rpc訪問節(jié)點 方便遠(yuǎn)程調(diào)試
     #tlsextraip=xx.xx.xx.xx
     #tlsextradomain=xxx.com
     [Bitcoin]
     bitcoin.active=1
     
     # enable either testnet or mainnet
     #bitcoin.testnet=1
     # 指定bitcoin主網(wǎng)運行
     bitcoin.mainnet=1
     bitcoin.node=bitcoind
     
     #自動駕駛模式 開啟之后可以自動幫我們連接節(jié)點 打開channel
     [autopilot]
     autopilot.active=1
     autopilot.maxchannels=5
     autopilot.allocation=0.1

    更多的配置可以在這里 查看

    • lnd : 閃電網(wǎng)絡(luò)后臺進程的守護程序,和比特幣的 bitcoind 類似

    • lncli:閃電網(wǎng)絡(luò)的 CLI 程序,用來通過命令行操作閃電網(wǎng)絡(luò),和比特幣的 bitcoin-cli 類似

接下來我們創(chuàng)建閃電網(wǎng)絡(luò)的service

 sudo touch /etc/systemd/system/lnd.service
 sudo chmod 664 /etc/systemd/system/lnd.service
 sudo vi /etc/systemd/system/lnd.service

配置如下

 [Unit]
 Description=LND Lightning Daemon
 After=network.target
 
 [Service]
 User=root
 Group=root
 Type=simple
 PIDFile=/root/.lnd/lnd.pid
 ExecStart=/work/lnd/lnd-linux-amd64-v0.5.2-beta/lnd --configfile=~/.lnd/lnd.conf
 restart=on-failure
 KillMode=process
 TimeoutSec=180
 RestartSec=60
 
 [Install]
 WantedBy=multi-user.target
  1. 啟動 LND

    配置完成后就可以通過下面的命令來啟動 lnd

     sudo systemctl enable lnd.service
     sudo service lnd start

    之后可以通過這個命令來查看 lnd 程序有沒有啟動成功

     ps -ef | grep lnd

    能看到我們剛才的配置的話,lnd 就算啟動成功了。

  2. 創(chuàng)建閃電網(wǎng)絡(luò)比特幣錢包

    這里我們可以等我們的比特幣區(qū)塊數(shù)據(jù)同步完成之后進行,因為后面的操作部分涉及上鏈。

我們先測試一下 CLI 是否已經(jīng)完全配置好了, 正常的返回應(yīng)該像下面這樣

 root@test:~# lncli getinfo
 {
     "identity_pubkey": "0274a542b693385f9e38d7acf4017ed31748d00693ff219c54e1b337495xxxxxx",
     "alias": "xxx's LND,
     "num_pending_channels": 0,
     "num_active_channels": 21,
     "num_peers": 29,
     "block_height": 568269,
     "block_hash": "0000000000000000001082cd0456f576eb99ae71e289501274d139a0334ec413",
     "synced_to_chain": true,
     "testnet": false,
     "chains": [
         "bitcoin"
     ],
     ...
     "best_header_timestamp": "1553248518",
     "version": "0.5.2-beta commit=v0.5.2-beta",
     "num_inactive_channels": 6
 }

接下來就可以創(chuàng)建一個錢包了啦

 root@test:~# lncli create
 Input wallet password:
 Confirm wallet password:
 Do you have an existing cipher seed mnemonic you want to use? (Enter y/n): n
 Your cipher seed can optionally be encrypted.
 Input your passphrase you wish to encrypt it (or press enter to proceed without a cipher seed passphrase):
 Generating fresh cipher seed...
 !!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!
 ---------------BEGIN LND CIPHER SEED---------------
  1  xxxx
    ...
  24 xxxx
 ---------------END LND CIPHER SEED-----------------
 !!!YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!!!
 lnd successfully initialized!

基本流程就是輸入需要設(shè)置的錢包密碼,確認(rèn)錢包密碼,輸入n選擇創(chuàng)建一個新的錢包,提示是否需要對 seed 加密,我選擇直接回車跳過,最后就是最重要的24個助記詞了,自行想辦法保存好,畢竟恢復(fù)錢包就靠它了。

錢包好了之后就該生成一個比特幣地址了,命令如下

 root@test:~# lncli newaddress np2wkh
 {
     "address": "bitcoin address"
 }

然后就是找個有 btc 的錢包往這個地址轉(zhuǎn)點幣就好了(不要轉(zhuǎn)太少,100w Sats以上吧),剩下的就是等待區(qū)塊確認(rèn)之后到賬, 可以使用下面的命令查看錢包余額是否到賬

 root@test:~# lncli walletbalance
 {
     "total_balance": "2463978",
     "confirmed_balance": "2463978",
     "unconfirmed_balance": "0"
 }

在確認(rèn)錢包到賬之后就可以連接其它的節(jié)點了。

  1. 連接節(jié)點

    我們?nèi)?1ML 上面找一個大一點的節(jié)點連它,我發(fā)現(xiàn) LightningPowerUsers 這個節(jié)點連接的 Channel 最多,我們就連它了

    root@test:~# lncli connect 0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c@74.108.13.152:9735
    {
    
    }
  2. 打開 channel

    連上之后我們需要和這個節(jié)點建立一個 channel

    root@test:~# lncli openchannel 0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c 397741
    {
     "funding_txid": "4c02e76b315008db58686a433f20b264850cef36e33f18ea51f9afb946a21802"
    }

    這里我們打開了一個容量為 397741 sats 的 channel , 返回一個 funding_txid 就代表成功了,剩下的就是等鏈上確認(rèn)了,我們可以查看這個狀態(tài)

    root@test:~# lncli pendingchannels
    {
        "total_limbo_balance": "0",
        "pending_open_channels": [
            {
                "channel": {
                    "remote_node_pub": "0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c",
                    "channel_point": "4c02e76b315008db58686a433f20b264850cef36e33f18ea51f9afb946a21802:0",
                    "capacity": "397741",
                    "local_balance": "393282",
                    "remote_balance": "0"
                },
                "confirmation_height": 0,
                "commit_fee": "4459",
                "commit_weight": "600",
                "fee_per_kw": "6159"
            }
        ],
        "pending_closing_channels": [
        ],
        "pending_force_closing_channels": [
        ],
        "waiting_close_channels": [
        ]
    }
  3. 收款

    接下來我們可以發(fā)送和接收 sats了,我們先接收一筆 sats

    生成一張 15 sats 的 invoice

    root@test:~# lncli addinvoice --amt 15
    {
     "r_hash": "b94768e4e2e89a78ea9fcfdba9c7429236cc4ad3f97fb9fd617b4ecb6876c129",
     "pay_req": "lnbc150n1pwff3wcpp5h9rk3e8zazd8365leld6n36zjgmvcjknl9lmnltp0d8vk6rkcy5sdqqcqzys7mga69gjmqqumssmzw649868udsvt8l5q6y069fwkqp55z89hpj4cucrrge9yxmak6kw09j837nc7q3p98gjajvsld3zh3svyufu2qcpldu7fa",
     "add_index": 549
    }

    pay_req 就是我們生成的 invoice了,我們可以使用其它的閃電網(wǎng)絡(luò)錢包向這個 invoice 付款啦,可以通過下面的命令查看付款狀態(tài)

    root@test:~# lncli listinvoices
    {
        "invoices": [
            {
                "memo": "xxxx",
                ...
                "value": "15",
                "settled": true,
                "creation_date": "1553259149",
                "settle_date": "0",
                "payment_request": "lnbc150n1pwff3wcpp5h9rk3e8zazd8365leld6n36zjgmvcjknl9lmnltp0d8vk6rkcy5sdqqcqzys7mga69gjmqqumssmzw649868udsvt8l5q6y069fwkqp55z89hpj4cucrrge9yxmak6kw09j837nc7q3p98gjajvsld3zh3svyufu2qcpldu7fa",
                "description_hash": null,
                "expiry": "3600",
                ...
                "amt_paid_sat": "0",
                "amt_paid_msat": "0"
            }
         ]
    }

    settled = true 標(biāo)志著這筆交易已經(jīng)付款成功,invoice 才生成的時候默認(rèn)的狀態(tài)是 settled = false 。

  4. 付款

    我們?nèi)?Yalls 找了一篇文章生成一張金額為 150 sats 收款的 invoice, 生成的 invoice 如下

    lnbc1500n1pwfmv52pp57whmew9gear9faxtwcq9k8kmp0kl82l96kck5l29vfpmlsts450qdp62fjkzep6ypxhjgrhd9nx2grhv9h8gueqvysyx6rfde3ks6tvd3sjut3wp5cqzysxqr23syfc86vht588l6s0g3y7xgd9wcf6jfc7eghcyxsrzy49pvsw3e73rfsgjctc4cd2vevef6eutlv67dyzjc70n4xkjm5zykvrld5chktspelxt0c

    我們可以通過命令解析這張 invoice

    root@test:~# lncli decodepayreq lnbc1500n1pwfmv52pp57whmew9gear9faxtwcq9k8kmp0kl82l96kck5l29vfpmlsts450qdp62fjkzep6ypxhjgrhd9nx2grhv9h8gueqvysyx6rfde3ks6tvd3sjut3wp5cqzysxqr23syfc86vht588l6s0g3y7xgd9wcf6jfc7eghcyxsrzy49pvsw3e73rfsgjctc4cd2vevef6eutlv67dyzjc70n4xkjm5zykvrld5chktspelxt0c
    {
        "destination": "03d06758583bb5154774a6eb221b1276c9e82d65bbaceca806d90e20c108f4b1c7",
        "payment_hash": "f3afbcb8a8cf4654f4cb76005b1edb0bedf3abe5d5b16a7d456243bfc170ad1e",
        "num_satoshis": "150",
        "timestamp": "1553838730",
        "expiry": "10800",
        "description": "Read: My wife wants a Chinchilla...\r",
        "description_hash": "",
        "fallback_addr": "",
        "cltv_expiry": "144",
        "route_hints": [
        ]
    }

    確認(rèn)金額是 150 sats 后就可以付款了

     root@test:~# lncli payinvoice lnbc1500n1pwfmv52pp57whmew9gear9faxtwcq9k8kmp0kl82l96kck5l29vfpmlsts450qdp62fjkzep6ypxhjgrhd9nx2grhv9h8gueqvysyx6rfde3ks6tvd3sjut3wp5cqzysxqr23syfc86vht588l6s0g3y7xgd9wcf6jfc7eghcyxsrzy49pvsw3e73rfsgjctc4cd2vevef6eutlv67dyzjc70n4xkjm5zykvrld5chktspelxt0c
     Description: Read: My wife wants a Chinchilla...
     Amount (in satoshis): 150
     Destination: 03d06758583bb5154774a6eb221b1276c9e82d65bbaceca806d90e20c108f4b1c7
     Confirm payment (yes/no): yes
     {
      "payment_error": "",
      "payment_preimage": "6bafcc544e72a63073da0fb7026e8d9962b1f85b2b357c8ccdbf720cba201dfa",
      "payment_route": {
          "total_time_lock": 569861,
          "total_amt": 150,
          "hops": [
              {
                  "chan_id": 620276290726395904,
                  "chan_capacity": 150000,
                  "amt_to_forward": 150,
                  "expiry": 569717,
                  "amt_to_forward_msat": 150001,
                  "pub_key": "0395033b252c6f40e3756984162d68174e2bd8060a129c0d3462a9370471c6d28f"
              },
              {
                  "chan_id": 622138863466053632,
                  "chan_capacity": 40000,
                  "amt_to_forward": 150,
                  "expiry": 569573,
                  "amt_to_forward_msat": 150001,
                  "pub_key": "037eb17d0fee2d20bacea3d78940b40f4ac61a5a7040a23b6e8280c80d7ebfb420"
              },
              {
                  "chan_id": 611030497408253952,
                  "chan_capacity": 1000000,
                  "amt_to_forward": 150,
                  "expiry": 569429,
                  "amt_to_forward_msat": 150000,
                  "fee_msat": 1,
                  "pub_key": "02e2670a2c2661a9eea13b7cfdcdd7f552f591b9ee60e5678b7abe77b7f9516f96"
              },
              {
                  "chan_id": 613156952970100736,
                  "chan_capacity": 1000000,
                  "amt_to_forward": 150,
                  "expiry": 569419,
                  "amt_to_forward_msat": 150000,
                  "pub_key": "020e56a13babec99abdc2c4afbe34e1e44230d79b234c059fd4ff1e367765fdb1b"
              },
              {
                  "chan_id": 624006933702770688,
                  "chan_capacity": 5000000,
                  "amt_to_forward": 150,
                  "expiry": 569419,
                  "amt_to_forward_msat": 150000,
                  "pub_key": "03d06758583bb5154774a6eb221b1276c9e82d65bbaceca806d90e20c108f4b1c7"
              }
          ],
          "total_fees_msat": 1,
          "total_amt_msat": 150001
      }
     }

    付款成功

  5. 其它命令

    可以通過 lncli -h 查看更多命令

以上是“Linux下怎么搭建比特幣閃電網(wǎng)絡(luò)節(jié)點”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI