ln-service
Version:
Interaction helper for your Lightning Network daemon
64 lines (45 loc) • 2.28 kB
JavaScript
const {equal} = require('node:assert').strict;
const test = require('node:test');
const {decodeBase58Address} = require('@alexbosworth/blockchain');
const {decodeBech32Address} = require('@alexbosworth/blockchain');
const {spawnLightningCluster} = require('ln-docker-daemons');
const {createChainAddress} = require('./../../');
const formats = ['np2wpkh', 'p2wpkh'];
const p2shAddressVersion = 196;
const p2trProgramLength = 32;
const p2trVersion = 1;
const pkHashByteLength = 20;
const prefixForV1 = 'bcrt1p';
const regtestBech32AddressHrp = 'bcrt';
// Creating addresses should result in addresses
test(`Create address results in address creation`, async () => {
const [{kill, lnd}] = (await spawnLightningCluster({})).nodes;
const createNewChainAddresses = formats
.map(async format => await createChainAddress({lnd, format}));
const [np2wpkh, p2wpkh] = await Promise.all(createNewChainAddresses);
const nativeAddress = decodeBech32Address({address: p2wpkh.address});
const nestedAddress = decodeBase58Address({address: np2wpkh.address});
equal(nativeAddress.program.length, pkHashByteLength, 'Native addr pkHash');
equal(nativeAddress.prefix, regtestBech32AddressHrp, 'Native addr prefix');
equal(nestedAddress.version, p2shAddressVersion, 'Nested address version');
const getUnused = formats.map(async format => {
return await createChainAddress({lnd, format, is_unused: true});
});
const [unusedNp2wpkh, unusedP2wpkh] = await Promise.all(getUnused);
equal(np2wpkh.address, unusedNp2wpkh.address, 'Nested is reused');
equal(p2wpkh.address, unusedP2wpkh.address, 'Native is reused');
try {
const {address} = await createChainAddress({lnd, format: 'p2tr'});
equal(address.startsWith(prefixForV1), true, 'A taproot address is made');
const p2trAddress = decodeBech32Address({address});
equal(p2trAddress.prefix, regtestBech32AddressHrp, 'addr has p2tr prefix');
equal(p2trAddress.program.length, p2trProgramLength, 'P2TR addr length');
equal(p2trAddress.version, p2trVersion, 'address has the P2TR version');
} catch (err) {
// LND 0.14.5 and below do not support TR addresses
const [code] = err;
equal(code, 501, 'Taproot addresses are unsupported');
}
await kill({});
return;
});