Skip to content

Commit 291aed8

Browse files
refactor(abstract-utxo): improve parse method
Rename and add tests TICKET: BTC-1450
1 parent 6eae1ca commit 291aed8

File tree

6 files changed

+82
-10
lines changed

6 files changed

+82
-10
lines changed

modules/abstract-utxo/src/core/descriptor/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ export type { DescriptorMap } from './DescriptorMap';
33
export type { PsbtParams } from './psbt';
44

55
export { createAddressFromDescriptor, createScriptPubKeyFromDescriptor } from './address';
6-
export { createPsbt, finalizePsbt } from './psbt';
6+
export { createPsbt, finalizePsbt, parse } from './psbt';
77
export { toDescriptorMap } from './DescriptorMap';
88
export { toDerivedDescriptorWalletOutput } from './Output';
99
export { signTxLocal } from './signTxLocal';
10-
export { parseAndValidateTransaction } from './parseTransaction';

modules/abstract-utxo/src/core/descriptor/parseTransaction/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export type { PsbtParams } from './createPsbt';
22
export { createPsbt } from './createPsbt';
3+
export { parse } from './parse';
34

45
export { finalizePsbt } from './wrap';

modules/abstract-utxo/src/core/descriptor/parseTransaction/parseTransaction.ts renamed to modules/abstract-utxo/src/core/descriptor/psbt/parse.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ import * as utxolib from '@bitgo/utxo-lib';
33

44
import { DescriptorMap } from '../DescriptorMap';
55
import { getVirtualSize } from '../VirtualSize';
6-
import { findDescriptorForInput, findDescriptorForOutput } from '../psbt/findDescriptors';
7-
import { assertSatisfiable } from '../psbt/assertSatisfiable';
6+
import { findDescriptorForInput, findDescriptorForOutput } from './findDescriptors';
7+
import { assertSatisfiable } from './assertSatisfiable';
88

9-
type ScriptId = { descriptor: Descriptor; index: number };
9+
export type ScriptId = { descriptor: Descriptor; index: number };
1010

