@bitgo/utxo-bin 2.3.3 → 2.4.0
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/dist/bin/index.js +2 -2
- package/dist/src/AddressParser.d.ts +20 -0
- package/dist/src/AddressParser.d.ts.map +1 -0
- package/dist/src/AddressParser.js +93 -0
- package/dist/src/InputOutputParser.d.ts +30 -0
- package/dist/src/InputOutputParser.d.ts.map +1 -0
- package/dist/src/InputOutputParser.js +165 -0
- package/dist/src/Parser.d.ts +12 -0
- package/dist/src/Parser.d.ts.map +1 -0
- package/dist/src/Parser.js +15 -0
- package/dist/src/TxParser.d.ts +28 -0
- package/dist/src/TxParser.d.ts.map +1 -0
- package/dist/src/TxParser.js +90 -0
- package/dist/src/commands.d.ts +29 -10
- package/dist/src/commands.d.ts.map +1 -1
- package/dist/src/commands.js +77 -26
- package/dist/src/fetch.d.ts +6 -5
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +29 -18
- package/dist/src/format.d.ts +3 -2
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +6 -2
- package/dist/src/hollowSegwitSpend.d.ts +26 -0
- package/dist/src/hollowSegwitSpend.d.ts.map +1 -0
- package/dist/src/hollowSegwitSpend.js +40 -0
- package/dist/tsconfig.tsbuildinfo +118 -39
- package/package.json +8 -6
- package/dist/src/parse.d.ts +0 -51
- package/dist/src/parse.d.ts.map +0 -1
- package/dist/src/parse.js +0 -270
package/dist/bin/index.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const yargs = require("yargs");
|
|
5
5
|
const commands_1 = require("../src/commands");
|
|
6
|
-
yargs.command(commands_1.
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
yargs.command(commands_1.cmdParseTx).command(commands_1.cmdParseAddress).help().parse();
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQStCO0FBQy9CLDhDQUE4RDtBQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsMEJBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgY21kUGFyc2VBZGRyZXNzLCBjbWRQYXJzZVR4IH0gZnJvbSAnLi4vc3JjL2NvbW1hbmRzJztcbnlhcmdzLmNvbW1hbmQoY21kUGFyc2VUeCkuY29tbWFuZChjbWRQYXJzZUFkZHJlc3MpLmhlbHAoKS5wYXJzZSgpO1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
import { Parser, ParserNode } from './Parser';
|
|
4
|
+
export declare class AddressParser extends Parser {
|
|
5
|
+
params: {
|
|
6
|
+
network?: utxolib.Network;
|
|
7
|
+
all: boolean;
|
|
8
|
+
convert: boolean;
|
|
9
|
+
};
|
|
10
|
+
constructor(params: {
|
|
11
|
+
network?: utxolib.Network;
|
|
12
|
+
all: boolean;
|
|
13
|
+
convert: boolean;
|
|
14
|
+
});
|
|
15
|
+
tryParseOpReturn(script: Buffer): ParserNode[];
|
|
16
|
+
parseOutputScript(buffer: Buffer): ParserNode[];
|
|
17
|
+
parseBase58(address: string): ParserNode;
|
|
18
|
+
parse(address: string): ParserNode;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=AddressParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddressParser.d.ts","sourceRoot":"","sources":["../../src/AddressParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAS9C,qBAAa,aAAc,SAAQ,MAAM;IAE9B,MAAM,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;QAC1B,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB;gBAJM,MAAM,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;QAC1B,GAAG,EAAE,OAAO,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB;IAKH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAwB9C,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAU/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAQxC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CAuCnC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddressParser = void 0;
|
|
4
|
+
const utxolib = require("@bitgo/utxo-lib");
|
|
5
|
+
const Parser_1 = require("./Parser");
|
|
6
|
+
const bs58check = require('bs58check');
|
|
7
|
+
function isPrintable(s) {
|
|
8
|
+
// https://stackoverflow.com/a/66447494
|
|
9
|
+
return !s.match(/[\p{Cc}\p{Cn}\p{Cs}]+/gu);
|
|
10
|
+
}
|
|
11
|
+
class AddressParser extends Parser_1.Parser {
|
|
12
|
+
constructor(params) {
|
|
13
|
+
super();
|
|
14
|
+
this.params = params;
|
|
15
|
+
}
|
|
16
|
+
tryParseOpReturn(script) {
|
|
17
|
+
let data;
|
|
18
|
+
try {
|
|
19
|
+
({ data } = utxolib.payments.embed({ output: script }));
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
// ignore
|
|
23
|
+
}
|
|
24
|
+
if (!data) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return data.map((buf, i) => {
|
|
28
|
+
let utf8;
|
|
29
|
+
try {
|
|
30
|
+
utf8 = buf.toString('utf8');
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
// ignore
|
|
34
|
+
}
|
|
35
|
+
return this.node(`OP_RETURN ${i}`, `${buf.length} bytes`, [
|
|
36
|
+
this.node('hex', buf),
|
|
37
|
+
...(utf8 && isPrintable(utf8) ? [this.node('utf8', utf8)] : []),
|
|
38
|
+
]);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
parseOutputScript(buffer) {
|
|
42
|
+
return [
|
|
43
|
+
this.node('scriptPubKey', `[${buffer.length}byte]`, [
|
|
44
|
+
this.node('type', utxolib.classify.output(buffer)),
|
|
45
|
+
this.node('hex', buffer.toString('hex')),
|
|
46
|
+
this.node('asm', utxolib.script.toASM(buffer), this.tryParseOpReturn(buffer)),
|
|
47
|
+
]),
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
parseBase58(address) {
|
|
51
|
+
const payload = bs58check.decode(address);
|
|
52
|
+
return this.node('base58Check', payload, [
|
|
53
|
+
this.node('version', payload.readUInt8(0).toString('16')),
|
|
54
|
+
this.node('hash', payload.slice(1)),
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
parse(address) {
|
|
58
|
+
const networks = this.params.network ? [this.params.network] : utxolib.getNetworkList();
|
|
59
|
+
const matches = networks.flatMap((network) => {
|
|
60
|
+
try {
|
|
61
|
+
return { network, buffer: utxolib.address.toOutputScript(address, network) };
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const firstMatch = matches[0];
|
|
68
|
+
const nodes = [];
|
|
69
|
+
try {
|
|
70
|
+
nodes.push(this.parseBase58(address));
|
|
71
|
+
// eslint-disable-next-line no-empty
|
|
72
|
+
}
|
|
73
|
+
catch (e) { }
|
|
74
|
+
if (firstMatch) {
|
|
75
|
+
nodes.push(this.node('outputScript', firstMatch.buffer, this.parseOutputScript(firstMatch.buffer)));
|
|
76
|
+
nodes.push(this.node('network', matches.map((m) => utxolib.getNetworkName(m.network)).join(', ')));
|
|
77
|
+
if (this.params.all || this.params.convert) {
|
|
78
|
+
nodes.push(this.node('converted', undefined, utxolib.getNetworkList().flatMap((network) => {
|
|
79
|
+
const name = utxolib.getNetworkName(network);
|
|
80
|
+
try {
|
|
81
|
+
return [this.node(name, utxolib.address.fromOutputScript(firstMatch.buffer, network))];
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
return [this.node(name, 'undefined')];
|
|
85
|
+
}
|
|
86
|
+
})));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return this.node('address', address, nodes);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.AddressParser = AddressParser;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkcmVzc1BhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BZGRyZXNzUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEyQztBQUMzQyxxQ0FBOEM7QUFFOUMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZDLFNBQVMsV0FBVyxDQUFDLENBQVM7SUFDNUIsdUNBQXVDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQWEsYUFBYyxTQUFRLGVBQU07SUFDdkMsWUFDUyxNQUlOO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFORCxXQUFNLEdBQU4sTUFBTSxDQUlaO0lBR0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWM7UUFDN0IsSUFBSSxJQUEwQixDQUFDO1FBQy9CLElBQUk7WUFDRixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixTQUFTO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQztZQUNULElBQUk7Z0JBQ0YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixTQUFTO2FBQ1Y7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLFFBQVEsRUFB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QUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDMUMsS0FBSyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsSUFBSSxDQUNQLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBVyxDQUFDO29CQUN2RCxJQUFJO3dCQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN4RjtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztxQkFDdkM7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO2FBQ0g7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQTVGRCxzQ0E0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBQYXJzZXIsIFBhcnNlck5vZGUgfSBmcm9tICcuL1BhcnNlcic7XG5cbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpO1xuXG5mdW5jdGlvbiBpc1ByaW50YWJsZShzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY2NDQ3NDk0XG4gIHJldHVybiAhcy5tYXRjaCgvW1xccHtDY31cXHB7Q259XFxwe0NzfV0rL2d1KTtcbn1cblxuZXhwb3J0IGNsYXNzIEFkZHJlc3NQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFyYW1zOiB7XG4gICAgICBuZXR3b3JrPzogdXR4b2xpYi5OZXR3b3JrO1xuICAgICAgYWxsOiBib29sZWFuO1xuICAgICAgY29udmVydDogYm9vbGVhbjtcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0cnlQYXJzZU9wUmV0dXJuKHNjcmlwdDogQnVmZmVyKTogUGFyc2VyTm9kZVtdIHtcbiAgICBsZXQgZGF0YTogQnVmZmVyW10gfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgICh7IGRhdGEgfSA9IHV0eG9saWIucGF5bWVudHMuZW1iZWQoeyBvdXRwdXQ6IHNjcmlwdCB9KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5tYXAoKGJ1ZiwgaSkgPT4ge1xuICAgICAgbGV0IHV0Zjg7XG4gICAgICB0cnkge1xuICAgICAgICB1dGY4ID0gYnVmLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubm9kZShgT1BfUkVUVVJOICR7aX1gLCBgJHtidWYubGVuZ3RofSBieXRlc2AsIFtcbiAgICAgICAgdGhpcy5ub2RlKCdoZXgnLCBidWYpLFxuICAgICAgICAuLi4odXRmOCAmJiBpc1ByaW50YWJsZSh1dGY4KSA/IFt0aGlzLm5vZGUoJ3V0ZjgnLCB1dGY4KV0gOiBbXSksXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlT3V0cHV0U2NyaXB0KGJ1ZmZlcjogQnVmZmVyKTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKCdzY3JpcHRQdWJLZXknLCBgWyR7YnVmZmVyLmxlbmd0aH1ieXRlXWAsIFtcbiAgICAgICAgdGhpcy5ub2RlKCd0eXBlJywgdXR4b2xpYi5jbGFzc2lmeS5vdXRwdXQoYnVmZmVyKSksXG4gICAgICAgIHRoaXMubm9kZSgnaGV4JywgYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgIHRoaXMubm9kZSgnYXNtJywgdXR4b2xpYi5zY3JpcHQudG9BU00oYnVmZmVyKSwgdGhpcy50cnlQYXJzZU9wUmV0dXJuKGJ1ZmZlcikpLFxuICAgICAgXSksXG4gICAgXTtcbiAgfVxuXG4gIHBhcnNlQmFzZTU4KGFkZHJlc3M6IHN0cmluZyk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IHBheWxvYWQgPSBiczU4Y2hlY2suZGVjb2RlKGFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzLm5vZGUoJ2Jhc2U1OENoZWNrJywgcGF5bG9hZCwgW1xuICAgICAgdGhpcy5ub2RlKCd2ZXJzaW9uJywgcGF5bG9hZC5yZWFkVUludDgoMCkudG9TdHJpbmcoJzE2JykpLFxuICAgICAgdGhpcy5ub2RlKCdoYXNoJywgcGF5bG9hZC5zbGljZSgxKSksXG4gICAgXSk7XG4gIH1cblxuICBwYXJzZShhZGRyZXNzOiBzdHJpbmcpOiBQYXJzZXJOb2RlIHtcbiAgICBjb25zdCBuZXR3b3JrcyA9IHRoaXMucGFyYW1zLm5ldHdvcmsgPyBbdGhpcy5wYXJhbXMubmV0d29ya10gOiB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IG5ldHdvcmtzLmZsYXRNYXAoKG5ldHdvcmspID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7IG5ldHdvcmssIGJ1ZmZlcjogdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIG5ldHdvcmspIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBmaXJzdE1hdGNoID0gbWF0Y2hlc1swXTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5wYXJzZUJhc2U1OChhZGRyZXNzKSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCdvdXRwdXRTY3JpcHQnLCBmaXJzdE1hdGNoLmJ1ZmZlciwgdGhpcy5wYXJzZU91dHB1dFNjcmlwdChmaXJzdE1hdGNoLmJ1ZmZlcikpKTtcbiAgICAgIG5vZGVzLnB1c2godGhpcy5ub2RlKCduZXR3b3JrJywgbWF0Y2hlcy5tYXAoKG0pID0+IHV0eG9saWIuZ2V0TmV0d29ya05hbWUobS5uZXR3b3JrKSkuam9pbignLCAnKSkpO1xuICAgICAgaWYgKHRoaXMucGFyYW1zLmFsbCB8fCB0aGlzLnBhcmFtcy5jb252ZXJ0KSB7XG4gICAgICAgIG5vZGVzLnB1c2goXG4gICAgICAgICAgdGhpcy5ub2RlKFxuICAgICAgICAgICAgJ2NvbnZlcnRlZCcsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuZmxhdE1hcCgobmV0d29yaykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt0aGlzLm5vZGUobmFtZSwgdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoZmlyc3RNYXRjaC5idWZmZXIsIG5ldHdvcmspKV07XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXMubm9kZShuYW1lLCAndW5kZWZpbmVkJyldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm9kZSgnYWRkcmVzcycsIGFkZHJlc3MsIG5vZGVzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
import { OutputSpend } from '@bitgo/blockapis';
|
|
4
|
+
import { Parser, ParserNode } from './Parser';
|
|
5
|
+
import { ChainInfo } from './TxParser';
|
|
6
|
+
import { HollowSegwitSpend } from './hollowSegwitSpend';
|
|
7
|
+
export declare class InputOutputParser extends Parser {
|
|
8
|
+
private params;
|
|
9
|
+
constructor(params: {
|
|
10
|
+
parseOutputScript: boolean;
|
|
11
|
+
parseScriptAsm: boolean;
|
|
12
|
+
parseScriptData: boolean;
|
|
13
|
+
parseSignatureData: boolean;
|
|
14
|
+
});
|
|
15
|
+
parseScriptAsm(type: string, part: Buffer, i: number, n: number): string | undefined;
|
|
16
|
+
parseScriptParts(type: string, parts: Array<Buffer | number>): ParserNode[];
|
|
17
|
+
parseInputScript(buffer: Buffer): ParserNode;
|
|
18
|
+
parseWitness(script: Buffer[]): ParserNode;
|
|
19
|
+
parsePubkeys(parsed: utxolib.bitgo.ParsedSignatureScript2Of3): ParserNode;
|
|
20
|
+
parseSignatures(parsed: utxolib.bitgo.ParsedSignatureScript2Of3, tx: utxolib.bitgo.UtxoTransaction, inputIndex: number, prevOutputs?: utxolib.TxOutput[]): ParserNode;
|
|
21
|
+
parseSigScriptWithType(tx: utxolib.bitgo.UtxoTransaction, inputIndex: number, parsed: utxolib.bitgo.ParsedSignatureScript | HollowSegwitSpend, prevOutputs?: utxolib.TxOutput[]): ParserNode;
|
|
22
|
+
parseSigScript(tx: utxolib.bitgo.UtxoTransaction, inputIndex: number, prevOutputs?: utxolib.TxOutput[]): ParserNode;
|
|
23
|
+
parsePrevOut(input: utxolib.TxInput, i: number, network: utxolib.Network, prevOutputs?: utxolib.TxOutput[]): ParserNode[];
|
|
24
|
+
parseInput(txid: string, tx: utxolib.bitgo.UtxoTransaction, i: number, input: utxolib.TxInput, outputInfo: ChainInfo): ParserNode;
|
|
25
|
+
parseSpend(txid: string, index: number, spends: OutputSpend[] | undefined, params: {
|
|
26
|
+
conflict: boolean;
|
|
27
|
+
}): ParserNode[];
|
|
28
|
+
parseOutput(txid: string, o: utxolib.TxOutput, i: number, network: utxolib.Network, params: ChainInfo): ParserNode;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=InputOutputParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputOutputParser.d.ts","sourceRoot":"","sources":["../../src/InputOutputParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAA0B,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAevG,qBAAa,iBAAkB,SAAQ,MAAM;IAEzC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE;QACd,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B;IAKH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAmBpF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,UAAU,EAAE;IAY3E,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAiB5C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;IAQ1C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,UAAU;IAQzE,eAAe,CACb,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAC/C,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EACjC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,GAC/B,UAAU;IAiBb,sBAAsB,CACpB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,iBAAiB,EAC/D,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,GAC/B,UAAU;IAeb,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,UAAU;IAanH,YAAY,CACV,KAAK,EAAE,OAAO,CAAC,OAAO,EACtB,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,GAC/B,UAAU,EAAE;IAiBf,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EACjC,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,OAAO,CAAC,OAAO,EACtB,UAAU,EAAE,SAAS,GACpB,UAAU;IAWb,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EACjC,MAAM,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,GAC5B,UAAU,EAAE;IAgBf,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU;CAgBnH"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InputOutputParser = void 0;
|
|
4
|
+
const utxolib = require("@bitgo/utxo-lib");
|
|
5
|
+
const Parser_1 = require("./Parser");
|
|
6
|
+
const AddressParser_1 = require("./AddressParser");
|
|
7
|
+
const format_1 = require("./format");
|
|
8
|
+
const hollowSegwitSpend_1 = require("./hollowSegwitSpend");
|
|
9
|
+
function toBufferUInt32BE(n) {
|
|
10
|
+
const buf = Buffer.alloc(4);
|
|
11
|
+
buf.writeUInt32LE(n, 0);
|
|
12
|
+
return buf;
|
|
13
|
+
}
|
|
14
|
+
function parseSignatureScript(input, network) {
|
|
15
|
+
return hollowSegwitSpend_1.parseHollowSegwitSpend(input, network) || utxolib.bitgo.parseSignatureScript(input);
|
|
16
|
+
}
|
|
17
|
+
class InputOutputParser extends Parser_1.Parser {
|
|
18
|
+
constructor(params) {
|
|
19
|
+
super();
|
|
20
|
+
this.params = params;
|
|
21
|
+
}
|
|
22
|
+
parseScriptAsm(type, part, i, n) {
|
|
23
|
+
if ((type === 'taproot' && i === n - 2) ||
|
|
24
|
+
((type === 'scripthash' || type === 'witnessscripthash') && i === n - 1)) {
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = utxolib.script.toASM(part);
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
return 'error';
|
|
31
|
+
}
|
|
32
|
+
if (parsed) {
|
|
33
|
+
return ['', ...parsed.split(' ')].join('\n');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
parseScriptParts(type, parts) {
|
|
38
|
+
return parts.map((v, i) => {
|
|
39
|
+
let asmNode;
|
|
40
|
+
if (this.params.parseScriptAsm && Buffer.isBuffer(v)) {
|
|
41
|
+
const parsed = this.parseScriptAsm(type, v, i, parts.length);
|
|
42
|
+
asmNode = parsed ? this.node('asm', parsed) : undefined;
|
|
43
|
+
}
|
|
44
|
+
return this.node(i, this.params.parseScriptData ? v : undefined, asmNode ? [asmNode] : undefined);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
parseInputScript(buffer) {
|
|
48
|
+
var _a;
|
|
49
|
+
let value;
|
|
50
|
+
let nodes;
|
|
51
|
+
if (buffer.length && this.params.parseSignatureData) {
|
|
52
|
+
const type = (_a = utxolib.classify.input(buffer, true)) !== null && _a !== void 0 ? _a : 'unknown';
|
|
53
|
+
const decompiled = utxolib.script.decompile(buffer);
|
|
54
|
+
if (decompiled) {
|
|
55
|
+
nodes = this.parseScriptParts(type, decompiled);
|
|
56
|
+
}
|
|
57
|
+
value = type;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
value = buffer;
|
|
61
|
+
}
|
|
62
|
+
return this.node('scriptSig', value, nodes);
|
|
63
|
+
}
|
|
64
|
+
parseWitness(script) {
|
|
65
|
+
var _a;
|
|
66
|
+
if (script.length === 0) {
|
|
67
|
+
return this.node('witness', '[]');
|
|
68
|
+
}
|
|
69
|
+
const type = (_a = utxolib.classify.witness(script, true)) !== null && _a !== void 0 ? _a : 'unknown';
|
|
70
|
+
return this.node('witness', type, this.params.parseScriptData ? this.parseScriptParts(type, script) : undefined);
|
|
71
|
+
}
|
|
72
|
+
parsePubkeys(parsed) {
|
|
73
|
+
return this.node('pubkeys', parsed.publicKeys.length, parsed.publicKeys.map((k, i) => this.node(i, k)));
|
|
74
|
+
}
|
|
75
|
+
parseSignatures(parsed, tx, inputIndex, prevOutputs) {
|
|
76
|
+
const nodes = [];
|
|
77
|
+
if (prevOutputs) {
|
|
78
|
+
const signedBy = utxolib.bitgo.verifySignatureWithPublicKeys(tx, inputIndex, prevOutputs, parsed.publicKeys);
|
|
79
|
+
nodes.push(this.node('signed by', `[${signedBy.flatMap((v, i) => (v ? [i] : [])).join(', ')}]`));
|
|
80
|
+
}
|
|
81
|
+
return this.node('signatures', parsed.signatures
|
|
82
|
+
.map((s) => utxolib.bitgo.isPlaceholderSignature(s) ? '[]' : Buffer.isBuffer(s) ? `[${s.length}byte]` : `[${s}]`)
|
|
83
|
+
.join(' '), nodes);
|
|
84
|
+
}
|
|
85
|
+
parseSigScriptWithType(tx, inputIndex, parsed, prevOutputs) {
|
|
86
|
+
var _a;
|
|
87
|
+
if (parsed.scriptType && utxolib.bitgo.outputScripts.isScriptType2Of3(parsed.scriptType)) {
|
|
88
|
+
return this.node('sigScript', parsed.scriptType, [
|
|
89
|
+
this.parsePubkeys(parsed),
|
|
90
|
+
this.parseSignatures(parsed, tx, inputIndex, prevOutputs),
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
if (parsed.scriptType === 'p2shP2wshHollow' || parsed.scriptType === 'p2shP2wpkhHollow') {
|
|
94
|
+
return this.node('sigScript', parsed.scriptType, [this.node('info', hollowSegwitSpend_1.getHollowSpendMessage())]);
|
|
95
|
+
}
|
|
96
|
+
return this.node('sigScript', (_a = parsed.scriptType) !== null && _a !== void 0 ? _a : 'unknown');
|
|
97
|
+
}
|
|
98
|
+
parseSigScript(tx, inputIndex, prevOutputs) {
|
|
99
|
+
try {
|
|
100
|
+
return this.parseSigScriptWithType(tx, inputIndex, parseSignatureScript(tx.ins[inputIndex], tx.network), prevOutputs);
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
return this.node('error', String(e));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
parsePrevOut(input, i, network, prevOutputs) {
|
|
107
|
+
if (!prevOutputs || !prevOutputs[i]) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const { script, value } = prevOutputs[i];
|
|
111
|
+
let address;
|
|
112
|
+
try {
|
|
113
|
+
address = utxolib.address.fromOutputScript(script, network);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
address = '(error)';
|
|
117
|
+
}
|
|
118
|
+
return [
|
|
119
|
+
this.node('value', value / 1e8),
|
|
120
|
+
this.node('pubScript', script, address ? [this.node('address', address)] : undefined),
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
parseInput(txid, tx, i, input, outputInfo) {
|
|
124
|
+
return this.node(i, utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(input)), [
|
|
125
|
+
this.node('sequence', toBufferUInt32BE(input.sequence)),
|
|
126
|
+
this.parseInputScript(input.script),
|
|
127
|
+
this.parseWitness(input.witness),
|
|
128
|
+
this.parseSigScript(tx, i, outputInfo.prevOutputs),
|
|
129
|
+
...this.parsePrevOut(input, i, tx.network, outputInfo.prevOutputs),
|
|
130
|
+
...this.parseSpend(txid, i, outputInfo.prevOutputSpends, { conflict: true }),
|
|
131
|
+
]);
|
|
132
|
+
}
|
|
133
|
+
parseSpend(txid, index, spends, params) {
|
|
134
|
+
if (!spends || !spends[index]) {
|
|
135
|
+
// no spend data available
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
const spend = spends[index];
|
|
139
|
+
if (spend.txid === undefined) {
|
|
140
|
+
return [this.node('spent', false)];
|
|
141
|
+
}
|
|
142
|
+
if (spend.txid === txid) {
|
|
143
|
+
// if input is spent by this transaction we don't display it
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
return [this.node('spent', `${spend.txid}:${spend.vin}`, params.conflict ? [this.node('conflict', true)] : [])];
|
|
147
|
+
}
|
|
148
|
+
parseOutput(txid, o, i, network, params) {
|
|
149
|
+
let address;
|
|
150
|
+
try {
|
|
151
|
+
address = utxolib.address.fromOutputScript(o.script, network);
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
// ignore
|
|
155
|
+
}
|
|
156
|
+
const addressParser = new AddressParser_1.AddressParser({ network, all: false, convert: false });
|
|
157
|
+
return this.node(i, address !== null && address !== void 0 ? address : '(no address)', [
|
|
158
|
+
this.node(`value`, format_1.formatSat(o.value)),
|
|
159
|
+
...(this.params.parseOutputScript || address === undefined ? addressParser.parseOutputScript(o.script) : []),
|
|
160
|
+
...this.parseSpend(txid, i, params.outputSpends, { conflict: false }),
|
|
161
|
+
]);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.InputOutputParser = InputOutputParser;
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRPdXRwdXRQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvSW5wdXRPdXRwdXRQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTJDO0FBRzNDLHFDQUE4QztBQUM5QyxtREFBZ0Q7QUFDaEQscUNBQXFDO0FBRXJDLDJEQUF1RztBQUV2RyxTQUFTLGdCQUFnQixDQUFDLENBQVM7SUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixLQUFzQixFQUN0QixPQUF3QjtJQUV4QixPQUFPLDBDQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFFRCxNQUFhLGlCQUFrQixTQUFRLGVBQU07SUFDM0MsWUFDVSxNQUtQO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFQQSxXQUFNLEdBQU4sTUFBTSxDQUtiO0lBR0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQzdELElBQ0UsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3hFO1lBQ0EsSUFBSSxNQUFNLENBQUM7WUFFWCxJQUFJO2dCQUNGLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDOUM7U0FDRjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsS0FBNkI7UUFDMUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksT0FBK0IsQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ3pEO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFjOztRQUM3QixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1DQUFJLFNBQVMsQ0FBQztZQUMvRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLFVBQVUsRUFBRTtnQkFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNqRDtZQUNELEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDthQUFNO1lBQ0wsS0FBSyxHQUFHLE1BQU0sQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBZ0I7O1FBQzNCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELE1BQU0sSUFBSSxHQUFHLE1BQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxtQ0FBSSxTQUFTLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBK0M7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FDYixNQUErQyxFQUMvQyxFQUFpQyxFQUNqQyxVQUFrQixFQUNsQixXQUFnQztRQUVoQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3RyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxZQUFZLEVBQ1osTUFBTSxDQUFDLFVBQVU7YUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNyRzthQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDWixLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FDcEIsRUFBaUMsRUFDakMsVUFBa0IsRUFDbEIsTUFBK0QsRUFDL0QsV0FBZ0M7O1FBRWhDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQWlELENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBaUQsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQzthQUNyRyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLGtCQUFrQixFQUFFO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHlDQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEc7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQUEsTUFBTSxDQUFDLFVBQVUsbUNBQUksU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFpQyxFQUFFLFVBQWtCLEVBQUUsV0FBZ0M7UUFDcEcsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxFQUFFLEVBQ0YsVUFBVSxFQUNWLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUNwRCxXQUFXLENBQ1osQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FDVixLQUFzQixFQUN0QixDQUFTLEVBQ1QsT0FBd0IsRUFDeEIsV0FBZ0M7UUFFaEMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJO1lBQ0YsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEdBQUcsU0FBUyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTztZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDdEYsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQ1IsSUFBWSxFQUNaLEVBQWlDLEVBQ2pDLENBQVMsRUFDVCxLQUFzQixFQUN0QixVQUFxQjtRQUVyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQ2xELEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUNsRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDN0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FDUixJQUFZLEVBQ1osS0FBYSxFQUNiLE1BQWlDLEVBQ2pDLE1BQTZCO1FBRTdCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsMEJBQTBCO1lBQzFCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDdkIsNERBQTREO1lBQzVELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFZLEVBQUUsQ0FBbUIsRUFBRSxDQUFTLEVBQUUsT0FBd0IsRUFBRSxNQUFpQjtRQUNuRyxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUk7WUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQy9EO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixTQUFTO1NBQ1Y7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVqRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLGNBQWMsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDNUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEvTUQsOENBK01DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgT3V0cHV0U3BlbmQgfSBmcm9tICdAYml0Z28vYmxvY2thcGlzJztcblxuaW1wb3J0IHsgUGFyc2VyLCBQYXJzZXJOb2RlIH0gZnJvbSAnLi9QYXJzZXInO1xuaW1wb3J0IHsgQWRkcmVzc1BhcnNlciB9IGZyb20gJy4vQWRkcmVzc1BhcnNlcic7XG5pbXBvcnQgeyBmb3JtYXRTYXQgfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQgeyBDaGFpbkluZm8gfSBmcm9tICcuL1R4UGFyc2VyJztcbmltcG9ydCB7IHBhcnNlSG9sbG93U2Vnd2l0U3BlbmQsIEhvbGxvd1NlZ3dpdFNwZW5kLCBnZXRIb2xsb3dTcGVuZE1lc3NhZ2UgfSBmcm9tICcuL2hvbGxvd1NlZ3dpdFNwZW5kJztcblxuZnVuY3Rpb24gdG9CdWZmZXJVSW50MzJCRShuOiBudW1iZXIpOiBCdWZmZXIge1xuICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1Zi53cml0ZVVJbnQzMkxFKG4sIDApO1xuICByZXR1cm4gYnVmO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdChcbiAgaW5wdXQ6IHV0eG9saWIuVHhJbnB1dCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLmJpdGdvLlBhcnNlZFNpZ25hdHVyZVNjcmlwdCB8IEhvbGxvd1NlZ3dpdFNwZW5kIHtcbiAgcmV0dXJuIHBhcnNlSG9sbG93U2Vnd2l0U3BlbmQoaW5wdXQsIG5ldHdvcmspIHx8IHV0eG9saWIuYml0Z28ucGFyc2VTaWduYXR1cmVTY3JpcHQoaW5wdXQpO1xufVxuXG5leHBvcnQgY2xhc3MgSW5wdXRPdXRwdXRQYXJzZXIgZXh0ZW5kcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBhcmFtczoge1xuICAgICAgcGFyc2VPdXRwdXRTY3JpcHQ6IGJvb2xlYW47XG4gICAgICBwYXJzZVNjcmlwdEFzbTogYm9vbGVhbjtcbiAgICAgIHBhcnNlU2NyaXB0RGF0YTogYm9vbGVhbjtcbiAgICAgIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwYXJzZVNjcmlwdEFzbSh0eXBlOiBzdHJpbmcsIHBhcnQ6IEJ1ZmZlciwgaTogbnVtYmVyLCBuOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChcbiAgICAgICh0eXBlID09PSAndGFwcm9vdCcgJiYgaSA9PT0gbiAtIDIpIHx8XG4gICAgICAoKHR5cGUgPT09ICdzY3JpcHRoYXNoJyB8fCB0eXBlID09PSAnd2l0bmVzc3NjcmlwdGhhc2gnKSAmJiBpID09PSBuIC0gMSlcbiAgICApIHtcbiAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IHV0eG9saWIuc2NyaXB0LnRvQVNNKHBhcnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICByZXR1cm4gWycnLCAuLi5wYXJzZWQuc3BsaXQoJyAnKV0uam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTY3JpcHRQYXJ0cyh0eXBlOiBzdHJpbmcsIHBhcnRzOiBBcnJheTxCdWZmZXIgfCBudW1iZXI+KTogUGFyc2VyTm9kZVtdIHtcbiAgICByZXR1cm4gcGFydHMubWFwKCh2LCBpKSA9PiB7XG4gICAgICBsZXQgYXNtTm9kZTogUGFyc2VyTm9kZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5wYXJzZVNjcmlwdEFzbSAmJiBCdWZmZXIuaXNCdWZmZXIodikpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVNjcmlwdEFzbSh0eXBlLCB2LCBpLCBwYXJ0cy5sZW5ndGgpO1xuICAgICAgICBhc21Ob2RlID0gcGFyc2VkID8gdGhpcy5ub2RlKCdhc20nLCBwYXJzZWQpIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ub2RlKGksIHRoaXMucGFyYW1zLnBhcnNlU2NyaXB0RGF0YSA/IHYgOiB1bmRlZmluZWQsIGFzbU5vZGUgPyBbYXNtTm9kZV0gOiB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VJbnB1dFNjcmlwdChidWZmZXI6IEJ1ZmZlcik6IFBhcnNlck5vZGUge1xuICAgIGxldCB2YWx1ZTtcbiAgICBsZXQgbm9kZXM7XG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggJiYgdGhpcy5wYXJhbXMucGFyc2VTaWduYXR1cmVEYXRhKSB7XG4gICAgICBjb25zdCB0eXBlID0gdXR4b2xpYi5jbGFzc2lmeS5pbnB1dChidWZmZXIsIHRydWUpID8/ICd1bmtub3duJztcbiAgICAgIGNvbnN0IGRlY29tcGlsZWQgPSB1dHhvbGliLnNjcmlwdC5kZWNvbXBpbGUoYnVmZmVyKTtcbiAgICAgIGlmIChkZWNvbXBpbGVkKSB7XG4gICAgICAgIG5vZGVzID0gdGhpcy5wYXJzZVNjcmlwdFBhcnRzKHR5cGUsIGRlY29tcGlsZWQpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlKCdzY3JpcHRTaWcnLCB2YWx1ZSwgbm9kZXMpO1xuICB9XG5cbiAgcGFyc2VXaXRuZXNzKHNjcmlwdDogQnVmZmVyW10pOiBQYXJzZXJOb2RlIHtcbiAgICBpZiAoc2NyaXB0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnd2l0bmVzcycsICdbXScpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdXR4b2xpYi5jbGFzc2lmeS53aXRuZXNzKHNjcmlwdCwgdHJ1ZSkgPz8gJ3Vua25vd24nO1xuICAgIHJldHVybiB0aGlzLm5vZGUoJ3dpdG5lc3MnLCB0eXBlLCB0aGlzLnBhcmFtcy5wYXJzZVNjcmlwdERhdGEgPyB0aGlzLnBhcnNlU2NyaXB0UGFydHModHlwZSwgc2NyaXB0KSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICBwYXJzZVB1YmtleXMocGFyc2VkOiB1dHhvbGliLmJpdGdvLlBhcnNlZFNpZ25hdHVyZVNjcmlwdDJPZjMpOiBQYXJzZXJOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlKFxuICAgICAgJ3B1YmtleXMnLFxuICAgICAgcGFyc2VkLnB1YmxpY0tleXMubGVuZ3RoLFxuICAgICAgcGFyc2VkLnB1YmxpY0tleXMubWFwKChrLCBpKSA9PiB0aGlzLm5vZGUoaSwgaykpXG4gICAgKTtcbiAgfVxuXG4gIHBhcnNlU2lnbmF0dXJlcyhcbiAgICBwYXJzZWQ6IHV0eG9saWIuYml0Z28uUGFyc2VkU2lnbmF0dXJlU2NyaXB0Mk9mMyxcbiAgICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24sXG4gICAgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHByZXZPdXRwdXRzPzogdXR4b2xpYi5UeE91dHB1dFtdXG4gICk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgaWYgKHByZXZPdXRwdXRzKSB7XG4gICAgICBjb25zdCBzaWduZWRCeSA9IHV0eG9saWIuYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXModHgsIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBwYXJzZWQucHVibGljS2V5cyk7XG4gICAgICBub2Rlcy5wdXNoKHRoaXMubm9kZSgnc2lnbmVkIGJ5JywgYFske3NpZ25lZEJ5LmZsYXRNYXAoKHYsIGkpID0+ICh2ID8gW2ldIDogW10pKS5qb2luKCcsICcpfV1gKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUoXG4gICAgICAnc2lnbmF0dXJlcycsXG4gICAgICBwYXJzZWQuc2lnbmF0dXJlc1xuICAgICAgICAubWFwKChzOiBCdWZmZXIgfCAwKSA9PlxuICAgICAgICAgIHV0eG9saWIuYml0Z28uaXNQbGFjZWhvbGRlclNpZ25hdHVyZShzKSA/ICdbXScgOiBCdWZmZXIuaXNCdWZmZXIocykgPyBgWyR7cy5sZW5ndGh9Ynl0ZV1gIDogYFske3N9XWBcbiAgICAgICAgKVxuICAgICAgICAuam9pbignICcpLFxuICAgICAgbm9kZXNcbiAgICApO1xuICB9XG5cbiAgcGFyc2VTaWdTY3JpcHRXaXRoVHlwZShcbiAgICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24sXG4gICAgaW5wdXRJbmRleDogbnVtYmVyLFxuICAgIHBhcnNlZDogdXR4b2xpYi5iaXRnby5QYXJzZWRTaWduYXR1cmVTY3JpcHQgfCBIb2xsb3dTZWd3aXRTcGVuZCxcbiAgICBwcmV2T3V0cHV0cz86IHV0eG9saWIuVHhPdXRwdXRbXVxuICApOiBQYXJzZXJOb2RlIHtcbiAgICBpZiAocGFyc2VkLnNjcmlwdFR5cGUgJiYgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU2NyaXB0VHlwZTJPZjMocGFyc2VkLnNjcmlwdFR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWdTY3JpcHQnLCBwYXJzZWQuc2NyaXB0VHlwZSwgW1xuICAgICAgICB0aGlzLnBhcnNlUHVia2V5cyhwYXJzZWQgYXMgdXR4b2xpYi5iaXRnby5QYXJzZWRTaWduYXR1cmVTY3JpcHQyT2YzKSxcbiAgICAgICAgdGhpcy5wYXJzZVNpZ25hdHVyZXMocGFyc2VkIGFzIHV0eG9saWIuYml0Z28uUGFyc2VkU2lnbmF0dXJlU2NyaXB0Mk9mMywgdHgsIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzKSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaEhvbGxvdycgfHwgcGFyc2VkLnNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3cGtoSG9sbG93Jykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZSgnc2lnU2NyaXB0JywgcGFyc2VkLnNjcmlwdFR5cGUsIFt0aGlzLm5vZGUoJ2luZm8nLCBnZXRIb2xsb3dTcGVuZE1lc3NhZ2UoKSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ub2RlKCdzaWdTY3JpcHQnLCBwYXJzZWQuc2NyaXB0VHlwZSA/PyAndW5rbm93bicpO1xuICB9XG5cbiAgcGFyc2VTaWdTY3JpcHQodHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uLCBpbnB1dEluZGV4OiBudW1iZXIsIHByZXZPdXRwdXRzPzogdXR4b2xpYi5UeE91dHB1dFtdKTogUGFyc2VyTm9kZSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlU2lnU2NyaXB0V2l0aFR5cGUoXG4gICAgICAgIHR4LFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBwYXJzZVNpZ25hdHVyZVNjcmlwdCh0eC5pbnNbaW5wdXRJbmRleF0sIHR4Lm5ldHdvcmspLFxuICAgICAgICBwcmV2T3V0cHV0c1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKCdlcnJvcicsIFN0cmluZyhlKSk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VQcmV2T3V0KFxuICAgIGlucHV0OiB1dHhvbGliLlR4SW5wdXQsXG4gICAgaTogbnVtYmVyLFxuICAgIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgICBwcmV2T3V0cHV0cz86IHV0eG9saWIuVHhPdXRwdXRbXVxuICApOiBQYXJzZXJOb2RlW10ge1xuICAgIGlmICghcHJldk91dHB1dHMgfHwgIXByZXZPdXRwdXRzW2ldKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHsgc2NyaXB0LCB2YWx1ZSB9ID0gcHJldk91dHB1dHNbaV07XG4gICAgbGV0IGFkZHJlc3M7XG4gICAgdHJ5IHtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHQsIG5ldHdvcmspO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFkZHJlc3MgPSAnKGVycm9yKSc7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLm5vZGUoJ3ZhbHVlJywgdmFsdWUgLyAxZTgpLFxuICAgICAgdGhpcy5ub2RlKCdwdWJTY3JpcHQnLCBzY3JpcHQsIGFkZHJlc3MgPyBbdGhpcy5ub2RlKCdhZGRyZXNzJywgYWRkcmVzcyldIDogdW5kZWZpbmVkKSxcbiAgICBdO1xuICB9XG5cbiAgcGFyc2VJbnB1dChcbiAgICB0eGlkOiBzdHJpbmcsXG4gICAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uLFxuICAgIGk6IG51bWJlcixcbiAgICBpbnB1dDogdXR4b2xpYi5UeElucHV0LFxuICAgIG91dHB1dEluZm86IENoYWluSW5mb1xuICApOiBQYXJzZXJOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlKGksIHV0eG9saWIuYml0Z28uZm9ybWF0T3V0cHV0SWQodXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KGlucHV0KSksIFtcbiAgICAgIHRoaXMubm9kZSgnc2VxdWVuY2UnLCB0b0J1ZmZlclVJbnQzMkJFKGlucHV0LnNlcXVlbmNlKSksXG4gICAgICB0aGlzLnBhcnNlSW5wdXRTY3JpcHQoaW5wdXQuc2NyaXB0KSxcbiAgICAgIHRoaXMucGFyc2VXaXRuZXNzKGlucHV0LndpdG5lc3MpLFxuICAgICAgdGhpcy5wYXJzZVNpZ1NjcmlwdCh0eCwgaSwgb3V0cHV0SW5mby5wcmV2T3V0cHV0cyksXG4gICAgICAuLi50aGlzLnBhcnNlUHJldk91dChpbnB1dCwgaSwgdHgubmV0d29yaywgb3V0cHV0SW5mby5wcmV2T3V0cHV0cyksXG4gICAgICAuLi50aGlzLnBhcnNlU3BlbmQodHhpZCwgaSwgb3V0cHV0SW5mby5wcmV2T3V0cHV0U3BlbmRzLCB7IGNvbmZsaWN0OiB0cnVlIH0pLFxuICAgIF0pO1xuICB9XG5cbiAgcGFyc2VTcGVuZChcbiAgICB0eGlkOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzcGVuZHM6IE91dHB1dFNwZW5kW10gfCB1bmRlZmluZWQsXG4gICAgcGFyYW1zOiB7IGNvbmZsaWN0OiBib29sZWFuIH1cbiAgKTogUGFyc2VyTm9kZVtdIHtcbiAgICBpZiAoIXNwZW5kcyB8fCAhc3BlbmRzW2luZGV4XSkge1xuICAgICAgLy8gbm8gc3BlbmQgZGF0YSBhdmFpbGFibGVcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc3BlbmQgPSBzcGVuZHNbaW5kZXhdO1xuICAgIGlmIChzcGVuZC50eGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbdGhpcy5ub2RlKCdzcGVudCcsIGZhbHNlKV07XG4gICAgfVxuICAgIGlmIChzcGVuZC50eGlkID09PSB0eGlkKSB7XG4gICAgICAvLyBpZiBpbnB1dCBpcyBzcGVudCBieSB0aGlzIHRyYW5zYWN0aW9uIHdlIGRvbid0IGRpc3BsYXkgaXRcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLm5vZGUoJ3NwZW50JywgYCR7c3BlbmQudHhpZH06JHtzcGVuZC52aW59YCwgcGFyYW1zLmNvbmZsaWN0ID8gW3RoaXMubm9kZSgnY29uZmxpY3QnLCB0cnVlKV0gOiBbXSldO1xuICB9XG5cbiAgcGFyc2VPdXRwdXQodHhpZDogc3RyaW5nLCBvOiB1dHhvbGliLlR4T3V0cHV0LCBpOiBudW1iZXIsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaywgcGFyYW1zOiBDaGFpbkluZm8pOiBQYXJzZXJOb2RlIHtcbiAgICBsZXQgYWRkcmVzcztcbiAgICB0cnkge1xuICAgICAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG8uc2NyaXB0LCBuZXR3b3JrKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzUGFyc2VyID0gbmV3IEFkZHJlc3NQYXJzZXIoeyBuZXR3b3JrLCBhbGw6IGZhbHNlLCBjb252ZXJ0OiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzLm5vZGUoaSwgYWRkcmVzcyA/PyAnKG5vIGFkZHJlc3MpJywgW1xuICAgICAgdGhpcy5ub2RlKGB2YWx1ZWAsIGZvcm1hdFNhdChvLnZhbHVlKSksXG4gICAgICAuLi4odGhpcy5wYXJhbXMucGFyc2VPdXRwdXRTY3JpcHQgfHwgYWRkcmVzcyA9PT0gdW5kZWZpbmVkID8gYWRkcmVzc1BhcnNlci5wYXJzZU91dHB1dFNjcmlwdChvLnNjcmlwdCkgOiBbXSksXG4gICAgICAuLi50aGlzLnBhcnNlU3BlbmQodHhpZCwgaSwgcGFyYW1zLm91dHB1dFNwZW5kcywgeyBjb25mbGljdDogZmFsc2UgfSksXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export declare type ParserNodeValue = number | string | Buffer | boolean | undefined | null;
|
|
3
|
+
export declare type ParserNode = {
|
|
4
|
+
type: 'node';
|
|
5
|
+
label: string;
|
|
6
|
+
value: ParserNodeValue | undefined;
|
|
7
|
+
nodes: ParserNode[] | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare class Parser {
|
|
10
|
+
node(label: string | number, value: ParserNodeValue, nodes?: ParserNode[]): ParserNode;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/Parser.ts"],"names":[],"mappings":";AAAA,oBAAY,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;AAEpF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,qBAAa,MAAM;IACjB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,GAAE,UAAU,EAAO,GAAG,UAAU;CAQ3F"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Parser = void 0;
|
|
4
|
+
class Parser {
|
|
5
|
+
node(label, value, nodes = []) {
|
|
6
|
+
return {
|
|
7
|
+
type: 'node',
|
|
8
|
+
label: String(label),
|
|
9
|
+
value,
|
|
10
|
+
nodes,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.Parser = Parser;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSxNQUFhLE1BQU07SUFDakIsSUFBSSxDQUFDLEtBQXNCLEVBQUUsS0FBc0IsRUFBRSxRQUFzQixFQUFFO1FBQzNFLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3BCLEtBQUs7WUFDTCxLQUFLO1NBQ04sQ0FBQztJQUNKLENBQUM7Q0FDRjtBQVRELHdCQVNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUGFyc2VyTm9kZVZhbHVlID0gbnVtYmVyIHwgc3RyaW5nIHwgQnVmZmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFBhcnNlck5vZGUgPSB7XG4gIHR5cGU6ICdub2RlJztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IFBhcnNlck5vZGVWYWx1ZSB8IHVuZGVmaW5lZDtcbiAgbm9kZXM6IFBhcnNlck5vZGVbXSB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuICBub2RlKGxhYmVsOiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBQYXJzZXJOb2RlVmFsdWUsIG5vZGVzOiBQYXJzZXJOb2RlW10gPSBbXSk6IFBhcnNlck5vZGUge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbm9kZScsXG4gICAgICBsYWJlbDogU3RyaW5nKGxhYmVsKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbm9kZXMsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { OutputSpend, TransactionStatus } from '@bitgo/blockapis';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
import { Parser, ParserNode } from './Parser';
|
|
4
|
+
export declare type TxParserArgs = {
|
|
5
|
+
parseScriptData: boolean;
|
|
6
|
+
parseScriptAsm: boolean;
|
|
7
|
+
parseOutputScript: boolean;
|
|
8
|
+
parseSignatureData: boolean;
|
|
9
|
+
hide?: string[];
|
|
10
|
+
maxOutputs?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare type ChainInfo = {
|
|
13
|
+
status?: TransactionStatus;
|
|
14
|
+
outputSpends?: OutputSpend[];
|
|
15
|
+
prevOutputs?: utxolib.TxOutput[];
|
|
16
|
+
prevOutputSpends?: OutputSpend[];
|
|
17
|
+
};
|
|
18
|
+
export declare class TxParser extends Parser {
|
|
19
|
+
private params;
|
|
20
|
+
static PARSE_ALL: TxParserArgs;
|
|
21
|
+
constructor(params: TxParserArgs);
|
|
22
|
+
parseIns(ins: utxolib.TxInput[], tx: utxolib.bitgo.UtxoTransaction, outputInfo: ChainInfo): ParserNode[];
|
|
23
|
+
parseOuts(outs: utxolib.TxOutput[], tx: utxolib.bitgo.UtxoTransaction, params: ChainInfo): ParserNode[];
|
|
24
|
+
parseStatus(tx: utxolib.bitgo.UtxoTransaction, status?: TransactionStatus): ParserNode[];
|
|
25
|
+
parseVersion(tx: utxolib.bitgo.UtxoTransaction): ParserNode;
|
|
26
|
+
parse(tx: utxolib.bitgo.UtxoTransaction, chainInfo?: ChainInfo): ParserNode;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=TxParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TxParser.d.ts","sourceRoot":"","sources":["../../src/TxParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAa9C,oBAAY,YAAY,GAAG;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC;CAClC,CAAC;AAEF,qBAAa,QAAS,SAAQ,MAAM;IAQtB,OAAO,CAAC,MAAM;IAP1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAK5B;gBAEkB,MAAM,EAAE,YAAY;IAIxC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,GAAG,UAAU,EAAE;IAMxG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU,EAAE;IAUvG,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,UAAU,EAAE;IAsBxF,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU;IAc3D,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,GAAE,SAAc,GAAG,UAAU;CAiChF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TxParser = void 0;
|
|
4
|
+
const utxolib = require("@bitgo/utxo-lib");
|
|
5
|
+
const Parser_1 = require("./Parser");
|
|
6
|
+
const format_1 = require("./format");
|
|
7
|
+
const InputOutputParser_1 = require("./InputOutputParser");
|
|
8
|
+
function formatConsensusBranchId(branchId) {
|
|
9
|
+
var _a;
|
|
10
|
+
const map = {
|
|
11
|
+
OVERWINTER_BRANCH_ID: 0x5ba81b19,
|
|
12
|
+
CANOPY_BRANCH_ID: 0xe9ff75a6,
|
|
13
|
+
NU5_BRANCH_ID: 0xc2d6d0b4,
|
|
14
|
+
};
|
|
15
|
+
return (_a = Object.keys(map).find((k) => map[k] === branchId)) !== null && _a !== void 0 ? _a : 'unknown';
|
|
16
|
+
}
|
|
17
|
+
class TxParser extends Parser_1.Parser {
|
|
18
|
+
constructor(params) {
|
|
19
|
+
super();
|
|
20
|
+
this.params = params;
|
|
21
|
+
}
|
|
22
|
+
parseIns(ins, tx, outputInfo) {
|
|
23
|
+
const txid = tx.getId();
|
|
24
|
+
const ioParser = new InputOutputParser_1.InputOutputParser(this.params);
|
|
25
|
+
return ins.map((input, i) => ioParser.parseInput(txid, tx, i, tx.ins[i], outputInfo));
|
|
26
|
+
}
|
|
27
|
+
parseOuts(outs, tx, params) {
|
|
28
|
+
var _a;
|
|
29
|
+
if (outs.length > ((_a = this.params.maxOutputs) !== null && _a !== void 0 ? _a : 200)) {
|
|
30
|
+
return [this.node('(omitted)', undefined)];
|
|
31
|
+
}
|
|
32
|
+
const txid = tx.getId();
|
|
33
|
+
const ioParser = new InputOutputParser_1.InputOutputParser(this.params);
|
|
34
|
+
return outs.map((o, i) => ioParser.parseOutput(txid, o, i, tx.network, params));
|
|
35
|
+
}
|
|
36
|
+
parseStatus(tx, status) {
|
|
37
|
+
if (!status) {
|
|
38
|
+
return [this.node('status', 'unknown')];
|
|
39
|
+
}
|
|
40
|
+
return [
|
|
41
|
+
this.node('status', status.found ? 'found' : 'not found', status.found
|
|
42
|
+
? status.confirmed
|
|
43
|
+
? [
|
|
44
|
+
this.node('confirmed', `block ${status.blockHeight}` + (status.date ? ` date=${status.date.toISOString()}` : '')),
|
|
45
|
+
]
|
|
46
|
+
: [this.node('confirmed', false)]
|
|
47
|
+
: []),
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
parseVersion(tx) {
|
|
51
|
+
return this.node('version', tx.version, tx instanceof utxolib.bitgo.ZcashTransaction
|
|
52
|
+
? [
|
|
53
|
+
this.node('consensusBranchId (inferred)', tx.consensusBranchId.toString(16), [
|
|
54
|
+
this.node('name', formatConsensusBranchId(tx.consensusBranchId)),
|
|
55
|
+
]),
|
|
56
|
+
]
|
|
57
|
+
: []);
|
|
58
|
+
}
|
|
59
|
+
parse(tx, chainInfo = {}) {
|
|
60
|
+
var _a;
|
|
61
|
+
const weight = tx.weight();
|
|
62
|
+
const vsize = tx.virtualSize();
|
|
63
|
+
const outputSum = tx.outs.reduce((sum, o) => sum + o.value, 0);
|
|
64
|
+
const inputSum = (_a = chainInfo.prevOutputs) === null || _a === void 0 ? void 0 : _a.reduce((sum, o) => sum + o.value, 0);
|
|
65
|
+
const fee = inputSum ? inputSum - outputSum : undefined;
|
|
66
|
+
const feeRate = fee ? fee / vsize : undefined;
|
|
67
|
+
return this.node('transaction', tx.getId(), [
|
|
68
|
+
this.node('parsedAs', `${utxolib.getNetworkName(utxolib.getMainnet(tx.network))} ` +
|
|
69
|
+
`${utxolib.isMainnet(tx.network) ? 'mainnet' : 'testnet'}`),
|
|
70
|
+
this.parseVersion(tx),
|
|
71
|
+
this.node('locktime', tx.locktime),
|
|
72
|
+
this.node('hasWitnesses', tx.hasWitnesses()),
|
|
73
|
+
...this.parseStatus(tx, chainInfo.status),
|
|
74
|
+
this.node('vsize', `${vsize}vbytes (${weight}wu)`),
|
|
75
|
+
...(fee && feeRate
|
|
76
|
+
? [this.node('fee [btc]', format_1.formatSat(fee)), this.node('feeRate [sat/vbyte]', feeRate.toFixed(2))]
|
|
77
|
+
: []),
|
|
78
|
+
this.node(`inputs`, [String(tx.ins.length)].concat(inputSum ? ['sum=' + format_1.formatSat(inputSum)] : []).join(' '), this.parseIns(tx.ins, tx, chainInfo)),
|
|
79
|
+
this.node(`outputs`, [String(tx.outs.length), 'sum=' + format_1.formatSat(outputSum)].join(' '), this.parseOuts(tx.outs, tx, chainInfo)),
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.TxParser = TxParser;
|
|
84
|
+
TxParser.PARSE_ALL = {
|
|
85
|
+
parseScriptData: true,
|
|
86
|
+
parseScriptAsm: true,
|
|
87
|
+
parseSignatureData: true,
|
|
88
|
+
parseOutputScript: true,
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHhQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvVHhQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQTJDO0FBQzNDLHFDQUE4QztBQUM5QyxxQ0FBcUM7QUFDckMsMkRBQXdEO0FBRXhELFNBQVMsdUJBQXVCLENBQUMsUUFBZ0I7O0lBQy9DLE1BQU0sR0FBRyxHQUEyQjtRQUNsQyxvQkFBb0IsRUFBRSxVQUFVO1FBQ2hDLGdCQUFnQixFQUFFLFVBQVU7UUFDNUIsYUFBYSxFQUFFLFVBQVU7S0FDMUIsQ0FBQztJQUNGLE9BQU8sTUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxtQ0FBSSxTQUFTLENBQUM7QUFDeEUsQ0FBQztBQWtCRCxNQUFhLFFBQVMsU0FBUSxlQUFNO0lBUWxDLFlBQW9CLE1BQW9CO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFUsV0FBTSxHQUFOLE1BQU0sQ0FBYztJQUV4QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQXNCLEVBQUUsRUFBaUMsRUFBRSxVQUFxQjtRQUN2RixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUF3QixFQUFF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Z0JBQ2hHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUNQLFFBQVEsRUFDUixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsa0JBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQ3JDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FDUCxTQUFTLEVBQ1QsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQUcsa0JBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FDdkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWhHSCw0QkFpR0M7QUFoR1Esa0JBQVMsR0FBaUI7SUFDL0IsZUFBZSxFQUFFLElBQUk7SUFDckIsY0FBYyxFQUFFLElBQUk7SUFDcEIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixpQkFBaUIsRUFBRSxJQUFJO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdXRwdXRTcGVuZCwgVHJhbnNhY3Rpb25TdGF0dXMgfSBmcm9tICdAYml0Z28vYmxvY2thcGlzJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcbmltcG9ydCB7IGZvcm1hdFNhdCB9IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7IElucHV0T3V0cHV0UGFyc2VyIH0gZnJvbSAnLi9JbnB1dE91dHB1dFBhcnNlcic7XG5cbmZ1bmN0aW9uIGZvcm1hdENvbnNlbnN1c0JyYW5jaElkKGJyYW5jaElkOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICAgT1ZFUldJTlRFUl9CUkFOQ0hfSUQ6IDB4NWJhODFiMTksXG4gICAgQ0FOT1BZX0JSQU5DSF9JRDogMHhlOWZmNzVhNixcbiAgICBOVTVfQlJBTkNIX0lEOiAweGMyZDZkMGI0LFxuICB9O1xuICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5maW5kKChrKSA9PiBtYXBba10gPT09IGJyYW5jaElkKSA/PyAndW5rbm93bic7XG59XG5cbmV4cG9ydCB0eXBlIFR4UGFyc2VyQXJncyA9IHtcbiAgcGFyc2VTY3JpcHREYXRhOiBib29sZWFuO1xuICBwYXJzZVNjcmlwdEFzbTogYm9vbGVhbjtcbiAgcGFyc2VPdXRwdXRTY3JpcHQ6IGJvb2xlYW47XG4gIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbiAgaGlkZT86IHN0cmluZ1tdO1xuICBtYXhPdXRwdXRzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhaW5JbmZvID0ge1xuICBzdGF0dXM/OiBUcmFuc2FjdGlvblN0YXR1cztcbiAgb3V0cHV0U3BlbmRzPzogT3V0cHV0U3BlbmRbXTtcbiAgcHJldk91dHB1dHM/OiB1dHhvbGliLlR4T3V0cHV0W107XG4gIHByZXZPdXRwdXRTcGVuZHM/OiBPdXRwdXRTcGVuZFtdO1xufTtcblxuZXhwb3J0IGNsYXNzIFR4UGFyc2VyIGV4dGVuZHMgUGFyc2VyIHtcbiAgc3RhdGljIFBBUlNFX0FMTDogVHhQYXJzZXJBcmdzID0ge1xuICAgIHBhcnNlU2NyaXB0RGF0YTogdHJ1ZSxcbiAgICBwYXJzZVNjcmlwdEFzbTogdHJ1ZSxcbiAgICBwYXJzZVNpZ25hdHVyZURhdGE6IHRydWUsXG4gICAgcGFyc2VPdXRwdXRTY3JpcHQ6IHRydWUsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJhbXM6IFR4UGFyc2VyQXJncykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwYXJzZUlucyhpbnM6IHV0eG9saWIuVHhJbnB1dFtdLCB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24sIG91dHB1dEluZm86IENoYWluSW5mbyk6IFBhcnNlck5vZGVbXSB7XG4gICAgY29uc3QgdHhpZCA9IHR4LmdldElkKCk7XG4gICAgY29uc3QgaW9QYXJzZXIgPSBuZXcgSW5wdXRPdXRwdXRQYXJzZXIodGhpcy5wYXJhbXMpO1xuICAgIHJldHVybiBpbnMubWFwKChpbnB1dCwgaSkgPT4gaW9QYXJzZXIucGFyc2VJbnB1dCh0eGlkLCB0eCwgaSwgdHguaW5zW2ldLCBvdXRwdXRJbmZvKSk7XG4gIH1cblxuICBwYXJzZU91dHMob3V0czogdXR4b2xpYi5UeE91dHB1dFtdLCB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24sIHBhcmFtczogQ2hhaW5JbmZvKTogUGFyc2VyTm9kZVtdIHtcbiAgICBpZiAob3V0cy5sZW5ndGggPiAodGhpcy5wYXJhbXMubWF4T3V0cHV0cyA/PyAyMDApKSB7XG4gICAgICByZXR1cm4gW3RoaXMubm9kZSgnKG9taXR0ZWQpJywgdW5kZWZpbmVkKV07XG4gICAgfVxuXG4gICAgY29uc3QgdHhpZCA9IHR4LmdldElkKCk7XG4gICAgY29uc3QgaW9QYXJzZXIgPSBuZXcgSW5wdXRPdXRwdXRQYXJzZXIodGhpcy5wYXJhbXMpO1xuICAgIHJldHVybiBvdXRzLm1hcCgobywgaSkgPT4gaW9QYXJzZXIucGFyc2VPdXRwdXQodHhpZCwgbywgaSwgdHgubmV0d29yaywgcGFyYW1zKSk7XG4gIH1cblxuICBwYXJzZVN0YXR1cyh0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24sIHN0YXR1cz86IFRyYW5zYWN0aW9uU3RhdHVzKTogUGFyc2VyTm9kZVtdIHtcbiAgICBpZiAoIXN0YXR1cykge1xuICAgICAgcmV0dXJuIFt0aGlzLm5vZGUoJ3N0YXR1cycsICd1bmtub3duJyldO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5ub2RlKFxuICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgc3RhdHVzLmZvdW5kID8gJ2ZvdW5kJyA6ICdub3QgZm91bmQnLFxuICAgICAgICBzdGF0dXMuZm91bmRcbiAgICAgICAgICA/IHN0YXR1cy5jb25maXJtZWRcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZShcbiAgICAgICAgICAgICAgICAgICdjb25maXJtZWQnLFxuICAgICAgICAgICAgICAgICAgYGJsb2NrICR7c3RhdHVzLmJsb2NrSGVpZ2h0fWAgKyAoc3RhdHVzLmRhdGUgPyBgIGRhdGU9JHtzdGF0dXMuZGF0ZS50b0lTT1N0cmluZygpfWAgOiAnJylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFt0aGlzLm5vZGUoJ2NvbmZpcm1lZCcsIGZhbHNlKV1cbiAgICAgICAgICA6IFtdXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBwYXJzZVZlcnNpb24odHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKTogUGFyc2VyTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZShcbiAgICAgICd2ZXJzaW9uJyxcbiAgICAgIHR4LnZlcnNpb24sXG4gICAgICB0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uWmNhc2hUcmFuc2FjdGlvblxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHRoaXMubm9kZSgnY29uc2Vuc3VzQnJhbmNoSWQgKGluZmVycmVkKScsIHR4LmNvbnNlbnN1c0JyYW5jaElkLnRvU3RyaW5nKDE2KSwgW1xuICAgICAgICAgICAgICB0aGlzLm5vZGUoJ25hbWUnLCBmb3JtYXRDb25zZW5zdXNCcmFuY2hJZCh0eC5jb25zZW5zdXNCcmFuY2hJZCkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdXG4gICAgKTtcbiAgfVxuXG4gIHBhcnNlKHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbiwgY2hhaW5JbmZvOiBDaGFpbkluZm8gPSB7fSk6IFBhcnNlck5vZGUge1xuICAgIGNvbnN0IHdlaWdodCA9IHR4LndlaWdodCgpO1xuICAgIGNvbnN0IHZzaXplID0gdHgudmlydHVhbFNpemUoKTtcbiAgICBjb25zdCBvdXRwdXRTdW0gPSB0eC5vdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBvLnZhbHVlLCAwKTtcbiAgICBjb25zdCBpbnB1dFN1bSA9IGNoYWluSW5mby5wcmV2T3V0cHV0cz8ucmVkdWNlKChzdW0sIG8pID0+IHN1bSArIG8udmFsdWUsIDApO1xuICAgIGNvbnN0IGZlZSA9IGlucHV0U3VtID8gaW5wdXRTdW0gLSBvdXRwdXRTdW0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmVlUmF0ZSA9IGZlZSA/IGZlZSAvIHZzaXplIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLm5vZGUoJ3RyYW5zYWN0aW9uJywgdHguZ2V0SWQoKSwgW1xuICAgICAgdGhpcy5ub2RlKFxuICAgICAgICAncGFyc2VkQXMnLFxuICAgICAgICBgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKHV0eG9saWIuZ2V0TWFpbm5ldCh0eC5uZXR3b3JrKSl9IGAgK1xuICAgICAgICAgIGAke3V0eG9saWIuaXNNYWlubmV0KHR4Lm5ldHdvcmspID8gJ21haW5uZXQnIDogJ3Rlc3RuZXQnfWBcbiAgICAgICksXG4gICAgICB0aGlzLnBhcnNlVmVyc2lvbih0eCksXG4gICAgICB0aGlzLm5vZGUoJ2xvY2t0aW1lJywgdHgubG9ja3RpbWUpLFxuICAgICAgdGhpcy5ub2RlKCdoYXNXaXRuZXNzZXMnLCB0eC5oYXNXaXRuZXNzZXMoKSksXG4gICAgICAuLi50aGlzLnBhcnNlU3RhdHVzKHR4LCBjaGFpbkluZm8uc3RhdHVzKSxcbiAgICAgIHRoaXMubm9kZSgndnNpemUnLCBgJHt2c2l6ZX12Ynl0ZXMgKCR7d2VpZ2h0fXd1KWApLFxuICAgICAgLi4uKGZlZSAmJiBmZWVSYXRlXG4gICAgICAgID8gW3RoaXMubm9kZSgnZmVlIFtidGNdJywgZm9ybWF0U2F0KGZlZSkpLCB0aGlzLm5vZGUoJ2ZlZVJhdGUgW3NhdC92Ynl0ZV0nLCBmZWVSYXRlLnRvRml4ZWQoMikpXVxuICAgICAgICA6IFtdKSxcbiAgICAgIHRoaXMubm9kZShcbiAgICAgICAgYGlucHV0c2AsXG4gICAgICAgIFtTdHJpbmcodHguaW5zLmxlbmd0aCldLmNvbmNhdChpbnB1dFN1bSA/IFsnc3VtPScgKyBmb3JtYXRTYXQoaW5wdXRTdW0pXSA6IFtdKS5qb2luKCcgJyksXG4gICAgICAgIHRoaXMucGFyc2VJbnModHguaW5zLCB0eCwgY2hhaW5JbmZvKVxuICAgICAgKSxcbiAgICAgIHRoaXMubm9kZShcbiAgICAgICAgYG91dHB1dHNgLFxuICAgICAgICBbU3RyaW5nKHR4Lm91dHMubGVuZ3RoKSwgJ3N1bT0nICsgZm9ybWF0U2F0KG91dHB1dFN1bSldLmpvaW4oJyAnKSxcbiAgICAgICAgdGhpcy5wYXJzZU91dHModHgub3V0cywgdHgsIGNoYWluSW5mbylcbiAgICAgICksXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/commands.d.ts
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
1
|
import * as yargs from 'yargs';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { TxParser, TxParserArgs } from './TxParser';
|
|
3
|
+
import { AddressParser } from './AddressParser';
|
|
4
|
+
declare type OutputFormat = 'tree' | 'json';
|
|
5
|
+
declare type ArgsParseTransaction = {
|
|
4
6
|
network: string;
|
|
5
7
|
stdin: boolean;
|
|
6
8
|
path?: string;
|
|
7
9
|
txid?: string;
|
|
8
10
|
all: boolean;
|
|
9
|
-
|
|
11
|
+
cache: boolean;
|
|
12
|
+
format: OutputFormat;
|
|
10
13
|
fetchAll: boolean;
|
|
11
14
|
fetchStatus: boolean;
|
|
12
15
|
fetchInputs: boolean;
|
|
13
16
|
fetchSpends: boolean;
|
|
14
|
-
} &
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
} & TxParserArgs;
|
|
18
|
+
declare type ArgsParseAddress = {
|
|
19
|
+
network?: string;
|
|
20
|
+
all: boolean;
|
|
21
|
+
format: OutputFormat;
|
|
22
|
+
convert: boolean;
|
|
23
|
+
address: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function getTxParser(argv: yargs.Arguments<ArgsParseTransaction>): TxParser;
|
|
26
|
+
export declare function getAddressParser(argv: ArgsParseAddress): AddressParser;
|
|
27
|
+
export declare const cmdParseTx: {
|
|
28
|
+
readonly command: "parseTx [path]";
|
|
29
|
+
readonly aliases: readonly ["parse", "tx"];
|
|
30
|
+
readonly describe: "display transaction components in human-readable form";
|
|
31
|
+
readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseTransaction>;
|
|
32
|
+
readonly handler: (argv: yargs.Arguments<ArgsParseTransaction>) => Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
export declare const cmdParseAddress: {
|
|
35
|
+
readonly command: "parseAddress [address]";
|
|
36
|
+
readonly aliases: readonly ["address"];
|
|
37
|
+
readonly describe: "parse address";
|
|
38
|
+
readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseAddress>;
|
|
39
|
+
readonly handler: (argv: yargs.Arguments<ArgsParseAddress>) => void;
|
|
21
40
|
};
|
|
22
41
|
export {};
|
|
23
42
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,aAAK,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,aAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,YAAY,CAAC;AAEjB,aAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAyCF,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAEjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAEtE;AAED,eAAO,MAAM,UAAU;;;;0BAKV,MAAM,IAAI,CAAC,OAAO,CAAC,KAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;6BAoB7C,MAAM,SAAS,CAAC,oBAAoB,CAAC,KAAG,QAAQ,IAAI,CAAC;CAkDjE,CAAC;AAEX,eAAO,MAAM,eAAe;;;;0BAIf,MAAM,IAAI,CAAC,OAAO,CAAC,KAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC;6BAS/C,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,IAAI;CAI9C,CAAC"}
|