ln-service
Version:
Interaction helper for your Lightning Network daemon
109 lines (87 loc) • 3.31 kB
JavaScript
const {deepEqual} = require('node:assert').strict;
const {equal} = require('node:assert').strict;
const test = require('node:test');
const {setupChannel} = require('ln-docker-daemons');
const {spawnLightningCluster} = require('ln-docker-daemons');
const {getChannel} = require('./../../');
const {updateRoutingFees} = require('./../../');
const baseFeeTokens = 9;
const channelCapacityTokens = 1e6;
const cltvDelta = 18;
const confirmationCount = 6;
const defaultFee = 1e3;
const feeRate = 0;
const giftTokens = 1e5;
const mtokPerTok = 1e3;
const n = 2;
const size = 2;
// Updating routing fees should update routing fees
test(`Update routing fees`, async () => {
const {kill, nodes} = await spawnLightningCluster({size});
const [control, target] = nodes;
const {generate, lnd} = control;
const channelOpen = await setupChannel({generate, lnd, to: target});
const {id} = channelOpen;
await updateRoutingFees({
lnd,
base_fee_tokens: baseFeeTokens,
cltv_delta: cltvDelta,
fee_rate: feeRate,
max_htlc_mtokens: '10000',
min_htlc_mtokens: '2000',
transaction_id: channelOpen.transaction_id,
transaction_vout: channelOpen.transaction_vout,
});
const policy = (await getChannel({id, lnd})).policies.find(policy => {
return policy.public_key === control.id;
});
equal(policy.base_fee_mtokens, `${baseFeeTokens * mtokPerTok}`, 'Base fee');
equal(policy.cltv_delta, cltvDelta, 'CLTV delta updated');
equal(policy.fee_rate, feeRate, 'Fee rate updated');
equal(policy.max_htlc_mtokens, '10000', 'Max HTLC tokens updated');
equal(policy.min_htlc_mtokens, '2000', 'Min HTLC tokens updated');
const {failures} = await updateRoutingFees({
lnd,
base_fee_mtokens: `${BigInt(baseFeeTokens) * BigInt(n) * BigInt(1e3)}`,
cltv_delta: cltvDelta * n,
fee_rate: feeRate * n,
transaction_id: '1234000000000000000000000000000000000000000000000000000000000000',
transaction_vout: 1,
});
const expectedFailures = [{
failure: 'not found',
is_pending_channel: false,
is_unknown_channel: true,
is_invalid_policy: false,
transaction_id: '1234000000000000000000000000000000000000000000000000000000000000',
transaction_vout: 1,
}];
// Failures is not supported on LND 0.13.4 and below
if (!!failures.length) {
deepEqual(failures, expectedFailures, 'Got expected failures');
}
{
const lnd = target.lnd;
await updateRoutingFees({
lnd,
base_fee_mtokens: `${BigInt(baseFeeTokens) * BigInt(n) * BigInt(1e3)}`,
cltv_delta: cltvDelta * n,
fee_rate: feeRate * n,
inbound_base_discount_mtokens: 1,
inbound_rate_discount: 1,
});
const policy = (await getChannel({id, lnd})).policies.find(policy => {
return policy.public_key === target.id;
});
// LND 0.17.5 and below do not support fee discounts
if (!!policy.inbound_rate_discount) {
equal(policy.inbound_base_discount_mtokens, '1', 'Got base discount');
equal(policy.inbound_rate_discount, 1, 'Got rate discount');
}
equal(policy.base_fee_mtokens, `${baseFeeTokens*mtokPerTok*n}`, 'Base');
equal(policy.cltv_delta, cltvDelta*n, 'Global CLTV delta updated');
equal(policy.fee_rate, feeRate*n, 'Global Fee rate updated');
}
await kill({});
return;
});