@bitgo/sdk-coin-avaxp 5.2.13 → 5.2.15
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/CHANGELOG.md +8 -0
- package/package.json +6 -6
- package/LICENSE +0 -191
- package/dist/src/avaxp.d.ts +0 -91
- package/dist/src/avaxp.d.ts.map +0 -1
- package/dist/src/avaxp.js +0 -343
- package/dist/src/iface.d.ts +0 -42
- package/dist/src/iface.d.ts.map +0 -1
- package/dist/src/iface.js +0 -3
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -45
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -21
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +0 -49
- package/dist/src/lib/atomicTransactionBuilder.d.ts +0 -38
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/atomicTransactionBuilder.js +0 -129
- package/dist/src/lib/delegatorTxBuilder.d.ts +0 -95
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/delegatorTxBuilder.js +0 -285
- package/dist/src/lib/deprecatedTransaction.d.ts +0 -98
- package/dist/src/lib/deprecatedTransaction.d.ts.map +0 -1
- package/dist/src/lib/deprecatedTransaction.js +0 -344
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts +0 -114
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/deprecatedTransactionBuilder.js +0 -210
- package/dist/src/lib/errors.d.ts +0 -8
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/exportInCTxBuilder.d.ts +0 -55
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInCTxBuilder.js +0 -159
- package/dist/src/lib/exportTxBuilder.d.ts +0 -33
- package/dist/src/lib/exportTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportTxBuilder.js +0 -88
- package/dist/src/lib/iface.d.ts +0 -68
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -20
- package/dist/src/lib/importInCTxBuilder.d.ts +0 -44
- package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importInCTxBuilder.js +0 -131
- package/dist/src/lib/importTxBuilder.d.ts +0 -18
- package/dist/src/lib/importTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importTxBuilder.js +0 -67
- package/dist/src/lib/index.d.ts +0 -11
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -37
- package/dist/src/lib/keyPair.d.ts +0 -58
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -150
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -154
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +0 -452
- package/dist/src/lib/transaction.d.ts +0 -78
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -254
- package/dist/src/lib/transactionBuilder.d.ts +0 -71
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -138
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -57
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -178
- package/dist/src/lib/utils.d.ts +0 -184
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -378
- package/dist/src/lib/utxoEngine.d.ts +0 -53
- package/dist/src/lib/utxoEngine.d.ts.map +0 -1
- package/dist/src/lib/utxoEngine.js +0 -112
- package/dist/src/lib/validatorTxBuilder.d.ts +0 -37
- package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/validatorTxBuilder.js +0 -69
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -11
- package/dist/src/tavaxp.d.ts +0 -9
- package/dist/src/tavaxp.d.ts.map +0 -1
- package/dist/src/tavaxp.js +0 -14
- package/dist/test/resources/avaxp.d.ts +0 -259
- package/dist/test/resources/avaxp.d.ts.map +0 -1
- package/dist/test/resources/avaxp.js +0 -1093
- package/dist/test/resources/errors.d.ts +0 -19
- package/dist/test/resources/errors.d.ts.map +0 -1
- package/dist/test/resources/errors.js +0 -22
- package/dist/test/resources/keychains.d.ts +0 -18
- package/dist/test/resources/keychains.d.ts.map +0 -1
- package/dist/test/resources/keychains.js +0 -30
- package/dist/test/resources/tx/exportC.d.ts +0 -14
- package/dist/test/resources/tx/exportC.d.ts.map +0 -1
- package/dist/test/resources/tx/exportC.js +0 -21
- package/dist/test/resources/tx/importC.d.ts +0 -29
- package/dist/test/resources/tx/importC.d.ts.map +0 -1
- package/dist/test/resources/tx/importC.js +0 -42
- package/dist/test/resources/tx/importP.d.ts +0 -29
- package/dist/test/resources/tx/importP.d.ts.map +0 -1
- package/dist/test/resources/tx/importP.js +0 -42
- package/dist/test/unit/avaxp.d.ts +0 -2
- package/dist/test/unit/avaxp.d.ts.map +0 -1
- package/dist/test/unit/avaxp.js +0 -732
- package/dist/test/unit/lib/exportC2PTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportC2PTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportC2PTxBuilder.js +0 -125
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportP2CTxBuilder.js +0 -183
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/importC2PTxBuilder.js +0 -99
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/importP2CTxBuilder.js +0 -137
- package/dist/test/unit/lib/keyPair.d.ts +0 -2
- package/dist/test/unit/lib/keyPair.d.ts.map +0 -1
- package/dist/test/unit/lib/keyPair.js +0 -186
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +0 -341
- package/dist/test/unit/lib/signFlowTestSuit.d.ts +0 -20
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +0 -1
- package/dist/test/unit/lib/signFlowTestSuit.js +0 -80
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts +0 -2
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/lib/transactionBuilderFactory.js +0 -179
- package/dist/test/unit/lib/utils.d.ts +0 -2
- package/dist/test/unit/lib/utils.d.ts.map +0 -1
- package/dist/test/unit/lib/utils.js +0 -83
- package/dist/test/unit/lib/utxoEngine.d.ts +0 -2
- package/dist/test/unit/lib/utxoEngine.d.ts.map +0 -1
- package/dist/test/unit/lib/utxoEngine.js +0 -168
- package/dist/test/unit/lib/validateTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/validateTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/validateTxBuilder.js +0 -327
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/transactionBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -1,179 +0,0 @@
|
|
|
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/statics");
|
|
44
|
-
const sdk_core_1 = require("@bitgo/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnRUFBa0Q7QUFDbEQscUVBQXVEO0FBQ3ZELDBDQUFxRTtBQUNyRSw0Q0FBdUM7QUFDdkMsOENBQW1FO0FBQ25FLHdEQUFzRDtBQUN0RCx3REFBc0Q7QUFDdEQsd0RBQXNEO0FBQ3RELGlEQUE2RDtBQUU3RCxRQUFRLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO0lBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLDJCQUEyQixDQUNuRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1lBQzdDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pELENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxZQUFZLENB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SUFBSSxFQUFFO1lBQ3JFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLENBQUMsV0FBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2F2YXhwJztcbmltcG9ydCAqIGFzIGVycm9yTWVzc2FnZSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJyb3JzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFR4RGF0YSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBJTVBPUlRfUCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy90eC9pbXBvcnRQJztcbmltcG9ydCB7IElNUE9SVF9DIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R4L2ltcG9ydEMnO1xuaW1wb3J0IHsgRVhQT1JUX0MgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHgvZXhwb3J0Qyc7XG5pbXBvcnQgeyBBRERWQUxJREFUT1JfU0FNUExFUyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9hdmF4cCc7XG5cbmRlc2NyaWJlKCdBdmF4UCBUcmFuc2FjdGlvbiBCdWlsZGVyIEZhY3RvcnknLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKTtcblxuICBkZXNjcmliZSgnc2hvdWxkIHZhbGlkYXRlJywgKCkgPT4ge1xuICAgIGl0KCdhbiBlbXB0eSByYXcgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZmFjdG9yeS5mcm9tKCcnKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBlcnJvck1lc3NhZ2UuRVJST1JfRU1QVFlfUkFXX1RSQU5TQUNUSU9OXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGludmFsaWQgcmF3IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5JTlZBTElEX1JBV19UUkFOU0FDVElPTik7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX1JBV19QQVJTSU5HXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCB2YWxpZGF0ZSBhIGNvcnJlY3QgcmF3IHR4JywgKCkgPT4ge1xuICAgICAgZmFjdG9yeS5mcm9tKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgpO1xuICAgICAgLy8gc2hvdWxkIG5vdCB0aHJvdyBhIGVycm9yIVxuICAgIH0pO1xuXG4gICAgaXQoXCJTaG91bGRuJ3QgZ2V0IGEgd2FsbGV0IGluaXRpYWxpemF0aW9uIGJ1aWxkZXJcIiwgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX1dBTExFVF9JTklUSUFMSVpBVElPTlxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHJlYWRhYmxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHJhd1R4cyA9IFtcbiAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MuZnVsbHNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy5oYWxmc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLnVuc2lnbmVkVHhIZXgsXG4gICAgICBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX1AuaGFsZnNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLnVuc2lnbmVkVHhIZXgsXG4gICAgXTtcbiAgICBsZXQgdHg6IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUuZnVsbHNpZ250eEhleFxuICAgICAgKTtcbiAgICAgIHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gc3RyaW5naWZpeSBhbnkgdHJhbnNhY3Rpb24gb2JqZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiByYXdUeHMpIHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShyYXdUeCk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBhc3NlcnQodHlwZW9mIEpTT04uc3RyaW5naWZ5KHR4SnNvbiksICdzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQganNvbiBzdHJpbmdpZml5IGFkZFZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgYXNzZXJ0KHR5cGVvZiBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSksICdzdHJpbmcnKTtcbiAgICAgIHR4SnNvbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUudHhpZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGdldCBhIHR4aWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUudHhpZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZXhwbGFpbnMgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIFNpZ25lZCBBZGRWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIEhhbGYgU2lnbmVkIEFkZFZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuaGFsZnNpZ250eEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgdW5zaWduZWQgQWRkVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Nyb3NzIGNoYWluIHRyYW5zZmVyIGhhcyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNoYWlucycsICgpID0+IHtcbiAgICBjb25zdCBwMmNUeHMgPSBbXG4gICAgICBJTVBPUlRfUC5mdWxsc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX1AuaGFsZnNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLnVuc2lnbmVkVHhIZXgsXG4gICAgICBFWFBPUlRfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgRVhQT1JUX0MudW5zaWduZWRUeEhleCxcbiAgICBdO1xuXG4gICAgY29uc3QgYzJwVHhzID0gW1xuICAgICAgSU1QT1JUX0MuZnVsbHNpZ250eEhleCxcbiAgICAgIElNUE9SVF9DLmhhbGZzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfQy51bnNpZ25lZFR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MuaGFsZnNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy51bnNpZ25lZFR4SGV4LFxuICAgIF07XG5cbiAgICBjb25zdCBub0Nyb3NzQ2hhaW5UeHMgPSBbXG4gICAgICBBRERWQUxJREFUT1JfU0FNUExFUy5mdWxsc2lnbnR4SGV4LFxuICAgICAgQUREVkFMSURBVE9SX1NBTVBMRVMuaGFsZnNpZ250eEhleCxcbiAgICAgIEFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXgsXG4gICAgXTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHRvSnNvbih0eEhleDogc3RyaW5nKTogUHJvbWlzZTxUeERhdGE+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20odHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC50b0pzb24oKTtcbiAgICB9XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gaGF2ZSBzb3VyY2VDaGFpbiBDIGFuZCBkZXN0aW5hdGlvbkNoYWluIFAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJhd1R4IG9mIHAyY1R4cykge1xuICAgICAgICBjb25zdCB0eEpzb24gPSBhd2FpdCB0b0pzb24ocmF3VHgpO1xuICAgICAgICB0eEpzb24uc291cmNlQ2hhaW4hLnNob3VsZC5lcXVhbCgnQycpO1xuICAgICAgICB0eEpzb24uZGVzdGluYXRpb25DaGFpbiEuc2hvdWxkLmVxdWFsKCdQJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gaGF2ZSBzb3VyY2VDaGFpbiBQIGFuZCBkZXN0aW5hdGlvbkNoYWluIEMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJhd1R4IG9mIGMycFR4cykge1xuICAgICAgICBjb25zdCB0eEpzb24gPSBhd2FpdCB0b0pzb24ocmF3VHgpO1xuICAgICAgICB0eEpzb24uc291cmNlQ2hhaW4hLnNob3VsZC5lcXVhbCgnUCcpO1xuICAgICAgICB0eEpzb24uZGVzdGluYXRpb25DaGFpbiEuc2hvdWxkLmVxdWFsKCdDJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gaGF2ZSBub3Qgc291cmNlQ2hhaW4gZWl0aGVyIGRlc3RpbmF0aW9uQ2hhaW4gJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiBub0Nyb3NzQ2hhaW5UeHMpIHtcbiAgICAgICAgY29uc3QgdHhKc29uID0gYXdhaXQgdG9Kc29uKHJhd1R4KTtcbiAgICAgICAgdHhKc29uLnNob3VsZC5wcm9wZXJ0eSgnc291cmNlQ2hhaW4nKS5iZS51bmRlZmluZWQoKTtcbiAgICAgICAgdHhKc29uLnNob3VsZC5wcm9wZXJ0eSgnZGVzdGluYXRpb25DaGFpbicpLmJlLnVuZGVmaW5lZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -1,83 +0,0 @@
|
|
|
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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWdCO0FBQ2hCLDJDQUFtRDtBQUNuRCxnRUFBa0Q7QUFDbEQsNENBQXlEO0FBRXpELFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sT0FBTyxHQUFxQixlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQTJCLENBQUM7SUFDbEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xILE1BQU0sU0FBUyxHQUFHLFdBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFJLENBQUMsQ0FBQztRQUNoRSxXQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUNyQixFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLFdBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0UsV0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RSxXQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUFHLDZDQUE2QyxDQUFDO1lBQzlELFdBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxNQUFNLGNBQWMsR0FBRztnQkFDckIsK0NBQStDO2dCQUMvQywwQ0FBMEM7Z0JBQzFDLHlDQUF5QzthQUMxQyxDQUFDO1lBRUYsV0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1lBQy9DLE1BQU0scUJBQXFCLEdBQ3pCLGdJQUFnSSxDQUFDO1lBRW5JLFdBQUssQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDO1lBQzNDLFdBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxtREFBbUQsQ0FBQztZQUNsRSxXQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVXRpbHMsIEtleVBhaXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliLyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0IHsgQXZhbGFuY2hlTmV0d29yaywgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmRlc2NyaWJlKCdBdmF4cCBVdGlscycsICgpID0+IHtcbiAgY29uc3QgbmV0d29yazogQXZhbGFuY2hlTmV0d29yayA9IGNvaW5zLmdldCgndGF2YXhwJykubmV0d29yayBhcyBBdmFsYW5jaGVOZXR3b3JrO1xuICBjb25zdCBjb21wcmVzc2VkID0gdHJ1ZTtcbiAgaXQoJ3Nob3VsZCByZWNvdmVyIHNpZ25hdHVyZScsICgpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlNFRURfQUNDT1VOVC5wcml2YXRlS2V5QXZheCB9KTtcbiAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldFByaXZhdGVLZXkoKTtcbiAgICBjb25zdCBwdWIgPSBrZXlQYWlyLmdldFB1YmxpY0tleSh7IGNvbXByZXNzZWQgfSk7XG4gICAgY29uc3QgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKCdMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gRXN0IG1heGltZSBpdXJlIGV0IG9kaW8gaXVzdG8gbm9uIGFzcGVybmF0dXIuLi4nLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gVXRpbHMuY3JlYXRlU2lnbmF0dXJlKG5ldHdvcmssIG1lc3NhZ2UsIHBydiEpO1xuICAgIFV0aWxzLnJlY292ZXJ5U2lnbmF0dXJlKG5ldHdvcmssIG1lc3NhZ2UsIHNpZ25hdHVyZSkuc2hvdWxkLmRlZXBFcXVhbChwdWIpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleUNiNTgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KHRlc3REYXRhLlNFRURfQUNDT1VOVC5wdWJsaWNLZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBVdGlscy5pc1ZhbGlkUHVibGljS2V5KHRlc3REYXRhLlNFRURfQUNDT1VOVC54UHVibGljS2V5KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnZnVqaTE1amFtd3VrZnFrd2hlOHoyNnRqcXhlanRqZDNqazl2ajRrbXh3YSc7XG4gICAgICBVdGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW4gYWRkcmVzcyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQWRkcmVzc2VzID0gW1xuICAgICAgICAnUC1mdWppMTVqYW13dWtmcWt3aGU4ejI2dGpxeGVqdGpkM2prOXZqNGtteHdhJyxcbiAgICAgICAgJ05vZGVJRC1NZHRlUzlVOTg3UFk3aXdBNVBjejNzS1ZwckpBYkF2RTcnLFxuICAgICAgICAnTm9kZUlELVAxS2pkUE5yYXA4TEhmeDVBc3RjWHhzSGprM2piYnlGJyxcbiAgICAgIF07XG5cbiAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzKHZhbGlkQWRkcmVzc2VzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhZGRyZXNzIG11bHRpU2lnIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0cmluZ011bHRpU2lnQWRkcmVzcyA9XG4gICAgICAgICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2F+Tm9kZUlELU1kdGVTOVU5ODdQWTdpd0E1UGN6M3NLVnBySkFiQXZFN35Ob2RlSUQtUDFLamRQTnJhcDhMSGZ4NUFzdGNYeHNIamszamJieUYnO1xuXG4gICAgICBVdGlscy5pc1ZhbGlkQWRkcmVzcyhzdHJpbmdNdWx0aVNpZ0FkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gaW52YWxpZCBibG9jayBpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcbiAgICAgIFV0aWxzLmlzVmFsaWRCbG9ja0lkKGJsb2NrKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBibG9jayBpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gJ3pHQzI2QmFnajc5UkJQb2JLOEhnaGs5eHVxQW1NRTUzZUVVdE05UkoyeWFkQnhyY2gnO1xuICAgICAgVXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2spLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utxoEngine.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/utxoEngine.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|
|
@@ -1,168 +0,0 @@
|
|
|
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=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/validateTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
|