54 lines
2.7 KiB
JavaScript
54 lines
2.7 KiB
JavaScript
// Generated, do not edit. sha256:5fcf7092848d33c8b3e377e39e0ea6329b71d804e01a41ef65f10de8dcfb1874
|
|||
|
|
import { describe, it, mock } from 'node:test';
|
||
|
|
import assert from 'node:assert/strict';
|
||
|
|
|
||
|
|
const TAP = 'bc1p-taproot-input';
|
||
|
|
const SEG = 'bc1q-segwit-wisselgeld';
|
||
|
|
const KANAAL = 'bc1q-kanaal-multisig';
|
||
|
|
|
||
|
|
const FUNDING = {
|
||
|
|
txid: 'f'.repeat(64), fee: 1000,
|
||
|
|
status: { confirmed: true, block_height: 900_000, block_time: 1_760_000_000 },
|
||
|
|
vin: [{ prevout: { scriptpubkey_address: TAP, value: 100_000 } }],
|
||
|
|
vout: [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: SEG, value: 29_000 }],
|
||
|
|
};
|
||
|
|
mock.module('../../client/price/btc-explorer.js', { namedExports: {
|
||
|
|
addressTxs: async () => [FUNDING],
|
||
|
|
fetchJson: async () => ({}),
|
||
|
|
explorerBase: async () => 'https://explorer.test',
|
||
|
|
} });
|
||
|
|
|
||
|
|
const { scanMovements } = await import('../../client/price/wallet-scanner.js');
|
||
|
|
|
||
|
|
describe('scanMovements over twee bronnen van één account', () => {
|
||
|
|
it('de SegWit-bron ziet met de Taproot-adressen erbij de kanaalopening als uitgaand', async () => {
|
||
|
|
const { rows } = await scanMovements([SEG], 1, 2, null, { ownAddresses: [TAP, SEG] });
|
||
|
|
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('de Taproot-bron komt op precies dezelfde beweging uit', async () => {
|
||
|
|
const { rows } = await scanMovements([TAP], 1, 3, null, { ownAddresses: [TAP, SEG] });
|
||
|
|
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('zonder de adressen van het account ziet de SegWit-bron alleen het wisselgeld: de oude fout', async () => {
|
||
|
|
const { rows } = await scanMovements([SEG], 1, 2, null);
|
||
|
|
assert.deepEqual(rows.map(r => [r.direction, r.valueSats]), [['in', 29_000]]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('ook andersom: een SegWit-input met het wisselgeld naar Taproot', async () => {
|
||
|
|
FUNDING.vin = [{ prevout: { scriptpubkey_address: SEG, value: 100_000 } }];
|
||
|
|
FUNDING.vout = [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: TAP, value: 29_000 }];
|
||
|
|
try {
|
||
|
|
for (const [bron, eigen] of [[[SEG], 2], [[TAP], 3]]) {
|
||
|
|
const { rows } = await scanMovements(bron, 1, eigen, null, { ownAddresses: [TAP, SEG] });
|
||
|
|
assert.deepEqual(rows.map(r => [r.direction, r.valueSats, r.feeSats]), [['out', 70_000, 1000]]);
|
||
|
|
}
|
||
|
|
const { rows: oud } = await scanMovements([TAP], 1, 3, null);
|
||
|
|
assert.deepEqual(oud.map(r => [r.direction, r.valueSats]), [['in', 29_000]], 'per bron genet: alleen het wisselgeld');
|
||
|
|
} finally {
|
||
|
|
FUNDING.vin = [{ prevout: { scriptpubkey_address: TAP, value: 100_000 } }];
|
||
|
|
FUNDING.vout = [{ scriptpubkey_address: KANAAL, value: 70_000 }, { scriptpubkey_address: SEG, value: 29_000 }];
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|