Lightning-Network

lnd 和 Bluewallet LndHub 集成錯誤

  • October 10, 2021

我正在嘗試通過 docker-compose 使用 Pi3 設置 LndHub。在 bitcoind 區塊鏈同步完成後,從lnd(Lightning) 和的日誌來看LndHub,似乎在解碼來自(粘貼在下面的日誌)LndHub的消息時遇到了問題?lnd

以前有人遇到過這種問題嗎?或者有什麼建議?

我知道這更像是一個 JS/RPC 問題,但認為這裡的 ppl 可能對 lnd 和 LndHub 使用的庫有更多經驗。

我想我的下一步可能是在 LndHub 程式碼的某處添加一些列印語句。我這樣做後會更新這篇文章。

lnd日誌:

2021-06-20 23:42:12.591 [INF] CRTR: Processed channels=38 updates=78 nodes=32 in last 59.874156103s
2021-06-20 23:42:13.955 [ERR] RPCS: [/lnrpc.Lightning/SubscribeInvoices]: encoding/hex: invalid byte: U+002F '/'
2021-06-20 23:42:13.956 [ERR] RPCS: [/lnrpc.Lightning/GetInfo]: encoding/hex: invalid byte: U+002F '/'
2021-06-20 23:42:13.958 [ERR] RPCS: [/lnrpc.Lightning/GetInfo]: encoding/hex: invalid byte: U+002F '/'
2021-06-20 23:42:13.961 [ERR] RPCS: [/lnrpc.Lightning/ListChannels]: encoding/hex: invalid byte: U+002F '/'

LndHub日誌:

updateLightning()                                                                                                                            
updated                                                                                                                                      
2021-06-20T22:50:34.595Z : info: [BOOTING UP] : "Listening on port 3000"                                                                     
Node NOT Exiting...                                                                                                                          
{ Error: 2 UNKNOWN: encoding/hex: invalid byte: U+002F '/'                                                                                   
   at Object.callErrorFromStatus (/opt/LndHub/build/node_modules/@grpc/grpc-js/build/src/call.js:31:26)                                     
   at Object.onReceiveStatus (/opt/LndHub/build/node_modules/@grpc/grpc-js/build/src/client.js:327:49)                                      
   at Object.onReceiveStatus (/opt/LndHub/build/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:299:181)                        
   at process.nextTick (/opt/LndHub/build/node_modules/@grpc/grpc-js/build/src/call-stream.js:130:78)                                       
   at process._tickCallback (internal/process/next_tick.js:61:11)
 code: 2,
 details: 'encoding/hex: invalid byte: U+002F \'/\'',
 metadata:
  Metadata { internalRepr: Map { 'content-type' => [Array] }, options: {} } }                                                              
lnd failure

軟體版本:

Hardware: Raspberry Pi 3
OS: Raspbian Buster 10
Docker Base Image: Ubuntu 18.04
Bitcoin: 0.21.1
Lnd: v0.13.0-beta
LndHub: v1.3.0 (Node: v10.15.3)

Dockerfile 和 docker-compose 文件:

https://github.com/pangyuteng/bitcoin-lndhub/blob/main/docker-compose.yml
bictoind: https://github.com/pangyuteng/bitcoin-lndhub/blob/main/bitcoind/Dockerfile
lnd: https://github.com/pangyuteng/bitcoin-lndhub/blob/main/lnd/Dockerfile
LndHub: https://github.com/pangyuteng/bitcoin-lndhub/blob/main/hub/Dockerfile

— 編輯 2021-09-22 —

我將比特幣核心更新到 v22。現在lnd給出了一個不同的錯誤rpcperms/interceptor.go……我必須弄清楚如何讓rpc為lnd執行,如下所示似乎表明“rpc沒有執行”……

