In this section, we will learn how to set up and interact with lnd through the gRPC protocol. Before starting this step, make sure you have installed btcd and lnd you can see here and also node and npm . References in this , this is the API docs for web on lncli (CLI) can interact with Python and JavaScript communicate with local LND through gRPC. It is for those who already understand LND you can read here . In addition, LND also provides an interactive method vs other LND that is REST you can read here
The example below assumes that running LND local and port connection on port 10009. File gRPC rpc.proto
can be downloaded here
Init wallet
I will use my repo, which has fully setup the docker environment, you can clone at https://github.com/vinhyenvodoi98/LightningNetwork-Nodejs
Quickly go through the steps to start any LND network you just need to run the command
1 2 | scripts/simnet-env.sh |
After running this command, they will create:
- a simnet bitcoin network
- 3 Bitcoin LND nodes (concurrently connecting peers between nodes)
Note: name these 3 nodes alice, bob, charlie and we will work with node alice
in this article
Then to get environment variables we need to run
1 2 | scripts/simnet-env.sh |
Copies Alice’s LND_MACAROON and LND_CERT to the .env
file
GRPC Setting
We use this code to set up the connet with 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> |
Tested a bit with the getinfo function, right:
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 class="__cf_email__" href="/cdn-cgi/l/email-protection" 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> |
Check out the 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> |
Create 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> |
Now we need to mine 5 blocks for the channel to be considered valid:
1 2 | docker-compose run simnet-btcctl generate 5 > /dev/null |
Note that creating a channel here is a one-way channel, meaning that once the channel is created, it will only create a channel to recharge. This is called a single-funds channel, and the channel created with 2 people who deposit money is called mutually funds channels and the LND developer in the next updates. There are some suggested solutions you can read here: https://bitcoin.stackexchange.com/questions/80792/how-to-create-bidirectional-channels-using-lnd
Conducting transactions between channels
Create an invoice
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> |
We take payment_request
and send payment in alice’s order -> bob
Create a payment
We run commad against bob’s node
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 taken above. Then we will confirm
1 2 | Confirm payment (yes / no) yes |
It is completed
Close 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> |
Appendix
You can create an external node by yourself or start another container then connect to the remaining nodes and create the same channel as above.
Creating the P2P Network
Now that the two accounts have some Bitcoin on the simnet, let’s connect the two accounts vs each other
We take Alice’s public key and know Alice’s port is 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> |
Where identity_pubkey
is my Public key
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> |
Then we can check the 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> |
So we can connect with Alice.
references :
https://github.com/RadarTech/ln-api-boilerplate#simnet-suite