@bitgo-beta/sdk-coin-avaxp 0.0.0-semantic-release-managed
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/.eslintignore +5 -0
- package/.eslintrc.json +7 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +1091 -0
- package/LICENSE +191 -0
- package/README.md +39 -0
- package/dist/src/avaxp.d.ts +91 -0
- package/dist/src/avaxp.d.ts.map +1 -0
- package/dist/src/avaxp.js +343 -0
- package/dist/src/iface.d.ts +42 -0
- package/dist/src/iface.d.ts.map +1 -0
- package/dist/src/iface.js +3 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/atomicInCTransactionBuilder.js +49 -0
- package/dist/src/lib/atomicTransactionBuilder.d.ts +38 -0
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/atomicTransactionBuilder.js +129 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts +95 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegatorTxBuilder.js +285 -0
- package/dist/src/lib/deprecatedTransaction.d.ts +98 -0
- package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransaction.js +344 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts +114 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
- package/dist/src/lib/errors.d.ts +8 -0
- package/dist/src/lib/errors.d.ts.map +1 -0
- package/dist/src/lib/errors.js +19 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts +55 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/exportInCTxBuilder.js +159 -0
- package/dist/src/lib/exportTxBuilder.d.ts +33 -0
- package/dist/src/lib/exportTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/exportTxBuilder.js +88 -0
- package/dist/src/lib/iface.d.ts +68 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +20 -0
- package/dist/src/lib/importInCTxBuilder.d.ts +44 -0
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInCTxBuilder.js +131 -0
- package/dist/src/lib/importTxBuilder.d.ts +18 -0
- package/dist/src/lib/importTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importTxBuilder.js +67 -0
- package/dist/src/lib/index.d.ts +11 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +37 -0
- package/dist/src/lib/keyPair.d.ts +58 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +150 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +154 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +452 -0
- package/dist/src/lib/transaction.d.ts +78 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +254 -0
- package/dist/src/lib/transactionBuilder.d.ts +71 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +138 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +57 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +178 -0
- package/dist/src/lib/utils.d.ts +184 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +378 -0
- package/dist/src/lib/utxoEngine.d.ts +53 -0
- package/dist/src/lib/utxoEngine.d.ts.map +1 -0
- package/dist/src/lib/utxoEngine.js +112 -0
- package/dist/src/lib/validatorTxBuilder.d.ts +37 -0
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/validatorTxBuilder.js +69 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +11 -0
- package/dist/src/tavaxp.d.ts +9 -0
- package/dist/src/tavaxp.d.ts.map +1 -0
- package/dist/src/tavaxp.js +14 -0
- package/dist/test/resources/avaxp.d.ts +259 -0
- package/dist/test/resources/avaxp.d.ts.map +1 -0
- package/dist/test/resources/avaxp.js +1093 -0
- package/dist/test/resources/errors.d.ts +19 -0
- package/dist/test/resources/errors.d.ts.map +1 -0
- package/dist/test/resources/errors.js +22 -0
- package/dist/test/resources/keychains.d.ts +18 -0
- package/dist/test/resources/keychains.d.ts.map +1 -0
- package/dist/test/resources/keychains.js +30 -0
- package/dist/test/resources/tx/exportC.d.ts +14 -0
- package/dist/test/resources/tx/exportC.d.ts.map +1 -0
- package/dist/test/resources/tx/exportC.js +21 -0
- package/dist/test/resources/tx/importC.d.ts +29 -0
- package/dist/test/resources/tx/importC.d.ts.map +1 -0
- package/dist/test/resources/tx/importC.js +42 -0
- package/dist/test/resources/tx/importP.d.ts +29 -0
- package/dist/test/resources/tx/importP.d.ts.map +1 -0
- package/dist/test/resources/tx/importP.js +42 -0
- package/dist/test/unit/avaxp.d.ts +2 -0
- package/dist/test/unit/avaxp.d.ts.map +1 -0
- package/dist/test/unit/avaxp.js +732 -0
- package/dist/test/unit/lib/exportC2PTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportC2PTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportC2PTxBuilder.js +125 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.js +183 -0
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importC2PTxBuilder.js +99 -0
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importP2CTxBuilder.js +137 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +186 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +341 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +80 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +179 -0
- package/dist/test/unit/lib/utils.d.ts +2 -0
- package/dist/test/unit/lib/utils.d.ts.map +1 -0
- package/dist/test/unit/lib/utils.js +83 -0
- package/dist/test/unit/lib/utxoEngine.d.ts +2 -0
- package/dist/test/unit/lib/utxoEngine.d.ts.map +1 -0
- package/dist/test/unit/lib/utxoEngine.js +168 -0
- package/dist/test/unit/lib/validateTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/validateTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/validateTxBuilder.js +327 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/transactionBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const testData = __importStar(require("../../resources/avaxp"));
|
|
41
|
+
const errorMessage = __importStar(require("../../resources/errors"));
|
|
42
|
+
const lib_1 = require("../../../src/lib");
|
|
43
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
44
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
45
|
+
const importP_1 = require("../../resources/tx/importP");
|
|
46
|
+
const importC_1 = require("../../resources/tx/importC");
|
|
47
|
+
const exportC_1 = require("../../resources/tx/exportC");
|
|
48
|
+
const avaxp_1 = require("../../resources/avaxp");
|
|
49
|
+
describe('AvaxP Transaction Builder Factory', () => {
|
|
50
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'));
|
|
51
|
+
describe('should validate', () => {
|
|
52
|
+
it('an empty raw transaction', () => {
|
|
53
|
+
assert_1.default.throws(() => {
|
|
54
|
+
factory.from('');
|
|
55
|
+
}, (e) => e.message === errorMessage.ERROR_EMPTY_RAW_TRANSACTION);
|
|
56
|
+
});
|
|
57
|
+
it('an invalid raw transfer transaction', () => {
|
|
58
|
+
assert_1.default.throws(() => {
|
|
59
|
+
factory.from(testData.INVALID_RAW_TRANSACTION);
|
|
60
|
+
}, (e) => e.message === errorMessage.ERROR_RAW_PARSING);
|
|
61
|
+
});
|
|
62
|
+
it('Should validate a correct raw tx', () => {
|
|
63
|
+
factory.from(testData.ADDVALIDATOR_SAMPLES.unsignedTxHex);
|
|
64
|
+
// should not throw a error!
|
|
65
|
+
});
|
|
66
|
+
it("Shouldn't get a wallet initialization builder", () => {
|
|
67
|
+
assert_1.default.throws(() => {
|
|
68
|
+
factory.getWalletInitializationBuilder();
|
|
69
|
+
}, (e) => e.message === errorMessage.ERROR_WALLET_INITIALIZATION);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('Transaction readable', () => {
|
|
73
|
+
const rawTxs = [
|
|
74
|
+
testData.ADD_VALIDATOR_ID_SAMPLE.fullsigntxHex,
|
|
75
|
+
testData.EXPORT_P_2_C.fullsigntxHex,
|
|
76
|
+
testData.EXPORT_P_2_C.halfsigntxHex,
|
|
77
|
+
testData.EXPORT_P_2_C.unsignedTxHex,
|
|
78
|
+
importP_1.IMPORT_P.fullsigntxHex,
|
|
79
|
+
importP_1.IMPORT_P.halfsigntxHex,
|
|
80
|
+
importP_1.IMPORT_P.unsignedTxHex,
|
|
81
|
+
];
|
|
82
|
+
let tx;
|
|
83
|
+
before(async () => {
|
|
84
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADD_VALIDATOR_ID_SAMPLE.fullsigntxHex);
|
|
85
|
+
tx = await txBuilder.build();
|
|
86
|
+
});
|
|
87
|
+
it('Should json stringifiy any transaction object', async () => {
|
|
88
|
+
for (const rawTx of rawTxs) {
|
|
89
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(rawTx);
|
|
90
|
+
const tx = await txBuilder.build();
|
|
91
|
+
const txJson = tx.toJson();
|
|
92
|
+
(0, assert_1.default)(typeof JSON.stringify(txJson), 'string');
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
it('Should json stringifiy addValidator transaction', async () => {
|
|
96
|
+
const txJson = tx.toJson();
|
|
97
|
+
(0, assert_1.default)(typeof JSON.stringify(tx.toJson()), 'string');
|
|
98
|
+
txJson.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
99
|
+
});
|
|
100
|
+
it('Should get a txid', async () => {
|
|
101
|
+
tx.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('should explains transaction', () => {
|
|
105
|
+
it('should explains a Signed AddValidatorTx', async () => {
|
|
106
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.fullsigntxHex);
|
|
107
|
+
const tx = await txBuilder.build();
|
|
108
|
+
const txExplain = tx.explainTransaction();
|
|
109
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
110
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
111
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
112
|
+
});
|
|
113
|
+
it('should explains a Half Signed AddValidatorTx', async () => {
|
|
114
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.halfsigntxHex);
|
|
115
|
+
const tx = await txBuilder.build();
|
|
116
|
+
const txExplain = tx.explainTransaction();
|
|
117
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
118
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
119
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
120
|
+
});
|
|
121
|
+
it('should explains a unsigned AddValidatorTx', async () => {
|
|
122
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.unsignedTxHex);
|
|
123
|
+
const tx = await txBuilder.build();
|
|
124
|
+
const txExplain = tx.explainTransaction();
|
|
125
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
126
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
127
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
describe('Cross chain transfer has source and destination chains', () => {
|
|
131
|
+
const p2cTxs = [
|
|
132
|
+
importP_1.IMPORT_P.fullsigntxHex,
|
|
133
|
+
importP_1.IMPORT_P.halfsigntxHex,
|
|
134
|
+
importP_1.IMPORT_P.unsignedTxHex,
|
|
135
|
+
exportC_1.EXPORT_C.fullsigntxHex,
|
|
136
|
+
exportC_1.EXPORT_C.unsignedTxHex,
|
|
137
|
+
];
|
|
138
|
+
const c2pTxs = [
|
|
139
|
+
importC_1.IMPORT_C.fullsigntxHex,
|
|
140
|
+
importC_1.IMPORT_C.halfsigntxHex,
|
|
141
|
+
importC_1.IMPORT_C.unsignedTxHex,
|
|
142
|
+
testData.EXPORT_P_2_C.fullsigntxHex,
|
|
143
|
+
testData.EXPORT_P_2_C.halfsigntxHex,
|
|
144
|
+
testData.EXPORT_P_2_C.unsignedTxHex,
|
|
145
|
+
];
|
|
146
|
+
const noCrossChainTxs = [
|
|
147
|
+
avaxp_1.ADDVALIDATOR_SAMPLES.fullsigntxHex,
|
|
148
|
+
avaxp_1.ADDVALIDATOR_SAMPLES.halfsigntxHex,
|
|
149
|
+
avaxp_1.ADDVALIDATOR_SAMPLES.unsignedTxHex,
|
|
150
|
+
];
|
|
151
|
+
async function toJson(txHex) {
|
|
152
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(txHex);
|
|
153
|
+
const tx = await txBuilder.build();
|
|
154
|
+
return tx.toJson();
|
|
155
|
+
}
|
|
156
|
+
it('Should json have sourceChain C and destinationChain P', async () => {
|
|
157
|
+
for (const rawTx of p2cTxs) {
|
|
158
|
+
const txJson = await toJson(rawTx);
|
|
159
|
+
txJson.sourceChain.should.equal('C');
|
|
160
|
+
txJson.destinationChain.should.equal('P');
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
it('Should json have sourceChain P and destinationChain C', async () => {
|
|
164
|
+
for (const rawTx of c2pTxs) {
|
|
165
|
+
const txJson = await toJson(rawTx);
|
|
166
|
+
txJson.sourceChain.should.equal('P');
|
|
167
|
+
txJson.destinationChain.should.equal('C');
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
it('Should json have not sourceChain either destinationChain ', async () => {
|
|
171
|
+
for (const rawTx of noCrossChainTxs) {
|
|
172
|
+
const txJson = await toJson(rawTx);
|
|
173
|
+
txJson.should.property('sourceChain').be.undefined();
|
|
174
|
+
txJson.should.property('destinationChain').be.undefined();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnRUFBa0Q7QUFDbEQscUVBQXVEO0FBQ3ZELDBDQUFxRTtBQUNyRSxpREFBNEM7QUFDNUMsbURBQXdFO0FBQ3hFLHdEQUFzRDtBQUN0RCx3REFBc0Q7QUFDdEQsd0RBQXNEO0FBQ3RELGlEQUE2RDtBQUU3RCxRQUFRLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO0lBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLDJCQUEyQixDQUNuRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1lBQzdDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pELENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxZQUFZLENB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SUFBSSxFQUFFO1lBQ3JFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLENBQUMsV0FBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCAqIGFzIGVycm9yTWVzc2FnZSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJyb3JzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFR4RGF0YSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgSU1QT1JUX1AgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHgvaW1wb3J0UCc7XG5pbXBvcnQgeyBJTVBPUlRfQyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy90eC9pbXBvcnRDJztcbmltcG9ydCB7IEVYUE9SVF9DIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R4L2V4cG9ydEMnO1xuaW1wb3J0IHsgQUREVkFMSURBVE9SX1NBTVBMRVMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuXG5kZXNjcmliZSgnQXZheFAgVHJhbnNhY3Rpb24gQnVpbGRlciBGYWN0b3J5JywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCB2YWxpZGF0ZScsICgpID0+IHtcbiAgICBpdCgnYW4gZW1wdHkgcmF3IHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZhY3RvcnkuZnJvbSgnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX0VNUFRZX1JBV19UUkFOU0FDVElPTlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBpbnZhbGlkIHJhdyB0cmFuc2ZlciB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmYWN0b3J5LmZyb20odGVzdERhdGEuSU5WQUxJRF9SQVdfVFJBTlNBQ1RJT04pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9SQVdfUEFSU0lOR1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdmFsaWRhdGUgYSBjb3JyZWN0IHJhdyB0eCcsICgpID0+IHtcbiAgICAgIGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4KTtcbiAgICAgIC8vIHNob3VsZCBub3QgdGhyb3cgYSBlcnJvciFcbiAgICB9KTtcblxuICAgIGl0KFwiU2hvdWxkbid0IGdldCBhIHdhbGxldCBpbml0aWFsaXphdGlvbiBidWlsZGVyXCIsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9XQUxMRVRfSU5JVElBTElaQVRJT05cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiByZWFkYWJsZScsICgpID0+IHtcbiAgICBjb25zdCByYXdUeHMgPSBbXG4gICAgICB0ZXN0RGF0YS5BRERfVkFMSURBVE9SX0lEX1NBTVBMRS5mdWxsc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MuaGFsZnNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy51bnNpZ25lZFR4SGV4LFxuICAgICAgSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLmhhbGZzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC51bnNpZ25lZFR4SGV4LFxuICAgIF07XG4gICAgbGV0IHR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYW55IHRyYW5zYWN0aW9uIG9iamVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2YgcmF3VHhzKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20ocmF3VHgpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiBKU09OLnN0cmluZ2lmeSh0eEpzb24pLCAnc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gc3RyaW5naWZpeSBhZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpLCAnc3RyaW5nJyk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBnZXQgYSB0eGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGV4cGxhaW5zIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5mdWxsc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBIYWxmIFNpZ25lZCBBZGRWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIHVuc2lnbmVkIEFkZFZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDcm9zcyBjaGFpbiB0cmFuc2ZlciBoYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjaGFpbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcDJjVHhzID0gW1xuICAgICAgSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLmhhbGZzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC51bnNpZ25lZFR4SGV4LFxuICAgICAgRVhQT1JUX0MuZnVsbHNpZ250eEhleCxcbiAgICAgIEVYUE9SVF9DLnVuc2lnbmVkVHhIZXgsXG4gICAgXTtcblxuICAgIGNvbnN0IGMycFR4cyA9IFtcbiAgICAgIElNUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfQy5oYWxmc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX0MudW5zaWduZWRUeEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmhhbGZzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MudW5zaWduZWRUeEhleCxcbiAgICBdO1xuXG4gICAgY29uc3Qgbm9Dcm9zc0NoYWluVHhzID0gW1xuICAgICAgQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleCxcbiAgICAgIEFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXgsXG4gICAgICBBRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4LFxuICAgIF07XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0b0pzb24odHhIZXg6IHN0cmluZyk6IFByb21pc2U8VHhEYXRhPiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKHR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gdHgudG9Kc29uKCk7XG4gICAgfVxuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgc291cmNlQ2hhaW4gQyBhbmQgZGVzdGluYXRpb25DaGFpbiBQJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiBwMmNUeHMpIHtcbiAgICAgICAgY29uc3QgdHhKc29uID0gYXdhaXQgdG9Kc29uKHJhd1R4KTtcbiAgICAgICAgdHhKc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ0MnKTtcbiAgICAgICAgdHhKc29uLmRlc3RpbmF0aW9uQ2hhaW4hLnNob3VsZC5lcXVhbCgnUCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgc291cmNlQ2hhaW4gUCBhbmQgZGVzdGluYXRpb25DaGFpbiBDJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiBjMnBUeHMpIHtcbiAgICAgICAgY29uc3QgdHhKc29uID0gYXdhaXQgdG9Kc29uKHJhd1R4KTtcbiAgICAgICAgdHhKc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ1AnKTtcbiAgICAgICAgdHhKc29uLmRlc3RpbmF0aW9uQ2hhaW4hLnNob3VsZC5lcXVhbCgnQycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgbm90IHNvdXJjZUNoYWluIGVpdGhlciBkZXN0aW5hdGlvbkNoYWluICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2Ygbm9Dcm9zc0NoYWluVHhzKSB7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IGF3YWl0IHRvSnNvbihyYXdUeCk7XG4gICAgICAgIHR4SnNvbi5zaG91bGQucHJvcGVydHkoJ3NvdXJjZUNoYWluJykuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIHR4SnNvbi5zaG91bGQucHJvcGVydHkoJ2Rlc3RpbmF0aW9uQ2hhaW4nKS5iZS51bmRlZmluZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const lib_1 = require("../../../src/lib/");
|
|
38
|
+
const testData = __importStar(require("../../resources/avaxp"));
|
|
39
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
40
|
+
describe('Avaxp Utils', () => {
|
|
41
|
+
const network = statics_1.coins.get('tavaxp').network;
|
|
42
|
+
const compressed = true;
|
|
43
|
+
it('should recover signature', () => {
|
|
44
|
+
const keyPair = new lib_1.KeyPair({ prv: testData.SEED_ACCOUNT.privateKeyAvax });
|
|
45
|
+
const prv = keyPair.getPrivateKey();
|
|
46
|
+
const pub = keyPair.getPublicKey({ compressed });
|
|
47
|
+
const message = Buffer.from('Lorem ipsum dolor sit amet. Est maxime iure et odio iusto non aspernatur...', 'hex');
|
|
48
|
+
const signature = lib_1.Utils.createSignature(network, message, prv);
|
|
49
|
+
lib_1.Utils.recoverySignature(network, message, signature).should.deepEqual(pub);
|
|
50
|
+
});
|
|
51
|
+
describe('Validation', function () {
|
|
52
|
+
it('should validate a public key', () => {
|
|
53
|
+
lib_1.Utils.isValidPublicKey(testData.SEED_ACCOUNT.publicKeyCb58).should.be.true();
|
|
54
|
+
lib_1.Utils.isValidPublicKey(testData.SEED_ACCOUNT.publicKey).should.be.true();
|
|
55
|
+
lib_1.Utils.isValidPublicKey(testData.SEED_ACCOUNT.xPublicKey).should.be.true();
|
|
56
|
+
});
|
|
57
|
+
it('should fail to validate invalid address', function () {
|
|
58
|
+
const address = 'fuji15jamwukfqkwhe8z26tjqxejtjd3jk9vj4kmxwa';
|
|
59
|
+
lib_1.Utils.isValidAddress(address).should.be.false();
|
|
60
|
+
});
|
|
61
|
+
it('should validate an address array', function () {
|
|
62
|
+
const validAddresses = [
|
|
63
|
+
'P-fuji15jamwukfqkwhe8z26tjqxejtjd3jk9vj4kmxwa',
|
|
64
|
+
'NodeID-MdteS9U987PY7iwA5Pcz3sKVprJAbAvE7',
|
|
65
|
+
'NodeID-P1KjdPNrap8LHfx5AstcXxsHjk3jbbyF',
|
|
66
|
+
];
|
|
67
|
+
lib_1.Utils.isValidAddress(validAddresses).should.be.true();
|
|
68
|
+
});
|
|
69
|
+
it('should validate an address multiSig string', function () {
|
|
70
|
+
const stringMultiSigAddress = 'P-fuji15jamwukfqkwhe8z26tjqxejtjd3jk9vj4kmxwa~NodeID-MdteS9U987PY7iwA5Pcz3sKVprJAbAvE7~NodeID-P1KjdPNrap8LHfx5AstcXxsHjk3jbbyF';
|
|
71
|
+
lib_1.Utils.isValidAddress(stringMultiSigAddress).should.be.true();
|
|
72
|
+
});
|
|
73
|
+
it('should fail to validate an invalid block id', function () {
|
|
74
|
+
const block = 'abcdefghijklmnopqrstuvwxyz';
|
|
75
|
+
lib_1.Utils.isValidBlockId(block).should.be.false();
|
|
76
|
+
});
|
|
77
|
+
it('should validate a block id', function () {
|
|
78
|
+
const block = 'zGC26Bagj79RBPobK8Hghk9xuqAmME53eEUtM9RJ2yadBxrch';
|
|
79
|
+
lib_1.Utils.isValidBlockId(block).should.be.true();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWdCO0FBQ2hCLDJDQUFtRDtBQUNuRCxnRUFBa0Q7QUFDbEQsaURBQThEO0FBRTlELFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sT0FBTyxHQUFxQixlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQTJCLENBQUM7SUFDbEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xILE1BQU0sU0FBUyxHQUFHLFdBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFJLENBQUMsQ0FBQztRQUNoRSxXQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUNyQixFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLFdBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0UsV0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RSxXQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUFHLDZDQUE2QyxDQUFDO1lBQzlELFdBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxNQUFNLGNBQWMsR0FBRztnQkFDckIsK0NBQStDO2dCQUMvQywwQ0FBMEM7Z0JBQzFDLHlDQUF5QzthQUMxQyxDQUFDO1lBRUYsV0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1lBQy9DLE1BQU0scUJBQXFCLEdBQ3pCLGdJQUFnSSxDQUFDO1lBRW5JLFdBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDO1lBQzNDLFdBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxtREFBbUQsQ0FBQztZQUNsRSxXQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVXRpbHMsIEtleVBhaXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliLyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsgQXZhbGFuY2hlTmV0d29yaywgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZGVzY3JpYmUoJ0F2YXhwIFV0aWxzJywgKCkgPT4ge1xuICBjb25zdCBuZXR3b3JrOiBBdmFsYW5jaGVOZXR3b3JrID0gY29pbnMuZ2V0KCd0YXZheHAnKS5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcms7XG4gIGNvbnN0IGNvbXByZXNzZWQgPSB0cnVlO1xuICBpdCgnc2hvdWxkIHJlY292ZXIgc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXlBdmF4IH0pO1xuICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0UHJpdmF0ZUtleSgpO1xuICAgIGNvbnN0IHB1YiA9IGtleVBhaXIuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZCB9KTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBFc3QgbWF4aW1lIGl1cmUgZXQgb2RpbyBpdXN0byBub24gYXNwZXJuYXR1ci4uLicsICdoZXgnKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBVdGlscy5jcmVhdGVTaWduYXR1cmUobmV0d29yaywgbWVzc2FnZSwgcHJ2ISk7XG4gICAgVXRpbHMucmVjb3ZlcnlTaWduYXR1cmUobmV0d29yaywgbWVzc2FnZSwgc2lnbmF0dXJlKS5zaG91bGQuZGVlcEVxdWFsKHB1Yik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFB1YmxpY0tleSh0ZXN0RGF0YS5TRUVEX0FDQ09VTlQucHVibGljS2V5Q2I1OCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnhQdWJsaWNLZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdmdWppMTVqYW13dWtmcWt3aGU4ejI2dGpxeGVqdGpkM2prOXZqNGtteHdhJztcbiAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhZGRyZXNzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2EnLFxuICAgICAgICAnTm9kZUlELU1kdGVTOVU5ODdQWTdpd0E1UGN6M3NLVnBySkFiQXZFNycsXG4gICAgICAgICdOb2RlSUQtUDFLamRQTnJhcDhMSGZ4NUFzdGNYeHNIamszamJieUYnLFxuICAgICAgXTtcblxuICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFkZHJlc3MgbXVsdGlTaWcgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3RyaW5nTXVsdGlTaWdBZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTE1amFtd3VrZnFrd2hlOHoyNnRqcXhlanRqZDNqazl2ajRrbXh3YX5Ob2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3fk5vZGVJRC1QMUtqZFBOcmFwOExIZng1QXN0Y1h4c0hqazNqYmJ5Ric7XG5cbiAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzKHN0cmluZ011bHRpU2lnQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBhbiBpbnZhbGlkIGJsb2NrIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmxvY2sgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuICAgICAgVXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2spLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIGJsb2NrIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmxvY2sgPSAnekdDMjZCYWdqNzlSQlBvYks4SGdoazl4dXFBbU1FNTNlRVV0TTlSSjJ5YWRCeHJjaCc7XG4gICAgICBVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9jaykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxoEngine.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/utxoEngine.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
require("should");
|
|
8
|
+
const utxoEngine_1 = require("../../../src/lib/utxoEngine");
|
|
9
|
+
const utils_1 = __importDefault(require("./../../../src/lib/utils"));
|
|
10
|
+
describe('AvaxP UTXO engine', () => {
|
|
11
|
+
describe('should fail', () => {
|
|
12
|
+
const sender = [
|
|
13
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
14
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
15
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
16
|
+
].map((a) => utils_1.default.parseAddress(a));
|
|
17
|
+
it('should return empty input for utxos of wrong type', () => {
|
|
18
|
+
const utxos = [1, 2, 3, 4].map((n) => ({
|
|
19
|
+
outputID: n,
|
|
20
|
+
amount: '509999975',
|
|
21
|
+
txid: 'CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH',
|
|
22
|
+
outputidx: '0',
|
|
23
|
+
addresses: [
|
|
24
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
25
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
26
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
27
|
+
],
|
|
28
|
+
threshold: 2,
|
|
29
|
+
}));
|
|
30
|
+
const { inputs } = (0, utxoEngine_1.utxoToInput)(utxos, sender);
|
|
31
|
+
inputs.should.be.empty();
|
|
32
|
+
});
|
|
33
|
+
it('should fail with wrong address', () => {
|
|
34
|
+
const utxos = [
|
|
35
|
+
{
|
|
36
|
+
outputID: 7,
|
|
37
|
+
amount: '509999975',
|
|
38
|
+
txid: 'CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH',
|
|
39
|
+
outputidx: '0',
|
|
40
|
+
addresses: [
|
|
41
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
42
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
43
|
+
'P-fuji13pyc89t4x5483fgdfgg9lcnpxz7ggr09vn6m6c',
|
|
44
|
+
],
|
|
45
|
+
threshold: 2,
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
assert_1.default.throws(() => (0, utxoEngine_1.utxoToInput)(utxos, sender), (e) => e.message === 'Addresses are inconsistent: CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH');
|
|
49
|
+
});
|
|
50
|
+
it('should fail with wrong threshold', () => {
|
|
51
|
+
const utxos = [
|
|
52
|
+
{
|
|
53
|
+
outputID: 7,
|
|
54
|
+
amount: '509999975',
|
|
55
|
+
txid: 'CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH',
|
|
56
|
+
outputidx: '0',
|
|
57
|
+
addresses: [
|
|
58
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
59
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
60
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
61
|
+
],
|
|
62
|
+
threshold: 3,
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
assert_1.default.throws(() => (0, utxoEngine_1.utxoToInput)(utxos, sender), (e) => e.message === 'Threshold is inconsistent');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('2 of 3 signers', () => {
|
|
69
|
+
const utxos = [
|
|
70
|
+
{
|
|
71
|
+
outputID: 7,
|
|
72
|
+
amount: '509999975',
|
|
73
|
+
txid: 'CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH',
|
|
74
|
+
outputidx: '0',
|
|
75
|
+
addresses: [
|
|
76
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
77
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
78
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
79
|
+
],
|
|
80
|
+
threshold: 2,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
outputID: 7,
|
|
84
|
+
amount: '26932830273',
|
|
85
|
+
txid: '2VyWNR4q8p7ZnKfaot37SbMBCWHbEbqEca7Af1tiRTArkJMdXt',
|
|
86
|
+
outputidx: '0',
|
|
87
|
+
addresses: [
|
|
88
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
89
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
90
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
91
|
+
],
|
|
92
|
+
threshold: 2,
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
const sender = [
|
|
96
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
97
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
98
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
99
|
+
].map((a) => utils_1.default.parseAddress(a));
|
|
100
|
+
const firstSigner = sender[0].toString('hex');
|
|
101
|
+
// second signer is Zeros credential.
|
|
102
|
+
it('should return credential 2 of 3', () => {
|
|
103
|
+
const { inputs } = (0, utxoEngine_1.utxoToInput)(utxos, sender);
|
|
104
|
+
inputs.forEach((input, i) => {
|
|
105
|
+
const expectedSignature = input.signatures.map((signature) => signature.toBuffer().toString('hex').substring(90));
|
|
106
|
+
expectedSignature.should.containEql(firstSigner);
|
|
107
|
+
const fistSignatureIdx = input.signaturesIdx[expectedSignature.indexOf(firstSigner)];
|
|
108
|
+
utils_1.default.parseAddress(utxos[i].addresses[fistSignatureIdx]).toString('hex').should.be.equal(firstSigner);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('4 of 4 signers', () => {
|
|
113
|
+
const utxos = [
|
|
114
|
+
{
|
|
115
|
+
outputID: 7,
|
|
116
|
+
amount: '509999975',
|
|
117
|
+
txid: 'CEbFa3hCDfMFu8ASZP9rT1s3X2X8wqoPAN258kkStk9JX3wsH',
|
|
118
|
+
outputidx: '0',
|
|
119
|
+
addresses: [
|
|
120
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
121
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
122
|
+
'P-fuji13pyc89t4x5483fgdfgg9lcnpxz7ggr09vn6m6c',
|
|
123
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
124
|
+
],
|
|
125
|
+
threshold: 4,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
outputID: 7,
|
|
129
|
+
amount: '26932830273',
|
|
130
|
+
txid: '2VyWNR4q8p7ZnKfaot37SbMBCWHbEbqEca7Af1tiRTArkJMdXt',
|
|
131
|
+
outputidx: '0',
|
|
132
|
+
addresses: [
|
|
133
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
134
|
+
'P-fuji13pyc89t4x5483fgdfgg9lcnpxz7ggr09vn6m6c',
|
|
135
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
136
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
137
|
+
],
|
|
138
|
+
threshold: 4,
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
const sender = [
|
|
142
|
+
'P-fuji103cmntssp6qnucejahddy42wcy4qty0uj42822',
|
|
143
|
+
'P-fuji1hdk7ntw0huhqmlhlheme9t7scsy9lhfhw3ywy4',
|
|
144
|
+
'P-fuji1yzpfsdalhfwkq2ceewgs9wv7k0uft40ydpuj59',
|
|
145
|
+
'P-fuji13pyc89t4x5483fgdfgg9lcnpxz7ggr09vn6m6c',
|
|
146
|
+
].map((a) => utils_1.default.parseAddress(a));
|
|
147
|
+
const firstSigner = sender[0].toString('hex');
|
|
148
|
+
// second signer is Zeros credential.
|
|
149
|
+
const thirdSigner = sender[2].toString('hex');
|
|
150
|
+
const forthSigner = sender[3].toString('hex');
|
|
151
|
+
it('should return credential', () => {
|
|
152
|
+
const { inputs } = (0, utxoEngine_1.utxoToInput)(utxos, sender, 4);
|
|
153
|
+
inputs.forEach((input, i) => {
|
|
154
|
+
const expectedSignature = input.signatures.map((signature) => signature.toBuffer().toString('hex').substring(90));
|
|
155
|
+
expectedSignature.should.containEql(firstSigner);
|
|
156
|
+
const fistSignatureIdx = input.signaturesIdx[expectedSignature.indexOf(firstSigner)];
|
|
157
|
+
utils_1.default.parseAddress(utxos[i].addresses[fistSignatureIdx]).toString('hex').should.be.equal(firstSigner);
|
|
158
|
+
expectedSignature.should.containEql(thirdSigner);
|
|
159
|
+
const thirdSignatureIdx = input.signaturesIdx[expectedSignature.indexOf(thirdSigner)];
|
|
160
|
+
utils_1.default.parseAddress(utxos[i].addresses[thirdSignatureIdx]).toString('hex').should.be.equal(thirdSigner);
|
|
161
|
+
expectedSignature.should.containEql(forthSigner);
|
|
162
|
+
const forthSignatureIdx = input.signaturesIdx[expectedSignature.indexOf(forthSigner)];
|
|
163
|
+
utils_1.default.parseAddress(utxos[i].addresses[forthSignatureIdx]).toString('hex').should.be.equal(forthSigner);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdXR4b0VuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixrQkFBZ0I7QUFDaEIsNERBQTBEO0FBRzFELHFFQUE2QztBQUU3QyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLE1BQU0sTUFBTSxHQUFpQjtZQUMzQiwrQ0FBK0M7WUFDL0MsK0NBQStDO1lBQy9DLCtDQUErQztTQUNoRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixJQUFJLEVBQUUsbURBQW1EO2dCQUN6RCxTQUFTLEVBQUUsR0FBRztnQkFDZCxTQUFTLEVBQUU7b0JBQ1QsK0NBQStDO29CQUMvQywrQ0FBK0M7b0JBQy9DLCtDQUErQztpQkFDaEQ7Z0JBQ0QsU0FBUyxFQUFFLENBQUM7YUFDYixDQUFDLENBQUMsQ0FBQztZQUNKLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFB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LENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUV0RyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUV2RyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgdXR4b1RvSW5wdXQgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0eG9FbmdpbmUnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgnQXZheFAgVVRYTyBlbmdpbmUnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICBjb25zdCBzZW5kZXI6IEJ1ZmZlckF2YXhbXSA9IFtcbiAgICAgICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5JyxcbiAgICBdLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGlucHV0IGZvciB1dHhvcyBvZiB3cm9uZyB0eXBlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXR4b3MgPSBbMSwgMiwgMywgNF0ubWFwKChuKSA9PiAoe1xuICAgICAgICBvdXRwdXRJRDogbixcbiAgICAgICAgYW1vdW50OiAnNTA5OTk5OTc1JyxcbiAgICAgICAgdHhpZDogJ0NFYkZhM2hDRGZNRnU4QVNaUDlyVDFzM1gyWDh3cW9QQU4yNThra1N0azlKWDN3c0gnLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgYWRkcmVzc2VzOiBbXG4gICAgICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAgICAgJ1AtZnVqaTF5enBmc2RhbGhmd2txMmNlZXdnczl3djdrMHVmdDQweWRwdWo1OScsXG4gICAgICAgICAgJ1AtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMicsXG4gICAgICAgIF0sXG4gICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHsgaW5wdXRzIH0gPSB1dHhvVG9JbnB1dCh1dHhvcywgc2VuZGVyKTtcbiAgICAgIGlucHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIHdyb25nIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dHhvcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICAgIGFtb3VudDogJzUwOTk5OTk3NScsXG4gICAgICAgICAgdHhpZDogJ0NFYkZhM2hDRGZNRnU4QVNaUDlyVDFzM1gyWDh3cW9QQU4yNThra1N0azlKWDN3c0gnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5JyxcbiAgICAgICAgICAgICdQLWZ1amkxM3B5Yzg5dDR4NTQ4M2ZnZGZnZzlsY25weHo3Z2dyMDl2bjZtNmMnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHV0eG9Ub0lucHV0KHV0eG9zLCBzZW5kZXIpLFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdBZGRyZXNzZXMgYXJlIGluY29uc2lzdGVudDogQ0ViRmEzaENEZk1GdThBU1pQOXJUMXMzWDJYOHdxb1BBTjI1OGtrU3RrOUpYM3dzSCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCB3cm9uZyB0aHJlc2hvbGQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dHhvcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICAgIGFtb3VudDogJzUwOTk5OTk3NScsXG4gICAgICAgICAgdHhpZDogJ0NFYkZhM2hDRGZNRnU4QVNaUDlyVDFzM1gyWDh3cW9QQU4yNThra1N0azlKWDN3c0gnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5JyxcbiAgICAgICAgICAgICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdGhyZXNob2xkOiAzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHV0eG9Ub0lucHV0KHV0eG9zLCBzZW5kZXIpLFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdUaHJlc2hvbGQgaXMgaW5jb25zaXN0ZW50J1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJzIgb2YgMyBzaWduZXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAge1xuICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgYW1vdW50OiAnNTA5OTk5OTc1JyxcbiAgICAgICAgdHhpZDogJ0NFYkZhM2hDRGZNRnU4QVNaUDlyVDFzM1gyWDh3cW9QQU4yNThra1N0azlKWDN3c0gnLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgYWRkcmVzc2VzOiBbXG4gICAgICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAgICAgJ1AtZnVqaTF5enBmc2RhbGhmd2txMmNlZXdnczl3djdrMHVmdDQweWRwdWo1OScsXG4gICAgICAgICAgJ1AtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMicsXG4gICAgICAgIF0sXG4gICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICBhbW91bnQ6ICcyNjkzMjgzMDI3MycsXG4gICAgICAgIHR4aWQ6ICcyVnlXTlI0cThwN1puS2Zhb3QzN1NiTUJDV0hiRWJxRWNhN0FmMXRpUlRBcmtKTWRYdCcsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICBhZGRyZXNzZXM6IFtcbiAgICAgICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5JyxcbiAgICAgICAgICAnUC1mdWppMTAzY21udHNzcDZxbnVjZWphaGRkeTQyd2N5NHF0eTB1ajQyODIyJyxcbiAgICAgICAgICAnUC1mdWppMWhkazdudHcwaHVocW1saGxoZW1lOXQ3c2NzeTlsaGZodzN5d3k0JyxcbiAgICAgICAgXSxcbiAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGNvbnN0IHNlbmRlcjogQnVmZmVyQXZheFtdID0gW1xuICAgICAgJ1AtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMicsXG4gICAgICAnUC1mdWppMWhkazdudHcwaHVocW1saGxoZW1lOXQ3c2NzeTlsaGZodzN5d3k0JyxcbiAgICAgICdQLWZ1amkxeXpwZnNkYWxoZndrcTJjZWV3Z3M5d3Y3azB1ZnQ0MHlkcHVqNTknLFxuICAgIF0ubWFwKChhKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYSkpO1xuXG4gICAgY29uc3QgZmlyc3RTaWduZXIgPSBzZW5kZXJbMF0udG9TdHJpbmcoJ2hleCcpO1xuICAgIC8vIHNlY29uZCBzaWduZXIgaXMgWmVyb3MgY3JlZGVudGlhbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjcmVkZW50aWFsIDIgb2YgMycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaW5wdXRzIH0gPSB1dHhvVG9JbnB1dCh1dHhvcywgc2VuZGVyKTtcbiAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZSA9IGlucHV0LnNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUpID0+XG4gICAgICAgICAgc2lnbmF0dXJlLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLnN1YnN0cmluZyg5MClcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRTaWduYXR1cmUuc2hvdWxkLmNvbnRhaW5FcWwoZmlyc3RTaWduZXIpO1xuICAgICAgICBjb25zdCBmaXN0U2lnbmF0dXJlSWR4ID0gaW5wdXQuc2lnbmF0dXJlc0lkeFtleHBlY3RlZFNpZ25hdHVyZS5pbmRleE9mKGZpcnN0U2lnbmVyKV07XG4gICAgICAgIHV0aWxzLnBhcnNlQWRkcmVzcyh1dHhvc1tpXS5hZGRyZXNzZXNbZmlzdFNpZ25hdHVyZUlkeF0pLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuYmUuZXF1YWwoZmlyc3RTaWduZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCc0IG9mIDQgc2lnbmVycycsICgpID0+IHtcbiAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICAgIGFtb3VudDogJzUwOTk5OTk3NScsXG4gICAgICAgIHR4aWQ6ICdDRWJGYTNoQ0RmTUZ1OEFTWlA5clQxczNYMlg4d3FvUEFOMjU4a2tTdGs5Slgzd3NIJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIGFkZHJlc3NlczogW1xuICAgICAgICAgICdQLWZ1amkxaGRrN250dzBodWhxbWxobGhlbWU5dDdzY3N5OWxoZmh3M3l3eTQnLFxuICAgICAgICAgICdQLWZ1amkxeXpwZnNkYWxoZndrcTJjZWV3Z3M5d3Y3azB1ZnQ0MHlkcHVqNTknLFxuICAgICAgICAgICdQLWZ1amkxM3B5Yzg5dDR4NTQ4M2ZnZGZnZzlsY25weHo3Z2dyMDl2bjZtNmMnLFxuICAgICAgICAgICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgICBdLFxuICAgICAgICB0aHJlc2hvbGQ6IDQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgYW1vdW50OiAnMjY5MzI4MzAyNzMnLFxuICAgICAgICB0eGlkOiAnMlZ5V05SNHE4cDdabktmYW90MzdTYk1CQ1dIYkVicUVjYTdBZjF0aVJUQXJrSk1kWHQnLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgYWRkcmVzc2VzOiBbXG4gICAgICAgICAgJ1AtZnVqaTF5enBmc2RhbGhmd2txMmNlZXdnczl3djdrMHVmdDQweWRwdWo1OScsXG4gICAgICAgICAgJ1AtZnVqaTEzcHljODl0NHg1NDgzZmdkZmdnOWxjbnB4ejdnZ3IwOXZuNm02YycsXG4gICAgICAgICAgJ1AtZnVqaTEwM2NtbnRzc3A2cW51Y2VqYWhkZHk0MndjeTRxdHkwdWo0MjgyMicsXG4gICAgICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAgIF0sXG4gICAgICAgIHRocmVzaG9sZDogNCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICBjb25zdCBzZW5kZXI6IEJ1ZmZlckF2YXhbXSA9IFtcbiAgICAgICdQLWZ1amkxMDNjbW50c3NwNnFudWNlamFoZGR5NDJ3Y3k0cXR5MHVqNDI4MjInLFxuICAgICAgJ1AtZnVqaTFoZGs3bnR3MGh1aHFtbGhsaGVtZTl0N3Njc3k5bGhmaHczeXd5NCcsXG4gICAgICAnUC1mdWppMXl6cGZzZGFsaGZ3a3EyY2Vld2dzOXd2N2swdWZ0NDB5ZHB1ajU5JyxcbiAgICAgICdQLWZ1amkxM3B5Yzg5dDR4NTQ4M2ZnZGZnZzlsY25weHo3Z2dyMDl2bjZtNmMnLFxuICAgIF0ubWFwKChhKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYSkpO1xuXG4gICAgY29uc3QgZmlyc3RTaWduZXIgPSBzZW5kZXJbMF0udG9TdHJpbmcoJ2hleCcpO1xuICAgIC8vIHNlY29uZCBzaWduZXIgaXMgWmVyb3MgY3JlZGVudGlhbC5cbiAgICBjb25zdCB0aGlyZFNpZ25lciA9IHNlbmRlclsyXS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgZm9ydGhTaWduZXIgPSBzZW5kZXJbM10udG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY3JlZGVudGlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaW5wdXRzIH0gPSB1dHhvVG9JbnB1dCh1dHhvcywgc2VuZGVyLCA0KTtcbiAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZSA9IGlucHV0LnNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUpID0+XG4gICAgICAgICAgc2lnbmF0dXJlLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLnN1YnN0cmluZyg5MClcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRTaWduYXR1cmUuc2hvdWxkLmNvbnRhaW5FcWwoZmlyc3RTaWduZXIpO1xuICAgICAgICBjb25zdCBmaXN0U2lnbmF0dXJlSWR4ID0gaW5wdXQuc2lnbmF0dXJlc0lkeFtleHBlY3RlZFNpZ25hdHVyZS5pbmRleE9mKGZpcnN0U2lnbmVyKV07XG4gICAgICAgIHV0aWxzLnBhcnNlQWRkcmVzcyh1dHhvc1tpXS5hZGRyZXNzZXNbZmlzdFNpZ25hdHVyZUlkeF0pLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuYmUuZXF1YWwoZmlyc3RTaWduZXIpO1xuXG4gICAgICAgIGV4cGVjdGVkU2lnbmF0dXJlLnNob3VsZC5jb250YWluRXFsKHRoaXJkU2lnbmVyKTtcbiAgICAgICAgY29uc3QgdGhpcmRTaWduYXR1cmVJZHggPSBpbnB1dC5zaWduYXR1cmVzSWR4W2V4cGVjdGVkU2lnbmF0dXJlLmluZGV4T2YodGhpcmRTaWduZXIpXTtcbiAgICAgICAgdXRpbHMucGFyc2VBZGRyZXNzKHV0eG9zW2ldLmFkZHJlc3Nlc1t0aGlyZFNpZ25hdHVyZUlkeF0pLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuYmUuZXF1YWwodGhpcmRTaWduZXIpO1xuXG4gICAgICAgIGV4cGVjdGVkU2lnbmF0dXJlLnNob3VsZC5jb250YWluRXFsKGZvcnRoU2lnbmVyKTtcbiAgICAgICAgY29uc3QgZm9ydGhTaWduYXR1cmVJZHggPSBpbnB1dC5zaWduYXR1cmVzSWR4W2V4cGVjdGVkU2lnbmF0dXJlLmluZGV4T2YoZm9ydGhTaWduZXIpXTtcbiAgICAgICAgdXRpbHMucGFyc2VBZGRyZXNzKHV0eG9zW2ldLmFkZHJlc3Nlc1tmb3J0aFNpZ25hdHVyZUlkeF0pLnRvU3RyaW5nKCdoZXgnKS5zaG91bGQuYmUuZXF1YWwoZm9ydGhTaWduZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/validateTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|