export LND_DIR=/mnt/hdd/lnd
export MACAROON_HEADER="Grpc-Metadata-macaroon: $(sudo xxd -ps -u -c 1000 $LND_DIR/data/chain/bitcoin/mainnet/admin.macaroon)"
curl -X GET --cacert $LND_DIR/tls.cert --header "$MACAROON_HEADER" https://localhost:8080/v1/balance/blockchain

{"error":"the RPC server is in the process of starting up, but not yet ready to accept calls","code":2,"message":"the RPC server is in the process of starting up, but not yet ready to accept calls","details":[]}

— 編輯 2021-09-27 —

結果我的 bitcoind 沒有同步,因為有足夠的交換和伺服器不斷關閉/核心恐慌。

同步並重新啟用交換後……它返回到原始錯誤消息但在不同的位置(node:internal/process/task_queues:78:11),並且 lndhub 與 bitcoind 之間似乎正在進行一些通信!:)

bitcoind getblockchaininfo: {
 result: {
   chain: 'main',
   blocks: 702459,
   headers: 702459,
   bestblockhash: '0000000000000000000a45d676fc178cc7603ca7908af2ed1701137a848db5d3',
   difficulty: 18997641161758.95,
   mediantime: 1632764543,
   verificationprogress: 0.9999990028709793,
   initialblockdownload: false,
   chainwork: '0000000000000000000000000000000000000000221092943f73a5bddde80438',
   size_on_disk: 416306659033,
   pruned: false,
   softforks: {
     bip34: [Object],
     bip66: [Object],
     bip65: [Object],
     csv: [Object],
     segwit: [Object],
     taproot: [Object]
   },
   warnings: ''
 },
 error: null,
 id: '883e89b6-7c7e-4cd5-aa8e-a6e54879ae62'
}
lnd failure
Error: 2 UNKNOWN: encoding/hex: invalid byte: U+002F '/'
   at Object.callErrorFromStatus (/opt/LndHub/node_modules/@grpc/grpc-js/src/call.ts:81:24)
   at Object.onReceiveStatus (/opt/LndHub/node_modules/@grpc/grpc-js/src/client.ts:338:36)
   at Object.onReceiveStatus (/opt/LndHub/node_modules/@grpc/grpc-js/src/client-interceptors.ts:426:34)
   at Object.onReceiveStatus (/opt/LndHub/node_modules/@grpc/grpc-js/src/client-interceptors.ts:389:48)
   at /opt/LndHub/node_modules/@grpc/grpc-js/src/call-stream.ts:276:24
   at processTicksAndRejections (node:internal/process/task_queues:78:11) {
 code: 2,
 details: "encoding/hex: invalid byte: U+002F '/'",
 metadata: Metadata {
   internalRepr: Map(1) { 'content-type' => [Array] },
   options: {}
 }
}

一直以來,這都是我在 docker-compose 文件中的配置錯誤,而且我沒有足夠的耐心等待核心節點同步,因為那是lnd願意能夠與核心節點“交談”的時候。值得注意的是,我了解到你不能只關閉這些服務docker-compose down,理想情況下你需要先通過優雅地關閉比特幣核心bitcoin-cli stop,然後你可以做一個docker-compose down- 潛在的影響是比特幣區塊鏈文件會損壞,因此需要您同步/重新索引區塊鏈。

        volumes:
+            - /lnd/tls.cert:/opt/LndHub/tls.cert:ro
+            - /lnd/admin.macaroon:/opt/LndHub/admin.macaroon:ro
        environment:
            CONFIG: ${HUBCONFIG}
-            TLSCERT: "/lnd/tls.cert"
-            MACAROON: "/lnd/admin.macaroon"

git diff如上圖所示)

環境變數TLSCERTMACAROON應該是文件路徑,而是應該假設它位於 lnd-hub 文件夾中,因此安裝到所述位置。或者從官方網站,如果你願意,你也可以將相應的十六進制編碼文件內容定義為TLSCERTMACAROON

下面提供了 docker-compose 和相應的文件。 <https://github.com/pangyuteng/bitcoin-lndhub>

引用自:https://bitcoin.stackexchange.com/questions/107147