PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-core/test/descriptor/psbt
Просмотр файла: VirtualSize.ts
import assert from 'assert';
import {
getChangeOutputVSizesForDescriptor,
getInputVSizesForDescriptors,
getVirtualSize,
getVirtualSizeEstimateForPsbt,
} from '../../../src/descriptor/VirtualSize';
import {
DescriptorTemplate,
getDefaultXPubs,
getDescriptor,
getDescriptorMap,
mockPsbtDefault,
} from '../../../src/testutil/descriptor';
import { getKeyTriple } from '../../../src/testutil';
import { finalizePsbt } from '../../../src/descriptor';
describe('VirtualSize', function () {
describe('getInputVSizesForDescriptorWallet', function () {
it('returns the input virtual sizes for a descriptor wallet', function () {
assert.deepStrictEqual(
getInputVSizesForDescriptors(
new Map([
['foo', getDescriptor('Wsh2Of2')],
['bar', getDescriptor('Wsh2Of2')],
])
),
{
foo: 96,
bar: 96,
}
);
assert.deepStrictEqual(getInputVSizesForDescriptors(getDescriptorMap('Wsh2Of3')), {
external: 105,
internal: 105,
});
});
});
describe('getChangeOutputVSizesForDescriptor', function () {
it('returns the output virtual sizes for a descriptor', function () {
assert.deepStrictEqual(getChangeOutputVSizesForDescriptor(getDescriptor('Wsh2Of2')), {
inputVSize: 96,
outputVSize: 34,
});
});
});
function describeWithTemplate(t: DescriptorTemplate, inputSize: number, outputSize: number) {
describe(`getVirtualSize ${t}`, function () {
it('returns expected virtual size', function () {
assert.deepStrictEqual(
getVirtualSize(
{
inputs: [{ descriptorName: 'internal' }],
outputs: [{ script: Buffer.alloc(34) }],
},
getDescriptorMap(t)
),
inputSize + outputSize + 11
);
const descriptor = getDescriptor(t);
const nInputs = 10_000;
assert.deepStrictEqual(
getVirtualSize({
/* as proof we can pass 10_000 inputs */
inputs: Array.from({ length: nInputs }).map(() => descriptor),
outputs: [],
}),
inputSize * nInputs + 11
);
});
});
describe(`getVirtualSizeForPsbt ${t}`, function () {
const keys = getKeyTriple('a');
const descriptorSelf = getDescriptor(
t,
keys.map((k) => k.neutered().toBase58())
);
const descriptorOther = getDescriptor(t, getDefaultXPubs('b'));
it('returns expected virtual size', function () {
const psbt = mockPsbtDefault({ descriptorSelf, descriptorOther });
const descriptorMap = new Map([['internal', descriptorSelf]]);
const expectedVirtualSize = inputSize * 2 + outputSize * 2 + 11;
assert.deepStrictEqual(getVirtualSizeEstimateForPsbt(psbt, descriptorMap), expectedVirtualSize);
psbt.signAllInputsHD(keys[0]);
psbt.signAllInputsHD(keys[1]);
finalizePsbt(psbt);
// TODO(BTC-1797): figure out why we overestimate by 1
assert.strictEqual(psbt.extractTransaction().virtualSize(), expectedVirtualSize - 1);
});
});
}
describeWithTemplate('Wsh2Of3', 105, 43);
describeWithTemplate('Tr2Of3-NoKeyPath', 109, 43);
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!