Trong phần này, chúng ta sẽ tìm hiểu cách thiết lập và tương tác với lnd thông qua giao thức gRPC . Trước khi bắt đầu bước này , hãy đảm bảo bạn đã cài đặt btcd và lnd các bạn có thể xem ở đây và ngoài ra là node và npm nhé .
Tài liệu tham khảo tại đây , đây là web về docs API cho lncli (CLI) có thể tương tác bằng Python và JavaScript giao tiếp với local LND thông qua gRPC. Nó dành cho những người đã hiểu LND các bạn có thể đọc tại đây. Ngoài ra LND cũng cung cấp một phương thức tương tác vs LND khác đó là REST các bạn có thể đọc tại đây
Các ví dụ dưới đây giả định rằng đang chạy LND local và kết nối cổng gRPC ở cổng 10009.
File rpc.proto
có thể download tại đây
Init wallet
Mình sẽ sử dụng repo của mình đã setup đầy đủ hết môi trường docker các bạn có thể clone tại https://github.com/vinhyenvodoi98/LightningNetwork-Nodejs
Lướt qua nhanh các bước để start 1 mạng LND nào
bạn chỉ cần chạy lệnh
1 2 | scripts/simnet-env.sh |
Sau khi chạy lệnh này xong một chúng sẽ tạo ra :
- một mạng bitcoin simnet
- 3 Bitcoin LND node (đồng thời đã kết nối các peer giữa các node)
Chú thích: đặt tên 3 node này là alice, bob, charlie và chúng ta sẽ thao tác với node alice
trong bài viết này
Sau đó để có biến môi trường chúng ta cần chạy
1 2 | scripts/simnet-env.sh |
cop phần LND_MACAROON và LND_CERT của Alice vào file .env
Setting gRPC
Chúng ta sử dụng đoạn code này để setup connet bằng gRPC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"dotenv"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">config</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> grpc <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"grpc"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> protoLoader <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">"@grpc/proto-loader"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> packageDefinition <span class="token operator">=</span> protoLoader<span class="token punctuation">.</span><span class="token function">loadSync</span><span class="token punctuation">(</span><span class="token string">"./rpc.proto"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> keepCase<span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> lnrpc <span class="token operator">=</span> grpc<span class="token punctuation">.</span><span class="token function">loadPackageDefinition</span><span class="token punctuation">(</span>packageDefinition<span class="token punctuation">)</span><span class="token punctuation">.</span>lnrpc<span class="token punctuation">;</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">GRPC_SSL_CIPHER_SUITES</span> <span class="token operator">=</span> <span class="token string">"HIGH+ECDSA"</span><span class="token punctuation">;</span> <span class="token keyword">var</span> lndCert <span class="token operator">=</span> Buffer<span class="token punctuation">.</span><span class="token keyword">from</span><span class="token punctuation">(</span>process<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">LND_CERT</span><span class="token punctuation">,</span> <span class="token string">"utf8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> sslCreds <span class="token operator">=</span> grpc<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">createSsl</span><span class="token punctuation">(</span>lndCert<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> macaroonCreds <span class="token operator">=</span> grpc<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">createFromMetadataGenerator</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span> args<span class="token punctuation">,</span> callback <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> macaroon <span class="token operator">=</span> process<span class="token punctuation">.</span>env<span class="token punctuation">.</span><span class="token constant">LND_MACAROON</span><span class="token punctuation">;</span> <span class="token keyword">var</span> metadata <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">grpc<span class="token punctuation">.</span>Metadata</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> metadata<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"macaroon"</span><span class="token punctuation">,</span> macaroon<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">,</span> metadata<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> creds <span class="token operator">=</span> grpc<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">combineChannelCredentials</span><span class="token punctuation">(</span>sslCreds<span class="token punctuation">,</span> macaroonCreds<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> lightning <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">lnrpc<span class="token punctuation">.</span>Lightning</span><span class="token punctuation">(</span><span class="token string">"localhost:10009"</span><span class="token punctuation">,</span> creds<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> creds <span class="token operator">=</span> grpc<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">combineChannelCredentials</span><span class="token punctuation">(</span>sslCreds<span class="token punctuation">,</span> macaroonCreds<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> lightning <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">lnrpc<span class="token punctuation">.</span>Lightning</span><span class="token punctuation">(</span><span class="token string">'localhost:10001'</span><span class="token punctuation">,</span> creds<span class="token punctuation">)</span><span class="token punctuation">;</span> |
Test thử một chút với hàm getinfo nhỉ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">getInfo</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//ket qua</span> <span class="token punctuation">{</span> identity_pubkey<span class="token punctuation">:</span> <span class="token string">'02b91a3e09cc9e207aea58a6a172b94fd6946cc7f364b13b9419c17fee56b6dca1'</span><span class="token punctuation">,</span> alias<span class="token punctuation">:</span> <span class="token string">'02b91a3e09cc9e207aea'</span><span class="token punctuation">,</span> num_peers<span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> block_height<span class="token punctuation">:</span> <span class="token number">2040</span><span class="token punctuation">,</span> block_hash<span class="token punctuation">:</span> <span class="token string">'789f790ed8190bb034ec1b8cbafda3b9db0ebfb743d67b1c3b35f4177fdebcb2'</span><span class="token punctuation">,</span> synced_to_chain<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> uris<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token string">'02b<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="95aca4f4a6f0a5acf6f6acf0a7a5a2f4f0f4a0adf4a3f4a4a2a7f7aca1f3f1a3aca1a3f6f6a2f3a6a3a1f7a4a6f7aca1a4acf6a4a2f3f0f0a0a3f7a3f1f6f4a4d5">[email protected]</a>172.26.0.3:9735'</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> best_header_timestamp<span class="token punctuation">:</span> Long <span class="token punctuation">{</span> low<span class="token punctuation">:</span> <span class="token number">1573662914</span><span class="token punctuation">,</span> high<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> unsigned<span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> version<span class="token punctuation">:</span> <span class="token string">'0.8.0-beta commit=v0.8.0-beta'</span><span class="token punctuation">,</span> chains<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> chain<span class="token punctuation">:</span> <span class="token string">'bitcoin'</span><span class="token punctuation">,</span> network<span class="token punctuation">:</span> <span class="token string">'simnet'</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> color<span class="token punctuation">:</span> <span class="token string">'#3399ff'</span><span class="token punctuation">,</span> synced_to_graph<span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> |
Get walletbalance
1 2 3 4 5 6 | <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> lightning<span class="token punctuation">.</span><span class="token function">walletBalance</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// ket qua tra ve o dang long nen ban nen su dung ham BigInt cua js nhe</span> |
Kiểm tra các peer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">listPeers</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ket qua</span> <span class="token punctuation">{</span> peers<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> pub_key<span class="token punctuation">:</span> <span class="token string">'02d61e6b1e69f56e1be75fc270abdb9daade494df32ce4b7bb008a0caed5e4bb3c'</span><span class="token punctuation">,</span> address<span class="token punctuation">:</span> <span class="token string">'172.26.0.4:9735'</span><span class="token punctuation">,</span> bytes_sent<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> bytes_recv<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> ping_time<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> sync_type<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> pub_key<span class="token punctuation">:</span> <span class="token string">'02c9c7b15e75e9c33671fd6c82d8218f5b4dca825c7d831c77902b941330da04c9'</span><span class="token punctuation">,</span> address<span class="token punctuation">:</span> <span class="token string">'172.26.0.5:37356'</span><span class="token punctuation">,</span> bytes_sent<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> bytes_recv<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> inbound<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span> ping_time<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> sync_type<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> |
Tạo Channel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token keyword">var</span> pubkey <span class="token operator">=</span> <span class="token string">"02d61e6b1e69f56e1be75fc270abdb9daade494df32ce4b7bb008a0caed5e4bb3c"</span><span class="token punctuation">;</span> <span class="token comment">//public key mình đã lấy cua 1 peer ben tren</span> <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span> node_pubkey_string<span class="token punctuation">:</span> pubkey<span class="token punctuation">,</span> local_funding_amount<span class="token punctuation">:</span> <span class="token number">5000000</span><span class="token punctuation">,</span> push_sat<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> target_conf<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token keyword">private</span><span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> min_confs<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> spend_unconfirmed<span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">openChannelSync</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Bây giờ chúng ta cần khai thác 5 khối để kênh được coi là hợp lệ :
1 2 | docker-compose run simnet-btcctl generate 5 > /dev/null |
Chú ý việc tạo kênh ở đây là tạo kênh 1 hướng nghĩa là khi kênh đc tạo ra thì sẽ chỉ có ng tạo nạp tiền vào kênh thôi . Đây đc gọi là single-funded channel còn kênh được tạo ra với 2 người đều nạp tiền vào được gọi là mutually funded channels và bên phát triển LND vào những bản cập nhật tiếp theo . Có một số giải pháp được đề xuất các bạn có thể đọc tại đây :
https://bitcoin.stackexchange.com/questions/80792/how-to-create-bidirectional-channels-using-lnd
Thực hiện giao dịch giữa các channel
Tạo một hóa đơn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span> amt_paid<span class="token punctuation">:</span> <span class="token number">10000</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">addInvoice</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//ket qua</span> r_hash<span class="token punctuation">:</span> <span class="token operator"><</span>Buffer <span class="token number">9</span>b <span class="token number">45</span> <span class="token number">92</span> <span class="token number">99</span> d6 eb <span class="token number">5</span>f <span class="token number">47</span> <span class="token number">80</span> <span class="token number">81</span> <span class="token number">51</span> ba <span class="token number">54</span> f1 <span class="token number">29</span> <span class="token number">4</span>b <span class="token number">39</span> <span class="token number">11</span> <span class="token number">34</span> <span class="token number">56</span> <span class="token number">64</span> <span class="token number">02</span> <span class="token number">41</span> d2 c8 a3 <span class="token number">8</span>f <span class="token number">31</span> dd <span class="token number">84</span> <span class="token number">9</span>e <span class="token number">2</span>e<span class="token operator">></span><span class="token punctuation">,</span> payment_request<span class="token punctuation">:</span> <span class="token string">'lnsb1pwuc0q7pp5ndze9xwkad050qyp2xa9fufffvu3zdzkvspyr5kg5w8nrhvynchqdqqcqzpgdeu379ry7ceatpsmguqhpj988wsta6vuka44kqr2zjyth0jyrnfyazekukh25glnkd9tdlpnsecwmawue7edxv5s8gnnxpg499fm3lqp6spfxw'</span><span class="token punctuation">,</span> add_index<span class="token punctuation">:</span> Long <span class="token punctuation">{</span> low<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> high<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> unsigned<span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Chúng ta lấy payment_request
rồi gửi thanh toán trong lênh của alice -> bob
Tạo thanh toán
Chúng ta chạy commad đối vs node của bob
1 2 | docker<span class="token operator">-</span>compose exec simnet<span class="token operator">-</span>lnd<span class="token operator">-</span>btcd<span class="token operator">-</span>bob lncli <span class="token operator">--</span>macaroonpath<span class="token operator">=</span><span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>lnd<span class="token operator">/</span>data<span class="token operator">/</span>chain<span class="token operator">/</span>bitcoin<span class="token operator">/</span>simnet<span class="token operator">/</span>admin<span class="token punctuation">.</span>macaroon sendpayment <span class="token operator">--</span>pay_req<span class="token operator">=</span><span class="token operator"><</span>payment_request<span class="token operator">></span> |
payment_request lấy ở bên trên nhé .
sau đó chúng ta sẽ xác nhận
1 2 | Confirm payment (yes / no) yes |
Là hoàn thành rồi
Đóng Channel
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span> channel_point<span class="token punctuation">:</span> <span class="token punctuation">{</span> funding_txid_str<span class="token punctuation">:</span> <span class="token string">"229e6fbbe4942c1e405fdf50c55174a609440fb39f20e822eec34286aadab098"</span><span class="token punctuation">,</span> output_index<span class="token punctuation">:</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">var</span> call <span class="token operator">=</span> lightning<span class="token punctuation">.</span><span class="token function">closeChannel</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">;</span> call<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">"data"</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Phụ Lục
Bạn có thể tự tạo 1 node bên ngoài hoặc start thêm 1 container nữa rồi connect với các node còn lại rồi tạo channel giống như trên .
Creating the P2P Network
Bây h 2 tài khoản đã có một số Bitcoin trên mạng simnet rồi hãy kết nối 2 tài khoản đấy vs nhau nào
Chúng ta lấy public Key của Alice và biết được port của Alice là 10012
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <span class="token keyword">var</span> <span class="token function-variable function">getInfo</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">getInfo</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">//Kết quả</span> <span class="token punctuation">{</span> <span class="token string">"identity_pubkey"</span><span class="token punctuation">:</span> <span class="token operator"><</span>string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"alias"</span><span class="token punctuation">:</span> <span class="token operator"><</span>string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"num_pending_channels"</span><span class="token punctuation">:</span> <span class="token operator"><</span>uint32<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"num_active_channels"</span><span class="token punctuation">:</span> <span class="token operator"><</span>uint32<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"num_peers"</span><span class="token punctuation">:</span> <span class="token operator"><</span>uint32<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"block_height"</span><span class="token punctuation">:</span> <span class="token operator"><</span>uint32<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"block_hash"</span><span class="token punctuation">:</span> <span class="token operator"><</span>string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"synced_to_chain"</span><span class="token punctuation">:</span> <span class="token operator"><</span>bool<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"testnet"</span><span class="token punctuation">:</span> <span class="token operator"><</span>bool<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"uris"</span><span class="token punctuation">:</span> <span class="token operator"><</span>array string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"best_header_timestamp"</span><span class="token punctuation">:</span> <span class="token operator"><</span>int64<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"version"</span><span class="token punctuation">:</span> <span class="token operator"><</span>string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"num_inactive_channels"</span><span class="token punctuation">:</span> <span class="token operator"><</span>uint32<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"chains"</span><span class="token punctuation">:</span> <span class="token operator"><</span>array Chain<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"color"</span><span class="token punctuation">:</span> <span class="token operator"><</span>string<span class="token operator">></span><span class="token punctuation">,</span> <span class="token string">"synced_to_graph"</span><span class="token punctuation">:</span> <span class="token operator"><</span>bool<span class="token operator">></span><span class="token punctuation">,</span> <span class="token punctuation">}</span> |
Trong đó identity_pubkey
là Public key của mình
Connect peer
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token keyword">var</span> <span class="token function-variable function">connectPeer</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span> addr<span class="token punctuation">:</span> <span class="token punctuation">{</span> pubkey<span class="token punctuation">:</span> <span class="token string">'030074bd051c3399de6d1f980b4f8bd2b4e6b73bb276049ebf9e6944187f5a5886'</span><span class="token punctuation">,</span> host<span class="token punctuation">:</span> <span class="token string">'localhost:10012'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> perm<span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">connectPeer</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> |
sau đó chúng ta có thể check peer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token keyword">var</span> <span class="token function-variable function">checkPeer</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">var</span> request <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span> lightning<span class="token punctuation">.</span><span class="token function">listPeers</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token comment">// Ket qua</span> <span class="token punctuation">{</span> peers<span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span> pubKey<span class="token punctuation">:</span> <span class="token string">'030074bd051c3399de6d1f980b4f8bd2b4e6b73bb276049ebf9e6944187f5a5886'</span><span class="token punctuation">,</span> address<span class="token punctuation">:</span> <span class="token string">'127.0.0.1:10012'</span><span class="token punctuation">,</span> bytesSent<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> bytesRecv<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> pingTime<span class="token punctuation">:</span> <span class="token punctuation">[</span>Long<span class="token punctuation">]</span><span class="token punctuation">,</span> syncType<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> |
Như vậy chúng ta đã kết nối được với Alice rồi.
tài liệu tham khảo :
https://github.com/RadarTech/ln-api-boilerplate#simnet-suite