11-
type ParsedInput = {
11+
export type ParsedInput = {
1212
address: string;
1313
value: bigint;
1414
scriptId: ScriptId;
1515
};
1616

17-
type ParsedOutput = {
17+
export type ParsedOutput = {
1818
address?: string;
1919
script: Buffer;
2020
value: bigint;
2121
scriptId?: ScriptId;
2222
};
2323

24-
type ParsedDescriptorTransaction = {
24+
export type ParsedDescriptorTransaction = {
2525
inputs: ParsedInput[];
2626
outputs: ParsedOutput[];
2727
spendAmount: bigint;
@@ -33,7 +33,7 @@ function sum(...values: bigint[]): bigint {
3333
return values.reduce((a, b) => a + b, BigInt(0));
3434
}
3535

36-
export function parseAndValidateTransaction(
36+
export function parse(
3737
psbt: utxolib.Psbt,
3838
descriptorMap: DescriptorMap,
3939
network: utxolib.Network
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"inputs": [
3+
{
4+
"address": "bc1q2yau645jl7k577lmanqn9a0ulcgcqm0wrrmx09dppd3kcwguvyzqk86umj",
5+
"value": "1000000",
6+
"scriptId": {
7+
"descriptor": "wsh(multi(2,xpub661MyMwAqRbcGgAiE61i1eaQhbbjc4bbNGs29j3pDwR6nWEve2UsfFvNjBCVq55ou4CRNmwFJaes68he1Dv4DtZijPb1rKyCAe7QUeSNrHv/0/*,xpub661MyMwAqRbcEhTeHonWEhBz8fEB77o21PhGm6SvrbDBQfMiyLi1QP9sqoocVxmpU88J81v5DN8TQycPtZpeyATTPgfQZNz5XLCAiwjubBt/0/*,xpub661MyMwAqRbcGYdhWFrcJryS4koZw7EhwAWy8K1ohYycNketUENNBbSXB8RNLdaob7TanDsmT2Cn2Me7Bt4wBjQurPcqBaWkiCNQPQ1rVUG/0/*))#7njj32qu",
8+
"index": 0
9+
}
10+
},
11+
{
12+
"address": "bc1qaq3yqn0dfs20gqd0mtm24mgu7vv77guqcw4t4rxxu0vgjhlsn47seygpq7",
13+
"value": "1000000",
14+
"scriptId": {
15+
"descriptor": "wsh(multi(2,xpub661MyMwAqRbcGgAiE61i1eaQhbbjc4bbNGs29j3pDwR6nWEve2UsfFvNjBCVq55ou4CRNmwFJaes68he1Dv4DtZijPb1rKyCAe7QUeSNrHv/0/*,xpub661MyMwAqRbcEhTeHonWEhBz8fEB77o21PhGm6SvrbDBQfMiyLi1QP9sqoocVxmpU88J81v5DN8TQycPtZpeyATTPgfQZNz5XLCAiwjubBt/0/*,xpub661MyMwAqRbcGYdhWFrcJryS4koZw7EhwAWy8K1ohYycNketUENNBbSXB8RNLdaob7TanDsmT2Cn2Me7Bt4wBjQurPcqBaWkiCNQPQ1rVUG/0/*))#7njj32qu",
16+
"index": 1
17+
}
18+
}
19+
],
20+
"outputs": [
21+
{
22+
"address": "bc1qvn279lx29cg843u77p3c37npay7w4uc4xw5d92xxa92z8gd3lkuq4w8477",
23+
"script": "002064d5e2fcca2e107ac79ef06388fa61e93ceaf31533a8d2a8c6e95423a1b1fdb8",
24+
"value": "400000"
25+
},
26+
{
27+
"address": "bc1q2yau645jl7k577lmanqn9a0ulcgcqm0wrrmx09dppd3kcwguvyzqk86umj",
28+
"script": "0020513bcd5692ffad4f7bfbecc132f5fcfe11806dee18f66795a10b636c391c6104",
29+
"value": "400000",
30+
"scriptId": {
31+
"descriptor": "wsh(multi(2,xpub661MyMwAqRbcGgAiE61i1eaQhbbjc4bbNGs29j3pDwR6nWEve2UsfFvNjBCVq55ou4CRNmwFJaes68he1Dv4DtZijPb1rKyCAe7QUeSNrHv/0/*,xpub661MyMwAqRbcEhTeHonWEhBz8fEB77o21PhGm6SvrbDBQfMiyLi1QP9sqoocVxmpU88J81v5DN8TQycPtZpeyATTPgfQZNz5XLCAiwjubBt/0/*,xpub661MyMwAqRbcGYdhWFrcJryS4koZw7EhwAWy8K1ohYycNketUENNBbSXB8RNLdaob7TanDsmT2Cn2Me7Bt4wBjQurPcqBaWkiCNQPQ1rVUG/0/*))#7njj32qu",
32+
"index": 0
33+
}
34+
}
35+
],
36+
"spendAmount": "800000",
37+
"minerFee": "1200000",
38+
"virtualSize": 307
39+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import assert from 'assert';
2+
import { parse } from '../../../../src/core/descriptor';
3+
import { DescriptorTemplate, getDefaultXPubs, getDescriptorMap } from '../descriptor.utils';
4+
import { mockPsbtDefaultWithDescriptorTemplate } from './mock.utils';
5+
import { getFixture } from '../../fixtures.utils';
6+
import { ParsedDescriptorTransaction } from '../../../../src/core/descriptor/psbt/parse';
7+
import { toPlainObject } from '../../toPlainObject.utils';
8+
import { Descriptor } from '@bitgo/wasm-miniscript';
9+
10+
function normalize(parsed: ParsedDescriptorTransaction) {
11+
return toPlainObject(
12+
parsed,
13+
{
14+
apply(v, path) {
15+
if (v instanceof Descriptor) {
16+
return v.toString();
17+
}
18+
},
19+
},
20+
[]
21+
);
22+
}
23+
24+
function describeWithTemplate(t: DescriptorTemplate) {
25+
describe(`parse ${t}`, function () {
26+
it('parses a PSBT with descriptors', async function () {
27+
const psbt = mockPsbtDefaultWithDescriptorTemplate(t);
28+
const parsed = normalize(parse(psbt, getDescriptorMap(t, getDefaultXPubs('a')), psbt.network));
29+
assert.deepStrictEqual(parsed, await getFixture(__dirname + `/fixtures/${t}.parse.json`, parsed));
30+
});
31+
});
32+
}
33+
34+
describeWithTemplate('Wsh2Of3');

0 commit comments

Comments
 (0)