@bitgo/utxo-bin 1.0.0-rc.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2011-2017 bitcoinjs-lib contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # `utxo-bin`
2
+
3
+ This repository contains a CLI tool for parsing BitGo wallet transactions (withdrawals) and
4
+ formatting them for terminal output.
5
+
6
+ ## Sample Usage
7
+
8
+ ```
9
+ » jq -r '.transaction.hex' \
10
+ ../utxo-lib/test/integration_local_rpc/fixtures/testnet/v1/spend_p2shP2wsh.json |
11
+ yarn ts-node bin/index.ts parse -n bitcoin -
12
+
13
+ reading from stdin
14
+ transaction
15
+ ├── id: a7b64a92c6fb7e0c6ea0b95c0db8a3253347d22f76562df4dc187ed5d442767b
16
+ ├── version: 1
17
+ ├── hasWitnesses: true
18
+ ├─┬ inputs: 2
19
+ │ ├─┬ 0: 61268e441d4078474679c063d1c268b5098163410553329dac0c8069f51bba97:0
20
+ │ │ ├── script: 2200201553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
21
+ │ │ ├── witness: witnessscripthash
22
+ │ │ └─┬ signature: p2shP2wsh
23
+ │ │ └── buffers: 72 72
24
+ │ └─┬ 1: 1761eea952ede40e9f363134f8ee4fb72658f02c4fbb13c882bb2f020a9e512e:1
25
+ │ ├── script: 2200201553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
26
+ │ ├── witness: witnessscripthash
27
+ │ └─┬ signature: p2shP2wsh
28
+ │ └── buffers: 72 71
29
+ └─┬ outputs: 2
30
+ └─┬ 0: 34qSMWWEvrKnykAwMYLyjsKUfD976EjRJL
31
+ └── value: 1.99999
32
+ ```
33
+
34
+ With `--all`:
35
+
36
+ ```
37
+ » jq -r '.transaction.hex' \
38
+ ../utxo-lib/test/integration_local_rpc/fixtures/testnet/v1/spend_p2shP2wsh.json |
39
+ yarn ts-node bin/index.ts parse --all -n bitcoin -
40
+
41
+ reading from stdin
42
+ transaction
43
+ ├── id: a7b64a92c6fb7e0c6ea0b95c0db8a3253347d22f76562df4dc187ed5d442767b
44
+ ├── version: 1
45
+ ├── hasWitnesses: true
46
+ ├─┬ inputs: 2
47
+ │ ├─┬ 0: 61268e441d4078474679c063d1c268b5098163410553329dac0c8069f51bba97:0
48
+ │ │ ├─┬ script: scripthash
49
+ │ │ │ └─┬ 0: 00201553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
50
+ │ │ │ └── asm:
51
+ │ │ │ OP_0
52
+ │ │ │ 1553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
53
+ │ │ ├─┬ witness: witnessscripthash
54
+ │ │ │ ├── 0: []
55
+ │ │ │ ├── 1: 3045022100cb6125485a4e9e2d98dafde8074a29d43ef28ffdd34f0d7f8048423f1fd54c01022065798d67d21f18383db7c4e9532e497b1b54d7e9c3676a079d9502cd0663963c01
56
+ │ │ │ ├── 2: 3045022100c3a36135223671fac881d4a48f16b2698500887ac91530b4145000ba4950967902200737c216d2cc705b3d6d88d8443870be168c9bfad2525795ac14ec4ea3598ca801
57
+ │ │ │ └─┬ 3: 5221028fedaf75b5b08cddf3bf4631c658b68ee6766a8e999467a641d7cb7aaaecec972103316bc27d95b96418349afc6298c259bb999c6e8f39a7217787ad53602be7c1472102e21c29b4a7eeace9c7a8cefb568ca00c86ff9bf5e79e07e5442c29d4a0950d0453ae
58
+ │ │ │ └── asm:
59
+ │ │ │ OP_2
60
+ │ │ │ 028fedaf75b5b08cddf3bf4631c658b68ee6766a8e999467a641d7cb7aaaecec97
61
+ │ │ │ 03316bc27d95b96418349afc6298c259bb999c6e8f39a7217787ad53602be7c147
62
+ │ │ │ 02e21c29b4a7eeace9c7a8cefb568ca00c86ff9bf5e79e07e5442c29d4a0950d04
63
+ │ │ │ OP_3
64
+ │ │ │ OP_CHECKMULTISIG
65
+ │ │ └─┬ signature: p2shP2wsh
66
+ │ │ ├── 0: 3045022100cb6125485a4e9e2d98dafde8074a29d43ef28ffdd34f0d7f8048423f1fd54c01022065798d67d21f18383db7c4e9532e497b1b54d7e9c3676a079d9502cd0663963c01
67
+ │ │ └── 1: 3045022100c3a36135223671fac881d4a48f16b2698500887ac91530b4145000ba4950967902200737c216d2cc705b3d6d88d8443870be168c9bfad2525795ac14ec4ea3598ca801
68
+ │ └─┬ 1: 1761eea952ede40e9f363134f8ee4fb72658f02c4fbb13c882bb2f020a9e512e:1
69
+ │ ├─┬ script: scripthash
70
+ │ │ └─┬ 0: 00201553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
71
+ │ │ └── asm:
72
+ │ │ OP_0
73
+ │ │ 1553f31a3e25e770b7bc857b82909e83734dbfe4bcdb5a5e6fc419b6920c398a
74
+ │ ├─┬ witness: witnessscripthash
75
+ │ │ ├── 0: []
76
+ │ │ ├── 1: 3045022100f0279fa27d0f85c4c3ee7ea3104963bd88ec02f62f23ae0b73d122293e58c7b8022024b8c9dca8d9d77bda69da70282a45422c2baf0d4a05ecbe57a48b65f92d950d01
77
+ │ │ ├── 2: 304402203bb213db0b4842ea5f8c1b9290c8b42dbe65f72bee29e4ad7e8d57e5f16390010220347df34c34a4df5fabe8571c7168c8111df7275a56672126f434bdc44fea6c5901
78
+ │ │ └─┬ 3: 5221028fedaf75b5b08cddf3bf4631c658b68ee6766a8e999467a641d7cb7aaaecec972103316bc27d95b96418349afc6298c259bb999c6e8f39a7217787ad53602be7c1472102e21c29b4a7eeace9c7a8cefb568ca00c86ff9bf5e79e07e5442c29d4a0950d0453ae
79
+ │ │ └── asm:
80
+ │ │ OP_2
81
+ │ │ 028fedaf75b5b08cddf3bf4631c658b68ee6766a8e999467a641d7cb7aaaecec97
82
+ │ │ 03316bc27d95b96418349afc6298c259bb999c6e8f39a7217787ad53602be7c147
83
+ │ │ 02e21c29b4a7eeace9c7a8cefb568ca00c86ff9bf5e79e07e5442c29d4a0950d04
84
+ │ │ OP_3
85
+ │ │ OP_CHECKMULTISIG
86
+ │ └─┬ signature: p2shP2wsh
87
+ │ ├── 0: 3045022100f0279fa27d0f85c4c3ee7ea3104963bd88ec02f62f23ae0b73d122293e58c7b8022024b8c9dca8d9d77bda69da70282a45422c2baf0d4a05ecbe57a48b65f92d950d01
88
+ │ └── 1: 304402203bb213db0b4842ea5f8c1b9290c8b42dbe65f72bee29e4ad7e8d57e5f16390010220347df34c34a4df5fabe8571c7168c8111df7275a56672126f434bdc44fea6c5901
89
+ └─┬ outputs: 2
90
+ └─┬ 0: 34qSMWWEvrKnykAwMYLyjsKUfD976EjRJL
91
+ └── value: 1.99999
92
+ ```
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../bin/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const yargs = require("yargs");
5
+ const commands_1 = require("../src/commands");
6
+ yargs.command(commands_1.cmdParse).help().parse();
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQStCO0FBQy9CLDhDQUEyQztBQUMzQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGNtZFBhcnNlIH0gZnJvbSAnLi4vc3JjL2NvbW1hbmRzJztcbnlhcmdzLmNvbW1hbmQoY21kUGFyc2UpLmhlbHAoKS5wYXJzZSgpO1xuIl19
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@bitgo/utxo-bin",
3
+ "description": "Command-line utility for BitGo UTXO transactions",
4
+ "version": "1.0.0-rc.0",
5
+ "files": [
6
+ "dist/**/*"
7
+ ],
8
+ "keywords": [
9
+ "bitgo",
10
+ "utxo",
11
+ "bitcoinjs",
12
+ "bitcoin"
13
+ ],
14
+ "scripts": {
15
+ "prepare": "npm run build",
16
+ "build": "tsc",
17
+ "lint": "eslint --quiet .",
18
+ "unit-test": "mocha",
19
+ "fmt": "prettier --write '{bin,src,test}/**/*.{ts,js}'"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/BitGo/BitGoJS.git",
24
+ "directory": "modules/utxo-bin"
25
+ },
26
+ "bin": "./dist/bin/index.js",
27
+ "dependencies": {
28
+ "@bitgo/utxo-lib": "^2.2.1-rc.10",
29
+ "archy": "^1.0.0",
30
+ "chalk": "4",
31
+ "yargs": "^17.3.1"
32
+ },
33
+ "devDependencies": {
34
+ "@types/archy": "^0.0.32",
35
+ "@types/mocha": "^9.0.0",
36
+ "@types/yargs": "^17.0.8",
37
+ "mocha": "^9.1.4",
38
+ "ts-node": "^10.4.0",
39
+ "typescript": "^4.5.4"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "license": "MIT",
45
+ "gitHead": "cc820eca80da39bf567f218143d7972b632bb937"
46
+ }
@@ -0,0 +1,17 @@
1
+ import * as yargs from 'yargs';
2
+ import { Parser, ParserArgs } from './parse';
3
+ declare type Args = {
4
+ network: string;
5
+ path: string;
6
+ all: boolean;
7
+ format: 'tree' | 'json';
8
+ } & ParserArgs;
9
+ export declare function getParser(argv: yargs.Arguments<Args>): Parser;
10
+ export declare const cmdParse: {
11
+ command: string;
12
+ describe: string;
13
+ builder(b: yargs.Argv<unknown>): yargs.Argv<Args>;
14
+ handler(argv: yargs.Arguments<Args>): Promise<void>;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG7C,aAAK,IAAI,GAAG;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,GAAG,UAAU,CAAC;AAEf,wBAAgB,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAE7D;AAED,eAAO,MAAM,QAAQ;;;eAIR,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;kBAW7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC;CAyB1D,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cmdParse = exports.getParser = void 0;
4
+ const fs = require("fs");
5
+ const process = require("process");
6
+ const utxolib = require("@bitgo/utxo-lib");
7
+ const parse_1 = require("./parse");
8
+ const format_1 = require("./format");
9
+ function getParser(argv) {
10
+ return new parse_1.Parser(argv.all ? parse_1.Parser.PARSE_ALL : argv);
11
+ }
12
+ exports.getParser = getParser;
13
+ exports.cmdParse = {
14
+ command: 'parse <path>',
15
+ describe: 'display transaction components in human-readable form',
16
+ builder(b) {
17
+ return b
18
+ .option('path', { type: 'string', default: '-' })
19
+ .option('network', { alias: 'n', type: 'string', demandOption: true })
20
+ .option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
21
+ .option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
22
+ .option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
23
+ .option('all', { type: 'boolean', default: false })
24
+ .option('format', { choices: ['tree', 'json'], default: 'tree' });
25
+ },
26
+ async handler(argv) {
27
+ let data;
28
+ const network = utxolib.networks[argv.network];
29
+ if (!network) {
30
+ throw new Error(`invalid network ${network}`);
31
+ }
32
+ if (argv.path === undefined || argv.path === '' || argv.path === '-') {
33
+ console.log('reading from stdin');
34
+ data = fs.readFileSync(process.stdin.fd, 'utf8');
35
+ }
36
+ else {
37
+ data = (await fs.promises.readFile(argv.path, 'utf8')).toString();
38
+ }
39
+ data = data.replace(/\s*/g, '');
40
+ const tx = utxolib.bitgo.createTransactionFromHex(data, network);
41
+ const parsed = getParser(argv).parse(tx);
42
+ switch (argv.format) {
43
+ case 'json':
44
+ console.log(JSON.stringify(parsed, null, 2));
45
+ break;
46
+ case 'tree':
47
+ console.log((0, format_1.formatTree)(parsed));
48
+ break;
49
+ }
50
+ },
51
+ };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUVuQywyQ0FBMkM7QUFFM0MsbUNBQTZDO0FBQzdDLHFDQUFzQztBQVN0QyxTQUFnQixTQUFTLENBQUMsSUFBMkI7SUFDbkQsT0FBTyxJQUFJLGNBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsOEJBRUM7QUFFWSxRQUFBLFFBQVEsR0FBRztJQUN0QixPQUFPLEVBQUUsY0FBYztJQUN2QixRQUFRLEVBQUUsdURBQXVEO0lBRWpFLE9BQU8sQ0FBQyxDQUFzQjtRQUM1QixPQUFPLENBQUM7YUFDTCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDaEQsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDckUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNqRixNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ25GLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDbkYsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBVyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBMkI7UUFDdkMsSUFBSSxJQUFJLENBQUM7UUFDVCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUE4QixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsRDthQUFNO1lBQ0wsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbkU7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFaEMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxNQUFNO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLG1CQUFVLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyQXJncyB9IGZyb20gJy4vcGFyc2UnO1xuaW1wb3J0IHsgZm9ybWF0VHJlZSB9IGZyb20gJy4vZm9ybWF0JztcblxudHlwZSBBcmdzID0ge1xuICBuZXR3b3JrOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgYWxsOiBib29sZWFuO1xuICBmb3JtYXQ6ICd0cmVlJyB8ICdqc29uJztcbn0gJiBQYXJzZXJBcmdzO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyc2VyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzPik6IFBhcnNlciB7XG4gIHJldHVybiBuZXcgUGFyc2VyKGFyZ3YuYWxsID8gUGFyc2VyLlBBUlNFX0FMTCA6IGFyZ3YpO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2UgPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZSA8cGF0aD4nLFxuICBkZXNjcmliZTogJ2Rpc3BsYXkgdHJhbnNhY3Rpb24gY29tcG9uZW50cyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtJyxcblxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pOiB5YXJncy5Bcmd2PEFyZ3M+IHtcbiAgICByZXR1cm4gYlxuICAgICAgLm9wdGlvbigncGF0aCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICctJyB9KVxuICAgICAgLm9wdGlvbignbmV0d29yaycsIHsgYWxpYXM6ICduJywgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdCk7XG4gIH0sXG5cbiAgYXN5bmMgaGFuZGxlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZGF0YTtcbiAgICBjb25zdCBuZXR3b3JrID0gdXR4b2xpYi5uZXR3b3Jrc1thcmd2Lm5ldHdvcmsgYXMgdXR4b2xpYi5OZXR3b3JrTmFtZV07XG4gICAgaWYgKCFuZXR3b3JrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbmV0d29yayAke25ldHdvcmt9YCk7XG4gICAgfVxuICAgIGlmIChhcmd2LnBhdGggPT09IHVuZGVmaW5lZCB8fCBhcmd2LnBhdGggPT09ICcnIHx8IGFyZ3YucGF0aCA9PT0gJy0nKSB7XG4gICAgICBjb25zb2xlLmxvZygncmVhZGluZyBmcm9tIHN0ZGluJyk7XG4gICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHByb2Nlc3Muc3RkaW4uZmQsICd1dGY4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSAoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoYXJndi5wYXRoLCAndXRmOCcpKS50b1N0cmluZygpO1xuICAgIH1cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9cXHMqL2csICcnKTtcblxuICAgIGNvbnN0IHR4ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXgoZGF0YSwgbmV0d29yayk7XG4gICAgY29uc3QgcGFyc2VkID0gZ2V0UGFyc2VyKGFyZ3YpLnBhcnNlKHR4KTtcbiAgICBzd2l0Y2ggKGFyZ3YuZm9ybWF0KSB7XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCAyKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndHJlZSc6XG4gICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFRyZWUocGFyc2VkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcbn07XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { Chalk } from 'chalk';
2
+ import { TxNode } from './parse';
3
+ export declare function formatTree(n: TxNode, chalk?: Chalk): string;
4
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAe,MAAM,SAAS,CAAC;AAE9C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,KAAsB,GAAG,MAAM,CAoC3E"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTree = void 0;
4
+ const chalk_1 = require("chalk");
5
+ const archy = require("archy");
6
+ function formatTree(n, chalk = new chalk_1.Instance()) {
7
+ function getLabel(label, v) {
8
+ const arr = [chalk.bold(label)];
9
+ if (v !== undefined) {
10
+ arr.push(String(v));
11
+ }
12
+ return arr.join(': ');
13
+ }
14
+ function getLabelFromValue(v) {
15
+ switch (typeof v) {
16
+ case 'undefined':
17
+ return undefined;
18
+ case 'boolean':
19
+ case 'number':
20
+ case 'string':
21
+ return String(v);
22
+ case 'object':
23
+ if (v === null) {
24
+ return String(v);
25
+ }
26
+ if (Buffer.isBuffer(v)) {
27
+ return v.length === 0 ? '[]' : v.toString('hex');
28
+ }
29
+ }
30
+ throw new Error(`could not get lavel from value`);
31
+ }
32
+ function toArchy(n) {
33
+ return {
34
+ label: getLabel(n.label, getLabelFromValue(n.value)),
35
+ nodes: n.nodes ? n.nodes.map((e) => toArchy(e)) : undefined,
36
+ };
37
+ }
38
+ return archy(toArchy(n));
39
+ }
40
+ exports.formatTree = formatTree;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBd0M7QUFDeEMsK0JBQStCO0FBRy9CLFNBQWdCLFVBQVUsQ0FBQyxDQUFTLEVBQUUsUUFBZSxJQUFJLGdCQUFRLEVBQUU7SUFDakUsU0FBUyxRQUFRLENBQUMsS0FBc0IsRUFBRSxDQUFXO1FBQ25ELE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLGlCQUFpQixDQUFDLENBQWM7UUFDdkMsUUFBUSxPQUFPLENBQUMsRUFBRTtZQUNoQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNkLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEQ7U0FDSjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsU0FBUyxPQUFPLENBQUMsQ0FBUztRQUN4QixPQUFPO1lBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzVELENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQXBDRCxnQ0FvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFsaywgSW5zdGFuY2UgfSBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBhcmNoeSBmcm9tICdhcmNoeSc7XG5pbXBvcnQgeyBUeE5vZGUsIFR4Tm9kZVZhbHVlIH0gZnJvbSAnLi9wYXJzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUcmVlKG46IFR4Tm9kZSwgY2hhbGs6IENoYWxrID0gbmV3IEluc3RhbmNlKCkpOiBzdHJpbmcge1xuICBmdW5jdGlvbiBnZXRMYWJlbChsYWJlbDogc3RyaW5nIHwgbnVtYmVyLCB2PzogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgYXJyID0gW2NoYWxrLmJvbGQobGFiZWwpXTtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcnIucHVzaChTdHJpbmcodikpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyLmpvaW4oJzogJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMYWJlbEZyb21WYWx1ZSh2OiBUeE5vZGVWYWx1ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICAgIHJldHVybiB2Lmxlbmd0aCA9PT0gMCA/ICdbXScgOiB2LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBnZXQgbGF2ZWwgZnJvbSB2YWx1ZWApO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9BcmNoeShuOiBUeE5vZGUpOiBhcmNoeS5EYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGdldExhYmVsKG4ubGFiZWwsIGdldExhYmVsRnJvbVZhbHVlKG4udmFsdWUpKSxcbiAgICAgIG5vZGVzOiBuLm5vZGVzID8gbi5ub2Rlcy5tYXAoKGUpID0+IHRvQXJjaHkoZSkpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gYXJjaHkodG9BcmNoeShuKSk7XG59XG4iXX0=
@@ -0,0 +1,32 @@
1
+ /// <reference types="node" />
2
+ import * as utxolib from '@bitgo/utxo-lib';
3
+ export declare type InputFormat = 'asm' | 'parseSignature';
4
+ export declare type TxNodeValue = number | string | Buffer | boolean | undefined | null;
5
+ export declare type TxNode = {
6
+ type: 'node';
7
+ label: string;
8
+ value: TxNodeValue | undefined;
9
+ nodes: TxNode[] | undefined;
10
+ };
11
+ export declare type ParserArgs = {
12
+ parseScriptData: boolean;
13
+ parseScriptAsm: boolean;
14
+ parseSignatureData: boolean;
15
+ hide?: string[];
16
+ };
17
+ export declare class Parser {
18
+ private params;
19
+ static PARSE_ALL: ParserArgs;
20
+ constructor(params: ParserArgs);
21
+ node(label: string | number, value: TxNodeValue, nodes?: TxNode[]): TxNode;
22
+ parseScriptAsm(type: string, part: Buffer, i: number, n: number): string | undefined;
23
+ parseScriptParts(type: string, parts: Array<Buffer | number>): TxNode[];
24
+ parseScript(buffer: Buffer): TxNode;
25
+ parseWitness(script: Buffer[]): TxNode;
26
+ parseSignatureContent(signatures: (Buffer | 0)[]): TxNode[];
27
+ parseSignature(input: utxolib.TxInput): TxNode;
28
+ parseIns(ins: utxolib.TxInput[]): TxNode[];
29
+ parseOuts(outs: utxolib.TxOutput[], network: utxolib.Network): TxNode[];
30
+ parse(tx: utxolib.bitgo.UtxoTransaction): TxNode;
31
+ }
32
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/parse.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,oBAAY,WAAW,GAAG,KAAK,GAAG,gBAAgB,CAAC;AAEnD,oBAAY,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;AAEhF,oBAAY,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAUF,qBAAa,MAAM;IAQL,OAAO,CAAC,MAAM;IAP1B,MAAM,CAAC,SAAS,EAAE,UAAU,CAK1B;gBAEkB,MAAM,EAAE,UAAU;IAEtC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM;IAS9E,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,MAAM,EAAE;IAYvE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAiBnC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAQtC,qBAAqB,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE;IA0B3D,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM;IAgB9C,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE;IAW1C,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE;IAMvE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM;CAejD"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Parser = void 0;
4
+ const utxolib = require("@bitgo/utxo-lib");
5
+ function toBufferUInt32BE(n) {
6
+ const buf = Buffer.alloc(4);
7
+ buf.writeUInt32LE(n);
8
+ return buf;
9
+ }
10
+ const hideDefault = ['sequence', 'locktime'];
11
+ class Parser {
12
+ constructor(params) {
13
+ this.params = params;
14
+ }
15
+ node(label, value, nodes = []) {
16
+ return {
17
+ type: 'node',
18
+ label: String(label),
19
+ value,
20
+ nodes: nodes.filter((n) => { var _a; return !((_a = this.params.hide) !== null && _a !== void 0 ? _a : hideDefault).includes(n.label); }),
21
+ };
22
+ }
23
+ parseScriptAsm(type, part, i, n) {
24
+ if ((type === 'taproot' && i === n - 2) ||
25
+ ((type === 'scripthash' || type === 'witnessscripthash') && i === n - 1)) {
26
+ let parsed;
27
+ try {
28
+ parsed = utxolib.script.toASM(part);
29
+ }
30
+ catch (e) {
31
+ return 'error';
32
+ }
33
+ if (parsed) {
34
+ return ['', ...parsed.split(' ')].join('\n');
35
+ }
36
+ }
37
+ }
38
+ parseScriptParts(type, parts) {
39
+ return parts.map((v, i) => {
40
+ let asmNode;
41
+ if (this.params.parseScriptAsm && Buffer.isBuffer(v)) {
42
+ const parsed = this.parseScriptAsm(type, v, i, parts.length);
43
+ asmNode = parsed ? this.node('asm', parsed) : undefined;
44
+ }
45
+ return this.node(i, this.params.parseScriptData ? v : undefined, asmNode ? [asmNode] : undefined);
46
+ });
47
+ }
48
+ parseScript(buffer) {
49
+ var _a;
50
+ let value;
51
+ let nodes;
52
+ if (buffer.length && this.params.parseSignatureData) {
53
+ const type = (_a = utxolib.classify.input(buffer, true)) !== null && _a !== void 0 ? _a : 'unknown';
54
+ const decompiled = utxolib.script.decompile(buffer);
55
+ if (decompiled) {
56
+ nodes = this.parseScriptParts(type, decompiled);
57
+ }
58
+ value = type;
59
+ }
60
+ else {
61
+ value = buffer;
62
+ }
63
+ return this.node('script', value, nodes);
64
+ }
65
+ parseWitness(script) {
66
+ var _a;
67
+ if (script.length === 0) {
68
+ return this.node('witness', '[]');
69
+ }
70
+ const type = (_a = utxolib.classify.witness(script, true)) !== null && _a !== void 0 ? _a : 'unknown';
71
+ return this.node('witness', type, this.params.parseScriptData ? this.parseScriptParts(type, script) : undefined);
72
+ }
73
+ parseSignatureContent(signatures) {
74
+ if (this.params.parseSignatureData) {
75
+ return signatures.map((sig, i) => this.node(i, Buffer.isBuffer(sig)
76
+ ? sig.toString('hex')
77
+ : utxolib.bitgo.isPlaceholderSignature(sig)
78
+ ? sig + ' (placeholder)'
79
+ : sig));
80
+ }
81
+ return [
82
+ this.node('buffers', signatures
83
+ .map((sig) => Buffer.isBuffer(sig) ? `${sig.length}` : utxolib.bitgo.isPlaceholderSignature(sig) ? '(placeholder)' : sig)
84
+ .join(' ')),
85
+ ];
86
+ }
87
+ parseSignature(input) {
88
+ var _a;
89
+ const parsed = utxolib.bitgo.parseSignatureScript(input);
90
+ let nodes;
91
+ switch (parsed.scriptType) {
92
+ case undefined:
93
+ break;
94
+ case 'p2sh':
95
+ case 'p2shP2wsh':
96
+ case 'p2wsh':
97
+ case 'p2tr':
98
+ nodes = this.parseSignatureContent(parsed.signatures);
99
+ break;
100
+ }
101
+ return this.node('signature', (_a = parsed.scriptType) !== null && _a !== void 0 ? _a : 'unknown', nodes);
102
+ }
103
+ parseIns(ins) {
104
+ return ins.map((input, i) => {
105
+ return this.node(i, utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(input)), [
106
+ this.node('sequence', toBufferUInt32BE(input.sequence)),
107
+ this.parseScript(input.script),
108
+ this.parseWitness(input.witness),
109
+ this.parseSignature(input),
110
+ ]);
111
+ });
112
+ }
113
+ parseOuts(outs, network) {
114
+ return outs.map((o, i) => {
115
+ return this.node(i, utxolib.address.fromOutputScript(o.script, network), [this.node(`value`, o.value / 1e8)]);
116
+ });
117
+ }
118
+ parse(tx) {
119
+ return this.node('transaction', tx.getId(), [
120
+ this.node('parsedAs', `${utxolib.getNetworkName(utxolib.getMainnet(tx.network))} ` +
121
+ `${utxolib.isMainnet(tx.network) ? 'mainnet' : 'testnet'}`),
122
+ this.node('version', tx.version),
123
+ this.node('locktime', tx.locktime),
124
+ this.node('hasWitnesses', tx.hasWitnesses()),
125
+ this.node('vsize', `${tx.virtualSize()}vbytes (${tx.weight()}wu)`),
126
+ this.node(`inputs`, tx.ins.length, this.parseIns(tx.ins)),
127
+ this.node(`outputs`, tx.outs.length, this.parseOuts(tx.outs, tx.network)),
128
+ ]);
129
+ }
130
+ }
131
+ exports.Parser = Parser;
132
+ Parser.PARSE_ALL = {
133
+ parseScriptData: true,
134
+ parseScriptAsm: true,
135
+ parseSignatureData: true,
136
+ hide: [],
137
+ };
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQTJDO0FBb0IzQyxTQUFTLGdCQUFnQixDQUFDLENBQVM7SUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRTdDLE1BQWEsTUFBTTtJQVFqQixZQUFvQixNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBQUcsQ0FBQztJQUUxQyxJQUFJLENBQUMsS0FBc0IsRUFBRSxLQUFrQixFQUFFLFFBQWtCLEVBQUU7UUFDbkUsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSztZQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxtQ0FBSSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQztTQUNqRixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQzdELElBQ0UsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FB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QU8sQ0FBQyxDQUFDO1NBQzFFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBcEpILHdCQXFKQztBQXBKUSxnQkFBUyxHQUFlO0lBQzdCLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsSUFBSSxFQUFFLEVBQUU7Q0FDVCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5leHBvcnQgdHlwZSBJbnB1dEZvcm1hdCA9ICdhc20nIHwgJ3BhcnNlU2lnbmF0dXJlJztcblxuZXhwb3J0IHR5cGUgVHhOb2RlVmFsdWUgPSBudW1iZXIgfCBzdHJpbmcgfCBCdWZmZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVHhOb2RlID0ge1xuICB0eXBlOiAnbm9kZSc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBUeE5vZGVWYWx1ZSB8IHVuZGVmaW5lZDtcbiAgbm9kZXM6IFR4Tm9kZVtdIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VyQXJncyA9IHtcbiAgcGFyc2VTY3JpcHREYXRhOiBib29sZWFuO1xuICBwYXJzZVNjcmlwdEFzbTogYm9vbGVhbjtcbiAgcGFyc2VTaWduYXR1cmVEYXRhOiBib29sZWFuO1xuICBoaWRlPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiB0b0J1ZmZlclVJbnQzMkJFKG46IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmLndyaXRlVUludDMyTEUobik7XG4gIHJldHVybiBidWY7XG59XG5cbmNvbnN0IGhpZGVEZWZhdWx0ID0gWydzZXF1ZW5jZScsICdsb2NrdGltZSddO1xuXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcbiAgc3RhdGljIFBBUlNFX0FMTDogUGFyc2VyQXJncyA9IHtcbiAgICBwYXJzZVNjcmlwdERhdGE6IHRydWUsXG4gICAgcGFyc2VTY3JpcHRBc206IHRydWUsXG4gICAgcGFyc2VTaWduYXR1cmVEYXRhOiB0cnVlLFxuICAgIGhpZGU6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyYW1zOiBQYXJzZXJBcmdzKSB7fVxuXG4gIG5vZGUobGFiZWw6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IFR4Tm9kZVZhbHVlLCBub2RlczogVHhOb2RlW10gPSBbXSk6IFR4Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdub2RlJyxcbiAgICAgIGxhYmVsOiBTdHJpbmcobGFiZWwpLFxuICAgICAgdmFsdWUsXG4gICAgICBub2Rlczogbm9kZXMuZmlsdGVyKChuKSA9PiAhKHRoaXMucGFyYW1zLmhpZGUgPz8gaGlkZURlZmF1bHQpLmluY2x1ZGVzKG4ubGFiZWwpKSxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VTY3JpcHRBc20odHlwZTogc3RyaW5nLCBwYXJ0OiBCdWZmZXIsIGk6IG51bWJlciwgbjogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoXG4gICAgICAodHlwZSA9PT0gJ3RhcHJvb3QnICYmIGkgPT09IG4gLSAyKSB8fFxuICAgICAgKCh0eXBlID09PSAnc2NyaXB0aGFzaCcgfHwgdHlwZSA9PT0gJ3dpdG5lc3NzY3JpcHRoYXNoJykgJiYgaSA9PT0gbiAtIDEpXG4gICAgKSB7XG4gICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWQgPSB1dHhvbGliLnNjcmlwdC50b0FTTShwYXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIFsnJywgLi4ucGFyc2VkLnNwbGl0KCcgJyldLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlU2NyaXB0UGFydHModHlwZTogc3RyaW5nLCBwYXJ0czogQXJyYXk8QnVmZmVyIHwgbnVtYmVyPik6IFR4Tm9kZVtdIHtcbiAgICByZXR1cm4gcGFydHMubWFwKCh2LCBpKSA9PiB7XG4gICAgICBsZXQgYXNtTm9kZTogVHhOb2RlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMucGFyYW1zLnBhcnNlU2NyaXB0QXNtICYmIEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlU2NyaXB0QXNtKHR5cGUsIHYsIGksIHBhcnRzLmxlbmd0aCk7XG4gICAgICAgIGFzbU5vZGUgPSBwYXJzZWQgPyB0aGlzLm5vZGUoJ2FzbScsIHBhcnNlZCkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm5vZGUoaSwgdGhpcy5wYXJhbXMucGFyc2VTY3JpcHREYXRhID8gdiA6IHVuZGVmaW5lZCwgYXNtTm9kZSA/IFthc21Ob2RlXSA6IHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZVNjcmlwdChidWZmZXI6IEJ1ZmZlcik6IFR4Tm9kZSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGxldCBub2RlcztcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCAmJiB0aGlzLnBhcmFtcy5wYXJzZVNpZ25hdHVyZURhdGEpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB1dHhvbGliLmNsYXNzaWZ5LmlucHV0KGJ1ZmZlciwgdHJ1ZSkgPz8gJ3Vua25vd24nO1xuICAgICAgY29uc3QgZGVjb21waWxlZCA9IHV0eG9saWIuc2NyaXB0LmRlY29tcGlsZShidWZmZXIpO1xuICAgICAgaWYgKGRlY29tcGlsZWQpIHtcbiAgICAgICAgbm9kZXMgPSB0aGlzLnBhcnNlU2NyaXB0UGFydHModHlwZSwgZGVjb21waWxlZCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gYnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5vZGUoJ3NjcmlwdCcsIHZhbHVlLCBub2Rlcyk7XG4gIH1cblxuICBwYXJzZVdpdG5lc3Moc2NyaXB0OiBCdWZmZXJbXSk6IFR4Tm9kZSB7XG4gICAgaWYgKHNjcmlwdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoJ3dpdG5lc3MnLCAnW10nKTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHV0eG9saWIuY2xhc3NpZnkud2l0bmVzcyhzY3JpcHQsIHRydWUpID8/ICd1bmtub3duJztcbiAgICByZXR1cm4gdGhpcy5ub2RlKCd3aXRuZXNzJywgdHlwZSwgdGhpcy5wYXJhbXMucGFyc2VTY3JpcHREYXRhID8gdGhpcy5wYXJzZVNjcmlwdFBhcnRzKHR5cGUsIHNjcmlwdCkgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgcGFyc2VTaWduYXR1cmVDb250ZW50KHNpZ25hdHVyZXM6IChCdWZmZXIgfCAwKVtdKTogVHhOb2RlW10ge1xuICAgIGlmICh0aGlzLnBhcmFtcy5wYXJzZVNpZ25hdHVyZURhdGEpIHtcbiAgICAgIHJldHVybiBzaWduYXR1cmVzLm1hcCgoc2lnLCBpKSA9PlxuICAgICAgICB0aGlzLm5vZGUoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBCdWZmZXIuaXNCdWZmZXIoc2lnKVxuICAgICAgICAgICAgPyBzaWcudG9TdHJpbmcoJ2hleCcpXG4gICAgICAgICAgICA6IHV0eG9saWIuYml0Z28uaXNQbGFjZWhvbGRlclNpZ25hdHVyZShzaWcpXG4gICAgICAgICAgICA/IHNpZyArICcgKHBsYWNlaG9sZGVyKSdcbiAgICAgICAgICAgIDogc2lnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMubm9kZShcbiAgICAgICAgJ2J1ZmZlcnMnLFxuICAgICAgICBzaWduYXR1cmVzXG4gICAgICAgICAgLm1hcCgoc2lnKSA9PlxuICAgICAgICAgICAgQnVmZmVyLmlzQnVmZmVyKHNpZykgPyBgJHtzaWcubGVuZ3RofWAgOiB1dHhvbGliLmJpdGdvLmlzUGxhY2Vob2xkZXJTaWduYXR1cmUoc2lnKSA/ICcocGxhY2Vob2xkZXIpJyA6IHNpZ1xuICAgICAgICAgIClcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBwYXJzZVNpZ25hdHVyZShpbnB1dDogdXR4b2xpYi5UeElucHV0KTogVHhOb2RlIHtcbiAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgICBsZXQgbm9kZXM6IFR4Tm9kZVtdIHwgdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAocGFyc2VkLnNjcmlwdFR5cGUpIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Ayc2gnOlxuICAgICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGNhc2UgJ3AydHInOlxuICAgICAgICBub2RlcyA9IHRoaXMucGFyc2VTaWduYXR1cmVDb250ZW50KHBhcnNlZC5zaWduYXR1cmVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUoJ3NpZ25hdHVyZScsIHBhcnNlZC5zY3JpcHRUeXBlID8/ICd1bmtub3duJywgbm9kZXMpO1xuICB9XG5cbiAgcGFyc2VJbnMoaW5zOiB1dHhvbGliLlR4SW5wdXRbXSk6IFR4Tm9kZVtdIHtcbiAgICByZXR1cm4gaW5zLm1hcCgoaW5wdXQsIGkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUoaSwgdXR4b2xpYi5iaXRnby5mb3JtYXRPdXRwdXRJZCh1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQoaW5wdXQpKSwgW1xuICAgICAgICB0aGlzLm5vZGUoJ3NlcXVlbmNlJywgdG9CdWZmZXJVSW50MzJCRShpbnB1dC5zZXF1ZW5jZSkpLFxuICAgICAgICB0aGlzLnBhcnNlU2NyaXB0KGlucHV0LnNjcmlwdCksXG4gICAgICAgIHRoaXMucGFyc2VXaXRuZXNzKGlucHV0LndpdG5lc3MpLFxuICAgICAgICB0aGlzLnBhcnNlU2lnbmF0dXJlKGlucHV0KSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcGFyc2VPdXRzKG91dHM6IHV0eG9saWIuVHhPdXRwdXRbXSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogVHhOb2RlW10ge1xuICAgIHJldHVybiBvdXRzLm1hcCgobywgaSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShpLCB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvLnNjcmlwdCwgbmV0d29yayksIFt0aGlzLm5vZGUoYHZhbHVlYCwgby52YWx1ZSAvIDFlOCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlKHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbik6IFR4Tm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZSgndHJhbnNhY3Rpb24nLCB0eC5nZXRJZCgpLCBbXG4gICAgICB0aGlzLm5vZGUoXG4gICAgICAgICdwYXJzZWRBcycsXG4gICAgICAgIGAke3V0eG9saWIuZ2V0TmV0d29ya05hbWUodXR4b2xpYi5nZXRNYWlubmV0KHR4Lm5ldHdvcmspKX0gYCArXG4gICAgICAgICAgYCR7dXR4b2xpYi5pc01haW5uZXQodHgubmV0d29yaykgPyAnbWFpbm5ldCcgOiAndGVzdG5ldCd9YFxuICAgICAgKSxcbiAgICAgIHRoaXMubm9kZSgndmVyc2lvbicsIHR4LnZlcnNpb24pLFxuICAgICAgdGhpcy5ub2RlKCdsb2NrdGltZScsIHR4LmxvY2t0aW1lKSxcbiAgICAgIHRoaXMubm9kZSgnaGFzV2l0bmVzc2VzJywgdHguaGFzV2l0bmVzc2VzKCkpLFxuICAgICAgdGhpcy5ub2RlKCd2c2l6ZScsIGAke3R4LnZpcnR1YWxTaXplKCl9dmJ5dGVzICgke3R4LndlaWdodCgpfXd1KWApLFxuICAgICAgdGhpcy5ub2RlKGBpbnB1dHNgLCB0eC5pbnMubGVuZ3RoLCB0aGlzLnBhcnNlSW5zKHR4LmlucykpLFxuICAgICAgdGhpcy5ub2RlKGBvdXRwdXRzYCwgdHgub3V0cy5sZW5ndGgsIHRoaXMucGFyc2VPdXRzKHR4Lm91dHMsIHR4Lm5ldHdvcmspKSxcbiAgICBdKTtcbiAgfVxufVxuIl19
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@bitgo/utxo-bin",
3
+ "description": "Command-line utility for BitGo UTXO transactions",
4
+ "version": "1.0.0-rc.0",
5
+ "files": [
6
+ "dist/**/*"
7
+ ],
8
+ "keywords": [
9
+ "bitgo",
10
+ "utxo",
11
+ "bitcoinjs",
12
+ "bitcoin"
13
+ ],
14
+ "scripts": {
15
+ "prepare": "npm run build",
16
+ "build": "tsc",
17
+ "lint": "eslint --quiet .",
18
+ "unit-test": "mocha",
19
+ "fmt": "prettier --write '{bin,src,test}/**/*.{ts,js}'"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/BitGo/BitGoJS.git",
24
+ "directory": "modules/utxo-bin"
25
+ },
26
+ "bin": "./dist/bin/index.js",
27
+ "dependencies": {
28
+ "@bitgo/utxo-lib": "^2.2.1-rc.10",
29
+ "archy": "^1.0.0",
30
+ "chalk": "4",
31
+ "yargs": "^17.3.1"
32
+ },
33
+ "devDependencies": {
34
+ "@types/archy": "^0.0.32",
35
+ "@types/mocha": "^9.0.0",
36
+ "@types/yargs": "^17.0.8",
37
+ "mocha": "^9.1.4",
38
+ "ts-node": "^10.4.0",
39
+ "typescript": "^4.5.4"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "license": "MIT",
45
+ "gitHead": "cc820eca80da39bf567f218143d7972b632bb937"
46
+ }