@bitgo-beta/sdk-coin-flrp 1.0.1-beta.9 → 1.0.1-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/flrp.d.ts +82 -61
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +293 -134
- package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -6
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +233 -29
- package/dist/src/lib/constants.d.ts +160 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +213 -3
- package/dist/src/lib/delegatorTxBuilder.d.ts +58 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegatorTxBuilder.js +224 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts +1 -1
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInCTxBuilder.js +46 -17
- package/dist/src/lib/exportInPTxBuilder.d.ts +1 -1
- package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInPTxBuilder.js +70 -6
- package/dist/src/lib/iface.d.ts +52 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/importInCTxBuilder.d.ts +67 -0
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInCTxBuilder.js +403 -0
- package/dist/src/lib/importInPTxBuilder.d.ts +73 -0
- package/dist/src/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInPTxBuilder.js +464 -0
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +15 -2
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +4 -6
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +81 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +248 -0
- package/dist/src/lib/transaction.d.ts +111 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +322 -0
- package/dist/src/lib/transactionBuilder.d.ts +85 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +167 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +37 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +91 -0
- package/dist/src/lib/types.d.ts +78 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +5 -0
- package/dist/src/lib/utils.d.ts +59 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +160 -52
- package/dist/src/lib/validatorTxBuilder.d.ts +40 -0
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/validatorTxBuilder.js +180 -0
- package/dist/test/unit/delegatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/delegatorTxBuilder.test.js +233 -0
- package/dist/test/unit/lib/atomicTransactionBuilder.js +37 -11
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInCTxBuilder.js +584 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInPTxBuilder.js +377 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInCTxBuilder.js +257 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInPTxBuilder.js +500 -0
- package/dist/test/unit/lib/transaction.d.ts +2 -0
- package/dist/test/unit/lib/transaction.d.ts.map +1 -0
- package/dist/test/unit/lib/transaction.js +460 -0
- package/dist/test/unit/lib/utils.js +55 -1
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +271 -0
- package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.test.js +114 -0
- package/dist/test/unit/validatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/validatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/validatorTxBuilder.test.js +293 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/.eslintignore +0 -5
- package/.eslintrc.json +0 -7
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -0
- package/dist/test/unit/lib/exportTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportTxBuilder.js +0 -45
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
37
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
38
|
+
const assert = __importStar(require("assert"));
|
|
39
|
+
const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
|
|
40
|
+
describe('TransactionBuilder', function () {
|
|
41
|
+
const coinConfig = statics_1.coins.get('tflrp');
|
|
42
|
+
// We can't directly instantiate abstract TransactionBuilder,
|
|
43
|
+
// so we test through concrete implementations or static methods
|
|
44
|
+
describe('Class availability', function () {
|
|
45
|
+
it('should be available as a constructor', function () {
|
|
46
|
+
assert.ok(transactionBuilder_1.TransactionBuilder);
|
|
47
|
+
assert.ok(typeof transactionBuilder_1.TransactionBuilder === 'function');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('Validation methods', function () {
|
|
51
|
+
it('should have validateAmount method', function () {
|
|
52
|
+
// Test through a concrete implementation (we'll use DelegatorTxBuilder)
|
|
53
|
+
const { DelegatorTxBuilder } = require('../../src/lib/delegatorTxBuilder');
|
|
54
|
+
const builder = new DelegatorTxBuilder(coinConfig);
|
|
55
|
+
// Valid amount
|
|
56
|
+
assert.doesNotThrow(() => {
|
|
57
|
+
// Access protected method
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
builder.validateAmount(1000000000000000000n);
|
|
60
|
+
});
|
|
61
|
+
// Invalid amount (negative)
|
|
62
|
+
assert.throws(() => {
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
64
|
+
builder.validateAmount(-1000n);
|
|
65
|
+
}, sdk_core_1.BuildTransactionError);
|
|
66
|
+
// Invalid amount (zero)
|
|
67
|
+
assert.throws(() => {
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
|
+
builder.validateAmount(0n);
|
|
70
|
+
}, sdk_core_1.BuildTransactionError);
|
|
71
|
+
});
|
|
72
|
+
it('should validate node IDs through delegator builder', function () {
|
|
73
|
+
const { DelegatorTxBuilder } = require('../../src/lib/delegatorTxBuilder');
|
|
74
|
+
const builder = new DelegatorTxBuilder(coinConfig);
|
|
75
|
+
// Valid node ID
|
|
76
|
+
assert.doesNotThrow(() => {
|
|
77
|
+
builder.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
78
|
+
});
|
|
79
|
+
// Invalid node ID (empty)
|
|
80
|
+
assert.throws(() => {
|
|
81
|
+
builder.nodeID('');
|
|
82
|
+
}, sdk_core_1.BuildTransactionError);
|
|
83
|
+
});
|
|
84
|
+
it('should validate time values through delegator builder', function () {
|
|
85
|
+
const { DelegatorTxBuilder } = require('../../src/lib/delegatorTxBuilder');
|
|
86
|
+
const builder = new DelegatorTxBuilder(coinConfig);
|
|
87
|
+
// Valid start time
|
|
88
|
+
assert.doesNotThrow(() => {
|
|
89
|
+
builder.startTime(1640995200);
|
|
90
|
+
});
|
|
91
|
+
// Invalid start time (negative)
|
|
92
|
+
assert.throws(() => {
|
|
93
|
+
builder.startTime(-1);
|
|
94
|
+
}, sdk_core_1.BuildTransactionError);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('Network and Blockchain validation', function () {
|
|
98
|
+
it('should validate through initBuilder method', function () {
|
|
99
|
+
const { DelegatorTxBuilder } = require('../../src/lib/delegatorTxBuilder');
|
|
100
|
+
const builder = new DelegatorTxBuilder(coinConfig);
|
|
101
|
+
// Test with valid transaction data (should not throw)
|
|
102
|
+
const validTx = {
|
|
103
|
+
nodeID: 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg',
|
|
104
|
+
startTime: 1640995200,
|
|
105
|
+
endTime: 1641081600,
|
|
106
|
+
stakeAmount: '1000000000000000000',
|
|
107
|
+
};
|
|
108
|
+
assert.doesNotThrow(() => {
|
|
109
|
+
builder.initBuilder(validTx);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQTZEO0FBQzdELCtDQUFpQztBQUNqQyx5RUFBc0U7QUFFdEUsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEMsNkRBQTZEO0lBQzdELGdFQUFnRTtJQUNoRSxRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO1lBQ3pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsdUNBQWtCLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sdUNBQWtCLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsd0VBQXdFO1lBQ3hFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkQsZUFBZTtZQUNmLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO2dCQUN2QiwwQkFBMEI7Z0JBQzFCLDhEQUE4RDtnQkFDN0QsT0FBZSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsNEJBQTRCO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNqQiw4REFBOEQ7Z0JBQzdELE9BQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxDQUFDLEVBQUUsZ0NBQXFCLENBQUMsQ0FBQztZQUUxQix3QkFBd0I7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pCLDhEQUE4RDtnQkFDN0QsT0FBZSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLEVBQUUsZ0NBQXFCLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRW5ELGdCQUFnQjtZQUNoQixNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBRUgsMEJBQTBCO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNqQixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsRUFBRSxnQ0FBcUIsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFO1lBQzFELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkQsbUJBQW1CO1lBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO2dCQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsZ0NBQWdDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNqQixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxFQUFFLGdDQUFxQixDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDM0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVuRCxzREFBc0Q7WUFDdEQsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsTUFBTSxFQUFFLDBDQUEwQztnQkFDbEQsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixXQUFXLEVBQUUscUJBQXFCO2FBQ25DLENBQUM7WUFFRixNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyJztcblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndGZscnAnKTtcblxuICAvLyBXZSBjYW4ndCBkaXJlY3RseSBpbnN0YW50aWF0ZSBhYnN0cmFjdCBUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIC8vIHNvIHdlIHRlc3QgdGhyb3VnaCBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb3Igc3RhdGljIG1ldGhvZHNcbiAgZGVzY3JpYmUoJ0NsYXNzIGF2YWlsYWJpbGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBhIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKFRyYW5zYWN0aW9uQnVpbGRlcik7XG4gICAgICBhc3NlcnQub2sodHlwZW9mIFRyYW5zYWN0aW9uQnVpbGRlciA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHZhbGlkYXRlQW1vdW50IG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgdGhyb3VnaCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uICh3ZSdsbCB1c2UgRGVsZWdhdG9yVHhCdWlsZGVyKVxuICAgICAgY29uc3QgeyBEZWxlZ2F0b3JUeEJ1aWxkZXIgfSA9IHJlcXVpcmUoJy4uLy4uL3NyYy9saWIvZGVsZWdhdG9yVHhCdWlsZGVyJyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IERlbGVnYXRvclR4QnVpbGRlcihjb2luQ29uZmlnKTtcblxuICAgICAgLy8gVmFsaWQgYW1vdW50XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgLy8gQWNjZXNzIHByb3RlY3RlZCBtZXRob2RcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgKGJ1aWxkZXIgYXMgYW55KS52YWxpZGF0ZUFtb3VudCgxMDAwMDAwMDAwMDAwMDAwMDAwbik7XG4gICAgICB9KTtcblxuICAgICAgLy8gSW52YWxpZCBhbW91bnQgKG5lZ2F0aXZlKVxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIChidWlsZGVyIGFzIGFueSkudmFsaWRhdGVBbW91bnQoLTEwMDBuKTtcbiAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG5cbiAgICAgIC8vIEludmFsaWQgYW1vdW50ICh6ZXJvKVxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIChidWlsZGVyIGFzIGFueSkudmFsaWRhdGVBbW91bnQoMG4pO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbm9kZSBJRHMgdGhyb3VnaCBkZWxlZ2F0b3IgYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgRGVsZWdhdG9yVHhCdWlsZGVyIH0gPSByZXF1aXJlKCcuLi8uLi9zcmMvbGliL2RlbGVnYXRvclR4QnVpbGRlcicpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBEZWxlZ2F0b3JUeEJ1aWxkZXIoY29pbkNvbmZpZyk7XG5cbiAgICAgIC8vIFZhbGlkIG5vZGUgSURcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLm5vZGVJRCgnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEludmFsaWQgbm9kZSBJRCAoZW1wdHkpXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5ub2RlSUQoJycpO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdGltZSB2YWx1ZXMgdGhyb3VnaCBkZWxlZ2F0b3IgYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgRGVsZWdhdG9yVHhCdWlsZGVyIH0gPSByZXF1aXJlKCcuLi8uLi9zcmMvbGliL2RlbGVnYXRvclR4QnVpbGRlcicpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBEZWxlZ2F0b3JUeEJ1aWxkZXIoY29pbkNvbmZpZyk7XG5cbiAgICAgIC8vIFZhbGlkIHN0YXJ0IHRpbWVcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnN0YXJ0VGltZSgxNjQwOTk1MjAwKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbnZhbGlkIHN0YXJ0IHRpbWUgKG5lZ2F0aXZlKVxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuc3RhcnRUaW1lKC0xKTtcbiAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdOZXR3b3JrIGFuZCBCbG9ja2NoYWluIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0aHJvdWdoIGluaXRCdWlsZGVyIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgRGVsZWdhdG9yVHhCdWlsZGVyIH0gPSByZXF1aXJlKCcuLi8uLi9zcmMvbGliL2RlbGVnYXRvclR4QnVpbGRlcicpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBEZWxlZ2F0b3JUeEJ1aWxkZXIoY29pbkNvbmZpZyk7XG5cbiAgICAgIC8vIFRlc3Qgd2l0aCB2YWxpZCB0cmFuc2FjdGlvbiBkYXRhIChzaG91bGQgbm90IHRocm93KVxuICAgICAgY29uc3QgdmFsaWRUeCA9IHtcbiAgICAgICAgbm9kZUlEOiAnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycsXG4gICAgICAgIHN0YXJ0VGltZTogMTY0MDk5NTIwMCxcbiAgICAgICAgZW5kVGltZTogMTY0MTA4MTYwMCxcbiAgICAgICAgc3Rha2VBbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHZhbGlkVHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatorTxBuilder.test.d.ts","sourceRoot":"","sources":["../../../test/unit/validatorTxBuilder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,293 @@
|
|
|
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
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
37
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
38
|
+
const assert = __importStar(require("assert"));
|
|
39
|
+
const validatorTxBuilder_1 = require("../../src/lib/validatorTxBuilder");
|
|
40
|
+
const delegatorTxBuilder_1 = require("../../src/lib/delegatorTxBuilder");
|
|
41
|
+
describe('ValidatorTxBuilder', function () {
|
|
42
|
+
const coinConfig = statics_1.coins.get('tflrp');
|
|
43
|
+
let builder;
|
|
44
|
+
beforeEach(function () {
|
|
45
|
+
builder = new validatorTxBuilder_1.ValidatorTxBuilder(coinConfig);
|
|
46
|
+
});
|
|
47
|
+
describe('Constructor', function () {
|
|
48
|
+
it('should initialize with coin config', function () {
|
|
49
|
+
assert.ok(builder);
|
|
50
|
+
assert.ok(builder instanceof validatorTxBuilder_1.ValidatorTxBuilder);
|
|
51
|
+
assert.ok(builder instanceof delegatorTxBuilder_1.DelegatorTxBuilder);
|
|
52
|
+
});
|
|
53
|
+
it('should have correct transaction type', function () {
|
|
54
|
+
assert.strictEqual(builder['transactionType'], sdk_core_1.TransactionType.AddValidator);
|
|
55
|
+
});
|
|
56
|
+
it('should initialize with undefined delegation fee rate', function () {
|
|
57
|
+
assert.strictEqual(builder['_delegationFeeRate'], undefined);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('delegationFeeRate', function () {
|
|
61
|
+
it('should set valid delegation fee rate', function () {
|
|
62
|
+
const result = builder.delegationFeeRate(25000); // 2.5%
|
|
63
|
+
assert.strictEqual(result, builder);
|
|
64
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
65
|
+
});
|
|
66
|
+
it('should reject negative delegation fee rate', function () {
|
|
67
|
+
assert.throws(() => {
|
|
68
|
+
builder.delegationFeeRate(-1000);
|
|
69
|
+
}, sdk_core_1.BuildTransactionError);
|
|
70
|
+
});
|
|
71
|
+
it('should reject delegation fee rate below minimum (2%)', function () {
|
|
72
|
+
assert.throws(() => {
|
|
73
|
+
builder.delegationFeeRate(19999); // Below 2%
|
|
74
|
+
}, sdk_core_1.BuildTransactionError);
|
|
75
|
+
});
|
|
76
|
+
it('should accept minimum delegation fee rate (2%)', function () {
|
|
77
|
+
assert.doesNotThrow(() => {
|
|
78
|
+
builder.delegationFeeRate(20000); // Exactly 2%
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
it('should accept delegation fee rate above minimum', function () {
|
|
82
|
+
assert.doesNotThrow(() => {
|
|
83
|
+
builder.delegationFeeRate(30000); // 3%
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('should handle maximum possible delegation fee rate', function () {
|
|
87
|
+
assert.doesNotThrow(() => {
|
|
88
|
+
builder.delegationFeeRate(1000000); // 100%
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
it('should update delegation fee rate when called multiple times', function () {
|
|
92
|
+
builder.delegationFeeRate(25000);
|
|
93
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
94
|
+
builder.delegationFeeRate(30000);
|
|
95
|
+
assert.strictEqual(builder['_delegationFeeRate'], 30000);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('Method chaining', function () {
|
|
99
|
+
it('should allow method chaining with delegation fee rate', function () {
|
|
100
|
+
const result = builder
|
|
101
|
+
.delegationFeeRate(25000) // 2.5%
|
|
102
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
103
|
+
.startTime(1640995200)
|
|
104
|
+
.endTime(1641081600)
|
|
105
|
+
.stakeAmount('1000000000000000000');
|
|
106
|
+
assert.strictEqual(result, builder);
|
|
107
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
108
|
+
assert.strictEqual(builder['_nodeID'], 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
109
|
+
assert.strictEqual(builder['_startTime'], 1640995200n);
|
|
110
|
+
assert.strictEqual(builder['_endTime'], 1641081600n);
|
|
111
|
+
assert.strictEqual(builder['_stakeAmount'], 1000000000000000000n);
|
|
112
|
+
});
|
|
113
|
+
it('should chain with all delegator methods', function () {
|
|
114
|
+
const result = builder
|
|
115
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
116
|
+
.startTime(1640995200)
|
|
117
|
+
.endTime(1641081600)
|
|
118
|
+
.stakeAmount('1000000000000000000')
|
|
119
|
+
.delegationFeeRate(25000) // 2.5%
|
|
120
|
+
.rewardAddresses(['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m']);
|
|
121
|
+
assert.strictEqual(result, builder);
|
|
122
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
123
|
+
});
|
|
124
|
+
it('should work when delegation fee rate is set first', function () {
|
|
125
|
+
const result = builder
|
|
126
|
+
.delegationFeeRate(30000) // 3%
|
|
127
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
128
|
+
assert.strictEqual(result, builder);
|
|
129
|
+
assert.strictEqual(builder['_delegationFeeRate'], 30000);
|
|
130
|
+
assert.strictEqual(builder['_nodeID'], 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
131
|
+
});
|
|
132
|
+
it('should work when delegation fee rate is set last', function () {
|
|
133
|
+
const result = builder
|
|
134
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
135
|
+
.startTime(1640995200)
|
|
136
|
+
.delegationFeeRate(25000); // 2.5%
|
|
137
|
+
assert.strictEqual(result, builder);
|
|
138
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
139
|
+
assert.strictEqual(builder['_nodeID'], 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('Inheritance from DelegatorTxBuilder', function () {
|
|
143
|
+
it('should inherit nodeID method', function () {
|
|
144
|
+
const result = builder.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
145
|
+
assert.strictEqual(result, builder);
|
|
146
|
+
assert.strictEqual(builder['_nodeID'], 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
147
|
+
});
|
|
148
|
+
it('should inherit startTime method', function () {
|
|
149
|
+
const result = builder.startTime(1640995200);
|
|
150
|
+
assert.strictEqual(result, builder);
|
|
151
|
+
assert.strictEqual(builder['_startTime'], 1640995200n);
|
|
152
|
+
});
|
|
153
|
+
it('should inherit endTime method', function () {
|
|
154
|
+
const result = builder.endTime(1641081600);
|
|
155
|
+
assert.strictEqual(result, builder);
|
|
156
|
+
assert.strictEqual(builder['_endTime'], 1641081600n);
|
|
157
|
+
});
|
|
158
|
+
it('should inherit stakeAmount method', function () {
|
|
159
|
+
const result = builder.stakeAmount('1000000000000000000');
|
|
160
|
+
assert.strictEqual(result, builder);
|
|
161
|
+
assert.strictEqual(builder['_stakeAmount'], 1000000000000000000n);
|
|
162
|
+
});
|
|
163
|
+
it('should inherit rewardAddresses method', function () {
|
|
164
|
+
const addresses = ['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m'];
|
|
165
|
+
const result = builder.rewardAddresses(addresses);
|
|
166
|
+
assert.strictEqual(result, builder);
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
168
|
+
assert.deepStrictEqual(builder.transaction._rewardAddresses, addresses);
|
|
169
|
+
});
|
|
170
|
+
it('should inherit validation from delegator methods', function () {
|
|
171
|
+
// Should inherit node ID validation - empty node ID should throw
|
|
172
|
+
assert.throws(() => {
|
|
173
|
+
builder.nodeID('');
|
|
174
|
+
}, sdk_core_1.BuildTransactionError);
|
|
175
|
+
// Should inherit time validation - negative time should throw
|
|
176
|
+
assert.throws(() => {
|
|
177
|
+
builder.startTime(-1);
|
|
178
|
+
}, sdk_core_1.BuildTransactionError);
|
|
179
|
+
// Should inherit stake amount validation - negative amount should throw
|
|
180
|
+
assert.throws(() => {
|
|
181
|
+
builder.stakeAmount(-1000);
|
|
182
|
+
}, sdk_core_1.BuildTransactionError);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('Transaction building validation', function () {
|
|
186
|
+
it('should require delegation fee rate for validation', async function () {
|
|
187
|
+
builder
|
|
188
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
189
|
+
.startTime(1640995200)
|
|
190
|
+
.endTime(1641081600)
|
|
191
|
+
.stakeAmount('1000000000000000000')
|
|
192
|
+
.rewardAddresses(['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m']);
|
|
193
|
+
// Validator builder should fail validation without delegation fee rate (0 is invalid)
|
|
194
|
+
await assert.rejects(async () => {
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
196
|
+
await builder.buildFlareTransaction();
|
|
197
|
+
}, sdk_core_1.BuildTransactionError);
|
|
198
|
+
});
|
|
199
|
+
it('should pass validation with delegation fee rate', async function () {
|
|
200
|
+
builder
|
|
201
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
202
|
+
.startTime(1640995200)
|
|
203
|
+
.endTime(1641081600)
|
|
204
|
+
.stakeAmount('1000000000000000000')
|
|
205
|
+
.delegationFeeRate(25000) // 2.5%
|
|
206
|
+
.rewardAddresses(['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m']);
|
|
207
|
+
await assert.doesNotReject(async () => {
|
|
208
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
209
|
+
await builder.buildFlareTransaction();
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
it('should require all delegator fields', async function () {
|
|
213
|
+
builder.delegationFeeRate(25000); // 2.5%
|
|
214
|
+
// Should still fail without other required fields
|
|
215
|
+
await assert.rejects(async () => {
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
217
|
+
await builder.buildFlareTransaction();
|
|
218
|
+
}, sdk_core_1.BuildTransactionError);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
describe('buildFlareTransaction', function () {
|
|
222
|
+
it('should reject building without delegation fee rate', async function () {
|
|
223
|
+
builder
|
|
224
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
225
|
+
.startTime(1640995200)
|
|
226
|
+
.endTime(1641081600)
|
|
227
|
+
.stakeAmount('1000000000000000000')
|
|
228
|
+
.rewardAddresses(['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m']);
|
|
229
|
+
await assert.rejects(async () => {
|
|
230
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
231
|
+
await builder.buildFlareTransaction();
|
|
232
|
+
}, sdk_core_1.BuildTransactionError);
|
|
233
|
+
});
|
|
234
|
+
it('should reject building without required delegator fields', async function () {
|
|
235
|
+
builder.delegationFeeRate(25000); // 2.5%
|
|
236
|
+
await assert.rejects(async () => {
|
|
237
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
238
|
+
await builder.buildFlareTransaction();
|
|
239
|
+
}, sdk_core_1.BuildTransactionError);
|
|
240
|
+
});
|
|
241
|
+
it('should build transaction with all required fields', async function () {
|
|
242
|
+
builder
|
|
243
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
244
|
+
.startTime(1640995200)
|
|
245
|
+
.endTime(1641081600)
|
|
246
|
+
.stakeAmount('1000000000000000000')
|
|
247
|
+
.delegationFeeRate(25000) // 2.5%
|
|
248
|
+
.rewardAddresses(['P-flare1x0r5h0l8w6nj3k2p0d5g9t5b8v3a9k1m']);
|
|
249
|
+
await assert.doesNotReject(async () => {
|
|
250
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
251
|
+
await builder.buildFlareTransaction();
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
it('should inherit time validation from delegator builder', function () {
|
|
255
|
+
// This test verifies that time validation happens immediately when setting values
|
|
256
|
+
assert.throws(() => {
|
|
257
|
+
builder
|
|
258
|
+
.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg')
|
|
259
|
+
.startTime(1641081600)
|
|
260
|
+
.endTime(1640995200) // End time before start time
|
|
261
|
+
.stakeAmount('1000000000000000000')
|
|
262
|
+
.delegationFeeRate(25000); // 2.5%
|
|
263
|
+
}, sdk_core_1.BuildTransactionError);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
describe('Edge cases and validation', function () {
|
|
267
|
+
it('should handle minimum delegation fee rate (2%)', function () {
|
|
268
|
+
assert.doesNotThrow(() => {
|
|
269
|
+
builder.delegationFeeRate(20000); // 2%
|
|
270
|
+
});
|
|
271
|
+
assert.strictEqual(builder['_delegationFeeRate'], 20000);
|
|
272
|
+
});
|
|
273
|
+
it('should handle higher delegation fee rates', function () {
|
|
274
|
+
assert.doesNotThrow(() => {
|
|
275
|
+
builder.delegationFeeRate(50000); // 5%
|
|
276
|
+
});
|
|
277
|
+
assert.strictEqual(builder['_delegationFeeRate'], 50000);
|
|
278
|
+
});
|
|
279
|
+
it('should handle fee rate validation edge cases', function () {
|
|
280
|
+
// Just below minimum (2%)
|
|
281
|
+
assert.throws(() => builder.delegationFeeRate(19999), sdk_core_1.BuildTransactionError);
|
|
282
|
+
// Just at minimum
|
|
283
|
+
assert.doesNotThrow(() => builder.delegationFeeRate(20000));
|
|
284
|
+
});
|
|
285
|
+
it('should maintain validator-specific properties after operations', function () {
|
|
286
|
+
builder.delegationFeeRate(25000); // 2.5%
|
|
287
|
+
builder.nodeID('NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
288
|
+
assert.strictEqual(builder['_delegationFeeRate'], 25000);
|
|
289
|
+
assert.strictEqual(builder['_nodeID'], 'NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg');
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yVHhCdWlsZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdmFsaWRhdG9yVHhCdWlsZGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQThFO0FBQzlFLCtDQUFpQztBQUNqQyx5RUFBc0U7QUFDdEUseUVBQXNFO0FBRXRFLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksT0FBMkIsQ0FBQztJQUVoQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksdUNBQWtCLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSx1Q0FBa0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO1lBQ3pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsMEJBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRTtZQUN6RCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFD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QUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFZhbGlkYXRvclR4QnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCB7IERlbGVnYXRvclR4QnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvZGVsZWdhdG9yVHhCdWlsZGVyJztcblxuZGVzY3JpYmUoJ1ZhbGlkYXRvclR4QnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndGZscnAnKTtcbiAgbGV0IGJ1aWxkZXI6IFZhbGlkYXRvclR4QnVpbGRlcjtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBidWlsZGVyID0gbmV3IFZhbGlkYXRvclR4QnVpbGRlcihjb2luQ29uZmlnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB3aXRoIGNvaW4gY29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWYWxpZGF0b3JUeEJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBEZWxlZ2F0b3JUeEJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgdHJhbnNhY3Rpb24gdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWyd0cmFuc2FjdGlvblR5cGUnXSwgVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCB1bmRlZmluZWQgZGVsZWdhdGlvbiBmZWUgcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfZGVsZWdhdGlvbkZlZVJhdGUnXSwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlbGVnYXRpb25GZWVSYXRlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIGRlbGVnYXRpb24gZmVlIHJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLmRlbGVnYXRpb25GZWVSYXRlKDI1MDAwKTsgLy8gMi41JVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2RlbGVnYXRpb25GZWVSYXRlJ10sIDI1MDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGRlbGVnYXRpb24gZmVlIHJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgtMTAwMCk7XG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgZGVsZWdhdGlvbiBmZWUgcmF0ZSBiZWxvdyBtaW5pbXVtICgyJSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgxOTk5OSk7IC8vIEJlbG93IDIlXG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgbWluaW11bSBkZWxlZ2F0aW9uIGZlZSByYXRlICgyJSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgyMDAwMCk7IC8vIEV4YWN0bHkgMiVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgZGVsZWdhdGlvbiBmZWUgcmF0ZSBhYm92ZSBtaW5pbXVtJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZGVsZWdhdGlvbkZlZVJhdGUoMzAwMDApOyAvLyAzJVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtYXhpbXVtIHBvc3NpYmxlIGRlbGVnYXRpb24gZmVlIHJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgxMDAwMDAwKTsgLy8gMTAwJVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVwZGF0ZSBkZWxlZ2F0aW9uIGZlZSByYXRlIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgyNTAwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2RlbGVnYXRpb25GZWVSYXRlJ10sIDI1MDAwKTtcblxuICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgzMDAwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2RlbGVnYXRpb25GZWVSYXRlJ10sIDMwMDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01ldGhvZCBjaGFpbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsbG93IG1ldGhvZCBjaGFpbmluZyB3aXRoIGRlbGVnYXRpb24gZmVlIHJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyXG4gICAgICAgIC5kZWxlZ2F0aW9uRmVlUmF0ZSgyNTAwMCkgLy8gMi41JVxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJylcbiAgICAgICAgLnN0YXJ0VGltZSgxNjQwOTk1MjAwKVxuICAgICAgICAuZW5kVGltZSgxNjQxMDgxNjAwKVxuICAgICAgICAuc3Rha2VBbW91bnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYnVpbGRlcik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2RlbGVnYXRpb25GZWVSYXRlJ10sIDI1MDAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfbm9kZUlEJ10sICdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX3N0YXJ0VGltZSddLCAxNjQwOTk1MjAwbik7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX2VuZFRpbWUnXSwgMTY0MTA4MTYwMG4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19zdGFrZUFtb3VudCddLCAxMDAwMDAwMDAwMDAwMDAwMDAwbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNoYWluIHdpdGggYWxsIGRlbGVnYXRvciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlclxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJylcbiAgICAgICAgLnN0YXJ0VGltZSgxNjQwOTk1MjAwKVxuICAgICAgICAuZW5kVGltZSgxNjQxMDgxNjAwKVxuICAgICAgICAuc3Rha2VBbW91bnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUoMjUwMDApIC8vIDIuNSVcbiAgICAgICAgLnJld2FyZEFkZHJlc3NlcyhbJ1AtZmxhcmUxeDByNWgwbDh3Nm5qM2sycDBkNWc5dDViOHYzYTlrMW0nXSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19kZWxlZ2F0aW9uRmVlUmF0ZSddLCAyNTAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2hlbiBkZWxlZ2F0aW9uIGZlZSByYXRlIGlzIHNldCBmaXJzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXJcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKDMwMDAwKSAvLyAzJVxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJyk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19kZWxlZ2F0aW9uRmVlUmF0ZSddLCAzMDAwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX25vZGVJRCddLCAnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB3b3JrIHdoZW4gZGVsZWdhdGlvbiBmZWUgcmF0ZSBpcyBzZXQgbGFzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXJcbiAgICAgICAgLm5vZGVJRCgnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpXG4gICAgICAgIC5zdGFydFRpbWUoMTY0MDk5NTIwMClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKDI1MDAwKTsgLy8gMi41JVxuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfZGVsZWdhdGlvbkZlZVJhdGUnXSwgMjUwMDApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19ub2RlSUQnXSwgJ05vZGVJRC03WGh3Mm1EeHVEUzQ0ajQyVENCNlU1NTc5ZXNiU3QzTGcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0luaGVyaXRhbmNlIGZyb20gRGVsZWdhdG9yVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaW5oZXJpdCBub2RlSUQgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5ub2RlSUQoJ05vZGVJRC03WGh3Mm1EeHVEUzQ0ajQyVENCNlU1NTc5ZXNiU3QzTGcnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19ub2RlSUQnXSwgJ05vZGVJRC03WGh3Mm1EeHVEUzQ0ajQyVENCNlU1NTc5ZXNiU3QzTGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5oZXJpdCBzdGFydFRpbWUgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5zdGFydFRpbWUoMTY0MDk5NTIwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfc3RhcnRUaW1lJ10sIDE2NDA5OTUyMDBuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5oZXJpdCBlbmRUaW1lIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIuZW5kVGltZSgxNjQxMDgxNjAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGJ1aWxkZXIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19lbmRUaW1lJ10sIDE2NDEwODE2MDBuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5oZXJpdCBzdGFrZUFtb3VudCBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLnN0YWtlQW1vdW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfc3Rha2VBbW91bnQnXSwgMTAwMDAwMDAwMDAwMDAwMDAwMG4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmhlcml0IHJld2FyZEFkZHJlc3NlcyBtZXRob2QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzZXMgPSBbJ1AtZmxhcmUxeDByNWgwbDh3Nm5qM2sycDBkNWc5dDViOHYzYTlrMW0nXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIucmV3YXJkQWRkcmVzc2VzKGFkZHJlc3Nlcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBidWlsZGVyKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKChidWlsZGVyIGFzIGFueSkudHJhbnNhY3Rpb24uX3Jld2FyZEFkZHJlc3NlcywgYWRkcmVzc2VzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5oZXJpdCB2YWxpZGF0aW9uIGZyb20gZGVsZWdhdG9yIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaG91bGQgaW5oZXJpdCBub2RlIElEIHZhbGlkYXRpb24gLSBlbXB0eSBub2RlIElEIHNob3VsZCB0aHJvd1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIubm9kZUlEKCcnKTtcbiAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG5cbiAgICAgIC8vIFNob3VsZCBpbmhlcml0IHRpbWUgdmFsaWRhdGlvbiAtIG5lZ2F0aXZlIHRpbWUgc2hvdWxkIHRocm93XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5zdGFydFRpbWUoLTEpO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcblxuICAgICAgLy8gU2hvdWxkIGluaGVyaXQgc3Rha2UgYW1vdW50IHZhbGlkYXRpb24gLSBuZWdhdGl2ZSBhbW91bnQgc2hvdWxkIHRocm93XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5zdGFrZUFtb3VudCgtMTAwMCk7XG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gYnVpbGRpbmcgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlcXVpcmUgZGVsZWdhdGlvbiBmZWUgcmF0ZSBmb3IgdmFsaWRhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLm5vZGVJRCgnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpXG4gICAgICAgIC5zdGFydFRpbWUoMTY0MDk5NTIwMClcbiAgICAgICAgLmVuZFRpbWUoMTY0MTA4MTYwMClcbiAgICAgICAgLnN0YWtlQW1vdW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwJylcbiAgICAgICAgLnJld2FyZEFkZHJlc3NlcyhbJ1AtZmxhcmUxeDByNWgwbDh3Nm5qM2sycDBkNWc5dDViOHYzYTlrMW0nXSk7XG5cbiAgICAgIC8vIFZhbGlkYXRvciBidWlsZGVyIHNob3VsZCBmYWlsIHZhbGlkYXRpb24gd2l0aG91dCBkZWxlZ2F0aW9uIGZlZSByYXRlICgwIGlzIGludmFsaWQpXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGF3YWl0IChidWlsZGVyIGFzIGFueSkuYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk7XG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHZhbGlkYXRpb24gd2l0aCBkZWxlZ2F0aW9uIGZlZSByYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJylcbiAgICAgICAgLnN0YXJ0VGltZSgxNjQwOTk1MjAwKVxuICAgICAgICAuZW5kVGltZSgxNjQxMDgxNjAwKVxuICAgICAgICAuc3Rha2VBbW91bnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUoMjUwMDApIC8vIDIuNSVcbiAgICAgICAgLnJld2FyZEFkZHJlc3NlcyhbJ1AtZmxhcmUxeDByNWgwbDh3Nm5qM2sycDBkNWc5dDViOHYzYTlrMW0nXSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5kb2VzTm90UmVqZWN0KGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgYXdhaXQgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXF1aXJlIGFsbCBkZWxlZ2F0b3IgZmllbGRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgyNTAwMCk7IC8vIDIuNSVcblxuICAgICAgLy8gU2hvdWxkIHN0aWxsIGZhaWwgd2l0aG91dCBvdGhlciByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgYXdhaXQgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZEZsYXJlVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYnVpbGRpbmcgd2l0aG91dCBkZWxlZ2F0aW9uIGZlZSByYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclxuICAgICAgICAubm9kZUlEKCdOb2RlSUQtN1hodzJtRHh1RFM0NGo0MlRDQjZVNTU3OWVzYlN0M0xnJylcbiAgICAgICAgLnN0YXJ0VGltZSgxNjQwOTk1MjAwKVxuICAgICAgICAuZW5kVGltZSgxNjQxMDgxNjAwKVxuICAgICAgICAuc3Rha2VBbW91bnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKVxuICAgICAgICAucmV3YXJkQWRkcmVzc2VzKFsnUC1mbGFyZTF4MHI1aDBsOHc2bmozazJwMGQ1Zzl0NWI4djNhOWsxbSddKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBhd2FpdCAoYnVpbGRlciBhcyBhbnkpLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGJ1aWxkaW5nIHdpdGhvdXQgcmVxdWlyZWQgZGVsZWdhdG9yIGZpZWxkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIuZGVsZWdhdGlvbkZlZVJhdGUoMjUwMDApOyAvLyAyLjUlXG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgYXdhaXQgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGggYWxsIHJlcXVpcmVkIGZpZWxkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLm5vZGVJRCgnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpXG4gICAgICAgIC5zdGFydFRpbWUoMTY0MDk5NTIwMClcbiAgICAgICAgLmVuZFRpbWUoMTY0MTA4MTYwMClcbiAgICAgICAgLnN0YWtlQW1vdW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwJylcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKDI1MDAwKSAvLyAyLjUlXG4gICAgICAgIC5yZXdhcmRBZGRyZXNzZXMoWydQLWZsYXJlMXgwcjVoMGw4dzZuajNrMnAwZDVnOXQ1Yjh2M2E5azFtJ10pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQuZG9lc05vdFJlamVjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGF3YWl0IChidWlsZGVyIGFzIGFueSkuYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5oZXJpdCB0aW1lIHZhbGlkYXRpb24gZnJvbSBkZWxlZ2F0b3IgYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRpbWUgdmFsaWRhdGlvbiBoYXBwZW5zIGltbWVkaWF0ZWx5IHdoZW4gc2V0dGluZyB2YWx1ZXNcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBidWlsZGVyXG4gICAgICAgICAgLm5vZGVJRCgnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpXG4gICAgICAgICAgLnN0YXJ0VGltZSgxNjQxMDgxNjAwKVxuICAgICAgICAgIC5lbmRUaW1lKDE2NDA5OTUyMDApIC8vIEVuZCB0aW1lIGJlZm9yZSBzdGFydCB0aW1lXG4gICAgICAgICAgLnN0YWtlQW1vdW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwJylcbiAgICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUoMjUwMDApOyAvLyAyLjUlXG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRWRnZSBjYXNlcyBhbmQgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtaW5pbXVtIGRlbGVnYXRpb24gZmVlIHJhdGUgKDIlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmRlbGVnYXRpb25GZWVSYXRlKDIwMDAwKTsgLy8gMiVcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19kZWxlZ2F0aW9uRmVlUmF0ZSddLCAyMDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBoaWdoZXIgZGVsZWdhdGlvbiBmZWUgcmF0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSg1MDAwMCk7IC8vIDUlXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChidWlsZGVyWydfZGVsZWdhdGlvbkZlZVJhdGUnXSwgNTAwMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZmVlIHJhdGUgdmFsaWRhdGlvbiBlZGdlIGNhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gSnVzdCBiZWxvdyBtaW5pbXVtICgyJSlcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5kZWxlZ2F0aW9uRmVlUmF0ZSgxOTk5OSksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG5cbiAgICAgIC8vIEp1c3QgYXQgbWluaW11bVxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmRlbGVnYXRpb25GZWVSYXRlKDIwMDAwKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1haW50YWluIHZhbGlkYXRvci1zcGVjaWZpYyBwcm9wZXJ0aWVzIGFmdGVyIG9wZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyLmRlbGVnYXRpb25GZWVSYXRlKDI1MDAwKTsgLy8gMi41JVxuICAgICAgYnVpbGRlci5ub2RlSUQoJ05vZGVJRC03WGh3Mm1EeHVEUzQ0ajQyVENCNlU1NTc5ZXNiU3QzTGcnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ1aWxkZXJbJ19kZWxlZ2F0aW9uRmVlUmF0ZSddLCAyNTAwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnVpbGRlclsnX25vZGVJRCddLCAnTm9kZUlELTdYaHcybUR4dURTNDRqNDJUQ0I2VTU1Nzllc2JTdDNMZycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|