mirror of
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
synced 2025-06-07 16:06:26 +00:00
First cut of new install
This commit is contained in:
parent
21ac143bd8
commit
3bd42fb22e
267
18_2__Interlude_Accessing_a_Second_Lightning_Node.md
Normal file
267
18_2__Interlude_Accessing_a_Second_Lightning_Node.md
Normal file
@ -0,0 +1,267 @@
|
||||
# Interlude: Accessing a Second Lightning Node
|
||||
|
||||
When you played with Bitcoin you were accessing an existing network, and that made it relatively easy to work with: you just turned on `bitcoind` and you were immediately interacting with the network. That's now how Lightning works. It's fundamentally a peer-to-peer network, built up from the connections between any two individual nodes. In other words, to interact with the Lightning Network, you'll need to first find a node to connect to.
|
||||
|
||||
There are three ways to do so:
|
||||
|
||||
## Asking for Information on a Node
|
||||
|
||||
If someone else already has a Lightning node on the network of your choice, just ask them for their ID.
|
||||
|
||||
If they are are running c-lightning, they just need to use the `getinfo` command:
|
||||
```
|
||||
$ lightning-cli getinfo
|
||||
lightning-cli: WARNING: default network changing in 2020: please set network=testnet in config!
|
||||
{
|
||||
"id": "02f3d74746934494fa378235e5bc44cfdbb5b8779d839263fb7f9218be032f6f61",
|
||||
"alias": "GREENSOURCE",
|
||||
"color": "02f3d7",
|
||||
...
|
||||
}
|
||||
```
|
||||
They can then tell you their `id` (`02f3d74746934494fa378235e5bc44cfdbb5b8779d839263fb7f9218be032f6f61`).
|
||||
|
||||
## Creating a New c-lightning Node
|
||||
|
||||
However, for testing purposes, you probably want to have a second node under you own power. The easiest way to do so is to create a second c-lightning node on a new machine, using either Bitcoin Standup, per [§2.1](02_1_Setting_Up_a_Bitcoin-Core_VPS_with_StackScript.md) or compiling it by hand, per [§18.1](18_1_Verifying_Your_Lightning_Setup.md).
|
||||
|
||||
Once you have your node up, you can run `getinfo` to retrieve your information, as shown above.
|
||||
|
||||
## Creating a New LND Node
|
||||
|
||||
However, for our examples in the next chapter, we're instead going to create an LND node. This will allow us to demonstrate a bit of the depth of the Lightning ecosystem by showing how similar commands work on the two different platforms.
|
||||
|
||||
One way to do so is to run the Bitcoin Standup Scripts again on a new machine, but this time to choose LND, per [§2.1](2_1_Setting_Up_a_Bitcoin-Core_VPS_with_StackScript.md).
|
||||
|
||||
Another is to compile LND from source code on a machine that you've set up with a Bitcoin node, as follows.
|
||||
|
||||
### Compiling the LND Source Code
|
||||
|
||||
First, you need to download and install Go:
|
||||
```
|
||||
$ wget --progress=bar:force https://dl.google.com/go/"go1.14.4"."linux"-"amd64".tar.gz -O ~standup/"go1.14.4"."linux"-"amd64".tar.gz
|
||||
$ /bin/tar xzf ~standup/"go1.14.4"."linux"-"amd64".tar.gz -C ~standup
|
||||
$ sudo mv ~standup/go /usr/local
|
||||
```
|
||||
Be sure that the Go version is the most up to date (it's `go1.14.4` at the current time), and the platform and architecture are right for your machine. (The above will work for Debian.)
|
||||
|
||||
Update your path:
|
||||
```
|
||||
$ export GOPATH=~standup/gocode
|
||||
$ export PATH="$PATH":/usr/local/go/bin:"$GOPATH"/bin
|
||||
```
|
||||
Then be sure that `go` works:
|
||||
```
|
||||
$ go version
|
||||
go version go1.14.4 linux/amd64
|
||||
```
|
||||
You'll also need `git` and `make`:
|
||||
````
|
||||
$ sudo apt-get install git
|
||||
$ apt-get install build-essential
|
||||
```
|
||||
You're now ready to retrieve LND. Be sure to get the current verison (currently `v0.11.0-beta.rc4`).
|
||||
```
|
||||
$ go get -d github.com/lightningnetwork/lnd
|
||||
```
|
||||
And now you can compile:
|
||||
```
|
||||
$ cd "$GOPATH"/src/github.com/lightningnetwork/lnd
|
||||
$ git checkout v0.11.0-beta.rc4
|
||||
$ make
|
||||
$ make install
|
||||
```
|
||||
This will install to `~/gocode/bin`, which is `$GOPATH/bin`.
|
||||
|
||||
And this will put it in global directories:
|
||||
```
|
||||
$ sudo cp $GOPATH/bin/lnd $GOPATH/bin/lncli /usr/bin
|
||||
```
|
||||
Finally, this will create some standard directories:
|
||||
```
|
||||
$ sudo mkdir -p /etc/lnd /var/lib/lnd
|
||||
$ sudo chown standup -R /var/lib/lnd
|
||||
```
|
||||
|
||||
### Creating an LND Config File
|
||||
|
||||
Unlike with c-lightning, you will need to create a default config file for LND.
|
||||
|
||||
First, you need to retrieve your rpcuser and rpcpassword. Here's an automated way to do so:
|
||||
```
|
||||
$ BITCOINRPC_USER=$(cat ~standup/.bitcoin/bitcoin.conf | grep rpcuser | awk -F = '{print $2}')
|
||||
$ BITCOINRPC_PASS=$(cat ~standup/.bitcoin/bitcoin.conf | grep rpcpassword | awk -F = '{print $2}')
|
||||
```
|
||||
|
||||
> :warning: **WARNING:** Obviously, never store your RPC password in a shell variable in a production environment.
|
||||
|
||||
Second, you need to enable ZMQ on your Bitcoind, if you didn't already in [§15.3](15_3_Receiving_Bitcoind_Notifications_with_C.md).
|
||||
|
||||
This requires adding the following to your `~/.bitcoin/bitcoin.conf` file:
|
||||
```
|
||||
zmqpubrawblock=tcp://127.0.0.1:28332
|
||||
zmqpubrawtx=tcp://127.0.0.1:28333
|
||||
```
|
||||
You must then restart bitcoin. You can test that it's working as follows:
|
||||
```
|
||||
bitcoin-cli getzmqnotifications
|
||||
[
|
||||
{
|
||||
"type": "pubrawblock",
|
||||
"address": "tcp://127.0.0.1:28332",
|
||||
"hwm": 1000
|
||||
},
|
||||
{
|
||||
"type": "pubrawtx",
|
||||
"address": "tcp://127.0.0.1:28333",
|
||||
"hwm": 1000
|
||||
}
|
||||
]
|
||||
```
|
||||
Now you're ready to create a config file:
|
||||
```
|
||||
$ mkdir ~/.lnd
|
||||
$ cat > ~/.lnd/lnd.conf << EOF
|
||||
[Application Options]
|
||||
maxlogfiles=3
|
||||
maxlogfilesize=10
|
||||
#externalip=1.1.1.1 # change to your public IP address if required.
|
||||
alias=StandUp
|
||||
listen=0.0.0.0:9735
|
||||
debuglevel=debug
|
||||
[Bitcoin]
|
||||
bitcoin.active=1
|
||||
bitcoin.node=bitcoind
|
||||
bitcoin.testnet=true
|
||||
[Bitcoind]
|
||||
bitcoind.rpchost=localhost
|
||||
bitcoind.rpcuser=$BITCOINRPC_USER
|
||||
bitcoind.rpcpass=$BITCOINRPC_PASS
|
||||
bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
|
||||
bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333
|
||||
EOF
|
||||
```
|
||||
|
||||
### Creating an LND Service
|
||||
|
||||
Finally, you can create an LND service to automatically run `lnd`:
|
||||
```
|
||||
$ cat > ~/lnd.service << EOF
|
||||
# It is not recommended to modify this file in-place, because it will
|
||||
# be overwritten during package upgrades. If you want to add further
|
||||
# options or overwrite existing ones then use
|
||||
# $ systemctl edit lnd.service
|
||||
# See "man systemd.service" for details.
|
||||
# Note that almost all daemon options could be specified in
|
||||
# /etc/lnd/lnd.conf, except for those explicitly specified as arguments
|
||||
# in ExecStart=
|
||||
[Unit]
|
||||
Description=LND Lightning Network Daemon
|
||||
Requires=bitcoind.service
|
||||
After=bitcoind.service
|
||||
[Service]
|
||||
ExecStart=/usr/bin/lnd
|
||||
ExecStop=/usr/bin/lncli --lnddir /var/lib/lnd stop
|
||||
PIDFile=/run/lnd/lnd.pid
|
||||
User=standup
|
||||
Type=simple
|
||||
KillMode=process
|
||||
TimeoutStartSec=60
|
||||
TimeoutStopSec=60
|
||||
Restart=always
|
||||
RestartSec=60
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
You'll then need to install that:
|
||||
```
|
||||
$ sudo cp ~/lnd.service /etc/systemd/system
|
||||
$ sudo systemctl enable lnd
|
||||
$ sudo systemctl start lnd
|
||||
```
|
||||
(Expect this to take a minute the first time.)
|
||||
|
||||
### Creating a Wallet
|
||||
|
||||
The first time you run LND, you must create a wallet:
|
||||
```
|
||||
$ lncli --network=testnet create
|
||||
```
|
||||
It will ask you for a password and then ask if you want to enter an existing mnemonic (just hit `n` for the latter one).
|
||||
|
||||
You should now have a functioning `lnd`, which you can verify with `getinfo`:
|
||||
```
|
||||
$ lncli --network=testnet getinfo
|
||||
{
|
||||
"version": "0.11.0-beta.rc4 commit=v0.11.0-beta.rc4",
|
||||
"commit_hash": "fc12656a1a62e5d69430bba6e4feb8cfbaf21542",
|
||||
"identity_pubkey": "032a7572dc013b6382cde391d79f292ced27305aa4162ec3906279fc4334602543",
|
||||
"alias": "StandUp",
|
||||
"color": "#3399ff",
|
||||
"num_pending_channels": 0,
|
||||
"num_active_channels": 0,
|
||||
"num_inactive_channels": 0,
|
||||
"num_peers": 2,
|
||||
"block_height": 1862848,
|
||||
"block_hash": "000000000000000ecb6fd95e1f486283d48683aa3111b6c23144a2056f5a1532",
|
||||
"best_header_timestamp": "1602632294",
|
||||
"synced_to_chain": true,
|
||||
"synced_to_graph": false,
|
||||
"testnet": true,
|
||||
"chains": [
|
||||
{
|
||||
"chain": "bitcoin",
|
||||
"network": "testnet"
|
||||
}
|
||||
],
|
||||
"uris": [
|
||||
],
|
||||
"features": {
|
||||
"0": {
|
||||
"name": "data-loss-protect",
|
||||
"is_required": true,
|
||||
"is_known": true
|
||||
},
|
||||
"5": {
|
||||
"name": "upfront-shutdown-script",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
},
|
||||
"7": {
|
||||
"name": "gossip-queries",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
},
|
||||
"9": {
|
||||
"name": "tlv-onion",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
},
|
||||
"13": {
|
||||
"name": "static-remote-key",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
},
|
||||
"15": {
|
||||
"name": "payment-addr",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
},
|
||||
"17": {
|
||||
"name": "multi-path-payments",
|
||||
"is_required": false,
|
||||
"is_known": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
This node's ID is `032a7572dc013b6382cde391d79f292ced27305aa4162ec3906279fc4334602543`.
|
||||
|
||||
## Summary: Accessing a Second Lightning Node
|
||||
|
||||
You always need two Lightning nodes to form a channel. If you don't have someone else who is testing things out with you, you're going to need to create a second one, either using c-lightning or (as we will in our examples) LND
|
||||
|
||||
## What's Next?
|
||||
|
||||
Continue "Understanding Your Lightning Setup" with [§18.3: Setting Up_a_Channel](18_3_Setting_Up_a_Channel.md).
|
Loading…
x
Reference in New Issue
Block a user