From 530339d5beb5edf57999a3da50df49285c84e909 Mon Sep 17 00:00:00 2001 From: Antoni Spaanderman <56turtle56@gmail.com> Date: Fri, 2 Jun 2023 21:12:24 +0200 Subject: [PATCH] more channels, `accept-amp` and lndsetup fixes --- alts/proxy.yml | 3 ++ docker-compose.yml | 2 + lnd/setup/alice.conf | 4 +- lnd/setup/bob.conf | 5 +- lnd/setup/carol.conf | 4 +- lnd/setup/dave.conf | 2 + lnd/setup/index.js | 90 +++++++++++++++++++++-------------- lnd/setup/lightning.js | 1 + lnd/setup/nodes/nodes.js | 7 +++ lnd/setup/nodes/proxynodes.js | 7 +++ relay/dave-db.json | 3 +- 11 files changed, 86 insertions(+), 42 deletions(-) diff --git a/alts/proxy.yml b/alts/proxy.yml index 1ea1c91e..b9bccfb9 100644 --- a/alts/proxy.yml +++ b/alts/proxy.yml @@ -72,6 +72,9 @@ services: entrypoint: ["node", "/lndsetup/index.js"] volumes: - ./lnd/alice/.lnd:/alice/.lnd + - ./lnd/bob/.lnd:/bob/.lnd + - ./lnd/carol/.lnd:/carol/.lnd + - ./lnd/dave/.lnd:/dave/.lnd - ./lnd/setup:/lndsetup - ./lnd/setup/nodes/proxynodes.js:/lndsetup/nodes.js environment: diff --git a/docker-compose.yml b/docker-compose.yml index 6261e467..720df53a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,6 +59,8 @@ services: entrypoint: ["node", "/lndsetup/index.js"] volumes: - ./lnd/alice/.lnd:/alice/.lnd + - ./lnd/bob/.lnd:/bob/.lnd + - ./lnd/carol/.lnd:/carol/.lnd - ./lnd/setup:/lndsetup - ./lnd/setup/nodes/nodes.js:/lndsetup/nodes.js diff --git a/lnd/setup/alice.conf b/lnd/setup/alice.conf index 0cbb887b..d78c5372 100644 --- a/lnd/setup/alice.conf +++ b/lnd/setup/alice.conf @@ -5,6 +5,8 @@ rpclisten=0.0.0.0:10009 restlisten=0.0.0.0:38881 tlsextradomain=alice-lnd.sphinx accept-keysend=true +accept-amp=true +maxpendingchannels=69 alias=alice-lnd bitcoin.node=bitcoind bitcoin.defaultchanconfs=2 @@ -12,4 +14,4 @@ bitcoind.rpcuser=evan bitcoind.rpcpass=thepass bitcoind.rpchost=bitcoind.sphinx bitcoind.zmqpubrawblock=tcp://bitcoind.sphinx:28332 -bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 \ No newline at end of file +bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 diff --git a/lnd/setup/bob.conf b/lnd/setup/bob.conf index 04a6fd89..a18dc95a 100644 --- a/lnd/setup/bob.conf +++ b/lnd/setup/bob.conf @@ -4,7 +4,10 @@ debuglevel=info rpclisten=0.0.0.0:10010 restlisten=0.0.0.0:38882 tlsextradomain=bob-lnd.sphinx +# accept-keysend=false accept-keysend=true +accept-amp=true +maxpendingchannels=69 alias=bob-lnd bitcoin.node=bitcoind bitcoin.defaultchanconfs=2 @@ -12,4 +15,4 @@ bitcoind.rpcuser=evan bitcoind.rpcpass=thepass bitcoind.rpchost=bitcoind.sphinx bitcoind.zmqpubrawblock=tcp://bitcoind.sphinx:28332 -bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 \ No newline at end of file +bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 diff --git a/lnd/setup/carol.conf b/lnd/setup/carol.conf index 1dd62ad0..5ebeba8f 100644 --- a/lnd/setup/carol.conf +++ b/lnd/setup/carol.conf @@ -5,6 +5,8 @@ rpclisten=0.0.0.0:10011 restlisten=0.0.0.0:38883 tlsextradomain=carol-lnd.sphinx accept-keysend=true +accept-amp=false +maxpendingchannels=69 alias=carol-lnd bitcoin.node=bitcoind bitcoin.defaultchanconfs=2 @@ -12,4 +14,4 @@ bitcoind.rpcuser=evan bitcoind.rpcpass=thepass bitcoind.rpchost=bitcoind.sphinx bitcoind.zmqpubrawblock=tcp://bitcoind.sphinx:28332 -bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 \ No newline at end of file +bitcoind.zmqpubrawtx=tcp://bitcoind.sphinx:28333 diff --git a/lnd/setup/dave.conf b/lnd/setup/dave.conf index 47b557a3..02601160 100644 --- a/lnd/setup/dave.conf +++ b/lnd/setup/dave.conf @@ -5,6 +5,8 @@ rpclisten=0.0.0.0:10012 restlisten=0.0.0.0:38884 tlsextradomain=dave-lnd.sphinx accept-keysend=true +accept-amp=true +maxpendingchannels=69 alias=dave-lnd bitcoin.node=bitcoind bitcoin.defaultchanconfs=2 diff --git a/lnd/setup/index.js b/lnd/setup/index.js index e241a720..b25654c0 100644 --- a/lnd/setup/index.js +++ b/lnd/setup/index.js @@ -39,33 +39,20 @@ async function createOrUnlockWallet(node) { } } -async function coinsAndChannels(node) { - try { - const coins_success = await coins(node); - if (coins_success) { - await channels(node); - } - } catch (e) { - console.log("=> err", e); - } -} - async function coins(node) { try { const balres = await lightning.getBalance(node); const confirmed = parseInt(balres.confirmed_balance); - console.log("=> ALICE confirmed balance:", confirmed); - if (!confirmed) { - const ares = await lightning.newAddress(node); - const addy = ares.address; - console.log("=> ALICE address", addy); - await bitcoind.mine(101, addy); - console.log("=> 101 blocks mined to alice!", addy); - await sleep(5000); + console.log(`=> ${node.alias} confirmed balance:`, confirmed); + if (confirmed < 100000000) { + const addr = (await lightning.newAddress(node)).address; + console.log(`=> ${node.alias} address`, addr); + await bitcoind.mine(1, addr); + console.log(`=> 1 block mined to ${node.alias}!`); } return true; } catch (e) { - console.log("=> err:", e); + console.log("=> coins error:", e); } } @@ -79,19 +66,24 @@ async function channels(node) { return exists ? false : true; }) : []; + console.log("peers to make:", peersToMake); + + if (!peersToMake.length) { + console.log(`=> ${node.alias} doesn't need to open channels`); + return; + } + await asyncForEach(peersToMake, async (p) => { await lightning.addPeer(node, p); }); const chans = await lightning.listChannels(node); const channels = chans.channels || []; - await bitcoind.mine(6, "bcrt1qsrq4qj4zgwyj8hpsnpgeeh0p0aqfe5vqhv7yrr"); - console.log("=> 6 blocked mined to Alice!"); - await sleep(20000); - if (!channels.length) { - console.log("=> alice opening channels..."); - // open channels here + if (channels.length) { + console.log(`=> ${node.alias} already has open channels`); + } else { + console.log(`=> ${node.alias} opening ${peersToMake.length} channels...`); await asyncForEach(peersToMake, async (p) => { console.log("open channel with:", p); @@ -113,25 +105,45 @@ async function channels(node) { }); } }); - await bitcoind.mine(6, "bcrt1qsrq4qj4zgwyj8hpsnpgeeh0p0aqfe5vqhv7yrr"); - console.log("=> 6 blocked mined to Alice!"); } - await sleep(4000); - const chans2 = await lightning.listChannels(node); - console.log("FINAL CHANS", chans2.channels); } catch (e) { - console.log("=> err:", e); + console.log("=> channels error:", e); + } +} + +async function logChannels(node) { + try { + const chans = await lightning.listChannels(node); + console.log( + `=> ${node.alias} has ${chans.channels.length} channels:`, + chans.channels.map(ch => ch.remote_pubkey) + ); + } catch (e) { + console.log("=> logChannels err:", e); } } async function unlockAll() { await sleep(3500); - // createOrUnlockWallet(nodes.nodes.alice); - await asyncForEach(Object.values(nodes.nodes), async (node) => { - await createOrUnlockWallet(node); - }); + + await forEachNode(createOrUnlockWallet); + + await sleep(5000); + + await forEachNode(coins); + + // coinbase outputs need 100 confs + await bitcoind.mine(100, "bcrt1qsrq4qj4zgwyj8hpsnpgeeh0p0aqfe5vqhv7yrr"); await sleep(5000); - await coinsAndChannels(nodes.nodes.alice); + + await forEachNode(channels); + + // ln channels need at most 6 confs + await bitcoind.mine(6, "bcrt1qsrq4qj4zgwyj8hpsnpgeeh0p0aqfe5vqhv7yrr"); + + await sleep(20000); + + await forEachNode(logChannels); } unlockAll(); @@ -140,6 +152,10 @@ async function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } +async function forEachNode(callback) { + await asyncForEach(Object.values(nodes.nodes), callback); +} + async function asyncForEach(array, callback) { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array); diff --git a/lnd/setup/lightning.js b/lnd/setup/lightning.js index 5283e303..82636100 100644 --- a/lnd/setup/lightning.js +++ b/lnd/setup/lightning.js @@ -47,6 +47,7 @@ async function openChannel(node, chan) { node_pubkey: Buffer.from(chan.pubkey, "hex").toString("base64"), local_funding_amount: chan.amount, push_sat: chan.push_amount, + spend_unconfirmed: true, }); } diff --git a/lnd/setup/nodes/nodes.js b/lnd/setup/nodes/nodes.js index f61fbc47..88b16b7e 100644 --- a/lnd/setup/nodes/nodes.js +++ b/lnd/setup/nodes/nodes.js @@ -52,6 +52,13 @@ const nodes = { password: "bob12345", type: "lnd", macaroon: "/bob/" + macpath, + channels: [ + { + host: "carol-lnd.sphinx:9735", + pubkey: + "0364c05cbcbb9612036cc66297445a88bcfc21941fd816e17a56b54b0b52ff02b9", + }, + ], mnemonic: [ "above", "street", diff --git a/lnd/setup/nodes/proxynodes.js b/lnd/setup/nodes/proxynodes.js index aef65b49..8f7e3dbd 100644 --- a/lnd/setup/nodes/proxynodes.js +++ b/lnd/setup/nodes/proxynodes.js @@ -57,6 +57,13 @@ const nodes = { password: "bob12345", type: "lnd", macaroon: "/bob/" + macpath, + channels: [ + { + host: "carol-lnd.sphinx:9735", + pubkey: + "0364c05cbcbb9612036cc66297445a88bcfc21941fd816e17a56b54b0b52ff02b9", + }, + ], mnemonic: [ "above", "street", diff --git a/relay/dave-db.json b/relay/dave-db.json index d1344f77..884cb094 100644 --- a/relay/dave-db.json +++ b/relay/dave-db.json @@ -2,8 +2,7 @@ "development": { "dialect": "sqlite", "storage": "./configs/db/dave.db" - } - , + }, "gitactionenv": { "dialect": "sqlite" }