# Setup Lnd Development Environment ## Metadata **Status**:: #x **Zettel**:: #zettel/fleeting **Created**:: [[2024-03-18]] **Parent**:: [[BTC HTLC Cross-Chain PoC]] **URL**:: [github.com](https://github.com/lightningnetwork/lnd) ## Add RPC Methods - Modify `.proto` files - Run `make rpc` to generate codes. ## Database Migrations Lnd uses the key-value database `channeldb` by default. ### channeldb - Add a `tlv.Type` constant, for example, in `channeldb/invoices.go` - Add the new field to `tlv.NewStream` in `serializeX` and `deserializeX` ### sqldb - Add migration files ([examples](https://github.com/golang-migrate/migrate/tree/master/database/postgres/examples/migrations)) - Run `make sqlc` ## Create A Test Clsuter [doitian/lndx-env (github.com)](https://github.com/doitian/lndx-env) ### Bitcoind Download from <https://bitcoin.org/en/download> Create a directory `bitcoind` and create the file `bitcoin.conf` in it ``` server=1 regtest=1 [regtest] rpcport=8332 rpcuser=btc rpcpassword=btc zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333 ``` Start the server ``` bitcoind -conf="$(pwd)/bitcoind/bitcoin.conf" -datadir="$(pwd)/bitcoind" ``` Create wallet ``` bitcoin-cli -conf="$(pwd)/bitcoind/bitcoin.conf" createwallet "dev" ``` Load wallet on restart ``` bitcoin-cli -conf="$(pwd)/bitcoind/bitcoin.conf" loadwallet "dev" ``` Mine 101 blocks and check balance ``` bitcoin-cli -conf="$(pwd)/bitcoind/bitcoin.conf" -generate 101 bitcoin-cli -conf="$(pwd)/bitcoind/bitcoin.conf" getbalance ``` ### lnd Create a directory `bob` and create the file `lnd.conf` in it: ``` [Application Options] listen=0.0.0.0:9735 rpclisten=localhost:10009 restlisten=0.0.0.0:8080 [Bitcoin] bitcoin.regtest=1 bitcoin.node=bitcoind [Bitcoind] bitcoind.rpchost=localhost:18443 bitcoind.rpcuser=btc bitcoind.rpcpass=btc bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 ``` Start the process ``` lnd --lnddir="$(pwd)/bob" ``` Create an account ``` lncli -n regtest --lnddir="$(pwd)/bob" --rpcserver localhost:10009 create ``` Unlock the account on restart ``` lncli -n regtest --lnddir="$(pwd)/bob" --rpcserver localhost:10009 unlock ``` Check the info ``` lncli -n regtest --lnddir="$(pwd)/bob" --rpcserver localhost:10009 getinfo ``` Add more nodes by duplicating `lnd.conf` in new directories and modifying the ports in `[Application Options]`. ### Send Payment <https://github.com/lightningnetwork/lnd/tree/master/docker> Add invoice: ``` $ lncli -n regtest --lnddir="$(pwd)/bob" --rpcserver localhost:11009 addinvoice --amt=10000 { "r_hash": "<your_random_rhash_here>", "pay_req": "<encoded_invoice>", } ``` Send payment in another node, e.g., Alice on RPC port 11009: ``` lncli -n regtest --lnddir="$(pwd)/alice" --rpcserver localhost:11009 sendpayment --pay_req=<encoded_invoice> ``` ### Shell Aliases ```shell alias bitcoind="command bitcoind -conf='$(pwd)/bitcoind/bitcoin.conf' -datadir='$(pwd)/bitcoind'" alias bitcoin-cli="command bitcoin-cli -conf='$(pwd)/bitcoind/bitcoin.conf'" alias blnd="lnd --lnddir='$(pwd)/bob'" alias blncli="lncli -n regtest --lnddir='$(pwd)/bob' --rpcserver localhost:10009" alias clnd="lnd --lnddir='$(pwd)/charlie'" alias clncli="lncli -n regtest --lnddir='$(pwd)/charlie' --rpcserver localhost:11009" alias ilnd="lnd --lnddir='$(pwd)/ingrid'" alias ilncli="lncli -n regtest --lnddir='$(pwd)/ingrid' --rpcserver localhost:12009" ``` ### Start Processes via Honcho Procfile ``` bitcoind: bitcoind -conf="$(pwd)/bitcoind/bitcoin.conf" -datadir="$(pwd)/bitcoind" bob: lnd --lnddir="$(pwd)/bob" charlie: lnd --lnddir="$(pwd)/charlie" ingrid: lnd --lnddir="$(pwd)/ingrid" ``` Start all processes ``` pip install honcho ``` To start lnd with pre-created wallets, use the `--noseedbackup` option.