@bitgo-beta/utxo-bin 2.8.3-beta.16 → 2.8.3-beta.1600
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/README.md +107 -86
- package/dist/bin/index.js +46 -3
- package/dist/src/AddressParser.d.ts +1 -1
- package/dist/src/AddressParser.d.ts.map +1 -1
- package/dist/src/AddressParser.js +54 -9
- package/dist/src/InputParser.d.ts +43 -0
- package/dist/src/InputParser.d.ts.map +1 -0
- package/dist/src/InputParser.js +287 -0
- package/dist/src/OutputParser.d.ts +24 -0
- package/dist/src/OutputParser.d.ts.map +1 -0
- package/dist/src/OutputParser.js +98 -0
- package/dist/src/Parser.d.ts +9 -3
- package/dist/src/Parser.d.ts.map +1 -1
- package/dist/src/Parser.js +35 -1
- package/dist/src/ParserTx.d.ts +27 -0
- package/dist/src/ParserTx.d.ts.map +1 -0
- package/dist/src/ParserTx.js +126 -0
- package/dist/src/ScriptParser.d.ts +23 -0
- package/dist/src/ScriptParser.d.ts.map +1 -0
- package/dist/src/ScriptParser.js +129 -0
- package/dist/src/TxParser.d.ts +12 -8
- package/dist/src/TxParser.d.ts.map +1 -1
- package/dist/src/TxParser.js +60 -29
- package/dist/src/args/format.d.ts +8 -0
- package/dist/src/args/format.d.ts.map +1 -0
- package/dist/src/args/format.js +15 -0
- package/dist/src/args/index.d.ts +5 -0
- package/dist/src/args/index.d.ts.map +1 -0
- package/dist/src/args/index.js +21 -0
- package/dist/src/args/parseNetwork.d.ts +25 -0
- package/dist/src/args/parseNetwork.d.ts.map +1 -0
- package/dist/src/args/parseNetwork.js +108 -0
- package/dist/src/args/parseString.d.ts +40 -0
- package/dist/src/args/parseString.d.ts.map +1 -0
- package/dist/src/args/parseString.js +153 -0
- package/dist/src/args/walletKeys.d.ts +38 -0
- package/dist/src/args/walletKeys.d.ts.map +1 -0
- package/dist/src/args/walletKeys.js +64 -0
- package/dist/src/bip32.d.ts +5 -0
- package/dist/src/bip32.d.ts.map +1 -0
- package/dist/src/bip32.js +56 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.d.ts +21 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.js +89 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts +20 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdParse.js +28 -0
- package/dist/src/commands/cmdAddress/index.d.ts +3 -0
- package/dist/src/commands/cmdAddress/index.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/index.js +16 -0
- package/dist/src/commands/cmdBip32.d.ts +16 -0
- package/dist/src/commands/cmdBip32.d.ts.map +1 -0
- package/dist/src/commands/cmdBip32.js +78 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts +10 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.js +73 -0
- package/dist/src/commands/cmdDescriptor/index.d.ts +4 -0
- package/dist/src/commands/cmdDescriptor/index.d.ts.map +1 -0
- package/dist/src/commands/cmdDescriptor/index.js +30 -0
- package/dist/src/commands/cmdParseScript.d.ts +18 -0
- package/dist/src/commands/cmdParseScript.d.ts.map +1 -0
- package/dist/src/commands/cmdParseScript.js +27 -0
- package/dist/src/commands/cmdParseTx.d.ts +31 -0
- package/dist/src/commands/cmdParseTx.d.ts.map +1 -0
- package/dist/src/commands/cmdParseTx.js +162 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts +13 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.js +100 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.js +122 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts +9 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.js +23 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.js +43 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts +7 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdSign.js +57 -0
- package/dist/src/commands/cmdPsbt/index.d.ts +8 -0
- package/dist/src/commands/cmdPsbt/index.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/index.js +27 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts +63 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/withPsbt.js +99 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts +5 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/wrap.js +60 -0
- package/dist/src/commands/formatString.d.ts +8 -0
- package/dist/src/commands/formatString.d.ts.map +1 -0
- package/dist/src/commands/formatString.js +14 -0
- package/dist/src/commands/index.d.ts +7 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +23 -0
- package/dist/src/ecdsa.d.ts +1 -2
- package/dist/src/ecdsa.d.ts.map +1 -1
- package/dist/src/ecdsa.js +9 -9
- package/dist/src/fetch.d.ts +12 -4
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +90 -13
- package/dist/src/format.d.ts +6 -3
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +38 -13
- package/dist/src/generateAddress.d.ts +47 -0
- package/dist/src/generateAddress.d.ts.map +1 -0
- package/dist/src/generateAddress.js +177 -0
- package/dist/src/hollowSegwitSpend.d.ts +1 -1
- package/dist/src/hollowSegwitSpend.d.ts.map +1 -1
- package/dist/src/hollowSegwitSpend.js +37 -5
- package/dist/src/parseUnknown.d.ts +5 -0
- package/dist/src/parseUnknown.d.ts.map +1 -0
- package/dist/src/parseUnknown.js +49 -0
- package/dist/src/prevTx.d.ts +4 -0
- package/dist/src/prevTx.d.ts.map +1 -0
- package/dist/src/prevTx.js +77 -0
- package/dist/test/args/stringToBuffer.d.ts +2 -0
- package/dist/test/args/stringToBuffer.d.ts.map +1 -0
- package/dist/test/args/stringToBuffer.js +49 -0
- package/dist/test/bip32.d.ts +2 -0
- package/dist/test/bip32.d.ts.map +1 -0
- package/dist/test/bip32.js +55 -0
- package/dist/test/bip32.util.d.ts +6 -0
- package/dist/test/bip32.util.d.ts.map +1 -0
- package/dist/test/bip32.util.js +46 -0
- package/dist/test/captureConsole.d.ts +6 -0
- package/dist/test/captureConsole.d.ts.map +1 -0
- package/dist/test/captureConsole.js +65 -0
- package/dist/test/cmdDescriptor/fromFixedScript.d.ts +2 -0
- package/dist/test/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
- package/dist/test/cmdDescriptor/fromFixedScript.js +70 -0
- package/dist/test/cmdPsbt.d.ts +2 -0
- package/dist/test/cmdPsbt.d.ts.map +1 -0
- package/dist/test/cmdPsbt.js +138 -0
- package/dist/test/fixtures.d.ts +24 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +127 -0
- package/dist/test/generateAddress.d.ts +2 -0
- package/dist/test/generateAddress.d.ts.map +1 -0
- package/dist/test/generateAddress.js +79 -0
- package/dist/test/parseAddress.d.ts +6 -0
- package/dist/test/parseAddress.d.ts.map +1 -0
- package/dist/test/parseAddress.js +119 -0
- package/dist/test/parseScript.d.ts +2 -0
- package/dist/test/parseScript.d.ts.map +1 -0
- package/dist/test/parseScript.js +74 -0
- package/dist/test/parseTransaction.d.ts +2 -0
- package/dist/test/parseTransaction.d.ts.map +1 -0
- package/dist/test/parseTransaction.js +103 -0
- package/dist/tsconfig.tsbuildinfo +1 -4675
- package/package.json +13 -9
- package/dist/src/InputOutputParser.d.ts +0 -35
- package/dist/src/InputOutputParser.d.ts.map +0 -1
- package/dist/src/InputOutputParser.js +0 -196
- package/dist/src/commands.d.ts +0 -43
- package/dist/src/commands.d.ts.map +0 -1
- package/dist/src/commands.js +0 -152
|
@@ -0,0 +1,162 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdParseTx = void 0;
|
|
37
|
+
exports.getTxParser = getTxParser;
|
|
38
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
39
|
+
const args_1 = require("../args");
|
|
40
|
+
const TxParser_1 = require("../TxParser");
|
|
41
|
+
const fetch_1 = require("../fetch");
|
|
42
|
+
const ParserTx_1 = require("../ParserTx");
|
|
43
|
+
const parseUnknown_1 = require("../parseUnknown");
|
|
44
|
+
const Parser_1 = require("../Parser");
|
|
45
|
+
const formatString_1 = require("./formatString");
|
|
46
|
+
const prevTx_1 = require("../prevTx");
|
|
47
|
+
function getTxParser(argv) {
|
|
48
|
+
if (argv.all) {
|
|
49
|
+
return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
|
|
50
|
+
}
|
|
51
|
+
return new TxParser_1.TxParser({
|
|
52
|
+
...argv,
|
|
53
|
+
parseSignatureData: {
|
|
54
|
+
script: argv.parseSignatureData,
|
|
55
|
+
ecdsa: argv.parseSignatureData,
|
|
56
|
+
schnorr: argv.parseSignatureData,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exports.cmdParseTx = {
|
|
61
|
+
command: 'parseTx [path]',
|
|
62
|
+
aliases: ['parse', 'tx'],
|
|
63
|
+
describe: 'Display transaction components in human-readable form. ' +
|
|
64
|
+
'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
|
|
65
|
+
'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
|
|
66
|
+
'Bytes must be encoded in hex or base64 format.',
|
|
67
|
+
builder(b) {
|
|
68
|
+
return b
|
|
69
|
+
.options(args_1.readStringOptions)
|
|
70
|
+
.options((0, args_1.getNetworkOptionsDemand)())
|
|
71
|
+
.option('txid', { type: 'string' })
|
|
72
|
+
.option('prevTx', { type: 'string', description: 'previous transaction hex or base64 string', array: true })
|
|
73
|
+
.option('blockHeight', { type: 'number' })
|
|
74
|
+
.option('txIndex', { type: 'number' })
|
|
75
|
+
.option('fetchAll', { type: 'boolean', default: false })
|
|
76
|
+
.option('fetchStatus', { type: 'boolean', default: false })
|
|
77
|
+
.option('fetchInputs', { type: 'boolean', default: false })
|
|
78
|
+
.option('fetchSpends', { type: 'boolean', default: false })
|
|
79
|
+
.option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
|
|
80
|
+
.option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
|
|
81
|
+
.option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
|
|
82
|
+
.option('parseOutputScript', { type: 'boolean', default: false })
|
|
83
|
+
.option('parseAsUnknown', {
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
default: false,
|
|
86
|
+
description: 'show plain Javascript object without any post-processing',
|
|
87
|
+
})
|
|
88
|
+
.option('maxOutputs', { type: 'number' })
|
|
89
|
+
.option('vin', { type: 'number' })
|
|
90
|
+
.array('vin')
|
|
91
|
+
.option('vout', { type: 'number' })
|
|
92
|
+
.array('vout')
|
|
93
|
+
.option('finalize', {
|
|
94
|
+
type: 'boolean',
|
|
95
|
+
default: false,
|
|
96
|
+
description: 'finalize PSBT and parse result instead of PSBT',
|
|
97
|
+
})
|
|
98
|
+
.option('all', { type: 'boolean', default: false })
|
|
99
|
+
.option('cache', {
|
|
100
|
+
type: 'boolean',
|
|
101
|
+
default: false,
|
|
102
|
+
description: 'use local cache for http responses',
|
|
103
|
+
})
|
|
104
|
+
.option('format', args_1.formatTreeOrJson)
|
|
105
|
+
.option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
|
|
106
|
+
},
|
|
107
|
+
async handler(argv) {
|
|
108
|
+
let data;
|
|
109
|
+
const httpClient = await (0, fetch_1.getClient)({ cache: argv.cache });
|
|
110
|
+
if (argv.txid || argv.blockHeight !== undefined || argv.txIndex !== undefined) {
|
|
111
|
+
data = await (0, fetch_1.fetchTransactionHex)(httpClient, {
|
|
112
|
+
txid: argv.txid,
|
|
113
|
+
blockHeight: argv.blockHeight,
|
|
114
|
+
txIndex: argv.txIndex,
|
|
115
|
+
}, argv.network);
|
|
116
|
+
}
|
|
117
|
+
const string = await (0, args_1.argToString)(argv, data);
|
|
118
|
+
if (!string) {
|
|
119
|
+
throw new Error(`no txdata`);
|
|
120
|
+
}
|
|
121
|
+
function decodeBytes(bytes) {
|
|
122
|
+
return utxolib.bitgo.isPsbt(bytes)
|
|
123
|
+
? utxolib.bitgo.createPsbtFromBuffer(bytes, argv.network)
|
|
124
|
+
: utxolib.bitgo.createTransactionFromBuffer(bytes, argv.network, { amountType: 'bigint' });
|
|
125
|
+
}
|
|
126
|
+
const bytes = (0, args_1.stringToBuffer)(string, ['hex', 'base64']);
|
|
127
|
+
let tx = decodeBytes(bytes);
|
|
128
|
+
const { id: txid } = (0, ParserTx_1.getParserTxProperties)(tx, undefined);
|
|
129
|
+
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
130
|
+
if (argv.txid && txid !== argv.txid) {
|
|
131
|
+
throw new Error(`computed txid does not match txid argument`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (argv.finalize) {
|
|
135
|
+
tx.finalizeAllInputs();
|
|
136
|
+
tx = tx.extractTransaction();
|
|
137
|
+
}
|
|
138
|
+
const prevTxs = (argv.prevTx ?? []).map((s) => {
|
|
139
|
+
const buf = (0, args_1.stringToBuffer)(s, ['hex', 'base64']);
|
|
140
|
+
return decodeBytes(buf);
|
|
141
|
+
});
|
|
142
|
+
if (argv.parseAsUnknown) {
|
|
143
|
+
console.log((0, formatString_1.formatString)((0, parseUnknown_1.parseUnknown)(new Parser_1.Parser(), 'tx', tx), argv));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (argv.fetchAll) {
|
|
147
|
+
argv.fetchStatus = true;
|
|
148
|
+
argv.fetchInputs = true;
|
|
149
|
+
argv.fetchSpends = true;
|
|
150
|
+
}
|
|
151
|
+
const parsed = getTxParser(argv).parse(tx, {
|
|
152
|
+
status: argv.fetchStatus && txid ? await (0, fetch_1.fetchTransactionStatus)(httpClient, txid, argv.network) : undefined,
|
|
153
|
+
prevOutputs: argv.fetchInputs ? await (0, fetch_1.fetchPrevOutputs)(httpClient, tx) : (0, prevTx_1.getPrevOutputsFromPrevTxs)(tx, prevTxs),
|
|
154
|
+
prevOutputSpends: argv.fetchSpends ? await (0, fetch_1.fetchPrevOutputSpends)(httpClient, tx) : undefined,
|
|
155
|
+
outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
|
|
156
|
+
? await (0, fetch_1.fetchOutputSpends)(httpClient, tx)
|
|
157
|
+
: undefined,
|
|
158
|
+
});
|
|
159
|
+
console.log((0, formatString_1.formatString)(parsed, argv));
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2VUeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbWRQYXJzZVR4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxrQ0FZQztBQTNERCw4REFBZ0Q7QUFHaEQsa0NBUWlCO0FBQ2pCLDBDQUFxRDtBQUNyRCxvQ0FPa0I7QUFDbEIsMENBQThEO0FBQzlELGtEQUErQztBQUMvQyxzQ0FBbUM7QUFFbkMsaURBQThDO0FBQzlDLHNDQUFzRDtBQXFCdEQsU0FBZ0IsV0FBVyxDQUFDLElBQTBCO0lBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLG1CQUFRLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLG1CQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLG1CQUFRLENBQUM7UUFDbEIsR0FBRyxJQUFJO1FBQ1Asa0JBQWtCLEVBQUU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7U0FDakM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxVQUFVLEdBQUc7SUFDeEIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsRUFDTix5REFBeUQ7UUFDekQscUVBQXFFO1FBQ3JFLCtEQUErRDtRQUMvRCxnREFBZ0Q7SUFFbEQsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE9BQU8sQ0FBQyx3QkFBaUIsQ0FBQzthQUMxQixPQUFPLENBQUMsSUFBQSw4QkFBdUIsR0FBRSxDQUFDO2FBQ2xDLE1BQU0sQ0FB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QztRQUVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDhCQUFzQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNHLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGtDQUF5QixFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFDL0csZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDZCQUFxQixFQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM1RixZQUFZLEVBQ1YsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUM3RCxDQUFDLENBQUMsTUFBTSxJQUFBLHlCQUFpQixFQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwyQkFBWSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7XG4gIGFyZ1RvU3RyaW5nLFxuICBmb3JtYXRUcmVlT3JKc29uLFxuICBnZXROZXR3b3JrT3B0aW9uc0RlbWFuZCxcbiAgRm9ybWF0VHJlZU9ySnNvbixcbiAgUmVhZFN0cmluZ09wdGlvbnMsXG4gIHJlYWRTdHJpbmdPcHRpb25zLFxuICBzdHJpbmdUb0J1ZmZlcixcbn0gZnJvbSAnLi4vYXJncyc7XG5pbXBvcnQgeyBUeFBhcnNlciwgVHhQYXJzZXJBcmdzIH0gZnJvbSAnLi4vVHhQYXJzZXInO1xuaW1wb3J0IHtcbiAgZmV0Y2hPdXRwdXRTcGVuZHMsXG4gIGZldGNoUHJldk91dHB1dHMsXG4gIGZldGNoUHJldk91dHB1dFNwZW5kcyxcbiAgZmV0Y2hUcmFuc2FjdGlvbkhleCxcbiAgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyxcbiAgZ2V0Q2xpZW50LFxufSBmcm9tICcuLi9mZXRjaCc7XG5pbXBvcnQgeyBnZXRQYXJzZXJUeFByb3BlcnRpZXMsIFBhcnNlclR4IH0gZnJvbSAnLi4vUGFyc2VyVHgnO1xuaW1wb3J0IHsgcGFyc2VVbmtub3duIH0gZnJvbSAnLi4vcGFyc2VVbmtub3duJztcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4uL1BhcnNlcic7XG5cbmltcG9ydCB7IGZvcm1hdFN0cmluZyB9IGZyb20gJy4vZm9ybWF0U3RyaW5nJztcbmltcG9ydCB7IGdldFByZXZPdXRwdXRzRnJvbVByZXZUeHMgfSBmcm9tICcuLi9wcmV2VHgnO1xuXG5leHBvcnQgdHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IFJlYWRTdHJpbmdPcHRpb25zICYge1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHR4aWQ/OiBzdHJpbmc7XG4gIHByZXZUeD86IHN0cmluZ1tdO1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgdHhJbmRleD86IG51bWJlcjtcbiAgYWxsOiBib29sZWFuO1xuICBjYWNoZTogYm9vbGVhbjtcbiAgZm9ybWF0OiBGb3JtYXRUcmVlT3JKc29uO1xuICBmZXRjaEFsbDogYm9vbGVhbjtcbiAgZmV0Y2hTdGF0dXM6IGJvb2xlYW47XG4gIGZldGNoSW5wdXRzOiBib29sZWFuO1xuICBmZXRjaFNwZW5kczogYm9vbGVhbjtcbiAgZmluYWxpemU6IGJvb2xlYW47XG4gIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbiAgcGFyc2VBc1Vua25vd246IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I6ICd0aHJvdycgfCAnY29udGludWUnO1xufSAmIE9taXQ8VHhQYXJzZXJBcmdzLCAncGFyc2VTaWduYXR1cmVEYXRhJz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeFBhcnNlcihhcmd2OiBBcmdzUGFyc2VUcmFuc2FjdGlvbik6IFR4UGFyc2VyIHtcbiAgaWYgKGFyZ3YuYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeFBhcnNlcih7IC4uLmFyZ3YsIC4uLlR4UGFyc2VyLlBBUlNFX0FMTCB9KTtcbiAgfVxuICByZXR1cm4gbmV3IFR4UGFyc2VyKHtcbiAgICAuLi5hcmd2LFxuICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgc2NyaXB0OiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIGVjZHNhOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIHNjaG5vcnI6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTpcbiAgICAnRGlzcGxheSB0cmFuc2FjdGlvbiBjb21wb25lbnRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICcgK1xuICAgICdTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgUGFydGlhbGx5IFNpZ25lZCBCaXRjb2luIFRyYW5zYWN0aW9uIChQU0JUKSwgJyArXG4gICAgJ2JpdGNvaW5qcy1saWIgZW5jb2RpbmcgKExlZ2FjeSkgb3IgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uLiAnICtcbiAgICAnQnl0ZXMgbXVzdCBiZSBlbmNvZGVkIGluIGhleCBvciBiYXNlNjQgZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9ucyhyZWFkU3RyaW5nT3B0aW9ucylcbiAgICAgIC5vcHRpb25zKGdldE5ldHdvcmtPcHRpb25zRGVtYW5kKCkpXG4gICAgICAub3B0aW9uKCd0eGlkJywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbigncHJldlR4JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdwcmV2aW91cyB0cmFuc2FjdGlvbiBoZXggb3IgYmFzZTY0IHN0cmluZycsIGFycmF5OiB0cnVlIH0pXG4gICAgICAub3B0aW9uKCdibG9ja0hlaWdodCcsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3R4SW5kZXgnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaEFsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTdGF0dXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoSW5wdXRzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaFNwZW5kcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlT3V0cHV0U2NyaXB0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZUFzVW5rbm93bicsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdzaG93IHBsYWluIEphdmFzY3JpcHQgb2JqZWN0IHdpdGhvdXQgYW55IHBvc3QtcHJvY2Vzc2luZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignbWF4T3V0cHV0cycsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3ZpbicsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5hcnJheSgndmluJylcbiAgICAgIC5vcHRpb24oJ3ZvdXQnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZvdXQnKVxuICAgICAgLm9wdGlvbignZmluYWxpemUnLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnZmluYWxpemUgUFNCVCBhbmQgcGFyc2UgcmVzdWx0IGluc3RlYWQgb2YgUFNCVCcsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjYWNoZScsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICd1c2UgbG9jYWwgY2FjaGUgZm9yIGh0dHAgcmVzcG9uc2VzJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCBmb3JtYXRUcmVlT3JKc29uKVxuICAgICAgLm9wdGlvbigncGFyc2VFcnJvcicsIHsgY2hvaWNlczogWydjb250aW51ZScsICd0aHJvdyddLCBkZWZhdWx0OiAnY29udGludWUnIH0gYXMgY29uc3QpO1xuICB9LFxuXG4gIGFzeW5jIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkYXRhO1xuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IGF3YWl0IGdldENsaWVudCh7IGNhY2hlOiBhcmd2LmNhY2hlIH0pO1xuXG4gICAgaWYgKGFyZ3YudHhpZCB8fCBhcmd2LmJsb2NrSGVpZ2h0ICE9PSB1bmRlZmluZWQgfHwgYXJndi50eEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uSGV4KFxuICAgICAgICBodHRwQ2xpZW50LFxuICAgICAgICB7XG4gICAgICAgICAgdHhpZDogYXJndi50eGlkLFxuICAgICAgICAgIGJsb2NrSGVpZ2h0OiBhcmd2LmJsb2NrSGVpZ2h0LFxuICAgICAgICAgIHR4SW5kZXg6IGFyZ3YudHhJbmRleCxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndi5uZXR3b3JrXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmluZyA9IGF3YWl0IGFyZ1RvU3RyaW5nKGFyZ3YsIGRhdGEpO1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHR4ZGF0YWApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY29kZUJ5dGVzKGJ5dGVzOiBCdWZmZXIpOiBQYXJzZXJUeCB7XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5pc1BzYnQoYnl0ZXMpXG4gICAgICAgID8gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUJ1ZmZlcihieXRlcywgYXJndi5uZXR3b3JrKVxuICAgICAgICA6IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGJ5dGVzLCBhcmd2Lm5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBzdHJpbmdUb0J1ZmZlcihzdHJpbmcsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICBsZXQgdHggPSBkZWNvZGVCeXRlcyhieXRlcyk7XG5cbiAgICBjb25zdCB7IGlkOiB0eGlkIH0gPSBnZXRQYXJzZXJUeFByb3BlcnRpZXModHgsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmIChhcmd2LnR4aWQgJiYgdHhpZCAhPT0gYXJndi50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZWQgdHhpZCBkb2VzIG5vdCBtYXRjaCB0eGlkIGFyZ3VtZW50YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmd2LmZpbmFsaXplKSB7XG4gICAgICB0eC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSB0eC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2VHhzOiBQYXJzZXJUeFtdID0gKGFyZ3YucHJldlR4ID8/IFtdKS5tYXAoKHMpID0+IHtcbiAgICAgIGNvbnN0IGJ1ZiA9IHN0cmluZ1RvQnVmZmVyKHMsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICAgIHJldHVybiBkZWNvZGVCeXRlcyhidWYpO1xuICAgIH0pO1xuXG4gICAgaWYgKGFyZ3YucGFyc2VBc1Vua25vd24pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVVua25vd24obmV3IFBhcnNlcigpLCAndHgnLCB0eCksIGFyZ3YpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5mZXRjaEFsbCkge1xuICAgICAgYXJndi5mZXRjaFN0YXR1cyA9IHRydWU7XG4gICAgICBhcmd2LmZldGNoSW5wdXRzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGdldFR4UGFyc2VyKGFyZ3YpLnBhcnNlKHR4LCB7XG4gICAgICBzdGF0dXM6IGFyZ3YuZmV0Y2hTdGF0dXMgJiYgdHhpZCA/IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25TdGF0dXMoaHR0cENsaWVudCwgdHhpZCwgYXJndi5uZXR3b3JrKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZPdXRwdXRzOiBhcmd2LmZldGNoSW5wdXRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50LCB0eCkgOiBnZXRQcmV2T3V0cHV0c0Zyb21QcmV2VHhzKHR4LCBwcmV2VHhzKSxcbiAgICAgIHByZXZPdXRwdXRTcGVuZHM6IGFyZ3YuZmV0Y2hTcGVuZHMgPyBhd2FpdCBmZXRjaFByZXZPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0U3BlbmRzOlxuICAgICAgICBhcmd2LmZldGNoU3BlbmRzICYmIHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbiAgICAgICAgICA/IGF3YWl0IGZldGNoT3V0cHV0U3BlbmRzKGh0dHBDbGllbnQsIHR4KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlZCwgYXJndikpO1xuICB9LFxufSBhcyBjb25zdDtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as yargs from 'yargs';
|
|
2
|
+
import { WithPsbtOptions } from './withPsbt';
|
|
3
|
+
type ArgsAddDescriptorInput = WithPsbtOptions & {
|
|
4
|
+
outputId: string;
|
|
5
|
+
address?: string;
|
|
6
|
+
scriptPubKey?: string;
|
|
7
|
+
value: string;
|
|
8
|
+
descriptor: string;
|
|
9
|
+
descriptorIndex: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const cmdAddDescriptorInput: yargs.CommandModule<unknown, ArgsAddDescriptorInput>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=cmdAddDescriptorInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdAddDescriptorInput.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdPsbt/cmdAddDescriptorInput.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAY,eAAe,EAAmB,MAAM,YAAY,CAAC;AAQxE,KAAK,sBAAsB,GAAG,eAAe,GAAG;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AA8CF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,sBAAsB,CAgCtF,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdAddDescriptorInput = void 0;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const wrap_1 = require("./wrap");
|
|
40
|
+
const withPsbt_1 = require("./withPsbt");
|
|
41
|
+
/**
|
|
42
|
+
* Non-Final (Replaceable)
|
|
43
|
+
* Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
|
|
44
|
+
* */
|
|
45
|
+
const MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
|
|
46
|
+
function getScriptPubKey(args, network) {
|
|
47
|
+
if (args.address) {
|
|
48
|
+
return utxolib.addressFormat.toOutputScriptTryFormats(args.address, network);
|
|
49
|
+
}
|
|
50
|
+
if (args.scriptPubKey) {
|
|
51
|
+
return Buffer.from(args.scriptPubKey, 'hex');
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
function addDescriptorInput(psbt, outputId, scriptPubKey, value, descriptorString, descriptorIndex, { sequence = MAX_BIP125_RBF_SEQUENCE } = {}) {
|
|
56
|
+
const { txid, vout } = utxolib.bitgo.parseOutputId(outputId);
|
|
57
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString(descriptorString, 'derivable');
|
|
58
|
+
const derivedDescriptor = descriptor.atDerivationIndex(descriptorIndex);
|
|
59
|
+
if (scriptPubKey === undefined) {
|
|
60
|
+
scriptPubKey = Buffer.from(derivedDescriptor.scriptPubkey());
|
|
61
|
+
}
|
|
62
|
+
psbt.addInput({
|
|
63
|
+
hash: txid,
|
|
64
|
+
index: vout,
|
|
65
|
+
sequence,
|
|
66
|
+
witnessUtxo: {
|
|
67
|
+
script: scriptPubKey,
|
|
68
|
+
value,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const inputIndex = psbt.txInputs.length - 1;
|
|
72
|
+
const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
|
|
73
|
+
wrappedPsbt.updateInputWithDescriptor(inputIndex, derivedDescriptor);
|
|
74
|
+
const utxoPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt);
|
|
75
|
+
psbt.data.inputs[inputIndex] = utxoPsbt.data.inputs[inputIndex];
|
|
76
|
+
}
|
|
77
|
+
exports.cmdAddDescriptorInput = {
|
|
78
|
+
command: 'addDescriptorInput',
|
|
79
|
+
describe: 'add descriptor input to psbt',
|
|
80
|
+
builder(b) {
|
|
81
|
+
return b
|
|
82
|
+
.options(withPsbt_1.withPsbtOptions)
|
|
83
|
+
.option('outputId', { type: 'string', demandOption: true })
|
|
84
|
+
.option('address', { type: 'string' })
|
|
85
|
+
.option('scriptPubKey', { type: 'string' })
|
|
86
|
+
.option('value', { type: 'string', demandOption: true })
|
|
87
|
+
.option('descriptor', { type: 'string', demandOption: true })
|
|
88
|
+
.option('descriptorIndex', { type: 'number', demandOption: true });
|
|
89
|
+
},
|
|
90
|
+
async handler(argv) {
|
|
91
|
+
await (0, withPsbt_1.withPsbt)(argv, async function (psbt) {
|
|
92
|
+
addDescriptorInput(psbt, argv.outputId, getScriptPubKey({
|
|
93
|
+
address: argv.address,
|
|
94
|
+
scriptPubKey: argv.scriptPubKey,
|
|
95
|
+
}, argv.network), BigInt(argv.value), argv.descriptor, argv.descriptorIndex);
|
|
96
|
+
return psbt;
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kQWRkRGVzY3JpcHRvcklucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NtZFBzYnQvY21kQWRkRGVzY3JpcHRvcklucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFnRDtBQUNoRCxnREFBOEM7QUFHOUMsaUNBQW1EO0FBQ25ELHlDQUF3RTtBQUV4RTs7O0tBR0s7QUFDTCxNQUFNLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFXL0MsU0FBUyxlQUFlLENBQ3RCLElBQWlELEVBQ2pELE9BQXdCO0lBRXhCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3pCLElBQWtCLEVBQ2xCLFFBQWdCLEVBQ2hCLFlBQWdDLEVBQ2hDLEtBQWEsRUFDYixnQkFBd0IsRUFDeEIsZUFBdUIsRUFDdkIsRUFBRSxRQUFRLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBRTNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsc0JBQVUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEUsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRO1FBQ1IsV0FBVyxFQUFFO1lBQ1gsTUFBTSxFQUFFLFlBQVk7WUFDcEIsS0FBSztTQUNOO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxXQUFXLENBQUMseUJBQXlCLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsSUFBQSxpQkFBVSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFWSxRQUFBLHFCQUFxQixHQUF5RDtJQUN6RixPQUFPLEVBQUUsb0JBQW9CO0lBQzdCLFFBQVEsRUFBRSw4QkFBOEI7SUFDeEMsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE9BQU8sQ0FBQywwQkFBZSxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxRCxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2FBQ3JDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDMUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3ZELE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM1RCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUk7UUFDaEIsTUFBTSxJQUFBLG1CQUFRLEVBQUMsSUFBSSxFQUFFLEtBQUssV0FBVyxJQUFJO1lBQ3ZDLGtCQUFrQixDQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLFFBQVEsRUFDYixlQUFlLENBQ2I7Z0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7YUFDaEMsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNiLEVBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsZUFBZSxDQUNyQixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7IHRvVXR4b1BzYnQsIHRvV3JhcHBlZFBzYnQgfSBmcm9tICcuL3dyYXAnO1xuaW1wb3J0IHsgd2l0aFBzYnQsIFdpdGhQc2J0T3B0aW9ucywgd2l0aFBzYnRPcHRpb25zIH0gZnJvbSAnLi93aXRoUHNidCc7XG5cbi8qKlxuICogTm9uLUZpbmFsIChSZXBsYWNlYWJsZSlcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iL3YyNS4xL3NyYy9ycGMvcmF3dHJhbnNhY3Rpb25fdXRpbC5jcHAjTDQ5XG4gKiAqL1xuY29uc3QgTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0UgPSAweGZmZmZmZmZmIC0gMjtcblxudHlwZSBBcmdzQWRkRGVzY3JpcHRvcklucHV0ID0gV2l0aFBzYnRPcHRpb25zICYge1xuICBvdXRwdXRJZDogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHRQdWJLZXk/OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbiAgZGVzY3JpcHRvckluZGV4OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBnZXRTY3JpcHRQdWJLZXkoXG4gIGFyZ3M6IHsgYWRkcmVzcz86IHN0cmluZzsgc2NyaXB0UHViS2V5Pzogc3RyaW5nIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogQnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGFyZ3MuYWRkcmVzcykge1xuICAgIHJldHVybiB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRUcnlGb3JtYXRzKGFyZ3MuYWRkcmVzcywgbmV0d29yayk7XG4gIH1cbiAgaWYgKGFyZ3Muc2NyaXB0UHViS2V5KSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFyZ3Muc2NyaXB0UHViS2V5LCAnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYWRkRGVzY3JpcHRvcklucHV0KFxuICBwc2J0OiB1dHhvbGliLlBzYnQsXG4gIG91dHB1dElkOiBzdHJpbmcsXG4gIHNjcmlwdFB1YktleTogQnVmZmVyIHwgdW5kZWZpbmVkLFxuICB2YWx1ZTogYmlnaW50LFxuICBkZXNjcmlwdG9yU3RyaW5nOiBzdHJpbmcsXG4gIGRlc2NyaXB0b3JJbmRleDogbnVtYmVyLFxuICB7IHNlcXVlbmNlID0gTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0UgfSA9IHt9XG4pOiB2b2lkIHtcbiAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlT3V0cHV0SWQob3V0cHV0SWQpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGRlc2NyaXB0b3JTdHJpbmcsICdkZXJpdmFibGUnKTtcbiAgY29uc3QgZGVyaXZlZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KGRlc2NyaXB0b3JJbmRleCk7XG4gIGlmIChzY3JpcHRQdWJLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgIHNjcmlwdFB1YktleSA9IEJ1ZmZlci5mcm9tKGRlcml2ZWREZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpKTtcbiAgfVxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eGlkLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHNlcXVlbmNlLFxuICAgIHdpdG5lc3NVdHhvOiB7XG4gICAgICBzY3JpcHQ6IHNjcmlwdFB1YktleSxcbiAgICAgIHZhbHVlLFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBpbnB1dEluZGV4ID0gcHNidC50eElucHV0cy5sZW5ndGggLSAxO1xuICBjb25zdCB3cmFwcGVkUHNidCA9IHRvV3JhcHBlZFBzYnQocHNidCk7XG4gIHdyYXBwZWRQc2J0LnVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IoaW5wdXRJbmRleCwgZGVyaXZlZERlc2NyaXB0b3IpO1xuICBjb25zdCB1dHhvUHNidCA9IHRvVXR4b1BzYnQod3JhcHBlZFBzYnQpO1xuICBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdID0gdXR4b1BzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG59XG5cbmV4cG9ydCBjb25zdCBjbWRBZGREZXNjcmlwdG9ySW5wdXQ6IHlhcmdzLkNvbW1hbmRNb2R1bGU8dW5rbm93biwgQXJnc0FkZERlc2NyaXB0b3JJbnB1dD4gPSB7XG4gIGNvbW1hbmQ6ICdhZGREZXNjcmlwdG9ySW5wdXQnLFxuICBkZXNjcmliZTogJ2FkZCBkZXNjcmlwdG9yIGlucHV0IHRvIHBzYnQnLFxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pIHtcbiAgICByZXR1cm4gYlxuICAgICAgLm9wdGlvbnMod2l0aFBzYnRPcHRpb25zKVxuICAgICAgLm9wdGlvbignb3V0cHV0SWQnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSlcbiAgICAgIC5vcHRpb24oJ2FkZHJlc3MnLCB7IHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdzY3JpcHRQdWJLZXknLCB7IHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCd2YWx1ZScsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignZGVzY3JpcHRvcicsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignZGVzY3JpcHRvckluZGV4JywgeyB0eXBlOiAnbnVtYmVyJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICBhd2FpdCB3aXRoUHNidChhcmd2LCBhc3luYyBmdW5jdGlvbiAocHNidCkge1xuICAgICAgYWRkRGVzY3JpcHRvcklucHV0KFxuICAgICAgICBwc2J0LFxuICAgICAgICBhcmd2Lm91dHB1dElkLFxuICAgICAgICBnZXRTY3JpcHRQdWJLZXkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogYXJndi5hZGRyZXNzLFxuICAgICAgICAgICAgc2NyaXB0UHViS2V5OiBhcmd2LnNjcmlwdFB1YktleSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyZ3YubmV0d29ya1xuICAgICAgICApLFxuICAgICAgICBCaWdJbnQoYXJndi52YWx1ZSksXG4gICAgICAgIGFyZ3YuZGVzY3JpcHRvcixcbiAgICAgICAgYXJndi5kZXNjcmlwdG9ySW5kZXhcbiAgICAgICk7XG4gICAgICByZXR1cm4gcHNidDtcbiAgICB9KTtcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as yargs from 'yargs';
|
|
2
|
+
import { WithPsbtOptions } from './withPsbt';
|
|
3
|
+
type ArgsAddOutput = WithPsbtOptions & {
|
|
4
|
+
address?: string;
|
|
5
|
+
scriptPubKey?: string;
|
|
6
|
+
amount: string;
|
|
7
|
+
feeRateSatB?: number;
|
|
8
|
+
};
|
|
9
|
+
export declare const cmdAddOutput: yargs.CommandModule<unknown, ArgsAddOutput>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=cmdAddOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdAddOutput.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdPsbt/cmdAddOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAA6B,eAAe,EAAE,MAAM,YAAY,CAAC;AAkBxE,KAAK,aAAa,GAAG,eAAe,GAAG;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA0EF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAyBpE,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdAddOutput = void 0;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const unspents_1 = require("@bitgo-beta/unspents");
|
|
39
|
+
const buffer_1 = require("buffer");
|
|
40
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
41
|
+
const withPsbt_1 = require("./withPsbt");
|
|
42
|
+
function toScriptPubKey(params, network) {
|
|
43
|
+
if (params.address) {
|
|
44
|
+
return utxolib.addressFormat.toOutputScriptTryFormats(params.address, network);
|
|
45
|
+
}
|
|
46
|
+
if (params.scriptPubKey) {
|
|
47
|
+
return buffer_1.Buffer.from(params.scriptPubKey, 'hex');
|
|
48
|
+
}
|
|
49
|
+
throw new Error('address or scriptPubKey is required');
|
|
50
|
+
}
|
|
51
|
+
function getInputWeight(psbt, inputIndex) {
|
|
52
|
+
if (inputIndex === undefined) {
|
|
53
|
+
return psbt.txInputs.reduce((sum, input, inputIndex) => sum + getInputWeight(psbt, inputIndex), 0);
|
|
54
|
+
}
|
|
55
|
+
const { redeemScript, witnessScript } = psbt.data.inputs[inputIndex];
|
|
56
|
+
if (redeemScript) {
|
|
57
|
+
throw new Error('redeemScript is not supported');
|
|
58
|
+
}
|
|
59
|
+
if (!witnessScript) {
|
|
60
|
+
throw new Error('witnessScript is required');
|
|
61
|
+
}
|
|
62
|
+
const witnessMiniscript = wasm_utxo_1.Miniscript.fromBitcoinScript(witnessScript, 'segwitv0');
|
|
63
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString(`wsh(${witnessMiniscript.toString()})`, 'definite');
|
|
64
|
+
return descriptor.maxWeightToSatisfy();
|
|
65
|
+
}
|
|
66
|
+
function getOutputVsize(psbt, outputIndex) {
|
|
67
|
+
if (outputIndex === undefined) {
|
|
68
|
+
return psbt.txOutputs.reduce((sum, output, outputIndex) => sum + getOutputVsize(psbt, outputIndex), 0);
|
|
69
|
+
}
|
|
70
|
+
const { script } = psbt.txOutputs[outputIndex];
|
|
71
|
+
return unspents_1.Dimensions.getVSizeForOutputWithScriptLength(script.length);
|
|
72
|
+
}
|
|
73
|
+
function getMaxOutputValue(psbt, { scriptPubKey, feeRateSatB, }) {
|
|
74
|
+
const inputSum = psbt.data.inputs.reduce((sum, input) => {
|
|
75
|
+
if (!input.witnessUtxo) {
|
|
76
|
+
throw new Error('witnessUtxo is required');
|
|
77
|
+
}
|
|
78
|
+
return sum + input.witnessUtxo.value;
|
|
79
|
+
}, BigInt(0));
|
|
80
|
+
const outputSum = psbt.txOutputs.reduce((sum, output) => sum + output.value, BigInt(0));
|
|
81
|
+
const inputVsize = Math.ceil(getInputWeight(psbt) / 4);
|
|
82
|
+
const outputVsize = getOutputVsize(psbt) + unspents_1.Dimensions.getVSizeForOutputWithScriptLength(scriptPubKey.length);
|
|
83
|
+
const totalVsize = inputVsize + outputVsize + 11;
|
|
84
|
+
const fee = BigInt(totalVsize * feeRateSatB);
|
|
85
|
+
if (inputSum < outputSum + fee) {
|
|
86
|
+
throw new Error(`insufficient funds: [inputSum=${inputSum}, outputSum=${outputSum}, fee=${fee}]`);
|
|
87
|
+
}
|
|
88
|
+
return inputSum - outputSum - fee;
|
|
89
|
+
}
|
|
90
|
+
function getOutputValue(amount, { scriptPubKey, psbt, feeRateSatB, }) {
|
|
91
|
+
if (amount === 'max') {
|
|
92
|
+
if (!feeRateSatB) {
|
|
93
|
+
throw new Error('feeRateSatB is required');
|
|
94
|
+
}
|
|
95
|
+
return getMaxOutputValue(psbt, { scriptPubKey, feeRateSatB });
|
|
96
|
+
}
|
|
97
|
+
return BigInt(parseFloat(amount));
|
|
98
|
+
}
|
|
99
|
+
exports.cmdAddOutput = {
|
|
100
|
+
command: 'addOutput',
|
|
101
|
+
describe: 'add output to psbt',
|
|
102
|
+
builder(b) {
|
|
103
|
+
return b
|
|
104
|
+
.options(withPsbt_1.withPsbtOptions)
|
|
105
|
+
.option('address', { type: 'string' })
|
|
106
|
+
.option('scriptPubKey', { type: 'string' })
|
|
107
|
+
.option('amount', { type: 'string', demandOption: true })
|
|
108
|
+
.option('feeRateSatB', { type: 'number' });
|
|
109
|
+
},
|
|
110
|
+
async handler(argv) {
|
|
111
|
+
await (0, withPsbt_1.withPsbt)(argv, async function (psbt) {
|
|
112
|
+
const scriptPubKey = toScriptPubKey({
|
|
113
|
+
address: argv.address,
|
|
114
|
+
scriptPubKey: argv.scriptPubKey,
|
|
115
|
+
}, argv.network);
|
|
116
|
+
const value = getOutputValue(argv.amount, { scriptPubKey, psbt, feeRateSatB: argv.feeRateSatB });
|
|
117
|
+
psbt.addOutput({ script: scriptPubKey, value });
|
|
118
|
+
return psbt;
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kQWRkT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NtZFBzYnQvY21kQWRkT3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDhEQUFnRDtBQUNoRCxtREFBa0Q7QUFDbEQsbUNBQWdDO0FBQ2hDLGdEQUEwRDtBQUUxRCx5Q0FBd0U7QUFFeEUsU0FBUyxjQUFjLENBQ3JCLE1BR0MsRUFDRCxPQUF3QjtJQUV4QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsT0FBTyxlQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBU0QsU0FBUyxjQUFjLENBQUMsSUFBa0IsRUFBRSxVQUFtQjtJQUM3RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFDRCxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLElBQUksWUFBWSxF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LEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvdW5zcGVudHMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIE1pbmlzY3JpcHQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgd2l0aFBzYnQsIHdpdGhQc2J0T3B0aW9ucywgV2l0aFBzYnRPcHRpb25zIH0gZnJvbSAnLi93aXRoUHNidCc7XG5cbmZ1bmN0aW9uIHRvU2NyaXB0UHViS2V5KFxuICBwYXJhbXM6IHtcbiAgICBhZGRyZXNzPzogc3RyaW5nO1xuICAgIHNjcmlwdFB1YktleT86IHN0cmluZztcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBCdWZmZXIge1xuICBpZiAocGFyYW1zLmFkZHJlc3MpIHtcbiAgICByZXR1cm4gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhwYXJhbXMuYWRkcmVzcywgbmV0d29yayk7XG4gIH1cbiAgaWYgKHBhcmFtcy5zY3JpcHRQdWJLZXkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocGFyYW1zLnNjcmlwdFB1YktleSwgJ2hleCcpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignYWRkcmVzcyBvciBzY3JpcHRQdWJLZXkgaXMgcmVxdWlyZWQnKTtcbn1cblxudHlwZSBBcmdzQWRkT3V0cHV0ID0gV2l0aFBzYnRPcHRpb25zICYge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHRQdWJLZXk/OiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBmZWVSYXRlU2F0Qj86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIGdldElucHV0V2VpZ2h0KHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpbnB1dEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHNidC50eElucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQsIGlucHV0SW5kZXgpID0+IHN1bSArIGdldElucHV0V2VpZ2h0KHBzYnQsIGlucHV0SW5kZXgpLCAwKTtcbiAgfVxuICBjb25zdCB7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gcHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgaWYgKHJlZGVlbVNjcmlwdCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVkZWVtU2NyaXB0IGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxuICBpZiAoIXdpdG5lc3NTY3JpcHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpdG5lc3NTY3JpcHQgaXMgcmVxdWlyZWQnKTtcbiAgfVxuICBjb25zdCB3aXRuZXNzTWluaXNjcmlwdCA9IE1pbmlzY3JpcHQuZnJvbUJpdGNvaW5TY3JpcHQod2l0bmVzc1NjcmlwdCwgJ3NlZ3dpdHYwJyk7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYHdzaCgke3dpdG5lc3NNaW5pc2NyaXB0LnRvU3RyaW5nKCl9KWAsICdkZWZpbml0ZScpO1xuICByZXR1cm4gZGVzY3JpcHRvci5tYXhXZWlnaHRUb1NhdGlzZnkoKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3V0cHV0VnNpemUocHNidDogdXR4b2xpYi5Qc2J0LCBvdXRwdXRJbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChvdXRwdXRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBzYnQudHhPdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQsIG91dHB1dEluZGV4KSA9PiBzdW0gKyBnZXRPdXRwdXRWc2l6ZShwc2J0LCBvdXRwdXRJbmRleCksIDApO1xuICB9XG4gIGNvbnN0IHsgc2NyaXB0IH0gPSBwc2J0LnR4T3V0cHV0c1tvdXRwdXRJbmRleF07XG4gIHJldHVybiBEaW1lbnNpb25zLmdldFZTaXplRm9yT3V0cHV0V2l0aFNjcmlwdExlbmd0aChzY3JpcHQubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWF4T3V0cHV0VmFsdWUoXG4gIHBzYnQ6IHV0eG9saWIuUHNidCxcbiAge1xuICAgIHNjcmlwdFB1YktleSxcbiAgICBmZWVSYXRlU2F0QixcbiAgfToge1xuICAgIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICAgIGZlZVJhdGVTYXRCOiBudW1iZXI7XG4gIH1cbik6IGJpZ2ludCB7XG4gIGNvbnN0IGlucHV0U3VtID0gcHNidC5kYXRhLmlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHtcbiAgICBpZiAoIWlucHV0LndpdG5lc3NVdHhvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dpdG5lc3NVdHhvIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHJldHVybiBzdW0gKyBpbnB1dC53aXRuZXNzVXR4by52YWx1ZTtcbiAgfSwgQmlnSW50KDApKTtcbiAgY29uc3Qgb3V0cHV0U3VtID0gcHNidC50eE91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBjb25zdCBpbnB1dFZzaXplID0gTWF0aC5jZWlsKGdldElucHV0V2VpZ2h0KHBzYnQpIC8gNCk7XG4gIGNvbnN0IG91dHB1dFZzaXplID0gZ2V0T3V0cHV0VnNpemUocHNidCkgKyBEaW1lbnNpb25zLmdldFZTaXplRm9yT3V0cHV0V2l0aFNjcmlwdExlbmd0aChzY3JpcHRQdWJLZXkubGVuZ3RoKTtcbiAgY29uc3QgdG90YWxWc2l6ZSA9IGlucHV0VnNpemUgKyBvdXRwdXRWc2l6ZSArIDExO1xuICBjb25zdCBmZWUgPSBCaWdJbnQodG90YWxWc2l6ZSAqIGZlZVJhdGVTYXRCKTtcbiAgaWYgKGlucHV0U3VtIDwgb3V0cHV0U3VtICsgZmVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnN1ZmZpY2llbnQgZnVuZHM6IFtpbnB1dFN1bT0ke2lucHV0U3VtfSwgb3V0cHV0U3VtPSR7b3V0cHV0U3VtfSwgZmVlPSR7ZmVlfV1gKTtcbiAgfVxuICByZXR1cm4gaW5wdXRTdW0gLSBvdXRwdXRTdW0gLSBmZWU7XG59XG5cbmZ1bmN0aW9uIGdldE91dHB1dFZhbHVlKFxuICBhbW91bnQ6IHN0cmluZyxcbiAge1xuICAgIHNjcmlwdFB1YktleSxcbiAgICBwc2J0LFxuICAgIGZlZVJhdGVTYXRCLFxuICB9OiB7XG4gICAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gICAgcHNidDogdXR4b2xpYi5Qc2J0O1xuICAgIGZlZVJhdGVTYXRCPzogbnVtYmVyO1xuICB9XG4pOiBiaWdpbnQge1xuICBpZiAoYW1vdW50ID09PSAnbWF4Jykge1xuICAgIGlmICghZmVlUmF0ZVNhdEIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmVlUmF0ZVNhdEIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldE1heE91dHB1dFZhbHVlKHBzYnQsIHsgc2NyaXB0UHViS2V5LCBmZWVSYXRlU2F0QiB9KTtcbiAgfVxuICByZXR1cm4gQmlnSW50KHBhcnNlRmxvYXQoYW1vdW50KSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbWRBZGRPdXRwdXQ6IHlhcmdzLkNvbW1hbmRNb2R1bGU8dW5rbm93biwgQXJnc0FkZE91dHB1dD4gPSB7XG4gIGNvbW1hbmQ6ICdhZGRPdXRwdXQnLFxuICBkZXNjcmliZTogJ2FkZCBvdXRwdXQgdG8gcHNidCcsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPikge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9ucyh3aXRoUHNidE9wdGlvbnMpXG4gICAgICAub3B0aW9uKCdhZGRyZXNzJywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignc2NyaXB0UHViS2V5JywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignYW1vdW50JywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pXG4gICAgICAub3B0aW9uKCdmZWVSYXRlU2F0QicsIHsgdHlwZTogJ251bWJlcicgfSk7XG4gIH0sXG4gIGFzeW5jIGhhbmRsZXIoYXJndikge1xuICAgIGF3YWl0IHdpdGhQc2J0KGFyZ3YsIGFzeW5jIGZ1bmN0aW9uIChwc2J0KSB7XG4gICAgICBjb25zdCBzY3JpcHRQdWJLZXkgPSB0b1NjcmlwdFB1YktleShcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGFyZ3YuYWRkcmVzcyxcbiAgICAgICAgICBzY3JpcHRQdWJLZXk6IGFyZ3Yuc2NyaXB0UHViS2V5LFxuICAgICAgICB9LFxuICAgICAgICBhcmd2Lm5ldHdvcmtcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldE91dHB1dFZhbHVlKGFyZ3YuYW1vdW50LCB7IHNjcmlwdFB1YktleSwgcHNidCwgZmVlUmF0ZVNhdEI6IGFyZ3YuZmVlUmF0ZVNhdEIgfSk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogc2NyaXB0UHViS2V5LCB2YWx1ZSB9KTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH0pO1xuICB9LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as yargs from 'yargs';
|
|
2
|
+
import { WithPsbtOptions } from './withPsbt';
|
|
3
|
+
type ArgsCreatePsbt = WithPsbtOptions & {
|
|
4
|
+
txVersion?: number;
|
|
5
|
+
txLocktime?: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const cmdCreate: yargs.CommandModule<unknown, ArgsCreatePsbt>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=cmdCreate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdCreate.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdPsbt/cmdCreate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA6B,eAAe,EAAE,MAAM,YAAY,CAAC;AAExE,KAAK,cAAc,GAAG,eAAe,GAAG;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,CAiBlE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdCreate = void 0;
|
|
4
|
+
const withPsbt_1 = require("./withPsbt");
|
|
5
|
+
exports.cmdCreate = {
|
|
6
|
+
builder(b) {
|
|
7
|
+
return b.options(withPsbt_1.withPsbtOptions).option('txVersion', { type: 'number' }).option('txLocktime', { type: 'number' });
|
|
8
|
+
},
|
|
9
|
+
command: 'create',
|
|
10
|
+
describe: 'create empty psbt without inputs or outputs',
|
|
11
|
+
async handler(argv) {
|
|
12
|
+
return (0, withPsbt_1.withPsbt)({ ...argv, create: true, expectEmpty: true }, async function (psbt) {
|
|
13
|
+
if (argv.txVersion !== undefined) {
|
|
14
|
+
psbt.setVersion(argv.txVersion);
|
|
15
|
+
}
|
|
16
|
+
if (argv.txLocktime !== undefined) {
|
|
17
|
+
psbt.setLocktime(argv.txLocktime);
|
|
18
|
+
}
|
|
19
|
+
return psbt;
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kQ3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NtZFBzYnQvY21kQ3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUF3RTtBQU8zRCxRQUFBLFNBQVMsR0FBaUQ7SUFDckUsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBQ0QsT0FBTyxFQUFFLFFBQVE7SUFDakIsUUFBUSxFQUFFLDZDQUE2QztJQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUk7UUFDaEIsT0FBTyxJQUFBLG1CQUFRLEVBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLFdBQVcsSUFBSTtZQUNoRixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgeyB3aXRoUHNidCwgd2l0aFBzYnRPcHRpb25zLCBXaXRoUHNidE9wdGlvbnMgfSBmcm9tICcuL3dpdGhQc2J0JztcblxudHlwZSBBcmdzQ3JlYXRlUHNidCA9IFdpdGhQc2J0T3B0aW9ucyAmIHtcbiAgdHhWZXJzaW9uPzogbnVtYmVyO1xuICB0eExvY2t0aW1lPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNtZENyZWF0ZTogeWFyZ3MuQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmdzQ3JlYXRlUHNidD4gPSB7XG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPikge1xuICAgIHJldHVybiBiLm9wdGlvbnMod2l0aFBzYnRPcHRpb25zKS5vcHRpb24oJ3R4VmVyc2lvbicsIHsgdHlwZTogJ251bWJlcicgfSkub3B0aW9uKCd0eExvY2t0aW1lJywgeyB0eXBlOiAnbnVtYmVyJyB9KTtcbiAgfSxcbiAgY29tbWFuZDogJ2NyZWF0ZScsXG4gIGRlc2NyaWJlOiAnY3JlYXRlIGVtcHR5IHBzYnQgd2l0aG91dCBpbnB1dHMgb3Igb3V0cHV0cycsXG4gIGFzeW5jIGhhbmRsZXIoYXJndikge1xuICAgIHJldHVybiB3aXRoUHNidCh7IC4uLmFyZ3YsIGNyZWF0ZTogdHJ1ZSwgZXhwZWN0RW1wdHk6IHRydWUgfSwgYXN5bmMgZnVuY3Rpb24gKHBzYnQpIHtcbiAgICAgIGlmIChhcmd2LnR4VmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBzYnQuc2V0VmVyc2lvbihhcmd2LnR4VmVyc2lvbik7XG4gICAgICB9XG4gICAgICBpZiAoYXJndi50eExvY2t0aW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHNidC5zZXRMb2NrdGltZShhcmd2LnR4TG9ja3RpbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBzYnQ7XG4gICAgfSk7XG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CommandModule } from 'yargs';
|
|
2
|
+
import { WithPsbtOptions } from './withPsbt';
|
|
3
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
4
|
+
type ArgsFinalizePsbt = WithPsbtOptions & {
|
|
5
|
+
extract: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function finalizeWithWrappedPsbt(psbt: utxolib.bitgo.UtxoPsbt | utxolib.Psbt): void;
|
|
8
|
+
export declare const cmdFinalize: CommandModule<unknown, ArgsFinalizePsbt>;
|
|
9
|
+
export declare const cmdExtract: CommandModule<unknown, WithPsbtOptions>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=cmdFinalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdFinalize.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdPsbt/cmdFinalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,aAAa,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAY,eAAe,EAAmB,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,KAAK,gBAAgB,GAAG,eAAe,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAOzF;AAED,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,OAAO,EAAE,gBAAgB,CAehE,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,OAAO,EAAE,eAAe,CAW9D,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdExtract = exports.cmdFinalize = void 0;
|
|
4
|
+
exports.finalizeWithWrappedPsbt = finalizeWithWrappedPsbt;
|
|
5
|
+
const withPsbt_1 = require("./withPsbt");
|
|
6
|
+
const wrap_1 = require("./wrap");
|
|
7
|
+
function finalizeWithWrappedPsbt(psbt) {
|
|
8
|
+
const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
|
|
9
|
+
wrappedPsbt.finalize();
|
|
10
|
+
const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt);
|
|
11
|
+
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
12
|
+
psbt.data.inputs[i] = unwrappedPsbt.data.inputs[i];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.cmdFinalize = {
|
|
16
|
+
command: 'finalize [psbt]',
|
|
17
|
+
describe: 'finalize psbt',
|
|
18
|
+
builder(b) {
|
|
19
|
+
return b.options(withPsbt_1.withPsbtOptions).option('extract', { type: 'boolean', default: false });
|
|
20
|
+
},
|
|
21
|
+
async handler(argv) {
|
|
22
|
+
await (0, withPsbt_1.withPsbt)(argv, async function (psbt) {
|
|
23
|
+
finalizeWithWrappedPsbt(psbt);
|
|
24
|
+
if (argv.extract) {
|
|
25
|
+
return psbt.extractTransaction().toBuffer();
|
|
26
|
+
}
|
|
27
|
+
return psbt;
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
exports.cmdExtract = {
|
|
32
|
+
command: 'extract [psbt]',
|
|
33
|
+
describe: 'extract transaction from psbt',
|
|
34
|
+
builder(b) {
|
|
35
|
+
return b.options(withPsbt_1.withPsbtOptions);
|
|
36
|
+
},
|
|
37
|
+
async handler(argv) {
|
|
38
|
+
await (0, withPsbt_1.withPsbt)(argv, async function (psbt) {
|
|
39
|
+
return psbt.extractTransaction().toBuffer();
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kRmluYWxpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kUHNidC9jbWRGaW5hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSwwREFPQztBQWZELHlDQUF3RTtBQUV4RSxpQ0FBbUQ7QUFNbkQsU0FBZ0IsdUJBQXVCLENBQUMsSUFBMkM7SUFDakYsTUFBTSxXQUFXLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFBLGlCQUFVLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxXQUFXLEdBQTZDO0lBQ25FLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsUUFBUSxFQUFFLGVBQWU7SUFDekIsT0FBTyxDQUFDLENBQWdCO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUNoQixNQUFNLElBQUEsbUJBQVEsRUFBQyxJQUFJLEVBQUUsS0FBSyxXQUFXLElBQUk7WUFDdkMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsVUFBVSxHQUE0QztJQUNqRSxPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLFFBQVEsRUFBRSwrQkFBK0I7SUFDekMsT0FBTyxDQUFDLENBQWdCO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUNoQixNQUFNLElBQUEsbUJBQVEsRUFBQyxJQUFJLEVBQUUsS0FBSyxXQUFXLElBQUk7WUFDdkMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJndiwgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IHdpdGhQc2J0LCBXaXRoUHNidE9wdGlvbnMsIHdpdGhQc2J0T3B0aW9ucyB9IGZyb20gJy4vd2l0aFBzYnQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyB0b1V0eG9Qc2J0LCB0b1dyYXBwZWRQc2J0IH0gZnJvbSAnLi93cmFwJztcblxudHlwZSBBcmdzRmluYWxpemVQc2J0ID0gV2l0aFBzYnRPcHRpb25zICYge1xuICBleHRyYWN0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplV2l0aFdyYXBwZWRQc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLlBzYnQpOiB2b2lkIHtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICB3cmFwcGVkUHNidC5maW5hbGl6ZSgpO1xuICBjb25zdCB1bndyYXBwZWRQc2J0ID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIHBzYnQuZGF0YS5pbnB1dHNbaV0gPSB1bndyYXBwZWRQc2J0LmRhdGEuaW5wdXRzW2ldO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjbWRGaW5hbGl6ZTogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBBcmdzRmluYWxpemVQc2J0PiA9IHtcbiAgY29tbWFuZDogJ2ZpbmFsaXplIFtwc2J0XScsXG4gIGRlc2NyaWJlOiAnZmluYWxpemUgcHNidCcsXG4gIGJ1aWxkZXIoYjogQXJndjx1bmtub3duPik6IEFyZ3Y8QXJnc0ZpbmFsaXplUHNidD4ge1xuICAgIHJldHVybiBiLm9wdGlvbnMod2l0aFBzYnRPcHRpb25zKS5vcHRpb24oJ2V4dHJhY3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSk7XG4gIH0sXG4gIGFzeW5jIGhhbmRsZXIoYXJndikge1xuICAgIGF3YWl0IHdpdGhQc2J0KGFyZ3YsIGFzeW5jIGZ1bmN0aW9uIChwc2J0KSB7XG4gICAgICBmaW5hbGl6ZVdpdGhXcmFwcGVkUHNidChwc2J0KTtcbiAgICAgIGlmIChhcmd2LmV4dHJhY3QpIHtcbiAgICAgICAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CdWZmZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH0pO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGNtZEV4dHJhY3Q6IENvbW1hbmRNb2R1bGU8dW5rbm93biwgV2l0aFBzYnRPcHRpb25zPiA9IHtcbiAgY29tbWFuZDogJ2V4dHJhY3QgW3BzYnRdJyxcbiAgZGVzY3JpYmU6ICdleHRyYWN0IHRyYW5zYWN0aW9uIGZyb20gcHNidCcsXG4gIGJ1aWxkZXIoYjogQXJndjx1bmtub3duPik6IEFyZ3Y8V2l0aFBzYnRPcHRpb25zPiB7XG4gICAgcmV0dXJuIGIub3B0aW9ucyh3aXRoUHNidE9wdGlvbnMpO1xuICB9LFxuICBhc3luYyBoYW5kbGVyKGFyZ3YpIHtcbiAgICBhd2FpdCB3aXRoUHNidChhcmd2LCBhc3luYyBmdW5jdGlvbiAocHNidCkge1xuICAgICAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CdWZmZXIoKTtcbiAgICB9KTtcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdSign.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdPsbt/cmdSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,aAAa,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,EAAY,eAAe,EAAmB,MAAM,YAAY,CAAC;AAGxE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAC3C,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,YAAY,CAgBxD,CAAC"}
|