UNPKG

@bsv/wallet-toolbox

Version:

BRC100 conforming wallet, wallet storage and wallet signer components

959 lines 46.7 kB
"use strict"; /* eslint-disable @typescript-eslint/no-unused-vars */ Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = require("@bsv/sdk"); const randomValsUsed1_1 = require("./randomValsUsed1"); const index_client_1 = require("../../../../index.client"); const generateChange_1 = require("../../generateChange"); describe('generateChange tests', () => { jest.setTimeout(99999999); test('0 two outputs', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ] }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":6323,"outputId":15005,"spendable":false}],"changeOutputs":[{"satoshis":1608,"lockingScriptLength":25}],"size":1739330,"fee":3479,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('0a two outputs exact input', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ] }; const availableChange = [...defAvailableChange()]; availableChange[5].satoshis = 4715; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":4715,"outputId":15027,"spendable":false}],"changeOutputs":[],"size":1739296,"fee":3479,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('0b two outputs 666666 200 ', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 666666, lockingScriptLength: 197 }, { satoshis: 200, lockingScriptLength: 25 } ] }; const availableChange = [...defAvailableChange()]; availableChange[5].satoshis = 4715; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":1575097,"outputId":15101,"spendable":false}],"changeOutputs":[{"satoshis":908230,"lockingScriptLength":25}],"size":432,"fee":1,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('0c two outputs 666666 200 two change inputs ', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 666666, lockingScriptLength: 197 }, { satoshis: 200, lockingScriptLength: 25 } ] }; const availableChange = [ { satoshis: 191051, outputId: 14101 }, { satoshis: 129470, outputId: 14106 }, { satoshis: 273356, outputId: 14110 }, { satoshis: 65612, outputId: 14120 }, { satoshis: 44778, outputId: 14126 }, { satoshis: 58732, outputId: 14141 }, { satoshis: 160865, outputId: 14142 }, { satoshis: 535280, outputId: 14146 }, { satoshis: 1006, outputId: 14177 }, { satoshis: 1000, outputId: 14178 } ]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":535280,"outputId":14146,"spendable":false},{"satoshis":160865,"outputId":14142,"spendable":false}],"changeOutputs":[{"satoshis":29277,"lockingScriptLength":25}],"size":580,"fee":2,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('1 two outputs four change outputs', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":10735,"outputId":15106,"spendable":false}],"changeOutputs":[{"satoshis":1237,"lockingScriptLength":25},{"satoshis":1334,"lockingScriptLength":25},{"satoshis":1369,"lockingScriptLength":25},{"satoshis":1008,"lockingScriptLength":25},{"satoshis":1072,"lockingScriptLength":25}],"size":1739466,"fee":3479,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('2 WERR_INSUFFICIENT_FUNDS', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = defAvailableChange().slice(1, 4); const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); expectToThrowWERR(index_client_1.sdk.WERR_INSUFFICIENT_FUNDS, () => (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput)); }); test('2a WERR_INSUFFICIENT_FUNDS no inputs', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = []; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); expectToThrowWERR(index_client_1.sdk.WERR_INSUFFICIENT_FUNDS, () => (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput)); }); test('3 allocate all', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 39091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = defAvailableChange().slice(1, 4); const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":1004,"outputId":15011,"spendable":false},{"satoshis":1000,"outputId":15017,"spendable":false}],"changeOutputs":[{"satoshis":689,"lockingScriptLength":25}],"size":39476,"fee":79,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('4 feeModel 5 sat per kb', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 39091 }, { satoshis: 2, lockingScriptLength: 25 } ], feeModel: { value: 5, model: 'sat/kb' }, targetNetCount: 4 }; const availableChange = defAvailableChange().slice(1, 4); const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":1004,"outputId":15011,"spendable":false},{"satoshis":1000,"outputId":15017,"spendable":false}],"changeOutputs":[{"satoshis":570,"lockingScriptLength":25}],"size":39476,"fee":198,"satsPerKb":5}'); expectTransactionSize(params, r); }); test('4a feeModel 1 sat per kb', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 39091 }, { satoshis: 2, lockingScriptLength: 25 } ], feeModel: { value: 1, model: 'sat/kb' }, targetNetCount: 4 }; const availableChange = defAvailableChange().slice(1, 4); const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":1004,"outputId":15011,"spendable":false},{"satoshis":1000,"outputId":15017,"spendable":false}],"changeOutputs":[{"satoshis":728,"lockingScriptLength":25}],"size":39476,"fee":40,"satsPerKb":1}'); expectTransactionSize(params, r); }); test('5 one fixedInput', async () => { const params = { ...defParams, fixedInputs: [{ satoshis: 1234, unlockingScriptLength: 42 }], fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":10735,"outputId":15106,"spendable":false}],"changeOutputs":[{"satoshis":1526,"lockingScriptLength":25},{"satoshis":1738,"lockingScriptLength":25},{"satoshis":1816,"lockingScriptLength":25},{"satoshis":1016,"lockingScriptLength":25},{"satoshis":1157,"lockingScriptLength":25}],"size":1739549,"fee":3480,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('5a one larger fixedInput', async () => { const params = { ...defParams, fixedInputs: [{ satoshis: 1234, unlockingScriptLength: 242 }], fixedOutputs: [ { satoshis: 1234, lockingScriptLength: 1739091 }, { satoshis: 2, lockingScriptLength: 25 } ], targetNetCount: 4 }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":10735,"outputId":15106,"spendable":false}],"changeOutputs":[{"satoshis":1526,"lockingScriptLength":25},{"satoshis":1738,"lockingScriptLength":25},{"satoshis":1816,"lockingScriptLength":25},{"satoshis":1016,"lockingScriptLength":25},{"satoshis":1157,"lockingScriptLength":25}],"size":1739749,"fee":3480,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('5b one fixedInput 1001 73', async () => { const params = { ...defParams, fixedInputs: [{ satoshis: 1001, unlockingScriptLength: 73 }] }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[],"changeOutputs":[{"satoshis":1000,"lockingScriptLength":25}],"size":158,"fee":1,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('6 no fixedOutputs one fixedInput', async () => { const params = { ...defParams, fixedInputs: [{ satoshis: 1234, unlockingScriptLength: 42 }], fixedOutputs: [], targetNetCount: 4 }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput, getLog } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); //console.log(getLog()) expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":6323,"outputId":15005,"spendable":false}],"changeOutputs":[{"satoshis":1597,"lockingScriptLength":25},{"satoshis":1837,"lockingScriptLength":25},{"satoshis":1925,"lockingScriptLength":25},{"satoshis":1019,"lockingScriptLength":25},{"satoshis":1178,"lockingScriptLength":25}],"size":411,"fee":1,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('6a no fixedOutputs no fixedInput', async () => { const params = { ...defParams, fixedInputs: [], fixedOutputs: [], targetNetCount: 4 }; const availableChange = [...defAvailableChange()]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":6323,"outputId":15005,"spendable":false}],"changeOutputs":[{"satoshis":1309,"lockingScriptLength":25},{"satoshis":1433,"lockingScriptLength":25},{"satoshis":1478,"lockingScriptLength":25},{"satoshis":1009,"lockingScriptLength":25},{"satoshis":1093,"lockingScriptLength":25}],"size":328,"fee":1,"satsPerKb":2}'); expectTransactionSize(params, r); }); test('7 paramsText4 d4', async () => { const params = { ...defParams, fixedOutputs: [ { satoshis: 309000, lockingScriptLength: 198 }, { satoshis: 2, lockingScriptLength: 25 } ] }; const availableChange = [ { satoshis: 7130, outputId: 15142 }, { satoshis: 474866, outputId: 15332 }, { satoshis: 16411, outputId: 15355 }, { satoshis: 763632, outputId: 15368 }, { satoshis: 18894, outputId: 15371 }, { satoshis: 1574590, outputId: 15420 }, { satoshis: 43207, outputId: 15480 }, { satoshis: 12342, outputId: 15541 }, { satoshis: 123453, outputId: 15548 }, { satoshis: 7890, outputId: 16020 }, { satoshis: 1073, outputId: 16026 } ]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe('{"allocatedChangeInputs":[{"satoshis":474866,"outputId":15332,"spendable":false}],"changeOutputs":[{"satoshis":165863,"lockingScriptLength":25}],"size":433,"fee":1,"satsPerKb":2}'); expectTransactionSize(params, r); }); const d5 = { p: { fixedInputs: [{ satoshis: 1000, unlockingScriptLength: 72 }], fixedOutputs: [{ satoshis: 200, lockingScriptLength: 25 }], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 191051, outputId: 14101 }, { satoshis: 273356, outputId: 14110 }, { satoshis: 65612, outputId: 14120 }, { satoshis: 44778, outputId: 14126 }, { satoshis: 58732, outputId: 14141 }, { satoshis: 160865, outputId: 14142 }, { satoshis: 1006, outputId: 14177 }, { satoshis: 1000, outputId: 14178 }, { satoshis: 1000, outputId: 14180 }, { satoshis: 1000, outputId: 14181 }, { satoshis: 1000, outputId: 14183 }, { satoshis: 1000, outputId: 14185 }, { satoshis: 1000, outputId: 14186 }, { satoshis: 1001, outputId: 14188 }, { satoshis: 1000, outputId: 14189 }, { satoshis: 1000, outputId: 14190 }, { satoshis: 1001, outputId: 14192 }, { satoshis: 1000, outputId: 14195 }, { satoshis: 1000, outputId: 14196 }, { satoshis: 1000, outputId: 14197 }, { satoshis: 1000, outputId: 14198 }, { satoshis: 1000, outputId: 14199 }, { satoshis: 1000, outputId: 14200 }, { satoshis: 1000, outputId: 14201 }, { satoshis: 1000, outputId: 14202 }, { satoshis: 1000, outputId: 14203 }, { satoshis: 1000, outputId: 14204 }, { satoshis: 1000, outputId: 14205 }, { satoshis: 1000, outputId: 14206 }, { satoshis: 1003, outputId: 14207 }, { satoshis: 1001, outputId: 14208 }, { satoshis: 1000, outputId: 14209 }, { satoshis: 1000, outputId: 14210 }, { satoshis: 1006, outputId: 14211 }, { satoshis: 1020, outputId: 14212 }, { satoshis: 1000, outputId: 14213 }, { satoshis: 1000, outputId: 14214 }, { satoshis: 1000, outputId: 14215 }, { satoshis: 1000, outputId: 14216 }, { satoshis: 1002, outputId: 14217 }, { satoshis: 1046, outputId: 14218 }, { satoshis: 1103, outputId: 14219 }, { satoshis: 1001, outputId: 14221 }, { satoshis: 1000, outputId: 14222 }, { satoshis: 1000, outputId: 14223 }, { satoshis: 1000, outputId: 14224 }, { satoshis: 31311, outputId: 14321 }, { satoshis: 1042, outputId: 14656 }, { satoshis: 1099, outputId: 14661 }, { satoshis: 1100, outputId: 14675 }, { satoshis: 1019, outputId: 14676 }, { satoshis: 1040, outputId: 14677 }, { satoshis: 1000, outputId: 14679 }, { satoshis: 1000, outputId: 14680 }, { satoshis: 1001, outputId: 14681 }, { satoshis: 1000, outputId: 14682 }, { satoshis: 1001, outputId: 14683 }, { satoshis: 1002, outputId: 14684 }, { satoshis: 1005, outputId: 14685 }, { satoshis: 1000, outputId: 14686 }, { satoshis: 1007, outputId: 14687 }, { satoshis: 1000, outputId: 14802 }, { satoshis: 1069, outputId: 14803 }, { satoshis: 1231, outputId: 15465 }, { satoshis: 2386, outputId: 15468 }, { satoshis: 1267, outputId: 15471 }, { satoshis: 1283, outputId: 15472 }, { satoshis: 1054, outputId: 15473 }, { satoshis: 2031, outputId: 15475 }, { satoshis: 1065, outputId: 15478 }, { satoshis: 1268, outputId: 15479 }, { satoshis: 1066, outputId: 15480 }, { satoshis: 1065, outputId: 15481 }, { satoshis: 1006, outputId: 15482 }, { satoshis: 999799, outputId: 16338 }, { satoshis: 2021, outputId: 16339 }, { satoshis: 666465, outputId: 16340 }, { satoshis: 5354, outputId: 16341 }, { satoshis: 3132, outputId: 16342 } ] }; const d6 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 500, lockingScriptLength: 436 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 1040, outputId: 16345 }, { satoshis: 1000, outputId: 16346 }, { satoshis: 1023, outputId: 16348 }, { satoshis: 1054, outputId: 16350 }, { satoshis: 1118, outputId: 16353 }, { satoshis: 1000, outputId: 16354 }, { satoshis: 1001, outputId: 16355 }, { satoshis: 1000, outputId: 16356 }, { satoshis: 1005, outputId: 16360 }, { satoshis: 1000, outputId: 16361 }, { satoshis: 375235, outputId: 16362 }, { satoshis: 1000, outputId: 16363 }, { satoshis: 1000, outputId: 16364 }, { satoshis: 45658, outputId: 16365 }, { satoshis: 286834, outputId: 16367 }, { satoshis: 1001, outputId: 16368 }, { satoshis: 1001, outputId: 16369 }, { satoshis: 57051, outputId: 16370 }, { satoshis: 1036, outputId: 16371 }, { satoshis: 16508, outputId: 16372 }, { satoshis: 1000, outputId: 16373 }, { satoshis: 64213, outputId: 16374 }, { satoshis: 1000, outputId: 16376 }, { satoshis: 1000, outputId: 16377 }, { satoshis: 1154, outputId: 16378 }, { satoshis: 1000, outputId: 16380 }, { satoshis: 1008, outputId: 16381 }, { satoshis: 1064, outputId: 16382 }, { satoshis: 1234, outputId: 16383 }, { satoshis: 119205, outputId: 16395 }, { satoshis: 582, outputId: 16397 }, { satoshis: 2384, outputId: 16399 }, { satoshis: 4391, outputId: 16401 }, { satoshis: 600, outputId: 16406 }, { satoshis: 2599799, outputId: 16407 } ] }; const d7 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1570, lockingScriptLength: 25 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 23082, outputId: 14734 }, { satoshis: 16496, outputId: 14742 }, { satoshis: 270789, outputId: 14744 }, { satoshis: 81520, outputId: 14763 }, { satoshis: 14759, outputId: 14770 }, { satoshis: 390625, outputId: 14774 }, { satoshis: 674234, outputId: 14790 }, { satoshis: 999799, outputId: 14794 }, { satoshis: 1000, outputId: 15583 }, { satoshis: 1000, outputId: 15584 }, { satoshis: 1000, outputId: 15585 }, { satoshis: 1000, outputId: 15586 }, { satoshis: 1000, outputId: 15587 }, { satoshis: 1000, outputId: 15588 }, { satoshis: 1025, outputId: 15589 }, { satoshis: 1000, outputId: 15590 }, { satoshis: 1000, outputId: 15591 }, { satoshis: 1000, outputId: 15593 }, { satoshis: 1000, outputId: 15594 }, { satoshis: 1000, outputId: 15595 }, { satoshis: 1000, outputId: 15596 }, { satoshis: 1000, outputId: 15597 }, { satoshis: 1316, outputId: 15598 }, { satoshis: 1000, outputId: 15599 }, { satoshis: 1000, outputId: 15600 }, { satoshis: 1000, outputId: 15601 }, { satoshis: 1426, outputId: 15602 }, { satoshis: 1000, outputId: 15603 }, { satoshis: 1000, outputId: 15604 }, { satoshis: 1000, outputId: 15605 }, { satoshis: 1000, outputId: 15606 }, { satoshis: 1000, outputId: 15607 }, { satoshis: 1000, outputId: 15608 }, { satoshis: 1000, outputId: 15609 }, { satoshis: 1004, outputId: 15610 }, { satoshis: 1000, outputId: 15611 }, { satoshis: 1013, outputId: 15612 }, { satoshis: 1001, outputId: 15614 }, { satoshis: 1000, outputId: 15615 }, { satoshis: 1000, outputId: 15616 }, { satoshis: 1000, outputId: 15617 }, { satoshis: 1000, outputId: 15618 }, { satoshis: 1000, outputId: 15619 }, { satoshis: 1006, outputId: 15620 }, { satoshis: 1000, outputId: 15621 }, { satoshis: 1000, outputId: 15622 }, { satoshis: 1000, outputId: 15623 }, { satoshis: 1000, outputId: 15624 }, { satoshis: 1032, outputId: 15625 }, { satoshis: 4571, outputId: 15626 }, { satoshis: 1000, outputId: 15628 }, { satoshis: 1000, outputId: 15629 }, { satoshis: 1087, outputId: 15630 }, { satoshis: 1000, outputId: 15631 }, { satoshis: 1000, outputId: 15632 }, { satoshis: 1001, outputId: 15633 }, { satoshis: 1001, outputId: 15634 }, { satoshis: 1000, outputId: 15635 }, { satoshis: 1000, outputId: 15637 }, { satoshis: 1001, outputId: 15638 }, { satoshis: 1000, outputId: 15639 }, { satoshis: 1000, outputId: 15640 }, { satoshis: 1000, outputId: 15641 }, { satoshis: 1000, outputId: 15642 }, { satoshis: 1000, outputId: 15643 }, { satoshis: 1036, outputId: 15644 }, { satoshis: 1000, outputId: 15645 }, { satoshis: 1000, outputId: 15646 }, { satoshis: 1000, outputId: 15647 }, { satoshis: 1000, outputId: 15648 }, { satoshis: 1001, outputId: 15649 }, { satoshis: 1000, outputId: 15650 }, { satoshis: 1050, outputId: 15651 }, { satoshis: 1273, outputId: 15653 }, { satoshis: 1029, outputId: 15654 }, { satoshis: 1524, outputId: 15655 }, { satoshis: 1817, outputId: 15658 }, { satoshis: 1041, outputId: 16409 } ] }; const d8 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1564, lockingScriptLength: 25 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 23082, outputId: 14734 }, { satoshis: 16496, outputId: 14742 }, { satoshis: 270789, outputId: 14744 }, { satoshis: 81520, outputId: 14763 }, { satoshis: 14759, outputId: 14770 }, { satoshis: 390625, outputId: 14774 }, { satoshis: 674234, outputId: 14790 }, { satoshis: 999799, outputId: 14794 }, { satoshis: 1000, outputId: 15583 }, { satoshis: 1000, outputId: 15584 }, { satoshis: 1000, outputId: 15585 }, { satoshis: 1000, outputId: 15586 }, { satoshis: 1000, outputId: 15587 }, { satoshis: 1000, outputId: 15588 }, { satoshis: 1025, outputId: 15589 }, { satoshis: 1000, outputId: 15590 }, { satoshis: 1000, outputId: 15591 }, { satoshis: 1000, outputId: 15593 }, { satoshis: 1000, outputId: 15594 }, { satoshis: 1000, outputId: 15595 }, { satoshis: 1000, outputId: 15596 }, { satoshis: 1000, outputId: 15597 }, { satoshis: 1316, outputId: 15598 }, { satoshis: 1000, outputId: 15599 }, { satoshis: 1000, outputId: 15600 }, { satoshis: 1000, outputId: 15601 }, { satoshis: 1426, outputId: 15602 }, { satoshis: 1000, outputId: 15603 }, { satoshis: 1000, outputId: 15604 }, { satoshis: 1000, outputId: 15605 }, { satoshis: 1000, outputId: 15606 }, { satoshis: 1000, outputId: 15607 }, { satoshis: 1000, outputId: 15608 }, { satoshis: 1000, outputId: 15609 }, { satoshis: 1004, outputId: 15610 }, { satoshis: 1000, outputId: 15611 }, { satoshis: 1013, outputId: 15612 }, { satoshis: 1001, outputId: 15614 }, { satoshis: 1000, outputId: 15615 }, { satoshis: 1000, outputId: 15616 }, { satoshis: 1000, outputId: 15617 }, { satoshis: 1000, outputId: 15618 }, { satoshis: 1000, outputId: 15619 }, { satoshis: 1006, outputId: 15620 }, { satoshis: 1000, outputId: 15621 }, { satoshis: 1000, outputId: 15622 }, { satoshis: 1000, outputId: 15623 }, { satoshis: 1000, outputId: 15624 }, { satoshis: 1032, outputId: 15625 }, { satoshis: 4571, outputId: 15626 }, { satoshis: 1000, outputId: 15628 }, { satoshis: 1000, outputId: 15629 }, { satoshis: 1087, outputId: 15630 }, { satoshis: 1000, outputId: 15631 }, { satoshis: 1000, outputId: 15632 }, { satoshis: 1001, outputId: 15633 }, { satoshis: 1001, outputId: 15634 }, { satoshis: 1000, outputId: 15635 }, { satoshis: 1000, outputId: 15637 }, { satoshis: 1001, outputId: 15638 }, { satoshis: 1000, outputId: 15639 }, { satoshis: 1000, outputId: 15640 }, { satoshis: 1000, outputId: 15641 }, { satoshis: 1000, outputId: 15642 }, { satoshis: 1000, outputId: 15643 }, { satoshis: 1036, outputId: 15644 }, { satoshis: 1000, outputId: 15645 }, { satoshis: 1000, outputId: 15646 }, { satoshis: 1000, outputId: 15647 }, { satoshis: 1000, outputId: 15648 }, { satoshis: 1001, outputId: 15649 }, { satoshis: 1000, outputId: 15650 }, { satoshis: 1050, outputId: 15651 }, { satoshis: 1273, outputId: 15653 }, { satoshis: 1029, outputId: 15654 }, { satoshis: 1524, outputId: 15655 }, { satoshis: 1817, outputId: 15658 }, { satoshis: 1041, outputId: 16409 } ] }; const d9 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1000, lockingScriptLength: 1136 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 23082, outputId: 14734 }, { satoshis: 270789, outputId: 14744 }, { satoshis: 81520, outputId: 14763 }, { satoshis: 14759, outputId: 14770 }, { satoshis: 390625, outputId: 14774 }, { satoshis: 674234, outputId: 14790 }, { satoshis: 999799, outputId: 14794 }, { satoshis: 1000, outputId: 15583 }, { satoshis: 1000, outputId: 15584 }, { satoshis: 1000, outputId: 15585 }, { satoshis: 1000, outputId: 15586 }, { satoshis: 1000, outputId: 15587 }, { satoshis: 1000, outputId: 15588 }, { satoshis: 1000, outputId: 15590 }, { satoshis: 1000, outputId: 15591 }, { satoshis: 1000, outputId: 15593 }, { satoshis: 1000, outputId: 15594 }, { satoshis: 1000, outputId: 15595 }, { satoshis: 1000, outputId: 15596 }, { satoshis: 1000, outputId: 15597 }, { satoshis: 1000, outputId: 15599 }, { satoshis: 1000, outputId: 15600 }, { satoshis: 1000, outputId: 15601 }, { satoshis: 1000, outputId: 15603 }, { satoshis: 1000, outputId: 15604 }, { satoshis: 1000, outputId: 15605 }, { satoshis: 1000, outputId: 15606 }, { satoshis: 1000, outputId: 15607 }, { satoshis: 1000, outputId: 15608 }, { satoshis: 1000, outputId: 15609 }, { satoshis: 1004, outputId: 15610 }, { satoshis: 1000, outputId: 15611 }, { satoshis: 1001, outputId: 15614 }, { satoshis: 1000, outputId: 15615 }, { satoshis: 1000, outputId: 15616 }, { satoshis: 1000, outputId: 15617 }, { satoshis: 1000, outputId: 15618 }, { satoshis: 1000, outputId: 15619 }, { satoshis: 1006, outputId: 15620 }, { satoshis: 1000, outputId: 15621 }, { satoshis: 1000, outputId: 15622 }, { satoshis: 1000, outputId: 15623 }, { satoshis: 1000, outputId: 15624 }, { satoshis: 4571, outputId: 15626 }, { satoshis: 1000, outputId: 15628 }, { satoshis: 1000, outputId: 15629 }, { satoshis: 1000, outputId: 15631 }, { satoshis: 1000, outputId: 15632 }, { satoshis: 1001, outputId: 15633 }, { satoshis: 1001, outputId: 15634 }, { satoshis: 1000, outputId: 15635 }, { satoshis: 1000, outputId: 15637 }, { satoshis: 1001, outputId: 15638 }, { satoshis: 1000, outputId: 15639 }, { satoshis: 1000, outputId: 15640 }, { satoshis: 1000, outputId: 15641 }, { satoshis: 1000, outputId: 15642 }, { satoshis: 1000, outputId: 15643 }, { satoshis: 1000, outputId: 15645 }, { satoshis: 1000, outputId: 15646 }, { satoshis: 1000, outputId: 15647 }, { satoshis: 1000, outputId: 15648 }, { satoshis: 1001, outputId: 15649 }, { satoshis: 1000, outputId: 15650 }, { satoshis: 604, outputId: 16421 }, { satoshis: 958, outputId: 16429 }, { satoshis: 724, outputId: 16431 }, { satoshis: 413, outputId: 16433 }, { satoshis: 915, outputId: 16439 }, { satoshis: 842, outputId: 16441 }, { satoshis: 348, outputId: 16451 }, { satoshis: 339, outputId: 16453 }, { satoshis: 334, outputId: 16455 }, { satoshis: 331, outputId: 16457 }, { satoshis: 330, outputId: 16459 }, { satoshis: 327, outputId: 16461 }, { satoshis: 323, outputId: 16463 }, { satoshis: 311, outputId: 16465 } ] }; const d10 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1, lockingScriptLength: 25 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 110 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 268076, outputId: 16671 }, { satoshis: 2999799, outputId: 16677 }, { satoshis: 14030, outputId: 21194 }, { satoshis: 100925, outputId: 21224 } ] }; const d11 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1, lockingScriptLength: 25 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 110 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 268076, outputId: 16671 }, { satoshis: 2999799, outputId: 16677 }, { satoshis: 1396, outputId: 21307 }, { satoshis: 1023, outputId: 21308 }, { satoshis: 1000, outputId: 21309 }, { satoshis: 1000, outputId: 21310 }, { satoshis: 1000, outputId: 21311 }, { satoshis: 1220, outputId: 21312 }, { satoshis: 5573, outputId: 21313 }, { satoshis: 1000, outputId: 21314 }, { satoshis: 1000, outputId: 21315 }, { satoshis: 5926, outputId: 21316 }, { satoshis: 30814, outputId: 21317 }, { satoshis: 24441, outputId: 21318 }, { satoshis: 285, outputId: 21319 }, { satoshis: 1325, outputId: 21320 }, { satoshis: 1000, outputId: 21321 }, { satoshis: 1002, outputId: 21322 }, { satoshis: 1000, outputId: 21324 }, { satoshis: 1057, outputId: 21325 }, { satoshis: 1000, outputId: 21326 }, { satoshis: 1159, outputId: 21327 }, { satoshis: 1061, outputId: 21328 }, { satoshis: 1000, outputId: 21329 }, { satoshis: 1000, outputId: 21330 }, { satoshis: 1000, outputId: 21331 }, { satoshis: 8873, outputId: 21332 }, { satoshis: 1001, outputId: 21333 }, { satoshis: 1011, outputId: 21334 }, { satoshis: 1000, outputId: 21335 }, { satoshis: 13699, outputId: 21336 } ] }; const d12 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 1, lockingScriptLength: 25 }, { satoshis: 200, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 110 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 268076, outputId: 16671 }, { satoshis: 2999799, outputId: 16677 }, { satoshis: 14030, outputId: 21194 }, { satoshis: 100925, outputId: 21224 } ] }; const d13 = { p: { fixedInputs: [], fixedOutputs: [ { satoshis: 500, lockingScriptLength: 194 }, { satoshis: 2, lockingScriptLength: 25 } ], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107 }, availableChange: [ { satoshis: 285, outputId: 16190 }, { satoshis: 1012, outputId: 18487 }, { satoshis: 1013, outputId: 18488 }, { satoshis: 1000, outputId: 18489 }, { satoshis: 1087, outputId: 18490 }, { satoshis: 290, outputId: 18491 }, { satoshis: 1034, outputId: 18492 } ] }; const d14 = { p: { fixedInputs: [], fixedOutputs: [{ satoshis: 3, lockingScriptLength: 141 }], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107, targetNetCount: 22 }, availableChange: [ { satoshis: 995, outputId: 16190 }, { satoshis: 1000, outputId: 18487 }, { satoshis: 1000, outputId: 18488 }, { satoshis: 1000, outputId: 18489 }, { satoshis: 1000, outputId: 18490 }, { satoshis: 1000, outputId: 18491 }, { satoshis: 1000, outputId: 18492 }, { satoshis: 1000, outputId: 18493 }, { satoshis: 1000, outputId: 18494 }, { satoshis: 1000, outputId: 18495 }, { satoshis: 100, outputId: 18496 } ] }; const test8Cases = [ { n: 14, d: d14, er: '{"allocatedChangeInputs":[{"satoshis":1000,"outputId":18495,"spendable":false}],"changeOutputs":[{"satoshis":996,"lockingScriptLength":25}],"size":342,"fee":1,"satsPerKb":2}' }, { n: 13, d: d13, er: '{"allocatedChangeInputs":[{"satoshis":1000,"outputId":18489,"spendable":false}],"changeOutputs":[{"satoshis":497,"lockingScriptLength":25}],"size":429,"fee":1,"satsPerKb":2}' }, { n: 12, d: d12, er: '{"allocatedChangeInputs":[{"satoshis":14030,"outputId":21194,"spendable":false}],"changeOutputs":[{"satoshis":13800,"lockingScriptLength":25}],"size":260,"fee":29,"satsPerKb":110}' }, { n: 11, d: d11, er: '{"allocatedChangeInputs":[{"satoshis":285,"outputId":21319,"spendable":false},{"satoshis":1000,"outputId":21309,"spendable":false}],"changeOutputs":[{"satoshis":1039,"lockingScriptLength":25}],"size":408,"fee":45,"satsPerKb":110}' }, { n: 10, d: d10, er: '{"allocatedChangeInputs":[{"satoshis":14030,"outputId":21194,"spendable":false}],"changeOutputs":[{"satoshis":13800,"lockingScriptLength":25}],"size":260,"fee":29,"satsPerKb":110}' }, { n: 9, d: d9, er: '{"allocatedChangeInputs":[{"satoshis":4571,"outputId":15626,"spendable":false}],"changeOutputs":[{"satoshis":3368,"lockingScriptLength":25}],"size":1373,"fee":3,"satsPerKb":2}' }, { n: 8, d: d8, er: '{"allocatedChangeInputs":[{"satoshis":1817,"outputId":15658,"spendable":false}],"changeOutputs":[{"satoshis":52,"lockingScriptLength":25}],"size":260,"fee":1,"satsPerKb":2}' }, { n: 7, d: d7, er: '{"allocatedChangeInputs":[{"satoshis":1817,"outputId":15658,"spendable":false}],"changeOutputs":[{"satoshis":46,"lockingScriptLength":25}],"size":260,"fee":1,"satsPerKb":2}' }, { n: 6, d: d6, er: '{"allocatedChangeInputs":[{"satoshis":1000,"outputId":16346,"spendable":false}],"changeOutputs":[{"satoshis":298,"lockingScriptLength":25}],"size":673,"fee":2,"satsPerKb":2}' }, { n: 5, d: d5, er: '{"allocatedChangeInputs":[],"changeOutputs":[{"satoshis":799,"lockingScriptLength":25}],"size":191,"fee":1,"satsPerKb":2}' } ]; test('8 paramsText d5 d6 d7 d8 d9 d10 d11 d12 d13 d14', async () => { for (const { n, d, er } of test8Cases) { const params = { ...d.p }; const availableChange = [...d.availableChange]; const { allocateChangeInput, releaseChangeInput } = (0, generateChange_1.generateChangeSdkMakeStorage)(availableChange); const r = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput); expect(JSON.stringify(r)).toBe(er); expectTransactionSize(params, r); } }); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any async function expectToThrowWERR(expectedClass, fn) { try { await fn(); } catch (eu) { const e = index_client_1.sdk.WalletError.fromUnknown(eu); expect(e.name).toBe(expectedClass.name); expect(e.isError).toBe(true); return; } throw new Error(`${expectedClass.name} was not thrown`); } function makeTransaction(params, results) { const tx = new sdk_1.Transaction(); for (const i of params.fixedInputs) { tx.inputs.push({ unlockingScript: sdk_1.Script.fromBinary(Array(i.unlockingScriptLength).fill(0)), sourceOutputIndex: 0, sourceTXID: '00'.repeat(32) }); } for (const i of results.allocatedChangeInputs) { tx.inputs.push({ unlockingScript: sdk_1.Script.fromBinary(Array(params.changeUnlockingScriptLength).fill(0)), sourceOutputIndex: 0, sourceTXID: '00'.repeat(32) }); } for (const o of params.fixedOutputs) { tx.outputs.push({ lockingScript: sdk_1.Script.fromBinary(Array(o.lockingScriptLength).fill(0)), satoshis: o.satoshis }); } for (const o of results.changeOutputs) { tx.outputs.push({ lockingScript: sdk_1.Script.fromBinary(Array(o.lockingScriptLength).fill(0)), satoshis: o.satoshis }); } return tx; } function expectTransactionSize(params, results) { const tx = makeTransaction(params, results); const size = tx.toBinary().length; if (size !== results.size) throw new index_client_1.sdk.WERR_INTERNAL(`expectTransaction actual ${size} expected ${results.size}`); } const defParams = { fixedInputs: [], fixedOutputs: [], feeModel: { model: 'sat/kb', value: 2 }, changeInitialSatoshis: 1000, changeFirstSatoshis: 285, changeLockingScriptLength: 25, changeUnlockingScriptLength: 107, randomVals: [...randomValsUsed1_1.randomValsUsed1] }; const _defAvailableChange = [ { satoshis: 6323, outputId: 15005 }, { satoshis: 1004, outputId: 15011 }, { satoshis: 1000, outputId: 15013 }, { satoshis: 1000, outputId: 15017 }, { satoshis: 1000, outputId: 15023 }, { satoshis: 1000, outputId: 15027 }, { satoshis: 1000, outputId: 15034 }, { satoshis: 1575097, outputId: 15101 }, { satoshis: 16417, outputId: 15103 }, { satoshis: 3377, outputId: 15104 }, { satoshis: 10735, outputId: 15106 } ]; const defAvailableChange = () => JSON.parse(JSON.stringify(_defAvailableChange)); //# sourceMappingURL=generateChangeSdk.test.js.map