@bitgo-beta/unspents 0.13.2-beta.49 → 0.13.2-beta.491
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.js +1 -1
- package/CHANGELOG.md +455 -0
- package/bin/generate_tables.ts +94 -0
- package/dist/bin/generate_tables.d.ts +2 -0
- package/dist/bin/generate_tables.d.ts.map +1 -0
- package/dist/bin/generate_tables.js +98 -0
- package/dist/{codes.d.ts → src/codes.d.ts} +3 -2
- package/dist/src/codes.d.ts.map +1 -0
- package/dist/src/codes.js +172 -0
- package/dist/{dimensions.d.ts → src/dimensions.d.ts} +5 -3
- package/dist/src/dimensions.d.ts.map +1 -0
- package/dist/src/dimensions.js +492 -0
- package/dist/{index.d.ts → src/index.d.ts} +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -2
- package/dist/{inputWeights.d.ts → src/inputWeights.d.ts} +4 -3
- package/dist/src/inputWeights.d.ts.map +1 -0
- package/dist/src/inputWeights.js +97 -0
- package/dist/{scriptSizes.d.ts → src/scriptSizes.d.ts} +1 -0
- package/dist/src/scriptSizes.d.ts.map +1 -0
- package/dist/src/scriptSizes.js +51 -0
- package/dist/{types.d.ts → src/types.d.ts} +1 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/{types.js → src/types.js} +6 -2
- package/dist/{virtualSizes.d.ts → src/virtualSizes.d.ts} +13 -12
- package/dist/src/virtualSizes.d.ts.map +1 -0
- package/dist/src/virtualSizes.js +114 -0
- package/dist/src/zcash.d.ts +9 -0
- package/dist/src/zcash.d.ts.map +1 -0
- package/dist/src/zcash.js +24 -0
- package/dist/test/chain.d.ts +2 -0
- package/dist/test/chain.d.ts.map +1 -0
- package/dist/test/chain.js +92 -0
- package/dist/test/dimensions.d.ts +2 -0
- package/dist/test/dimensions.d.ts.map +1 -0
- package/dist/test/dimensions.js +225 -0
- package/dist/test/signedTx/inputWeights.d.ts +2 -0
- package/dist/test/signedTx/inputWeights.d.ts.map +1 -0
- package/dist/test/signedTx/inputWeights.js +117 -0
- package/dist/test/signedTx/txCombinations.d.ts +3 -0
- package/dist/test/signedTx/txCombinations.d.ts.map +1 -0
- package/dist/test/signedTx/txCombinations.js +120 -0
- package/dist/test/signedTx/txGen.d.ts +75 -0
- package/dist/test/signedTx/txGen.d.ts.map +1 -0
- package/dist/test/signedTx/txGen.js +223 -0
- package/dist/test/testutils.d.ts +36 -0
- package/dist/test/testutils.d.ts.map +1 -0
- package/dist/test/testutils.js +180 -0
- package/dist/test/virtualSizes.d.ts +2 -0
- package/dist/test/virtualSizes.d.ts.map +1 -0
- package/dist/test/virtualSizes.js +18 -0
- package/dist/test/zcash.d.ts +2 -0
- package/dist/test/zcash.d.ts.map +1 -0
- package/dist/test/zcash.js +60 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/input-costs.md +13 -0
- package/package.json +7 -7
- package/dist/codes.js +0 -168
- package/dist/dimensions.js +0 -485
- package/dist/inputWeights.js +0 -97
- package/dist/scriptSizes.js +0 -51
- package/dist/virtualSizes.js +0 -114
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { BIP32Interface } from '@bitgo-beta/utxo-lib';
|
|
4
|
+
import 'lodash.combinations';
|
|
5
|
+
import { Dimensions } from '../../src';
|
|
6
|
+
import { InputScriptType, TestUnspentType } from '../testutils';
|
|
7
|
+
interface IUnspent {
|
|
8
|
+
scriptPubKey: Buffer;
|
|
9
|
+
redeemScript?: Buffer;
|
|
10
|
+
witnessScript?: Buffer;
|
|
11
|
+
value: number;
|
|
12
|
+
inputType: utxolib.bitgo.outputScripts.ScriptType;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param keys - Pubkeys to use for generating the address.
|
|
17
|
+
* If unspentType is one of UnspentTypePubKeyHash is used, the first key will be used.
|
|
18
|
+
* @param unspentType {String} - one of UnspentTypeScript2of3 or UnspentTypePubKeyHash
|
|
19
|
+
* @return {String} address
|
|
20
|
+
*/
|
|
21
|
+
export declare const createScriptPubKey: (keys: BIP32Interface[], unspentType: TestUnspentType) => Buffer;
|
|
22
|
+
declare class TxCombo {
|
|
23
|
+
walletKeys: BIP32Interface[];
|
|
24
|
+
inputTypes: string[];
|
|
25
|
+
outputTypes: TestUnspentType[];
|
|
26
|
+
expectedDims: Readonly<Dimensions>;
|
|
27
|
+
signKeys?: utxolib.BIP32Interface[] | undefined;
|
|
28
|
+
inputValue: number;
|
|
29
|
+
unspents: IUnspent[];
|
|
30
|
+
inputTx: any;
|
|
31
|
+
constructor(walletKeys: BIP32Interface[], inputTypes: string[], outputTypes: TestUnspentType[], expectedDims?: Readonly<Dimensions>, signKeys?: utxolib.BIP32Interface[] | undefined, inputValue?: number);
|
|
32
|
+
getBuilderWithUnsignedTx(): utxolib.bitgo.UtxoTransactionBuilder;
|
|
33
|
+
getUnsignedTx(): utxolib.bitgo.UtxoTransaction;
|
|
34
|
+
getSignedTx(): utxolib.Transaction;
|
|
35
|
+
}
|
|
36
|
+
declare const runCombinations: ({ inputTypes, maxNInputs, outputTypes, maxNOutputs, }: {
|
|
37
|
+
inputTypes: InputScriptType[];
|
|
38
|
+
maxNInputs: number;
|
|
39
|
+
outputTypes: TestUnspentType[];
|
|
40
|
+
maxNOutputs: number;
|
|
41
|
+
}, callback: (inputCombo: InputScriptType[], outputCombo: TestUnspentType[]) => void) => void;
|
|
42
|
+
declare class Histogram {
|
|
43
|
+
map: Map<number, number>;
|
|
44
|
+
total: number;
|
|
45
|
+
constructor(map?: Map<number, number>);
|
|
46
|
+
add(size: number): void;
|
|
47
|
+
asSortedArray(): number[][];
|
|
48
|
+
asFullSortedArray(): number[][];
|
|
49
|
+
getPercentile(p: number): number;
|
|
50
|
+
toString(): string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* Calls `callback` with a variety of signed txs, based on input parameters
|
|
55
|
+
* Callback arguments are
|
|
56
|
+
* inputType, inputCount, outputType, txs
|
|
57
|
+
* where `txs` implements `forEach()`
|
|
58
|
+
*
|
|
59
|
+
* @param inputTypes - input types to test
|
|
60
|
+
* @param nInputKeyTriplets - number of different input key triples to cycle through
|
|
61
|
+
* @param outputTypes - output types to test
|
|
62
|
+
* @param nOutputKeyTriplets - number of different output key triplets to cycle through
|
|
63
|
+
* @param callback
|
|
64
|
+
*/
|
|
65
|
+
declare const runSignedTransactions: ({ inputTypes, nInputKeyTriplets, outputTypes, nOutputKeyTriplets, }: {
|
|
66
|
+
inputTypes: Array<{
|
|
67
|
+
inputType: string;
|
|
68
|
+
count: number;
|
|
69
|
+
}>;
|
|
70
|
+
nInputKeyTriplets: number;
|
|
71
|
+
outputTypes: TestUnspentType[];
|
|
72
|
+
nOutputKeyTriplets: number;
|
|
73
|
+
}, callback: (inputType: string, inputCount: number, outputType: TestUnspentType, txs: any) => void) => void;
|
|
74
|
+
export { TxCombo, Histogram, runCombinations, runSignedTransactions };
|
|
75
|
+
//# sourceMappingURL=txGen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txGen.d.ts","sourceRoot":"","sources":["../../../test/signedTx/txGen.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAS,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,eAAe,EACf,eAAe,EAKhB,MAAM,cAAc,CAAC;AAEtB,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;CACnD;AAoBD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,SAAU,cAAc,EAAE,eAAe,eAAe,KAAG,MAoBzF,CAAC;AAqCF,cAAM,OAAO;IAKF,UAAU,EAAE,cAAc,EAAE;IAC5B,UAAU,EAAE,MAAM,EAAE;IACpB,WAAW,EAAE,eAAe,EAAE;IAC9B,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC;IAClC,QAAQ,CAAC;IACT,UAAU,EAAE,MAAM;IATpB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC;gBAGX,UAAU,EAAE,cAAc,EAAE,EAC5B,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,GAAE,QAAQ,CAAC,UAAU,CAAmB,EACpD,QAAQ,CAAC,sCAAkB,EAC3B,UAAU,GAAE,MAAW;IAYzB,wBAAwB,IAAI,OAAO,CAAC,KAAK,CAAC,sBAAsB;IAShE,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe;IAI9C,WAAW,IAAI,OAAO,CAAC,WAAW;CAO1C;AAED,QAAA,MAAM,eAAe;gBAOL,eAAe,EAAE;gBACjB,MAAM;iBACL,eAAe,EAAE;iBACjB,MAAM;0BAEE,eAAe,EAAE,eAAe,eAAe,EAAE,KAAK,IAAI,KAChF,IAgBF,CAAC;AAEF,cAAM,SAAS;IAGM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAFpC,KAAK,SAAK;gBAEE,GAAG,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa;IAEhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvB,aAAa,IAAI,MAAM,EAAE,EAAE;IAI3B,iBAAiB,IAAI,MAAM,EAAE,EAAE;IAI/B,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBhC,QAAQ,IAAI,MAAM;CAI1B;AAOD;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,qBAAqB;gBAOX,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;uBACpC,MAAM;iBACZ,eAAe,EAAE;wBACV,MAAM;yBAEN,MAAM,cAAc,MAAM,cAAc,eAAe,OAAO,GAAG,KAAK,IAAI,KAC/F,IAyCF,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.runSignedTransactions = exports.runCombinations = exports.Histogram = exports.TxCombo = exports.createScriptPubKey = void 0;
|
|
31
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
32
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
33
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
34
|
+
require("lodash.combinations");
|
|
35
|
+
const src_1 = require("../../src");
|
|
36
|
+
const testutils_1 = require("../testutils");
|
|
37
|
+
function createUnspent(pubkeys, inputType, value) {
|
|
38
|
+
let spendableScript;
|
|
39
|
+
const scriptType = inputType === 'taprootKeyPathSpend' ? 'p2trMusig2' : inputType;
|
|
40
|
+
if (scriptType === testutils_1.UnspentTypeP2shP2pk) {
|
|
41
|
+
spendableScript = utxolib.bitgo.outputScripts.createOutputScriptP2shP2pk(pubkeys[0]);
|
|
42
|
+
}
|
|
43
|
+
else if (utxolib.bitgo.outputScripts.isScriptType2Of3(scriptType)) {
|
|
44
|
+
spendableScript = utxolib.bitgo.outputScripts.createOutputScript2of3(pubkeys, scriptType);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
throw new Error(`unexpected inputType ${scriptType}`);
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
...spendableScript,
|
|
51
|
+
value,
|
|
52
|
+
inputType: scriptType,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @param keys - Pubkeys to use for generating the address.
|
|
58
|
+
* If unspentType is one of UnspentTypePubKeyHash is used, the first key will be used.
|
|
59
|
+
* @param unspentType {String} - one of UnspentTypeScript2of3 or UnspentTypePubKeyHash
|
|
60
|
+
* @return {String} address
|
|
61
|
+
*/
|
|
62
|
+
const createScriptPubKey = (keys, unspentType) => {
|
|
63
|
+
const pubkeys = keys.map((key) => key.publicKey);
|
|
64
|
+
if (typeof unspentType === 'string' && unspentType in testutils_1.UnspentTypeScript2of3) {
|
|
65
|
+
return createUnspent(pubkeys, unspentType, 0).scriptPubKey;
|
|
66
|
+
}
|
|
67
|
+
const pkHash = utxolib.crypto.hash160(pubkeys[0]);
|
|
68
|
+
switch (unspentType) {
|
|
69
|
+
case testutils_1.UnspentTypePubKeyHash.p2pkh:
|
|
70
|
+
return utxolib.payments.p2pkh({ hash: pkHash }).output;
|
|
71
|
+
case testutils_1.UnspentTypePubKeyHash.p2wpkh:
|
|
72
|
+
return utxolib.payments.p2wpkh({ hash: pkHash }).output;
|
|
73
|
+
}
|
|
74
|
+
if (unspentType instanceof testutils_1.UnspentTypeOpReturn) {
|
|
75
|
+
const payload = Buffer.alloc(unspentType.size).fill(pubkeys[0]);
|
|
76
|
+
return utxolib.script.compile([0x6a, payload]);
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`unsupported output type ${unspentType}`);
|
|
79
|
+
};
|
|
80
|
+
exports.createScriptPubKey = createScriptPubKey;
|
|
81
|
+
const createInputTx = (unspents, inputValue) => {
|
|
82
|
+
const txInputBuilder = new utxolib.bitgo.UtxoTransactionBuilder(utxolib.networks.bitcoin);
|
|
83
|
+
txInputBuilder.addInput(Array(32).fill('01').join(''), 0);
|
|
84
|
+
unspents.forEach(({ scriptPubKey }) => txInputBuilder.addOutput(scriptPubKey, inputValue));
|
|
85
|
+
return txInputBuilder.buildIncomplete();
|
|
86
|
+
};
|
|
87
|
+
function signInput(txBuilder, index, walletKeys, unspent, signKeys = unspent.inputType === 'p2shP2pk' ? [walletKeys[0]] : [walletKeys[0], walletKeys[2]]) {
|
|
88
|
+
signKeys.forEach((keyPair) => {
|
|
89
|
+
if (unspent.inputType === 'p2shP2pk') {
|
|
90
|
+
utxolib.bitgo.signInputP2shP2pk(txBuilder, index, keyPair);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (signKeys.length !== 2) {
|
|
94
|
+
throw new Error(`invalid signKeys length`);
|
|
95
|
+
}
|
|
96
|
+
const cosigner = keyPair === signKeys[0] ? signKeys[1] : signKeys[0];
|
|
97
|
+
utxolib.bitgo.signInput2Of3(txBuilder, index, unspent.inputType, walletKeys.map((k) => k.publicKey), keyPair, cosigner.publicKey, unspent.value);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
class TxCombo {
|
|
102
|
+
constructor(walletKeys, inputTypes, outputTypes, expectedDims = src_1.Dimensions.ZERO, signKeys, inputValue = 10) {
|
|
103
|
+
this.walletKeys = walletKeys;
|
|
104
|
+
this.inputTypes = inputTypes;
|
|
105
|
+
this.outputTypes = outputTypes;
|
|
106
|
+
this.expectedDims = expectedDims;
|
|
107
|
+
this.signKeys = signKeys;
|
|
108
|
+
this.inputValue = inputValue;
|
|
109
|
+
this.unspents = inputTypes.map((inputType) => createUnspent(walletKeys.map((key) => key.publicKey), inputType, this.inputValue));
|
|
110
|
+
this.inputTx = createInputTx(this.unspents, inputValue);
|
|
111
|
+
}
|
|
112
|
+
getBuilderWithUnsignedTx() {
|
|
113
|
+
const txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(utxolib.networks.bitcoin);
|
|
114
|
+
this.inputTx.outs.forEach(({}, i) => txBuilder.addInput(this.inputTx, i));
|
|
115
|
+
this.outputTypes.forEach((unspentType) => txBuilder.addOutput((0, exports.createScriptPubKey)(this.walletKeys, unspentType), this.inputValue));
|
|
116
|
+
return txBuilder;
|
|
117
|
+
}
|
|
118
|
+
getUnsignedTx() {
|
|
119
|
+
return this.getBuilderWithUnsignedTx().buildIncomplete();
|
|
120
|
+
}
|
|
121
|
+
getSignedTx() {
|
|
122
|
+
const txBuilder = this.getBuilderWithUnsignedTx();
|
|
123
|
+
this.unspents.forEach((unspent, i) => {
|
|
124
|
+
signInput(txBuilder, i, this.walletKeys, unspent, this.signKeys);
|
|
125
|
+
});
|
|
126
|
+
return txBuilder.build();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.TxCombo = TxCombo;
|
|
130
|
+
const runCombinations = ({ inputTypes, maxNInputs, outputTypes, maxNOutputs, }, callback) => {
|
|
131
|
+
// Create combinations of different input and output types. Length between 1 and 3.
|
|
132
|
+
const inputCombinations = lodash_1.default.flatten(
|
|
133
|
+
// @ts-ignore
|
|
134
|
+
[...Array(maxNInputs)].map((__, i) => lodash_1.default.combinations(inputTypes, i + 1)));
|
|
135
|
+
const outputCombinations = lodash_1.default.flatten(
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
[...Array(maxNOutputs)].map((__, i) => lodash_1.default.combinations(outputTypes, i + 1)));
|
|
138
|
+
inputCombinations.forEach((inputTypeCombo) => outputCombinations.forEach((outputTypeCombo) => {
|
|
139
|
+
callback(inputTypeCombo, outputTypeCombo);
|
|
140
|
+
}));
|
|
141
|
+
};
|
|
142
|
+
exports.runCombinations = runCombinations;
|
|
143
|
+
class Histogram {
|
|
144
|
+
constructor(map = new Map()) {
|
|
145
|
+
this.map = map;
|
|
146
|
+
this.total = 0;
|
|
147
|
+
}
|
|
148
|
+
add(size) {
|
|
149
|
+
this.map.set(size, (this.map.get(size) || 0) + 1);
|
|
150
|
+
this.total++;
|
|
151
|
+
}
|
|
152
|
+
asSortedArray() {
|
|
153
|
+
return [...this.map.entries()].sort(([a], [b]) => a - b);
|
|
154
|
+
}
|
|
155
|
+
asFullSortedArray() {
|
|
156
|
+
return lodash_1.default.range(this.getPercentile(0), this.getPercentile(1)).map((v) => [v, this.map.get(v) || 0]);
|
|
157
|
+
}
|
|
158
|
+
getPercentile(p) {
|
|
159
|
+
if (0 > p || p > 1) {
|
|
160
|
+
throw new Error(`p must be between 0 and 1`);
|
|
161
|
+
}
|
|
162
|
+
let sum = 0;
|
|
163
|
+
for (const [k, v] of this.asSortedArray()) {
|
|
164
|
+
sum += v;
|
|
165
|
+
if (sum / this.total >= p) {
|
|
166
|
+
return k;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
throw new Error('could not find percentile');
|
|
170
|
+
}
|
|
171
|
+
toString() {
|
|
172
|
+
const keys = [...this.map.keys()].sort((a, b) => a - b);
|
|
173
|
+
return `[${keys.map((k) => `[${k}, ${this.map.get(k)}]`).join(' ')}]`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.Histogram = Histogram;
|
|
177
|
+
const getKeyTriplets = (prefix, count) => [...Array(count)].map((v, i) => [1, 2, 3].map((j) => utxo_lib_1.bip32.fromSeed(Buffer.alloc(16, `${prefix}/${i}/${j}`), utxolib.networks.bitcoin)));
|
|
178
|
+
/**
|
|
179
|
+
*
|
|
180
|
+
* Calls `callback` with a variety of signed txs, based on input parameters
|
|
181
|
+
* Callback arguments are
|
|
182
|
+
* inputType, inputCount, outputType, txs
|
|
183
|
+
* where `txs` implements `forEach()`
|
|
184
|
+
*
|
|
185
|
+
* @param inputTypes - input types to test
|
|
186
|
+
* @param nInputKeyTriplets - number of different input key triples to cycle through
|
|
187
|
+
* @param outputTypes - output types to test
|
|
188
|
+
* @param nOutputKeyTriplets - number of different output key triplets to cycle through
|
|
189
|
+
* @param callback
|
|
190
|
+
*/
|
|
191
|
+
const runSignedTransactions = ({ inputTypes, nInputKeyTriplets, outputTypes, nOutputKeyTriplets, }, callback) => {
|
|
192
|
+
const inputKeyTriplets = getKeyTriplets('test/input/', nInputKeyTriplets);
|
|
193
|
+
const outputKeyTriplets = getKeyTriplets('test/output/', nOutputKeyTriplets);
|
|
194
|
+
const outputValue = 1e8;
|
|
195
|
+
inputTypes.forEach(({ inputType, count: inputCount }) => {
|
|
196
|
+
const inputTxs = inputKeyTriplets.map((inputKeys) => {
|
|
197
|
+
const unspents = [...Array(inputCount)].map(() => createUnspent(inputKeys.map((key) => key.publicKey), inputType, outputValue));
|
|
198
|
+
const inputTx = createInputTx(unspents, outputValue);
|
|
199
|
+
return { inputKeys, unspents, inputTx };
|
|
200
|
+
});
|
|
201
|
+
outputTypes.forEach((outputType) => {
|
|
202
|
+
const outputs = outputKeyTriplets.map((outputKeys) => (0, exports.createScriptPubKey)(outputKeys, outputType));
|
|
203
|
+
const txs = {
|
|
204
|
+
forEach(cb) {
|
|
205
|
+
inputTxs.forEach(({ inputKeys, unspents, inputTx }) => {
|
|
206
|
+
outputs.forEach((scriptPubKey) => {
|
|
207
|
+
const txBuilder = utxolib.bitgo.createTransactionBuilderForNetwork(utxolib.networks.bitcoin);
|
|
208
|
+
inputTx.outs.forEach((v, i) => txBuilder.addInput(inputTx, i));
|
|
209
|
+
txBuilder.addOutput(scriptPubKey, outputValue);
|
|
210
|
+
unspents.forEach((unspent, i) => {
|
|
211
|
+
signInput(txBuilder, i, inputKeys, unspent);
|
|
212
|
+
});
|
|
213
|
+
cb(txBuilder.build());
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
callback(inputType, inputCount, outputType, txs);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
exports.runSignedTransactions = runSignedTransactions;
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhHZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3NpZ25lZFR4L3R4R2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxzREFBc0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXRELDhEQUFnRDtBQUNoRCxtREFBNkQ7QUFDN0Qsb0RBQXVCO0FBQ3ZCLCtCQUE2QjtBQUM3QixtQ0FBdUM7QUFDdkMsNENBT3NCO0FBVXRCLFNBQVMsYUFBYSxDQUFDLE9BQWlCLEVBQUUsU0FBaUIsRUFBRSxLQUFhO0lBQ3hFLElBQUksZUFBZSxDQUFDO0lBQ3BCLE1BQU0sVUFBVSxHQUFHLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbEYsSUFBSSxVQUFVLEtBQUssK0JBQW1CLEVBQUU7UUFDdEMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RGO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNuRSxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzNGO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsT0FBTztRQUNMLEdBQUcsZUFBZTtRQUNsQixLQUFLO1FBQ0wsU0FBUyxFQUFFLFVBQVU7S0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBc0IsRUFBRSxXQUE0QixFQUFVLEVBQUU7SUFDakcsTUFBTSxPQUFPLEdBQUcs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Q0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUM1RSxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQzs0QkFDL0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDOUIsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzRCQUM5QyxDQUFDLENBQUMsQ0FBQzs0QkFFSCxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQ3hCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDO1lBRUYsUUFBUSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFNEMsc0RBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnbG9kYXNoLmNvbWJpbmF0aW9ucyc7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIElucHV0U2NyaXB0VHlwZSxcbiAgVGVzdFVuc3BlbnRUeXBlLFxuICBVbnNwZW50VHlwZU9wUmV0dXJuLFxuICBVbnNwZW50VHlwZVAyc2hQMnBrLFxuICBVbnNwZW50VHlwZVB1YktleUhhc2gsXG4gIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMyxcbn0gZnJvbSAnLi4vdGVzdHV0aWxzJztcblxuaW50ZXJmYWNlIElVbnNwZW50IHtcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcjtcbiAgd2l0bmVzc1NjcmlwdD86IEJ1ZmZlcjtcbiAgdmFsdWU6IG51bWJlcjtcbiAgaW5wdXRUeXBlOiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVW5zcGVudChwdWJrZXlzOiBCdWZmZXJbXSwgaW5wdXRUeXBlOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBJVW5zcGVudCB7XG4gIGxldCBzcGVuZGFibGVTY3JpcHQ7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBpbnB1dFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IGlucHV0VHlwZTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09IFVuc3BlbnRUeXBlUDJzaFAycGspIHtcbiAgICBzcGVuZGFibGVTY3JpcHQgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsocHVia2V5c1swXSk7XG4gIH0gZWxzZSBpZiAodXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU2NyaXB0VHlwZTJPZjMoc2NyaXB0VHlwZSkpIHtcbiAgICBzcGVuZGFibGVTY3JpcHQgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJrZXlzLCBzY3JpcHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgaW5wdXRUeXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3BlbmRhYmxlU2NyaXB0LFxuICAgIHZhbHVlLFxuICAgIGlucHV0VHlwZTogc2NyaXB0VHlwZSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGtleXMgLSBQdWJrZXlzIHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0aGUgYWRkcmVzcy5cbiAqICAgICAgICAgICAgICAgSWYgdW5zcGVudFR5cGUgaXMgb25lIG9mIFVuc3BlbnRUeXBlUHViS2V5SGFzaCBpcyB1c2VkLCB0aGUgZmlyc3Qga2V5IHdpbGwgYmUgdXNlZC5cbiAqIEBwYXJhbSB1bnNwZW50VHlwZSB7U3RyaW5nfSAtIG9uZSBvZiBVbnNwZW50VHlwZVNjcmlwdDJvZjMgb3IgVW5zcGVudFR5cGVQdWJLZXlIYXNoXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNjcmlwdFB1YktleSA9IChrZXlzOiBCSVAzMkludGVyZmFjZVtdLCB1bnNwZW50VHlwZTogVGVzdFVuc3BlbnRUeXBlKTogQnVmZmVyID0+IHtcbiAgY29uc3QgcHVia2V5cyA9IGtleXMubWFwKChrZXkpID0+IGtleS5wdWJsaWNLZXkpO1xuICBpZiAodHlwZW9mIHVuc3BlbnRUeXBlID09PSAnc3RyaW5nJyAmJiB1bnNwZW50VHlwZSBpbiBVbnNwZW50VHlwZVNjcmlwdDJvZjMpIHtcbiAgICByZXR1cm4gY3JlYXRlVW5zcGVudChwdWJrZXlzLCB1bnNwZW50VHlwZSwgMCkuc2NyaXB0UHViS2V5O1xuICB9XG5cbiAgY29uc3QgcGtIYXNoID0gdXR4b2xpYi5jcnlwdG8uaGFzaDE2MChwdWJrZXlzWzBdKTtcbiAgc3dpdGNoICh1bnNwZW50VHlwZSkge1xuICAgIGNhc2UgVW5zcGVudFR5cGVQdWJLZXlIYXNoLnAycGtoOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJwa2goeyBoYXNoOiBwa0hhc2ggfSkub3V0cHV0ITtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUHViS2V5SGFzaC5wMndwa2g6XG4gICAgICByZXR1cm4gdXR4b2xpYi5wYXltZW50cy5wMndwa2goeyBoYXNoOiBwa0hhc2ggfSkub3V0cHV0ITtcbiAgfVxuXG4gIGlmICh1bnNwZW50VHlwZSBpbnN0YW5jZW9mIFVuc3BlbnRUeXBlT3BSZXR1cm4pIHtcbiAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmFsbG9jKHVuc3BlbnRUeXBlLnNpemUpLmZpbGwocHVia2V5c1swXSk7XG4gICAgcmV0dXJuIHV0eG9saWIuc2NyaXB0LmNvbXBpbGUoWzB4NmEsIHBheWxvYWRdKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgJHt1bnNwZW50VHlwZX1gKTtcbn07XG5cbmNvbnN0IGNyZWF0ZUlucHV0VHggPSAodW5zcGVudHM6IGFueVtdLCBpbnB1dFZhbHVlOiBudW1iZXIpID0+IHtcbiAgY29uc3QgdHhJbnB1dEJ1aWxkZXIgPSBuZXcgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyKHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gIHR4SW5wdXRCdWlsZGVyLmFkZElucHV0KEFycmF5KDMyKS5maWxsKCcwMScpLmpvaW4oJycpLCAwKTtcbiAgdW5zcGVudHMuZm9yRWFjaCgoeyBzY3JpcHRQdWJLZXkgfSkgPT4gdHhJbnB1dEJ1aWxkZXIuYWRkT3V0cHV0KHNjcmlwdFB1YktleSwgaW5wdXRWYWx1ZSkpO1xuICByZXR1cm4gdHhJbnB1dEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCk7XG59O1xuXG5mdW5jdGlvbiBzaWduSW5wdXQoXG4gIHR4QnVpbGRlcjogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBpbmRleDogbnVtYmVyLFxuICB3YWxsZXRLZXlzOiBCSVAzMkludGVyZmFjZVtdLFxuICB1bnNwZW50OiBJVW5zcGVudCxcbiAgc2lnbktleXM6IEJJUDMySW50ZXJmYWNlW10gPSB1bnNwZW50LmlucHV0VHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IFt3YWxsZXRLZXlzWzBdXSA6IFt3YWxsZXRLZXlzWzBdLCB3YWxsZXRLZXlzWzJdXVxuKSB7XG4gIHNpZ25LZXlzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICBpZiAodW5zcGVudC5pbnB1dFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHV0eG9saWIuYml0Z28uc2lnbklucHV0UDJzaFAycGsodHhCdWlsZGVyLCBpbmRleCwga2V5UGFpcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaWduS2V5cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNpZ25LZXlzIGxlbmd0aGApO1xuICAgICAgfVxuICAgICAgY29uc3QgY29zaWduZXIgPSBrZXlQYWlyID09PSBzaWduS2V5c1swXSA/IHNpZ25LZXlzWzFdIDogc2lnbktleXNbMF07XG4gICAgICB1dHhvbGliLmJpdGdvLnNpZ25JbnB1dDJPZjMoXG4gICAgICAgIHR4QnVpbGRlcixcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHVuc3BlbnQuaW5wdXRUeXBlLFxuICAgICAgICB3YWxsZXRLZXlzLm1hcCgoaykgPT4gay5wdWJsaWNLZXkpIGFzIHV0eG9saWIuYml0Z28uVHJpcGxlPEJ1ZmZlcj4sXG4gICAgICAgIGtleVBhaXIsXG4gICAgICAgIGNvc2lnbmVyLnB1YmxpY0tleSxcbiAgICAgICAgdW5zcGVudC52YWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG5jbGFzcyBUeENvbWJvIHtcbiAgcHVibGljIHVuc3BlbnRzOiBJVW5zcGVudFtdO1xuICBwdWJsaWMgaW5wdXRUeDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB3YWxsZXRLZXlzOiBCSVAzMkludGVyZmFjZVtdLFxuICAgIHB1YmxpYyBpbnB1dFR5cGVzOiBzdHJpbmdbXSxcbiAgICBwdWJsaWMgb3V0cHV0VHlwZXM6IFRlc3RVbnNwZW50VHlwZVtdLFxuICAgIHB1YmxpYyBleHBlY3RlZERpbXM6IFJlYWRvbmx5PERpbWVuc2lvbnM+ID0gRGltZW5zaW9ucy5aRVJPLFxuICAgIHB1YmxpYyBzaWduS2V5cz86IEJJUDMySW50ZXJmYWNlW10sXG4gICAgcHVibGljIGlucHV0VmFsdWU6IG51bWJlciA9IDEwXG4gICkge1xuICAgIHRoaXMudW5zcGVudHMgPSBpbnB1dFR5cGVzLm1hcCgoaW5wdXRUeXBlKSA9PlxuICAgICAgY3JlYXRlVW5zcGVudChcbiAgICAgICAgd2FsbGV0S2V5cy5tYXAoKGtleSkgPT4ga2V5LnB1YmxpY0tleSksXG4gICAgICAgIGlucHV0VHlwZSxcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmlucHV0VHggPSBjcmVhdGVJbnB1dFR4KHRoaXMudW5zcGVudHMsIGlucHV0VmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldEJ1aWxkZXJXaXRoVW5zaWduZWRUeCgpOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yayh1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgIHRoaXMuaW5wdXRUeC5vdXRzLmZvckVhY2goKHt9LCBpOiBudW1iZXIpID0+IHR4QnVpbGRlci5hZGRJbnB1dCh0aGlzLmlucHV0VHgsIGkpKTtcbiAgICB0aGlzLm91dHB1dFR5cGVzLmZvckVhY2goKHVuc3BlbnRUeXBlKSA9PlxuICAgICAgdHhCdWlsZGVyLmFkZE91dHB1dChjcmVhdGVTY3JpcHRQdWJLZXkodGhpcy53YWxsZXRLZXlzLCB1bnNwZW50VHlwZSksIHRoaXMuaW5wdXRWYWx1ZSlcbiAgICApO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5zaWduZWRUeCgpOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcldpdGhVbnNpZ25lZFR4KCkuYnVpbGRJbmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2lnbmVkVHgoKTogdXR4b2xpYi5UcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyV2l0aFVuc2lnbmVkVHgoKTtcbiAgICB0aGlzLnVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQsIGkpID0+IHtcbiAgICAgIHNpZ25JbnB1dCh0eEJ1aWxkZXIsIGksIHRoaXMud2FsbGV0S2V5cywgdW5zcGVudCwgdGhpcy5zaWduS2V5cyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHR4QnVpbGRlci5idWlsZCgpO1xuICB9XG59XG5cbmNvbnN0IHJ1bkNvbWJpbmF0aW9ucyA9IChcbiAge1xuICAgIGlucHV0VHlwZXMsXG4gICAgbWF4TklucHV0cyxcbiAgICBvdXRwdXRUeXBlcyxcbiAgICBtYXhOT3V0cHV0cyxcbiAgfToge1xuICAgIGlucHV0VHlwZXM6IElucHV0U2NyaXB0VHlwZVtdO1xuICAgIG1heE5JbnB1dHM6IG51bWJlcjtcbiAgICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW107XG4gICAgbWF4Tk91dHB1dHM6IG51bWJlcjtcbiAgfSxcbiAgY2FsbGJhY2s6IChpbnB1dENvbWJvOiBJbnB1dFNjcmlwdFR5cGVbXSwgb3V0cHV0Q29tYm86IFRlc3RVbnNwZW50VHlwZVtdKSA9PiB2b2lkXG4pOiB2b2lkID0+IHtcbiAgLy8gQ3JlYXRlIGNvbWJpbmF0aW9ucyBvZiBkaWZmZXJlbnQgaW5wdXQgYW5kIG91dHB1dCB0eXBlcy4gTGVuZ3RoIGJldHdlZW4gMSBhbmQgMy5cbiAgY29uc3QgaW5wdXRDb21iaW5hdGlvbnMgPSBfLmZsYXR0ZW4oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIFsuLi5BcnJheShtYXhOSW5wdXRzKV0ubWFwKChfXywgaSkgPT4gXy5jb21iaW5hdGlvbnMoaW5wdXRUeXBlcywgaSArIDEpKVxuICApO1xuICBjb25zdCBvdXRwdXRDb21iaW5hdGlvbnMgPSBfLmZsYXR0ZW4oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIFsuLi5BcnJheShtYXhOT3V0cHV0cyldLm1hcCgoX18sIGkpID0+IF8uY29tYmluYXRpb25zKG91dHB1dFR5cGVzLCBpICsgMSkpXG4gICk7XG5cbiAgaW5wdXRDb21iaW5hdGlvbnMuZm9yRWFjaCgoaW5wdXRUeXBlQ29tYm8pID0+XG4gICAgb3V0cHV0Q29tYmluYXRpb25zLmZvckVhY2goKG91dHB1dFR5cGVDb21ibykgPT4ge1xuICAgICAgY2FsbGJhY2soaW5wdXRUeXBlQ29tYm8sIG91dHB1dFR5cGVDb21ibyk7XG4gICAgfSlcbiAgKTtcbn07XG5cbmNsYXNzIEhpc3RvZ3JhbSB7XG4gIHB1YmxpYyB0b3RhbCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG1hcDogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXAoKSkge31cblxuICBwdWJsaWMgYWRkKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWFwLnNldChzaXplLCAodGhpcy5tYXAuZ2V0KHNpemUpIHx8IDApICsgMSk7XG4gICAgdGhpcy50b3RhbCsrO1xuICB9XG5cbiAgcHVibGljIGFzU29ydGVkQXJyYXkoKTogbnVtYmVyW11bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm1hcC5lbnRyaWVzKCldLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYik7XG4gIH1cblxuICBwdWJsaWMgYXNGdWxsU29ydGVkQXJyYXkoKTogbnVtYmVyW11bXSB7XG4gICAgcmV0dXJuIF8ucmFuZ2UodGhpcy5nZXRQZXJjZW50aWxlKDApLCB0aGlzLmdldFBlcmNlbnRpbGUoMSkpLm1hcCgodikgPT4gW3YsIHRoaXMubWFwLmdldCh2KSB8fCAwXSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVyY2VudGlsZShwOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICgwID4gcCB8fCBwID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxYCk7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgdGhpcy5hc1NvcnRlZEFycmF5KCkpIHtcbiAgICAgIHN1bSArPSB2O1xuICAgICAgaWYgKHN1bSAvIHRoaXMudG90YWwgPj0gcCkge1xuICAgICAgICByZXR1cm4gaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHBlcmNlbnRpbGUnKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleXMgPSBbLi4udGhpcy5tYXAua2V5cygpXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgcmV0dXJuIGBbJHtrZXlzLm1hcCgoaykgPT4gYFske2t9LCAke3RoaXMubWFwLmdldChrKX1dYCkuam9pbignICcpfV1gO1xuICB9XG59XG5cbmNvbnN0IGdldEtleVRyaXBsZXRzID0gKHByZWZpeDogc3RyaW5nLCBjb3VudDogbnVtYmVyKSA9PlxuICBbLi4uQXJyYXkoY291bnQpXS5tYXAoKHYsIGkpID0+XG4gICAgWzEsIDIsIDNdLm1hcCgoaikgPT4gYmlwMzIuZnJvbVNlZWQoQnVmZmVyLmFsbG9jKDE2LCBgJHtwcmVmaXh9LyR7aX0vJHtqfWApLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pKVxuICApO1xuXG4vKipcbiAqXG4gKiBDYWxscyBgY2FsbGJhY2tgIHdpdGggYSB2YXJpZXR5IG9mIHNpZ25lZCB0eHMsIGJhc2VkIG9uIGlucHV0IHBhcmFtZXRlcnNcbiAqIENhbGxiYWNrIGFyZ3VtZW50cyBhcmVcbiAqICAgaW5wdXRUeXBlLCBpbnB1dENvdW50LCBvdXRwdXRUeXBlLCB0eHNcbiAqICB3aGVyZSBgdHhzYCBpbXBsZW1lbnRzIGBmb3JFYWNoKClgXG4gKlxuICogQHBhcmFtIGlucHV0VHlwZXMgLSBpbnB1dCB0eXBlcyB0byB0ZXN0XG4gKiBAcGFyYW0gbklucHV0S2V5VHJpcGxldHMgLSBudW1iZXIgb2YgZGlmZmVyZW50IGlucHV0IGtleSB0cmlwbGVzIHRvIGN5Y2xlIHRocm91Z2hcbiAqIEBwYXJhbSBvdXRwdXRUeXBlcyAtIG91dHB1dCB0eXBlcyB0byB0ZXN0XG4gKiBAcGFyYW0gbk91dHB1dEtleVRyaXBsZXRzIC0gbnVtYmVyIG9mIGRpZmZlcmVudCBvdXRwdXQga2V5IHRyaXBsZXRzIHRvIGN5Y2xlIHRocm91Z2hcbiAqIEBwYXJhbSBjYWxsYmFja1xuICovXG5jb25zdCBydW5TaWduZWRUcmFuc2FjdGlvbnMgPSAoXG4gIHtcbiAgICBpbnB1dFR5cGVzLFxuICAgIG5JbnB1dEtleVRyaXBsZXRzLFxuICAgIG91dHB1dFR5cGVzLFxuICAgIG5PdXRwdXRLZXlUcmlwbGV0cyxcbiAgfToge1xuICAgIGlucHV0VHlwZXM6IEFycmF5PHsgaW5wdXRUeXBlOiBzdHJpbmc7IGNvdW50OiBudW1iZXIgfT47XG4gICAgbklucHV0S2V5VHJpcGxldHM6IG51bWJlcjtcbiAgICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW107XG4gICAgbk91dHB1dEtleVRyaXBsZXRzOiBudW1iZXI7XG4gIH0sXG4gIGNhbGxiYWNrOiAoaW5wdXRUeXBlOiBzdHJpbmcsIGlucHV0Q291bnQ6IG51bWJlciwgb3V0cHV0VHlwZTogVGVzdFVuc3BlbnRUeXBlLCB0eHM6IGFueSkgPT4gdm9pZFxuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGlucHV0S2V5VHJpcGxldHMgPSBnZXRLZXlUcmlwbGV0cygndGVzdC9pbnB1dC8nLCBuSW5wdXRLZXlUcmlwbGV0cyk7XG4gIGNvbnN0IG91dHB1dEtleVRyaXBsZXRzID0gZ2V0S2V5VHJpcGxldHMoJ3Rlc3Qvb3V0cHV0LycsIG5PdXRwdXRLZXlUcmlwbGV0cyk7XG4gIGNvbnN0IG91dHB1dFZhbHVlID0gMWU4O1xuXG4gIGlucHV0VHlwZXMuZm9yRWFjaCgoeyBpbnB1dFR5cGUsIGNvdW50OiBpbnB1dENvdW50IH0pID0+IHtcbiAgICBjb25zdCBpbnB1dFR4cyA9IGlucHV0S2V5VHJpcGxldHMubWFwKChpbnB1dEtleXMpID0+IHtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gWy4uLkFycmF5KGlucHV0Q291bnQpXS5tYXAoKCkgPT5cbiAgICAgICAgY3JlYXRlVW5zcGVudChcbiAgICAgICAgICBpbnB1dEtleXMubWFwKChrZXkpID0+IGtleS5wdWJsaWNLZXkpLFxuICAgICAgICAgIGlucHV0VHlwZSxcbiAgICAgICAgICBvdXRwdXRWYWx1ZVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgY29uc3QgaW5wdXRUeCA9IGNyZWF0ZUlucHV0VHgodW5zcGVudHMsIG91dHB1dFZhbHVlKTtcbiAgICAgIHJldHVybiB7IGlucHV0S2V5cywgdW5zcGVudHMsIGlucHV0VHggfTtcbiAgICB9KTtcblxuICAgIG91dHB1dFR5cGVzLmZvckVhY2goKG91dHB1dFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSBvdXRwdXRLZXlUcmlwbGV0cy5tYXAoKG91dHB1dEtleXMpID0+IGNyZWF0ZVNjcmlwdFB1YktleShvdXRwdXRLZXlzLCBvdXRwdXRUeXBlKSk7XG5cbiAgICAgIGNvbnN0IHR4cyA9IHtcbiAgICAgICAgZm9yRWFjaChjYjogKHR4OiB1dHhvbGliLlRyYW5zYWN0aW9uKSA9PiB2b2lkKSB7XG4gICAgICAgICAgaW5wdXRUeHMuZm9yRWFjaCgoeyBpbnB1dEtleXMsIHVuc3BlbnRzLCBpbnB1dFR4IH0pID0+IHtcbiAgICAgICAgICAgIG91dHB1dHMuZm9yRWFjaCgoc2NyaXB0UHViS2V5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yayh1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgICAgICAgICBpbnB1dFR4Lm91dHMuZm9yRWFjaCgodjogYW55LCBpOiBudW1iZXIpID0+IHR4QnVpbGRlci5hZGRJbnB1dChpbnB1dFR4LCBpKSk7XG4gICAgICAgICAgICAgIHR4QnVpbGRlci5hZGRPdXRwdXQoc2NyaXB0UHViS2V5LCBvdXRwdXRWYWx1ZSk7XG4gICAgICAgICAgICAgIHVuc3BlbnRzLmZvckVhY2goKHVuc3BlbnQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBzaWduSW5wdXQodHhCdWlsZGVyLCBpLCBpbnB1dEtleXMsIHVuc3BlbnQpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjYih0eEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNhbGxiYWNrKGlucHV0VHlwZSwgaW5wdXRDb3VudCwgb3V0cHV0VHlwZSwgdHhzKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBUeENvbWJvLCBIaXN0b2dyYW0sIHJ1bkNvbWJpbmF0aW9ucywgcnVuU2lnbmVkVHJhbnNhY3Rpb25zIH07XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as unspents from '../src';
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
export declare const UnspentTypeP2shP2pk = "p2shP2pk";
|
|
4
|
+
export declare const UnspentTypeScript2of3: {
|
|
5
|
+
p2sh: string;
|
|
6
|
+
p2shP2wsh: string;
|
|
7
|
+
p2wsh: string;
|
|
8
|
+
p2tr: string;
|
|
9
|
+
p2trMusig2: string;
|
|
10
|
+
taprootKeyPathSpend: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const UnspentTypePubKeyHash: {
|
|
13
|
+
p2pkh: 'p2pkh';
|
|
14
|
+
p2wpkh: 'p2wpkh';
|
|
15
|
+
};
|
|
16
|
+
export type TestUnspentType = string | UnspentTypeOpReturn;
|
|
17
|
+
export declare class UnspentTypeOpReturn {
|
|
18
|
+
size: number;
|
|
19
|
+
constructor(size: number);
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
export type InputScriptType = utxolib.bitgo.outputScripts.ScriptType | 'taprootKeyPathSpend';
|
|
23
|
+
export declare function getInputScriptTypes(): InputScriptType[];
|
|
24
|
+
/**
|
|
25
|
+
* Return the input dimensions based on unspent type
|
|
26
|
+
* @param unspentType - one of UnspentTypeScript2of3
|
|
27
|
+
* @return Dimensions
|
|
28
|
+
*/
|
|
29
|
+
export declare const getInputDimensionsForUnspentType: (unspentType: TestUnspentType) => unspents.Dimensions;
|
|
30
|
+
export declare const getOutputDimensionsForUnspentType: (unspentType: TestUnspentType) => unspents.Dimensions;
|
|
31
|
+
export declare function constructPsbt(keys: utxolib.bitgo.RootWalletKeys, inputTypes: InputScriptType[], outputTypes: TestUnspentType[], signatureStatus: 'unsigned' | 'halfsigned' | 'fullysigned', signers?: {
|
|
32
|
+
signerName: utxolib.bitgo.KeyName;
|
|
33
|
+
cosignerName: utxolib.bitgo.KeyName;
|
|
34
|
+
}): utxolib.bitgo.UtxoPsbt<utxolib.bitgo.UtxoTransaction<bigint>>;
|
|
35
|
+
export declare function getSignedTransaction(keys: utxolib.bitgo.RootWalletKeys, signerName: utxolib.bitgo.KeyName, cosignerName: utxolib.bitgo.KeyName, inputTypes: InputScriptType[], outputTypes: TestUnspentType[]): utxolib.bitgo.UtxoTransaction;
|
|
36
|
+
//# sourceMappingURL=testutils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testutils.d.ts","sourceRoot":"","sources":["../../test/testutils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAYhD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAG9C,eAAO,MAAM,qBAAqB,EAAE;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;CACyD,CAAC;AAExF,eAAO,MAAM,qBAAqB,EAAE;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;CACY,CAAC;AAEhC,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE3D,qBAAa,mBAAmB;IACX,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAExB,QAAQ,IAAI,MAAM;CAG1B;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,GAAG,qBAAqB,CAAC;AAE7F,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAEvD;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,gBAAiB,eAAe,KAAG,SAAS,UAiBxF,CAAC;AAEF,eAAO,MAAM,iCAAiC,gBAAiB,eAAe,KAAG,SAAS,UAuBzF,CAAC;AAkBF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,EAC9B,eAAe,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,EAC1D,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;CAAE,GACnF,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAwD/D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAClC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACjC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EACnC,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,KAAK,CAAC,eAAe,CAI/B"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.getSignedTransaction = exports.constructPsbt = exports.getOutputDimensionsForUnspentType = exports.getInputDimensionsForUnspentType = exports.getInputScriptTypes = exports.UnspentTypeOpReturn = exports.UnspentTypePubKeyHash = exports.UnspentTypeScript2of3 = exports.UnspentTypeP2shP2pk = void 0;
|
|
30
|
+
const unspents = __importStar(require("../src"));
|
|
31
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
32
|
+
const assert_1 = __importDefault(require("assert"));
|
|
33
|
+
const txGen_1 = require("./signedTx/txGen");
|
|
34
|
+
/**
|
|
35
|
+
* makeEnum('a', 'b') returns `{ a: 'a', b: 'b' }`
|
|
36
|
+
*
|
|
37
|
+
* @param args
|
|
38
|
+
* @return map with string keys and symbol values
|
|
39
|
+
*/
|
|
40
|
+
const makeEnum = (...args) => args.reduce((obj, key) => Object.assign(obj, { [key]: key }), {});
|
|
41
|
+
exports.UnspentTypeP2shP2pk = 'p2shP2pk';
|
|
42
|
+
// p2trMusig2 is assumed to be script path only. taprootKeyPathSpend is for p2trMusig2 key path
|
|
43
|
+
exports.UnspentTypeScript2of3 = makeEnum('p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr', 'p2trMusig2', 'taprootKeyPathSpend');
|
|
44
|
+
exports.UnspentTypePubKeyHash = makeEnum('p2pkh', 'p2wpkh');
|
|
45
|
+
class UnspentTypeOpReturn {
|
|
46
|
+
constructor(size) {
|
|
47
|
+
this.size = size;
|
|
48
|
+
}
|
|
49
|
+
toString() {
|
|
50
|
+
return `opReturn(${this.size})`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.UnspentTypeOpReturn = UnspentTypeOpReturn;
|
|
54
|
+
function getInputScriptTypes() {
|
|
55
|
+
return [...utxolib.bitgo.outputScripts.scriptTypes2Of3, 'p2shP2pk', 'taprootKeyPathSpend'];
|
|
56
|
+
}
|
|
57
|
+
exports.getInputScriptTypes = getInputScriptTypes;
|
|
58
|
+
/**
|
|
59
|
+
* Return the input dimensions based on unspent type
|
|
60
|
+
* @param unspentType - one of UnspentTypeScript2of3
|
|
61
|
+
* @return Dimensions
|
|
62
|
+
*/
|
|
63
|
+
const getInputDimensionsForUnspentType = (unspentType) => {
|
|
64
|
+
switch (unspentType) {
|
|
65
|
+
case exports.UnspentTypeScript2of3.p2sh:
|
|
66
|
+
return unspents.Dimensions.sum({ nP2shInputs: 1 });
|
|
67
|
+
case exports.UnspentTypeScript2of3.p2shP2wsh:
|
|
68
|
+
return unspents.Dimensions.sum({ nP2shP2wshInputs: 1 });
|
|
69
|
+
case exports.UnspentTypeScript2of3.p2wsh:
|
|
70
|
+
return unspents.Dimensions.sum({ nP2wshInputs: 1 });
|
|
71
|
+
case exports.UnspentTypeScript2of3.p2tr:
|
|
72
|
+
case exports.UnspentTypeScript2of3.p2trMusig2:
|
|
73
|
+
return unspents.Dimensions.sum({ nP2trScriptPathLevel1Inputs: 1 });
|
|
74
|
+
case exports.UnspentTypeScript2of3.taprootKeyPathSpend:
|
|
75
|
+
return unspents.Dimensions.sum({ nP2trKeypathInputs: 1 });
|
|
76
|
+
case exports.UnspentTypeP2shP2pk:
|
|
77
|
+
return unspents.Dimensions.sum({ nP2shP2pkInputs: 1 });
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`no input dimensions for ${unspentType}`);
|
|
80
|
+
};
|
|
81
|
+
exports.getInputDimensionsForUnspentType = getInputDimensionsForUnspentType;
|
|
82
|
+
const getOutputDimensionsForUnspentType = (unspentType) => {
|
|
83
|
+
/* The values here are validated in the test 'calculates output dimensions dynamically' */
|
|
84
|
+
switch (unspentType) {
|
|
85
|
+
case exports.UnspentTypeScript2of3.p2sh:
|
|
86
|
+
case exports.UnspentTypeScript2of3.p2shP2wsh:
|
|
87
|
+
case exports.UnspentTypeP2shP2pk:
|
|
88
|
+
return unspents.Dimensions.fromOutputScriptLength(23);
|
|
89
|
+
case exports.UnspentTypeScript2of3.p2wsh:
|
|
90
|
+
return unspents.Dimensions.fromOutputScriptLength(34);
|
|
91
|
+
case exports.UnspentTypeScript2of3.p2tr:
|
|
92
|
+
case exports.UnspentTypeScript2of3.p2trMusig2:
|
|
93
|
+
case exports.UnspentTypeScript2of3.taprootKeyPathSpend:
|
|
94
|
+
return unspents.Dimensions.fromOutputScriptLength(34);
|
|
95
|
+
case exports.UnspentTypePubKeyHash.p2pkh:
|
|
96
|
+
return unspents.Dimensions.fromOutputScriptLength(25);
|
|
97
|
+
case exports.UnspentTypePubKeyHash.p2wpkh:
|
|
98
|
+
return unspents.Dimensions.fromOutputScriptLength(22);
|
|
99
|
+
default:
|
|
100
|
+
if (unspentType instanceof UnspentTypeOpReturn) {
|
|
101
|
+
return unspents.Dimensions.fromOutputScriptLength(1 + unspentType.size);
|
|
102
|
+
}
|
|
103
|
+
throw new TypeError(`unknown unspentType ${unspentType}`);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
exports.getOutputDimensionsForUnspentType = getOutputDimensionsForUnspentType;
|
|
107
|
+
function getDefaultSignerNames(inputType, signers) {
|
|
108
|
+
if (signers) {
|
|
109
|
+
return [signers.signerName, signers.cosignerName];
|
|
110
|
+
}
|
|
111
|
+
if (inputType === 'p2shP2pk') {
|
|
112
|
+
return ['user'];
|
|
113
|
+
}
|
|
114
|
+
if (inputType === 'p2trMusig2') {
|
|
115
|
+
return ['user', 'backup'];
|
|
116
|
+
}
|
|
117
|
+
return ['user', 'bitgo'];
|
|
118
|
+
}
|
|
119
|
+
function constructPsbt(keys, inputTypes, outputTypes, signatureStatus, signers) {
|
|
120
|
+
const psbt = utxolib.bitgo.createPsbtForNetwork({ network: utxolib.networks.bitcoin });
|
|
121
|
+
inputTypes.forEach((t, i) => {
|
|
122
|
+
if (t === 'p2shP2pk') {
|
|
123
|
+
const signer = keys[getDefaultSignerNames(t, signers)[0]];
|
|
124
|
+
const unspent = utxolib.testutil.mockReplayProtectionUnspent(utxolib.networks.bitcoin, BigInt(10), {
|
|
125
|
+
key: signer,
|
|
126
|
+
vout: i,
|
|
127
|
+
});
|
|
128
|
+
const { redeemScript } = utxolib.bitgo.outputScripts.createOutputScriptP2shP2pk(signer.publicKey);
|
|
129
|
+
assert_1.default.ok(redeemScript);
|
|
130
|
+
utxolib.bitgo.addReplayProtectionUnspentToPsbt(psbt, unspent, redeemScript);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const unspent = utxolib.testutil.mockWalletUnspent(utxolib.networks.bitcoin, BigInt(10), {
|
|
134
|
+
keys,
|
|
135
|
+
chain: utxolib.bitgo.getExternalChainCode(t === 'taprootKeyPathSpend' ? 'p2trMusig2' : t),
|
|
136
|
+
vout: i,
|
|
137
|
+
index: i,
|
|
138
|
+
});
|
|
139
|
+
const signerNames = getDefaultSignerNames(t, signers);
|
|
140
|
+
utxolib.bitgo.addWalletUnspentToPsbt(psbt, unspent, keys, signerNames[0], signerNames[1]);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
outputTypes.forEach((t, index) => {
|
|
144
|
+
psbt.addOutput({
|
|
145
|
+
script: (0, txGen_1.createScriptPubKey)(keys.triple, t),
|
|
146
|
+
value: BigInt(10),
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
if (signatureStatus === 'unsigned') {
|
|
150
|
+
return psbt;
|
|
151
|
+
}
|
|
152
|
+
psbt.setAllInputsMusig2NonceHD(keys['user']);
|
|
153
|
+
psbt.setAllInputsMusig2NonceHD(keys['bitgo']);
|
|
154
|
+
inputTypes.forEach((t, i) => {
|
|
155
|
+
const signerNames = getDefaultSignerNames(t, signers);
|
|
156
|
+
if (t === 'p2shP2pk') {
|
|
157
|
+
if (signatureStatus === 'fullysigned') {
|
|
158
|
+
psbt.signInput(i, keys[signerNames[0]]);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
psbt.signInputHD(i, keys[signerNames[0]]);
|
|
163
|
+
if (signatureStatus === 'fullysigned') {
|
|
164
|
+
psbt.signInputHD(i, keys[signerNames[1]]);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
if (signatureStatus === 'fullysigned') {
|
|
169
|
+
assert_1.default.ok(psbt.validateSignaturesOfAllInputs());
|
|
170
|
+
}
|
|
171
|
+
return psbt;
|
|
172
|
+
}
|
|
173
|
+
exports.constructPsbt = constructPsbt;
|
|
174
|
+
function getSignedTransaction(keys, signerName, cosignerName, inputTypes, outputTypes) {
|
|
175
|
+
const psbt = constructPsbt(keys, inputTypes, outputTypes, 'fullysigned', { signerName, cosignerName });
|
|
176
|
+
psbt.finalizeAllInputs();
|
|
177
|
+
return psbt.extractTransaction().clone('number');
|
|
178
|
+
}
|
|
179
|
+
exports.getSignedTransaction = getSignedTransaction;
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC90ZXN0dXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFDbkMsOERBQWdEO0FBQ2hELG9EQUE0QjtBQUM1Qiw0Q0FBc0Q7QUFFdEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBYyxFQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFbEcsUUFBQSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUFFOUMsK0ZBQStGO0FBQ2xGLFFBQUEscUJBQXFCLEdBTzlCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFM0UsUUFBQSxxQkFBcUIsR0FHOUIsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUloQyxNQUFhLG1CQUFtQjtJQUM5QixZQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtJQUFHLENBQUM7SUFFNUIsUUFBUTtRQUNiLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBTkQsa0RBTUM7QUFJRCxTQUFnQixtQkFBbUI7SUFDakMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFGRCxrREFFQztBQUVEOzs7O0dBSUc7QUFD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QixFQUE0QyxDQUFDLEtBQUssQ0FBUyxRQUFRLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBVkQsb0RBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1bnNwZW50cyBmcm9tICcuLi9zcmMnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXkgfSBmcm9tICcuL3NpZ25lZFR4L3R4R2VuJztcblxuLyoqXG4gKiBtYWtlRW51bSgnYScsICdiJykgcmV0dXJucyBgeyBhOiAnYScsIGI6ICdiJyB9YFxuICpcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuIG1hcCB3aXRoIHN0cmluZyBrZXlzIGFuZCBzeW1ib2wgdmFsdWVzXG4gKi9cbmNvbnN0IG1ha2VFbnVtID0gKC4uLmFyZ3M6IHN0cmluZ1tdKTogYW55ID0+IGFyZ3MucmVkdWNlKChvYmosIGtleSkgPT4gT2JqZWN0LmFzc2lnbihvYmosIHsgW2tleV06IGtleSB9KSwge30pO1xuXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVQMnNoUDJwayA9ICdwMnNoUDJwayc7XG5cbi8vIHAydHJNdXNpZzIgaXMgYXNzdW1lZCB0byBiZSBzY3JpcHQgcGF0aCBvbmx5LiB0YXByb290S2V5UGF0aFNwZW5kIGlzIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoXG5leHBvcnQgY29uc3QgVW5zcGVudFR5cGVTY3JpcHQyb2YzOiB7XG4gIHAyc2g6IHN0cmluZztcbiAgcDJzaFAyd3NoOiBzdHJpbmc7XG4gIHAyd3NoOiBzdHJpbmc7XG4gIHAydHI6IHN0cmluZztcbiAgcDJ0ck11c2lnMjogc3RyaW5nO1xuICB0YXByb290S2V5UGF0aFNwZW5kOiBzdHJpbmc7XG59ID0gbWFrZUVudW0oJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJywgJ3AydHInLCAncDJ0ck11c2lnMicsICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG5cbmV4cG9ydCBjb25zdCBVbnNwZW50VHlwZVB1YktleUhhc2g6IHtcbiAgcDJwa2g6ICdwMnBraCc7XG4gIHAyd3BraDogJ3Ayd3BraCc7XG59ID0gbWFrZUVudW0oJ3AycGtoJywgJ3Ayd3BraCcpO1xuXG5leHBvcnQgdHlwZSBUZXN0VW5zcGVudFR5cGUgPSBzdHJpbmcgfCBVbnNwZW50VHlwZU9wUmV0dXJuO1xuXG5leHBvcnQgY2xhc3MgVW5zcGVudFR5cGVPcFJldHVybiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzaXplOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBvcFJldHVybigke3RoaXMuc2l6ZX0pYDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZSB8ICd0YXByb290S2V5UGF0aFNwZW5kJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0U2NyaXB0VHlwZXMoKTogSW5wdXRTY3JpcHRUeXBlW10ge1xuICByZXR1cm4gWy4uLnV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjMsICdwMnNoUDJwaycsICd0YXByb290S2V5UGF0aFNwZW5kJ107XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBpbnB1dCBkaW1lbnNpb25zIGJhc2VkIG9uIHVuc3BlbnQgdHlwZVxuICogQHBhcmFtIHVuc3BlbnRUeXBlIC0gb25lIG9mIFVuc3BlbnRUeXBlU2NyaXB0Mm9mM1xuICogQHJldHVybiBEaW1lbnNpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRJbnB1dERpbWVuc2lvbnNGb3JVbnNwZW50VHlwZSA9ICh1bnNwZW50VHlwZTogVGVzdFVuc3BlbnRUeXBlKTogdW5zcGVudHMuRGltZW5zaW9ucyA9PiB7XG4gIHN3aXRjaCAodW5zcGVudFR5cGUpIHtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAyc2hJbnB1dHM6IDEgfSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJzaFAyd3NoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuc3VtKHsgblAyc2hQMndzaElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMndzaDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMndzaElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnRyOlxuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHJNdXNpZzI6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dHM6IDEgfSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMudGFwcm9vdEtleVBhdGhTcGVuZDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLnN1bSh7IG5QMnRyS2V5cGF0aElucHV0czogMSB9KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlUDJzaFAycGs6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5zdW0oeyBuUDJzaFAycGtJbnB1dHM6IDEgfSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBpbnB1dCBkaW1lbnNpb25zIGZvciAke3Vuc3BlbnRUeXBlfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE91dHB1dERpbWVuc2lvbnNGb3JVbnNwZW50VHlwZSA9ICh1bnNwZW50VHlwZTogVGVzdFVuc3BlbnRUeXBlKTogdW5zcGVudHMuRGltZW5zaW9ucyA9PiB7XG4gIC8qIFRoZSB2YWx1ZXMgaGVyZSBhcmUgdmFsaWRhdGVkIGluIHRoZSB0ZXN0ICdjYWxjdWxhdGVzIG91dHB1dCBkaW1lbnNpb25zIGR5bmFtaWNhbGx5JyAqL1xuICBzd2l0Y2ggKHVuc3BlbnRUeXBlKSB7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJzaDpcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnNoUDJ3c2g6XG4gICAgY2FzZSBVbnNwZW50VHlwZVAyc2hQMnBrOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyMyk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMucDJ3c2g6XG4gICAgICByZXR1cm4gdW5zcGVudHMuRGltZW5zaW9ucy5mcm9tT3V0cHV0U2NyaXB0TGVuZ3RoKDM0KTtcbiAgICBjYXNlIFVuc3BlbnRUeXBlU2NyaXB0Mm9mMy5wMnRyOlxuICAgIGNhc2UgVW5zcGVudFR5cGVTY3JpcHQyb2YzLnAydHJNdXNpZzI6XG4gICAgY2FzZSBVbnNwZW50VHlwZVNjcmlwdDJvZjMudGFwcm9vdEtleVBhdGhTcGVuZDpcbiAgICAgIHJldHVybiB1bnNwZW50cy5EaW1lbnNpb25zLmZyb21PdXRwdXRTY3JpcHRMZW5ndGgoMzQpO1xuICAgIGNhc2UgVW5zcGVudFR5cGVQdWJLZXlIYXNoLnAycGtoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyNSk7XG4gICAgY2FzZSBVbnNwZW50VHlwZVB1YktleUhhc2gucDJ3cGtoOlxuICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgyMik7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh1bnNwZW50VHlwZSBpbnN0YW5jZW9mIFVuc3BlbnRUeXBlT3BSZXR1cm4pIHtcbiAgICAgICAgcmV0dXJuIHVuc3BlbnRzLkRpbWVuc2lvbnMuZnJvbU91dHB1dFNjcmlwdExlbmd0aCgxICsgdW5zcGVudFR5cGUuc2l6ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bmtub3duIHVuc3BlbnRUeXBlICR7dW5zcGVudFR5cGV9YCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRTaWduZXJOYW1lcyhcbiAgaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZTsgY29zaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUgfVxuKTogdXR4b2xpYi5iaXRnby5LZXlOYW1lW10ge1xuICBpZiAoc2lnbmVycykge1xuICAgIHJldHVybiBbc2lnbmVycy5zaWduZXJOYW1lLCBzaWduZXJzLmNvc2lnbmVyTmFtZV07XG4gIH1cbiAgaWYgKGlucHV0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHJldHVybiBbJ3VzZXInXTtcbiAgfVxuICBpZiAoaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICByZXR1cm4gWyd1c2VyJywgJ2JhY2t1cCddO1xuICB9XG4gIHJldHVybiBbJ3VzZXInLCAnYml0Z28nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdFBzYnQoXG4gIGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIGlucHV0VHlwZXM6IElucHV0U2NyaXB0VHlwZVtdLFxuICBvdXRwdXRUeXBlczogVGVzdFVuc3BlbnRUeXBlW10sXG4gIHNpZ25hdHVyZVN0YXR1czogJ3Vuc2lnbmVkJyB8ICdoYWxmc2lnbmVkJyB8ICdmdWxseXNpZ25lZCcsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IHV0eG9saWIuYml0Z28uS2V5TmFtZTsgY29zaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUgfVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidDx1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+PiB7XG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luIH0pO1xuXG4gIGlucHV0VHlwZXMuZm9yRWFjaCgodCwgaSkgPT4ge1xuICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICBjb25zdCBzaWduZXIgPSBrZXlzW2dldERlZmF1bHRTaWduZXJOYW1lcyh0LCBzaWduZXJzKVswXV07XG4gICAgICBjb25zdCB1bnNwZW50ID0gdXR4b2xpYi50ZXN0dXRpbC5tb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLCBCaWdJbnQoMTApLCB7XG4gICAgICAgIGtleTogc2lnbmVyLFxuICAgICAgICB2b3V0OiBpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHNpZ25lci5wdWJsaWNLZXkpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZGVlbVNjcmlwdCk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIHJlZGVlbVNjcmlwdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVuc3BlbnQgPSB1dHhvbGliLnRlc3R1dGlsLm1vY2tXYWxsZXRVbnNwZW50KHV0eG9saWIubmV0d29ya3MuYml0Y29pbiwgQmlnSW50KDEwKSwge1xuICAgICAgICBrZXlzLFxuICAgICAgICBjaGFpbjogdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZSh0ID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiB0KSxcbiAgICAgICAgdm91dDogaSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpZ25lck5hbWVzID0gZ2V0RGVmYXVsdFNpZ25lck5hbWVzKHQsIHNpZ25lcnMpO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIGtleXMsIHNpZ25lck5hbWVzWzBdLCBzaWduZXJOYW1lc1sxXSk7XG4gICAgfVxuICB9KTtcblxuICBvdXRwdXRUeXBlcy5mb3JFYWNoKCh0LCBpbmRleCkgPT4ge1xuICAgIHBzYnQuYWRkT3V0cHV0KHtcbiAgICAgIHNjcmlwdDogY3JlYXRlU2NyaXB0UHViS2V5KGtleXMudHJpcGxlLCB0KSxcbiAgICAgIHZhbHVlOiBCaWdJbnQoMTApLFxuICAgIH0pO1xuICB9KTtcblxuICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoa2V5c1sndXNlciddKTtcbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKGtleXNbJ2JpdGdvJ10pO1xuXG4gIGlucHV0VHlwZXMuZm9yRWFjaCgodCwgaSkgPT4ge1xuICAgIGNvbnN0IHNpZ25lck5hbWVzID0gZ2V0RGVmYXVsdFNpZ25lck5hbWVzKHQsIHNpZ25lcnMpO1xuICAgIGlmICh0ID09PSAncDJzaFAycGsnKSB7XG4gICAgICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAnZnVsbHlzaWduZWQnKSB7XG4gICAgICAgIHBzYnQuc2lnbklucHV0KGksIGtleXNbc2lnbmVyTmFtZXNbMF1dKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHNidC5zaWduSW5wdXRIRChpLCBrZXlzW3NpZ25lck5hbWVzWzBdXSk7XG4gICAgICBpZiAoc2lnbmF0dXJlU3RhdHVzID09PSAnZnVsbHlzaWduZWQnKSB7XG4gICAgICAgIHBzYnQuc2lnbklucHV0SEQoaSwga2V5c1tzaWduZXJOYW1lc1sxXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGlmIChzaWduYXR1cmVTdGF0dXMgPT09ICdmdWxseXNpZ25lZCcpIHtcbiAgICBhc3NlcnQub2socHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpKTtcbiAgfVxuICByZXR1cm4gcHNidDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lZFRyYW5zYWN0aW9uKFxuICBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBzaWduZXJOYW1lOiB1dHhvbGliLmJpdGdvLktleU5hbWUsXG4gIGNvc2lnbmVyTmFtZTogdXR4b2xpYi5iaXRnby5LZXlOYW1lLFxuICBpbnB1dFR5cGVzOiBJbnB1dFNjcmlwdFR5cGVbXSxcbiAgb3V0cHV0VHlwZXM6IFRlc3RVbnNwZW50VHlwZVtdXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbiB7XG4gIGNvbnN0IHBzYnQgPSBjb25zdHJ1Y3RQc2J0KGtleXMsIGlucHV0VHlwZXMsIG91dHB1dFR5cGVzLCAnZnVsbHlzaWduZWQnLCB7IHNpZ25lck5hbWUsIGNvc2lnbmVyTmFtZSB9KTtcbiAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICByZXR1cm4gKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkgYXMgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PikuY2xvbmU8bnVtYmVyPignbnVtYmVyJyk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtualSizes.d.ts","sourceRoot":"","sources":["../../test/virtualSizes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const src_1 = require("../src");
|
|
4
|
+
describe('VirtualSizes', function () {
|
|
5
|
+
it('have expected values', function () {
|
|
6
|
+
src_1.VirtualSizes.should.match({
|
|
7
|
+
// check computed values only
|
|
8
|
+
txP2shInputSize: 298,
|
|
9
|
+
txP2shP2wshInputSize: 140,
|
|
10
|
+
txP2wshInputSize: 105,
|
|
11
|
+
txP2trKeypathInputSize: 58,
|
|
12
|
+
txP2trScriptPathLevel1InputSize: 108,
|
|
13
|
+
txP2trScriptPathLevel2InputSize: 116,
|
|
14
|
+
txP2shP2pkInputSize: 151,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbFNpemVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC92aXJ0dWFsU2l6ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnQ0FBc0M7QUFFdEMsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUN2QixFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsa0JBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3hCLDZCQUE2QjtZQUM3QixlQUFlLEVBQUUsR0FBRztZQUNwQixvQkFBb0IsRUFBRSxHQUFHO1lBQ3pCLGdCQUFnQixFQUFFLEdBQUc7WUFDckIsc0JBQXNCLEVBQUUsRUFBRTtZQUMxQiwrQkFBK0IsRUFBRSxHQUFHO1lBQ3BDLCtCQUErQixFQUFFLEdBQUc7WUFDcEMsbUJBQW1CLEVBQUUsR0FBRztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlydHVhbFNpemVzIH0gZnJvbSAnLi4vc3JjJztcblxuZGVzY3JpYmUoJ1ZpcnR1YWxTaXplcycsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ2hhdmUgZXhwZWN0ZWQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgIFZpcnR1YWxTaXplcy5zaG91bGQubWF0Y2goe1xuICAgICAgLy8gY2hlY2sgY29tcHV0ZWQgdmFsdWVzIG9ubHlcbiAgICAgIHR4UDJzaElucHV0U2l6ZTogMjk4LFxuICAgICAgdHhQMnNoUDJ3c2hJbnB1dFNpemU6IDE0MCxcbiAgICAgIHR4UDJ3c2hJbnB1dFNpemU6IDEwNSxcbiAgICAgIHR4UDJ0cktleXBhdGhJbnB1dFNpemU6IDU4LFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMUlucHV0U2l6ZTogMTA4LFxuICAgICAgdHhQMnRyU2NyaXB0UGF0aExldmVsMklucHV0U2l6ZTogMTE2LFxuICAgICAgdHhQMnNoUDJwa0lucHV0U2l6ZTogMTUxLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcash.d.ts","sourceRoot":"","sources":["../../test/zcash.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|