@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.211
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/baseBuilder.d.ts +24 -0
- package/dist/src/lib/baseBuilder.d.ts.map +1 -0
- package/dist/src/lib/baseBuilder.js +31 -0
- package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
- package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchStakingBuilder.js +302 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchUnstakingBuilder.js +129 -0
- package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
- package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/bondExtraBuilder.js +103 -0
- package/dist/src/lib/constants.d.ts +21 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
- package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
- package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTransferBuilder.js +51 -0
- package/dist/src/lib/iface.d.ts +249 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +48 -1
- package/dist/src/lib/index.d.ts +36 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +82 -5
- package/dist/src/lib/nominateBuilder.d.ts +18 -0
- package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/nominateBuilder.js +101 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/preApproveAssetBuilder.js +77 -0
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
- package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
- package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
- package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/src/lib/rejectInstructionBuilder.js +89 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +167 -0
- package/dist/src/lib/transaction.d.ts +30 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +211 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +288 -8
- package/dist/src/lib/transferBuilder.d.ts +4 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +12 -5
- package/dist/src/lib/txnSchema.d.ts +67 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -1
- package/dist/src/lib/txnSchema.js +231 -2
- package/dist/src/lib/unbondBuilder.d.ts +37 -0
- package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/unbondBuilder.js +100 -0
- package/dist/src/lib/utils.d.ts +40 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +94 -1
- package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
- package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BondExtraBuilder.js +21 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTransferBuilder.js +21 -0
- package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
- package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8NominateBuilder.js +21 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
- package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TransferBuilder.js +21 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8UnbondBuilder.js +21 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
- package/dist/src/polyx.d.ts +51 -9
- package/dist/src/polyx.d.ts.map +1 -1
- package/dist/src/polyx.js +272 -15
- package/dist/src/polyxToken.d.ts +20 -0
- package/dist/src/polyxToken.d.ts.map +1 -0
- package/dist/src/polyxToken.js +55 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +3 -1
- package/dist/src/resources/mainnetV8.d.ts +13 -0
- package/dist/src/resources/mainnetV8.d.ts.map +1 -0
- package/dist/src/resources/mainnetV8.js +24 -0
- package/dist/src/resources/testnetV8.d.ts +13 -0
- package/dist/src/resources/testnetV8.d.ts.map +1 -0
- package/dist/src/resources/testnetV8.js +16 -0
- package/dist/src/tpolyx.d.ts +7 -0
- package/dist/src/tpolyx.d.ts.map +1 -1
- package/dist/src/tpolyx.js +11 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/index.d.ts +139 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +150 -0
- package/dist/test/resources/mainnet.d.ts +2 -0
- package/dist/test/resources/mainnet.d.ts.map +1 -0
- package/dist/test/resources/mainnet.js +5 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/test/resources/testnet.d.ts +2 -0
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/resources/wrwUsers.d.ts +19 -0
- package/dist/test/resources/wrwUsers.d.ts.map +1 -0
- package/dist/test/resources/wrwUsers.js +60 -0
- package/dist/test/unit/polyx.d.ts +2 -0
- package/dist/test/unit/polyx.d.ts.map +1 -0
- package/dist/test/unit/polyx.js +356 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +245 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +240 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +143 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +15 -9
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -22
|
@@ -0,0 +1,59 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
40
|
+
const lib_1 = require("../../../src/lib");
|
|
41
|
+
const material = __importStar(require("../../resources/materialData.json"));
|
|
42
|
+
const modifiedMaterial = __importStar(require("../../resources/materialDataModified.json"));
|
|
43
|
+
describe('SingletonRegistry', function () {
|
|
44
|
+
let oldRegistry;
|
|
45
|
+
let newRegistry;
|
|
46
|
+
it('should get the same registry when material is the same', function () {
|
|
47
|
+
oldRegistry = lib_1.SingletonRegistry.getInstance(material);
|
|
48
|
+
should_1.default.notEqual(oldRegistry, null);
|
|
49
|
+
newRegistry = lib_1.SingletonRegistry.getInstance(material);
|
|
50
|
+
oldRegistry.should.equal(newRegistry);
|
|
51
|
+
});
|
|
52
|
+
it('should get a different registry when material is different', function () {
|
|
53
|
+
oldRegistry = lib_1.SingletonRegistry.getInstance(material);
|
|
54
|
+
should_1.default.notEqual(oldRegistry, null);
|
|
55
|
+
newRegistry = lib_1.SingletonRegistry.getInstance(modifiedMaterial);
|
|
56
|
+
oldRegistry.should.not.equal(newRegistry);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3NpbmdsZXRvblJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBDQUFxRDtBQUdyRCw0RUFBOEQ7QUFDOUQsNEZBQThFO0FBRTlFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLFdBQXlCLENBQUM7SUFDOUIsSUFBSSxXQUF5QixDQUFDO0lBRTlCLEVBQUUsQ0FBQyx3REFBd0QsRUFBRTtRQUMzRCxXQUFXLEdBQUcsdUJBQWlCLENBQUMsV0FBVyxDQUFDLFFBQThCLENBQUMsQ0FBQztRQUM1RSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsV0FBVyxHQUFHLHVCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUE4QixDQUFDLENBQUM7UUFDNUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUU7UUFDL0QsV0FBVyxHQUFHLHVCQUFpQixDQUFDLFdBQVcsQ0FBQyxRQUE4QixDQUFDLENBQUM7UUFDNUUsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLFdBQVcsR0FBRyx1QkFBaUIsQ0FBQyxXQUFXLENBQUMsZ0JBQXNDLENBQUMsQ0FBQztRQUNwRixXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFNpbmdsZXRvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBUeXBlUmVnaXN0cnkgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlL2xpYi90eXBlcyc7XG5pbXBvcnQgeyBJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgbWF0ZXJpYWwgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL21hdGVyaWFsRGF0YS5qc29uJztcbmltcG9ydCAqIGFzIG1vZGlmaWVkTWF0ZXJpYWwgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL21hdGVyaWFsRGF0YU1vZGlmaWVkLmpzb24nO1xuXG5kZXNjcmliZSgnU2luZ2xldG9uUmVnaXN0cnknLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBvbGRSZWdpc3RyeTogVHlwZVJlZ2lzdHJ5O1xuICBsZXQgbmV3UmVnaXN0cnk6IFR5cGVSZWdpc3RyeTtcblxuICBpdCgnc2hvdWxkIGdldCB0aGUgc2FtZSByZWdpc3RyeSB3aGVuIG1hdGVyaWFsIGlzIHRoZSBzYW1lJywgZnVuY3Rpb24gKCkge1xuICAgIG9sZFJlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UobWF0ZXJpYWwgYXMgSW50ZXJmYWNlLk1hdGVyaWFsKTtcbiAgICBzaG91bGQubm90RXF1YWwob2xkUmVnaXN0cnksIG51bGwpO1xuICAgIG5ld1JlZ2lzdHJ5ID0gU2luZ2xldG9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UobWF0ZXJpYWwgYXMgSW50ZXJmYWNlLk1hdGVyaWFsKTtcbiAgICBvbGRSZWdpc3RyeS5zaG91bGQuZXF1YWwobmV3UmVnaXN0cnkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBhIGRpZmZlcmVudCByZWdpc3RyeSB3aGVuIG1hdGVyaWFsIGlzIGRpZmZlcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBvbGRSZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKG1hdGVyaWFsIGFzIEludGVyZmFjZS5NYXRlcmlhbCk7XG4gICAgc2hvdWxkLm5vdEVxdWFsKG9sZFJlZ2lzdHJ5LCBudWxsKTtcbiAgICBuZXdSZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKG1vZGlmaWVkTWF0ZXJpYWwgYXMgSW50ZXJmYWNlLk1hdGVyaWFsKTtcbiAgICBvbGRSZWdpc3RyeS5zaG91bGQubm90LmVxdWFsKG5ld1JlZ2lzdHJ5KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/tokenTransferBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
7
|
+
const lib_1 = require("../../../src/lib");
|
|
8
|
+
const src_1 = require("../../../src");
|
|
9
|
+
const resources_1 = require("../../resources");
|
|
10
|
+
const base_1 = require("./base");
|
|
11
|
+
const resources_2 = require("../../../src/resources");
|
|
12
|
+
describe('Polyx token transfer Builder - Testnet', () => {
|
|
13
|
+
let builder;
|
|
14
|
+
const sender = resources_1.accounts.rbitgoTokenOwner;
|
|
15
|
+
const senderDID = '0x28e8649fec23dd688090b9b5bb950fd34bf20a014cf05542e3ad0264915ee775';
|
|
16
|
+
const receiverDID = '0x9202856204a721d2f5e8b85408067d54f1ca84390bf4f558b5615a5a6d3bddb8';
|
|
17
|
+
const assetId = '0x780602887b358cf48989d0d9aa6c8d28';
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
const config = (0, base_1.buildTestConfig)();
|
|
20
|
+
builder = new lib_1.TokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
|
|
21
|
+
});
|
|
22
|
+
describe('build tokenTransfer transaction', () => {
|
|
23
|
+
it('should build a tokenTransfer transaction', async () => {
|
|
24
|
+
builder
|
|
25
|
+
.toDID(receiverDID)
|
|
26
|
+
.fromDID(senderDID)
|
|
27
|
+
.memo('0')
|
|
28
|
+
.assetId(assetId)
|
|
29
|
+
.amount('100')
|
|
30
|
+
.sender({ address: sender.address })
|
|
31
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
32
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
33
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
34
|
+
.fee({ amount: 0, type: 'tip' });
|
|
35
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
36
|
+
const tx = await builder.build();
|
|
37
|
+
const txJson = tx.toJson();
|
|
38
|
+
should_1.default.deepEqual(txJson.amount, '100');
|
|
39
|
+
should_1.default.deepEqual(txJson.toDID, receiverDID);
|
|
40
|
+
should_1.default.deepEqual(txJson.fromDID, senderDID);
|
|
41
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
42
|
+
should_1.default.deepEqual(txJson.assetId, assetId);
|
|
43
|
+
should_1.default.deepEqual(txJson.memo, '0x3030303030303030303030303030303030303030303030303030303030303030');
|
|
44
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
45
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
46
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
47
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
48
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
49
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
50
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
51
|
+
should_1.default.deepEqual(txJson.chainName, resources_2.testnetMaterial.chainName);
|
|
52
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
53
|
+
const inputs = tx.inputs[0];
|
|
54
|
+
should_1.default.deepEqual(inputs.address, senderDID);
|
|
55
|
+
should_1.default.deepEqual(inputs.value, '100');
|
|
56
|
+
const outputs = tx.outputs[0];
|
|
57
|
+
should_1.default.deepEqual(outputs.address, receiverDID);
|
|
58
|
+
should_1.default.deepEqual(outputs.value, '100');
|
|
59
|
+
});
|
|
60
|
+
it('should build an unsigned tokenTransfer transaction', async () => {
|
|
61
|
+
builder
|
|
62
|
+
.toDID(receiverDID)
|
|
63
|
+
.fromDID(senderDID)
|
|
64
|
+
.memo('0')
|
|
65
|
+
.assetId(assetId)
|
|
66
|
+
.amount('100')
|
|
67
|
+
.sender({ address: sender.address })
|
|
68
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
69
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
70
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
71
|
+
.fee({ amount: 0, type: 'tip' });
|
|
72
|
+
const tx = await builder.build();
|
|
73
|
+
const txJson = tx.toJson();
|
|
74
|
+
should_1.default.deepEqual(txJson.amount, '100');
|
|
75
|
+
should_1.default.deepEqual(txJson.toDID, receiverDID);
|
|
76
|
+
should_1.default.deepEqual(txJson.fromDID, senderDID);
|
|
77
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
78
|
+
should_1.default.deepEqual(txJson.assetId, assetId);
|
|
79
|
+
should_1.default.deepEqual(txJson.memo, '0x3030303030303030303030303030303030303030303030303030303030303030');
|
|
80
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
81
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
82
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
83
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
84
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
85
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
86
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
87
|
+
should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
|
|
88
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
89
|
+
});
|
|
90
|
+
it('should build from raw signed tx', async () => {
|
|
91
|
+
builder.from(resources_1.rawTx.tokenTransfer.signed);
|
|
92
|
+
builder
|
|
93
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
94
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
95
|
+
const tx = await builder.build();
|
|
96
|
+
const txJson = tx.toJson();
|
|
97
|
+
should_1.default.deepEqual(txJson.amount, '1000000');
|
|
98
|
+
should_1.default.deepEqual(txJson.toDID, '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61');
|
|
99
|
+
should_1.default.deepEqual(txJson.fromDID, '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342');
|
|
100
|
+
should_1.default.deepEqual(txJson.sender, '5HK1b9uRQqkj422kbWmDYFgzoLcjtVZAgP9yXkQyAMNDJnpX');
|
|
101
|
+
should_1.default.deepEqual(txJson.assetId, '0x780602887b358cf48989d0d9aa6c8d28');
|
|
102
|
+
should_1.default.deepEqual(txJson.memo, '0x3000000000000000000000000000000000000000000000000000000000000000');
|
|
103
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
104
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
105
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
106
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
107
|
+
should_1.default.deepEqual(txJson.nonce, 3);
|
|
108
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
109
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
110
|
+
should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
|
|
111
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
112
|
+
});
|
|
113
|
+
it('should build from raw unsigned tx', async () => {
|
|
114
|
+
builder.from(resources_1.rawTx.tokenTransfer.unsigned);
|
|
115
|
+
builder
|
|
116
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
117
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
118
|
+
.sender({ address: '5HK1b9uRQqkj422kbWmDYFgzoLcjtVZAgP9yXkQyAMNDJnpX' })
|
|
119
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
120
|
+
const tx = await builder.build();
|
|
121
|
+
const txJson = tx.toJson();
|
|
122
|
+
should_1.default.deepEqual(txJson.amount, '1000000');
|
|
123
|
+
should_1.default.deepEqual(txJson.toDID, '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61');
|
|
124
|
+
should_1.default.deepEqual(txJson.fromDID, '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342');
|
|
125
|
+
should_1.default.deepEqual(txJson.sender, '5HK1b9uRQqkj422kbWmDYFgzoLcjtVZAgP9yXkQyAMNDJnpX');
|
|
126
|
+
should_1.default.deepEqual(txJson.assetId, '0x780602887b358cf48989d0d9aa6c8d28');
|
|
127
|
+
should_1.default.deepEqual(txJson.memo, '0x3000000000000000000000000000000000000000000000000000000000000000');
|
|
128
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
129
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
130
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
131
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
132
|
+
should_1.default.deepEqual(txJson.nonce, 3);
|
|
133
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
134
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
135
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
136
|
+
should_1.default.deepEqual(txJson.chainName, resources_1.chainName);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBDQUF3RDtBQUN4RCxzQ0FBcUM7QUFFckMsK0NBQTRGO0FBQzVGLGlDQUF5QztBQUN6QyxzREFBeUQ7QUFFekQsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtJQUN0RCxJQUFJLE9BQTZCLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQUcsb0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN6QyxNQUFNLFNBQVMsR0FBRyxvRUFBb0UsQ0FBQztJQUN2RixNQUFNLFdBQVcsR0FBRyxvRUFBb0UsQ0FBQztJQUN6RixNQUFNLE9BQU8sR0FBRyxvQ0FBb0MsQ0FBQztJQUVyRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEQsT0FBTztpQkFDSixLQUFLLENBQUMsV0FBVyxDQUFDO2lCQUNsQixPQUFPLENBQUMsU0FBUyxDQUFDO2lCQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULE9BQU8sQ0FBQyxPQUFPLENBQUM7aUJBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ2IsTUFBTSxDQUFDLEVBQUUs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Q0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUb2tlblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5pbXBvcnQgeyBhY2NvdW50cywgcmF3VHgsIGNoYWluTmFtZSwgZ2VuZXNpc0hhc2gsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IHRlc3RuZXRNYXRlcmlhbCB9IGZyb20gJy4uLy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnUG9seXggdG9rZW4gdHJhbnNmZXIgQnVpbGRlciAtIFRlc3RuZXQnLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBUb2tlblRyYW5zZmVyQnVpbGRlcjtcblxuICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5yYml0Z29Ub2tlbk93bmVyO1xuICBjb25zdCBzZW5kZXJESUQgPSAnMHgyOGU4NjQ5ZmVjMjNkZDY4ODA5MGI5YjViYjk1MGZkMzRiZjIwYTAxNGNmMDU1NDJlM2FkMDI2NDkxNWVlNzc1JztcbiAgY29uc3QgcmVjZWl2ZXJESUQgPSAnMHg5MjAyODU2MjA0YTcyMWQyZjVlOGI4NTQwODA2N2Q1NGYxY2E4NDM5MGJmNGY1NThiNTYxNWE1YTZkM2JkZGI4JztcbiAgY29uc3QgYXNzZXRJZCA9ICcweDc4MDYwMjg4N2IzNThjZjQ4OTg5ZDBkOWFhNmM4ZDI4JztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICBidWlsZGVyID0gbmV3IFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdG9rZW5UcmFuc2ZlciB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdG9rZW5UcmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnRvRElEKHJlY2VpdmVyRElEKVxuICAgICAgICAuZnJvbURJRChzZW5kZXJESUQpXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLmFzc2V0SWQoYXNzZXRJZClcbiAgICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnMTAwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50b0RJRCwgcmVjZWl2ZXJESUQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbURJRCwgc2VuZGVyRElEKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYXNzZXRJZCwgYXNzZXRJZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5tZW1vLCAnMHgzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIHRlc3RuZXRNYXRlcmlhbC5jaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlckRJRCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy52YWx1ZSwgJzEwMCcpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlckRJRCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsICcxMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdG9rZW5UcmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnRvRElEKHJlY2VpdmVyRElEKVxuICAgICAgICAuZnJvbURJRChzZW5kZXJESUQpXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLmFzc2V0SWQoYXNzZXRJZClcbiAgICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvRElELCByZWNlaXZlckRJRCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tRElELCBzZW5kZXJESUQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hc3NldElkLCBhc3NldElkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm1lbW8sICcweDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyBzaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyLmZyb20ocmF3VHgudG9rZW5UcmFuc2Zlci5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50b0RJRCwgJzB4YmM2ZjdlYzgwOGYzNjFjMTM1M2FiOWRjODhjM2NjNTRiOThkOWViNjBmZWQ5YzA2M2U2N2E0MDkyNWI4ZWY2MScpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbURJRCwgJzB4MTIwOGQ3ODUxZTY2OTgyNDlhZWE0MDc0MjcwMWVlMWVmNmNkY2NlZDI2MGE3YzQ5YzFjY2ExYTlkYjgzNjM0MicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCAnNUhLMWI5dVJRcWtqNDIya2JXbURZRmd6b0xjanRWWkFnUDl5WGtReUFNTkRKbnBYJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hc3NldElkLCAnMHg3ODA2MDI4ODdiMzU4Y2Y0ODk4OWQwZDlhYTZjOGQyOCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubWVtbywgJzB4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC5zcGVjVmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyB1bnNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50b2tlblRyYW5zZmVyLnVuc2lnbmVkKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6ICc1SEsxYjl1UlFxa2o0MjJrYldtRFlGZ3pvTGNqdFZaQWdQOXlYa1F5QU1OREpucFgnIH0pXG4gICAgICAgIC5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzEwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvRElELCAnMHhiYzZmN2VjODA4ZjM2MWMxMzUzYWI5ZGM4OGMzY2M1NGI5OGQ5ZWI2MGZlZDljMDYzZTY3YTQwOTI1YjhlZjYxJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tRElELCAnMHgxMjA4ZDc4NTFlNjY5ODI0OWFlYTQwNzQyNzAxZWUxZWY2Y2RjY2VkMjYwYTdjNDljMWNjYTFhOWRiODM2MzQyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsICc1SEsxYjl1UlFxa2o0MjJrYldtRFlGZ3pvTGNqdFZaQWdQOXlYa1F5QU1OREpucFgnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFzc2V0SWQsICcweDc4MDYwMjg4N2IzNThjZjQ4OTg5ZDBkOWFhNmM4ZDI4Jyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5tZW1vLCAnMHgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUsIGNoYWluTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,240 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const lib_1 = require("../../../src/lib");
|
|
42
|
+
const resources_1 = require("../../resources");
|
|
43
|
+
const materialData = __importStar(require("../../resources/materialData.json"));
|
|
44
|
+
const base_1 = require("./base");
|
|
45
|
+
describe('Tao Transaction Builder Factory', function () {
|
|
46
|
+
const sender = resources_1.accounts.account1;
|
|
47
|
+
let factory;
|
|
48
|
+
xdescribe('parse generic builders', function () {
|
|
49
|
+
before(function () {
|
|
50
|
+
factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
|
|
51
|
+
});
|
|
52
|
+
[{ type: 'transfer', builder: lib_1.TransferBuilder }].forEach((txn) => {
|
|
53
|
+
it(`should parse an unsigned ${txn.type} txn and return a ${txn.type} builder`, async () => {
|
|
54
|
+
const builder = factory.from(resources_1.rawTx[txn.type].unsigned).material(materialData);
|
|
55
|
+
builder.should.be.instanceOf(txn.builder);
|
|
56
|
+
builder
|
|
57
|
+
.validity({ firstValid: 3933 })
|
|
58
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
59
|
+
.sender({ address: sender.address });
|
|
60
|
+
const tx = await builder.build();
|
|
61
|
+
should_1.default.equal(tx.toBroadcastFormat(), resources_1.rawTx[txn.type].unsigned);
|
|
62
|
+
});
|
|
63
|
+
it(`should parse a signed ${txn.type} txn and return a ${txn.type} builder`, async () => {
|
|
64
|
+
const builder = factory.from(resources_1.rawTx[txn.type].signed).material(materialData);
|
|
65
|
+
builder.should.be.instanceOf(txn.builder);
|
|
66
|
+
builder
|
|
67
|
+
.validity({ firstValid: 3933 })
|
|
68
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
69
|
+
const tx = await builder.build();
|
|
70
|
+
should_1.default.equal(tx.toBroadcastFormat(), resources_1.rawTx[txn.type].signed);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('tryGetV8Builder routing', function () {
|
|
75
|
+
const receiver = resources_1.accounts.account2;
|
|
76
|
+
let v8TransferTxHex;
|
|
77
|
+
let v8HexTransferTxHex;
|
|
78
|
+
before(async function () {
|
|
79
|
+
const config = (0, base_1.buildTestConfig)();
|
|
80
|
+
// Build an unsigned v8 transferWithMemo tx (plain-string memo, not 0x-prefixed)
|
|
81
|
+
const v8Tx = await new lib_1.V8TransferBuilder(config)
|
|
82
|
+
.amount('1000000')
|
|
83
|
+
.to({ address: receiver.address })
|
|
84
|
+
.sender({ address: sender.address })
|
|
85
|
+
.memo('0')
|
|
86
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
87
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
88
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
89
|
+
.fee({ amount: 0, type: 'tip' })
|
|
90
|
+
.build();
|
|
91
|
+
v8TransferTxHex = v8Tx.toBroadcastFormat();
|
|
92
|
+
// Build an unsigned v8 hex-memo transferWithMemo tx
|
|
93
|
+
const v8HexTx = await new lib_1.V8HexTransferBuilder(config)
|
|
94
|
+
.amount('1000000')
|
|
95
|
+
.to({ address: receiver.address })
|
|
96
|
+
.sender({ address: sender.address })
|
|
97
|
+
.memo('56594')
|
|
98
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
99
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
100
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
101
|
+
.fee({ amount: 0, type: 'tip' })
|
|
102
|
+
.build();
|
|
103
|
+
v8HexTransferTxHex = v8HexTx.toBroadcastFormat();
|
|
104
|
+
});
|
|
105
|
+
it('routes a v8 transferWithMemo tx to V8TransferBuilder via fallback', function () {
|
|
106
|
+
// A v8 txHex encodes transferWithMemo at call index 0x28 (Balances pallet, call 40),
|
|
107
|
+
// which does not exist in the v7 SDK metadata. The factory falls back to tryGetV8Builder,
|
|
108
|
+
// decodes against v8 metadata, and returns the correct builder.
|
|
109
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
110
|
+
const builder = factoryInst.from(v8TransferTxHex);
|
|
111
|
+
should_1.default.ok(builder instanceof lib_1.V8TransferBuilder, 'expected V8TransferBuilder from tryGetV8Builder fallback');
|
|
112
|
+
});
|
|
113
|
+
it('routes a v8 hex-memo transferWithMemo tx to V8HexTransferBuilder via fallback', function () {
|
|
114
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
115
|
+
const builder = factoryInst.from(v8HexTransferTxHex);
|
|
116
|
+
should_1.default.ok(builder instanceof lib_1.V8HexTransferBuilder, 'expected V8HexTransferBuilder from tryGetV8Builder fallback');
|
|
117
|
+
});
|
|
118
|
+
it('routes a v7 transferWithMemo tx to TransferBuilder directly', function () {
|
|
119
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
120
|
+
const builder = factoryInst.from(resources_1.rawTx.transfer.signed);
|
|
121
|
+
should_1.default.ok(builder instanceof lib_1.TransferBuilder, 'expected TransferBuilder for v7 txHex');
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
// Regression test for the bug where getBuilder() decoded a v8 addAndAffirmWithMediators
|
|
125
|
+
// payload with v7 metadata (same call index, so no throw), silently lost sender.did, then
|
|
126
|
+
// routed to the v7 TokenTransferBuilder — causing Joi to throw
|
|
127
|
+
// 'legs[0].fungible.sender.did is required'.
|
|
128
|
+
describe('v8 token transfer routing regression', function () {
|
|
129
|
+
const FROM_DID = '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342';
|
|
130
|
+
const TO_DID = '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61';
|
|
131
|
+
const ASSET_ID = '0x780602887b358cf48989d0d9aa6c8d28';
|
|
132
|
+
const VALIDITY = { firstValid: 3933, maxDuration: 64 };
|
|
133
|
+
const REF_BLOCK = '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d';
|
|
134
|
+
let unsignedHex;
|
|
135
|
+
let signedHex;
|
|
136
|
+
before(async function () {
|
|
137
|
+
const config = (0, base_1.buildTestConfig)();
|
|
138
|
+
// unsigned (no signature attached)
|
|
139
|
+
const unsignedTx = await new lib_1.V8TokenTransferBuilder(config)
|
|
140
|
+
.assetId(ASSET_ID)
|
|
141
|
+
.amount('1000000')
|
|
142
|
+
.fromDID(FROM_DID)
|
|
143
|
+
.toDID(TO_DID)
|
|
144
|
+
.memo('0')
|
|
145
|
+
.sender({ address: sender.address })
|
|
146
|
+
.validity(VALIDITY)
|
|
147
|
+
.referenceBlock(REF_BLOCK)
|
|
148
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
149
|
+
.fee({ amount: 0, type: 'tip' })
|
|
150
|
+
.build();
|
|
151
|
+
unsignedHex = unsignedTx.toBroadcastFormat();
|
|
152
|
+
// signed
|
|
153
|
+
const signedBuilder = new lib_1.V8TokenTransferBuilder(config)
|
|
154
|
+
.assetId(ASSET_ID)
|
|
155
|
+
.amount('1000000')
|
|
156
|
+
.fromDID(FROM_DID)
|
|
157
|
+
.toDID(TO_DID)
|
|
158
|
+
.memo('0')
|
|
159
|
+
.sender({ address: sender.address })
|
|
160
|
+
.validity(VALIDITY)
|
|
161
|
+
.referenceBlock(REF_BLOCK)
|
|
162
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
163
|
+
.fee({ amount: 0, type: 'tip' });
|
|
164
|
+
signedBuilder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
165
|
+
const signedTx = await signedBuilder.build();
|
|
166
|
+
signedHex = signedTx.toBroadcastFormat();
|
|
167
|
+
});
|
|
168
|
+
it('routes a v8 token transfer tx to V8TokenTransferBuilder (not TokenTransferBuilder)', function () {
|
|
169
|
+
// The call index for addAndAffirmWithMediators is identical in v7 and v8, so the v7 decode
|
|
170
|
+
// path "succeeds" but drops sender.did. The fix in getBuilder() detects the missing field
|
|
171
|
+
// and redirects to tryGetV8Builder() before Joi validation fires.
|
|
172
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
173
|
+
const builder = factoryInst.from(signedHex);
|
|
174
|
+
should_1.default.ok(builder instanceof lib_1.V8TokenTransferBuilder, 'expected V8TokenTransferBuilder — v8 payload must not be silently mis-routed to v7 TokenTransferBuilder');
|
|
175
|
+
// V8TokenTransferBuilder extends TokenTransferBuilder; verify it is the v8 subclass
|
|
176
|
+
// specifically (constructor name) so a future refactor that breaks the class hierarchy
|
|
177
|
+
// is caught here rather than silently allowing a plain TokenTransferBuilder through.
|
|
178
|
+
should_1.default.equal(builder.constructor.name, 'V8TokenTransferBuilder', 'constructor must be V8TokenTransferBuilder, not plain TokenTransferBuilder');
|
|
179
|
+
});
|
|
180
|
+
it('rebuilds from unsigned v8 token transfer hex with correct fields and matching raw output', async function () {
|
|
181
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
182
|
+
const builder = factoryInst.from(unsignedHex);
|
|
183
|
+
builder.validity(VALIDITY).referenceBlock(REF_BLOCK).sender({ address: sender.address });
|
|
184
|
+
const rebuilt = await builder.build();
|
|
185
|
+
const json = rebuilt.toJson();
|
|
186
|
+
should_1.default.equal(json.assetId, ASSET_ID);
|
|
187
|
+
should_1.default.equal(json.amount, '1000000');
|
|
188
|
+
should_1.default.equal(json.fromDID, FROM_DID);
|
|
189
|
+
should_1.default.equal(json.toDID, TO_DID);
|
|
190
|
+
should_1.default.equal(rebuilt.toBroadcastFormat(), unsignedHex, 'unsigned round-trip hex must match original');
|
|
191
|
+
});
|
|
192
|
+
it('rebuilds from signed v8 token transfer hex with correct fields and matching raw output', async function () {
|
|
193
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
194
|
+
const builder = factoryInst.from(signedHex);
|
|
195
|
+
builder.validity(VALIDITY).referenceBlock(REF_BLOCK);
|
|
196
|
+
const rebuilt = await builder.build();
|
|
197
|
+
const json = rebuilt.toJson();
|
|
198
|
+
should_1.default.equal(json.assetId, ASSET_ID);
|
|
199
|
+
should_1.default.equal(json.amount, '1000000');
|
|
200
|
+
should_1.default.equal(json.fromDID, FROM_DID);
|
|
201
|
+
should_1.default.equal(json.toDID, TO_DID);
|
|
202
|
+
should_1.default.equal(rebuilt.toBroadcastFormat(), signedHex, 'signed round-trip hex must match original');
|
|
203
|
+
});
|
|
204
|
+
it('forwards factory live material specVersion to V8TokenTransferBuilder (SI-XXXX regression)', async function () {
|
|
205
|
+
// Regression for the bug where getV8TokenTransferBuilder() was called without
|
|
206
|
+
// .material(this._material), causing the builder to use the static placeholder
|
|
207
|
+
// specVersion (8000000) instead of the live chain specVersion. This produced a
|
|
208
|
+
// rebuilt signablePayload with wrong additional bytes, failing verifySignature.
|
|
209
|
+
const liveSpecVersion = 8000020;
|
|
210
|
+
const liveMaterial = {
|
|
211
|
+
...lib_1.utils.getV8Material(statics_1.NetworkType.TESTNET),
|
|
212
|
+
specVersion: liveSpecVersion,
|
|
213
|
+
};
|
|
214
|
+
// Build an unsigned tx with the live material — its signable payload encodes liveSpecVersion.
|
|
215
|
+
const originalTx = await new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)())
|
|
216
|
+
.material(liveMaterial)
|
|
217
|
+
.assetId(ASSET_ID)
|
|
218
|
+
.amount('1000000')
|
|
219
|
+
.fromDID(FROM_DID)
|
|
220
|
+
.toDID(TO_DID)
|
|
221
|
+
.memo('0')
|
|
222
|
+
.sender({ address: sender.address })
|
|
223
|
+
.validity(VALIDITY)
|
|
224
|
+
.referenceBlock(REF_BLOCK)
|
|
225
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
226
|
+
.fee({ amount: 0, type: 'tip' })
|
|
227
|
+
.build();
|
|
228
|
+
const originalSignable = originalTx.signablePayload.toString('hex');
|
|
229
|
+
const signingPayloadHex = originalTx.toBroadcastFormat();
|
|
230
|
+
// Factory with the same live material must forward it to the created V8TokenTransferBuilder
|
|
231
|
+
// so the rebuild uses liveSpecVersion, not the static 8000000 placeholder.
|
|
232
|
+
const factoryInst = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)()).material(liveMaterial);
|
|
233
|
+
const rebuiltBuilder = factoryInst.from(signingPayloadHex);
|
|
234
|
+
rebuiltBuilder.sender({ address: sender.address }).validity(VALIDITY).referenceBlock(REF_BLOCK);
|
|
235
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
236
|
+
should_1.default.equal(rebuiltTx.signablePayload.toString('hex'), originalSignable, 'signablePayload must match: factory must forward live material to V8TokenTransferBuilder');
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUF5RDtBQUN6RCxvREFBNEI7QUFDNUIsMENBTzBCO0FBRTFCLCtDQUFvRTtBQUNwRSxnRkFBa0U7QUFDbEUsaUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxJQUFJLE9BQWtDLENBQUM7SUFFdkMsU0FBUyxDQUFDLHdCQUF3QixFQUFFO1FBQ2xDLE1BQU0sQ0FBQztZQUNMLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxxQkFBZSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvRCxFQUFFLENBQUMsNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQWtDLENBQUMsQ0FBQztnQkFFcEcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUMsT0FBTztxQkFDSixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7cUJBQzlCLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztxQkFDcEYsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixHQUFHLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3RGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQWtDLENBQUMsQ0FBQztnQkFFbEcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUMsT0FBTztxQkFDSixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7cUJBQzlCLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO2dCQUN4RixNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsaUJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO1FBRW5DLElBQUksZUFBdUIsQ0FBQztRQUM1QixJQUFJLGtCQUEwQixDQUFDO1FBRS9CLE1BQU0sQ0FBQyxLQUFLO1lBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7WUFFakMsZ0ZBQWdGO1lBQ2hGLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxNQUFNLENBQUM7aUJBQzdDLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ1QsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztpQkFDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDekQsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7aUJBQy9CLEtBQUssRUFBRSxDQUFDO1lBQ1gsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTNDLG9EQUFvRDtZQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksMEJBQW9CLENBQUMsTUFBTSxDQUFDO2lCQUNuRCxNQUFNLENBQUMsU0FBUyxDQUFDO2lCQUNqQixFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNqQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUNiLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7aUJBQ3BGLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUMvQixLQUFLLEVBQUUsQ0FBQztZQUNYLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFO1lBQ3RFLHFGQUFxRjtZQUNyRiwwRkFBMEY7WUFDMUYsZ0VBQWdFO1lBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sWUFBWSx1QkFBaUIsRUFBRSwwREFBMEQsQ0FBQyxDQUFDO1FBQzlHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFO1lBQ2xGLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDckQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLDBCQUFvQixFQUFFLDZEQUE2RCxDQUFDLENBQUM7UUFDcEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUU7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHFCQUFlLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsd0ZBQXdGO0lBQ3hGLDBGQUEwRjtJQUMxRiwrREFBK0Q7SUFDL0QsNkNBQTZDO0lBQzdDLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxvRUFBb0UsQ0FBQztRQUN0RixNQUFNLE1BQU0sR0FBRyxvRUFBb0UsQ0FBQztRQUNwRixNQUFNLFFBQVEsR0FBRyxvQ0FBb0MsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLG9FQUFvRSxDQUFDO1FBRXZGLElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLFNBQWlCLENBQUM7UUFFdEIsTUFBTSxDQUFDLEtBQUs7WUFDVixNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztZQUVqQyxtQ0FBbUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLDRCQUFzQixDQUFDLE1BQU0sQ0FBQztpQkFDeEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDakIsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDakIsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLGNBQWMsQ0FBQyxTQUFTLENBQUM7aUJBQ3pCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUMvQixLQUFLLEVBQUUsQ0FBQztZQUNYLFdBQVcsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUU3QyxTQUFTO1lBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSw0QkFBc0IsQ0FBQyxNQUFNLENBQUM7aUJBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUM7aUJBQ2pCLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLE9BQU8sQ0FBQyxRQUFRLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUM7aUJBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDVCxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNuQyxRQUFRLENBQUMsUUFBUSxDQUFDO2lCQUNsQixjQUFjLENBQUMsU0FBUyxDQUFDO2lCQUN6QixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN6RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM1RixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxTQUFTLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0ZBQW9GLEVBQUU7WUFDdkYsMkZBQTJGO1lBQzNGLDBGQUEwRjtZQUMxRixrRUFBa0U7WUFDbEUsTUFBTSxXQUFXLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxFQUFFLENBQ1AsT0FBTyxZQUFZLDRCQUFzQixFQUN6Qyx5R0FBeUcsQ0FDMUcsQ0FBQztZQUNGLG9GQUFvRjtZQUNwRix1RkFBdUY7WUFDdkYscUZBQXFGO1lBQ3JGLGdCQUFNLENBQUMsS0FBSyxDQUNWLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUN4Qix3QkFBd0IsRUFDeEIsNEVBQTRFLENBQzdFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRkFBMEYsRUFBRSxLQUFLO1lBQ2xHLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6RixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV0QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO1lBQ2hHLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXRDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJGQUEyRixFQUFFLEtBQUs7WUFDbkcsOEVBQThFO1lBQzlFLCtFQUErRTtZQUMvRSwrRUFBK0U7WUFDL0UsZ0ZBQWdGO1lBQ2hGLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRztnQkFDbkIsR0FBRyxXQUFLLENBQUMsYUFBYSxDQUFDLHFCQUFXLENBQUMsT0FBTyxDQUFDO2dCQUMzQyxXQUFXLEVBQUUsZUFBZTthQUNQLENBQUM7WUFFeEIsOEZBQThGO1lBQzlGLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSw0QkFBc0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztpQkFDbkUsUUFBUSxDQUFDLFlBQVksQ0FBQztpQkFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDakIsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDakIsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNULE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLGNBQWMsQ0FBQyxTQUFTLENBQUM7aUJBQ3pCLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ3pELEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUMvQixLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV6RCw0RkFBNEY7WUFDNUYsMkVBQTJFO1lBQzNFLE1BQU0sV0FBVyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUYsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNELGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRyxNQUFNLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvQyxnQkFBTSxDQUFDLEtBQUssQ0FDVixTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDekMsZ0JBQWdCLEVBQ2hCLDBGQUEwRixDQUMzRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMsIE5ldHdvcmtUeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LFxuICBUcmFuc2ZlckJ1aWxkZXIsXG4gIFY4VHJhbnNmZXJCdWlsZGVyLFxuICBWOEhleFRyYW5zZmVyQnVpbGRlcixcbiAgVjhUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgdXRpbHMsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IHJhd1R4LCBhY2NvdW50cywgbW9ja1Rzc1NpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgKiBhcyBtYXRlcmlhbERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL21hdGVyaWFsRGF0YS5qc29uJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmRlc2NyaWJlKCdUYW8gVHJhbnNhY3Rpb24gQnVpbGRlciBGYWN0b3J5JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MTtcbiAgbGV0IGZhY3Rvcnk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnk7XG5cbiAgeGRlc2NyaWJlKCdwYXJzZSBnZW5lcmljIGJ1aWxkZXJzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG4gICAgfSk7XG5cbiAgICBbeyB0eXBlOiAndHJhbnNmZXInLCBidWlsZGVyOiBUcmFuc2ZlckJ1aWxkZXIgfV0uZm9yRWFjaCgodHhuKSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHBhcnNlIGFuIHVuc2lnbmVkICR7dHhuLnR5cGV9IHR4biBhbmQgcmV0dXJuIGEgJHt0eG4udHlwZX0gYnVpbGRlcmAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeFt0eG4udHlwZV0udW5zaWduZWQpLm1hdGVyaWFsKG1hdGVyaWFsRGF0YSBhcyBJbnRlcmZhY2UuTWF0ZXJpYWwpO1xuXG4gICAgICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlT2YodHhuLmJ1aWxkZXIpO1xuXG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzIH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdUeFt0eG4udHlwZV0udW5zaWduZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGBzaG91bGQgcGFyc2UgYSBzaWduZWQgJHt0eG4udHlwZX0gdHhuIGFuZCByZXR1cm4gYSAke3R4bi50eXBlfSBidWlsZGVyYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4W3R4bi50eXBlXS5zaWduZWQpLm1hdGVyaWFsKG1hdGVyaWFsRGF0YSBhcyBJbnRlcmZhY2UuTWF0ZXJpYWwpO1xuXG4gICAgICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlT2YodHhuLmJ1aWxkZXIpO1xuXG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzIH0pXG4gICAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdUeFt0eG4udHlwZV0uc2lnbmVkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndHJ5R2V0VjhCdWlsZGVyIHJvdXRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBhY2NvdW50cy5hY2NvdW50MjtcblxuICAgIGxldCB2OFRyYW5zZmVyVHhIZXg6IHN0cmluZztcbiAgICBsZXQgdjhIZXhUcmFuc2ZlclR4SGV4OiBzdHJpbmc7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG5cbiAgICAgIC8vIEJ1aWxkIGFuIHVuc2lnbmVkIHY4IHRyYW5zZmVyV2l0aE1lbW8gdHggKHBsYWluLXN0cmluZyBtZW1vLCBub3QgMHgtcHJlZml4ZWQpXG4gICAgICBjb25zdCB2OFR4ID0gYXdhaXQgbmV3IFY4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIHY4VHJhbnNmZXJUeEhleCA9IHY4VHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gQnVpbGQgYW4gdW5zaWduZWQgdjggaGV4LW1lbW8gdHJhbnNmZXJXaXRoTWVtbyB0eFxuICAgICAgY29uc3QgdjhIZXhUeCA9IGF3YWl0IG5ldyBWOEhleFRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAubWVtbygnNTY1OTQnKVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pXG4gICAgICAgIC5idWlsZCgpO1xuICAgICAgdjhIZXhUcmFuc2ZlclR4SGV4ID0gdjhIZXhUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBhIHY4IHRyYW5zZmVyV2l0aE1lbW8gdHggdG8gVjhUcmFuc2ZlckJ1aWxkZXIgdmlhIGZhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQSB2OCB0eEhleCBlbmNvZGVzIHRyYW5zZmVyV2l0aE1lbW8gYXQgY2FsbCBpbmRleCAweDI4IChCYWxhbmNlcyBwYWxsZXQsIGNhbGwgNDApLFxuICAgICAgLy8gd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gdGhlIHY3IFNESyBtZXRhZGF0YS4gVGhlIGZhY3RvcnkgZmFsbHMgYmFjayB0byB0cnlHZXRWOEJ1aWxkZXIsXG4gICAgICAvLyBkZWNvZGVzIGFnYWluc3QgdjggbWV0YWRhdGEsIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IGJ1aWxkZXIuXG4gICAgICBjb25zdCBmYWN0b3J5SW5zdCA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5SW5zdC5mcm9tKHY4VHJhbnNmZXJUeEhleCk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4VHJhbnNmZXJCdWlsZGVyLCAnZXhwZWN0ZWQgVjhUcmFuc2ZlckJ1aWxkZXIgZnJvbSB0cnlHZXRWOEJ1aWxkZXIgZmFsbGJhY2snKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3V0ZXMgYSB2OCBoZXgtbWVtbyB0cmFuc2ZlcldpdGhNZW1vIHR4IHRvIFY4SGV4VHJhbnNmZXJCdWlsZGVyIHZpYSBmYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlJbnN0ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnlJbnN0LmZyb20odjhIZXhUcmFuc2ZlclR4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhIZXhUcmFuc2ZlckJ1aWxkZXIsICdleHBlY3RlZCBWOEhleFRyYW5zZmVyQnVpbGRlciBmcm9tIHRyeUdldFY4QnVpbGRlciBmYWxsYmFjaycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBhIHY3IHRyYW5zZmVyV2l0aE1lbW8gdHggdG8gVHJhbnNmZXJCdWlsZGVyIGRpcmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbShyYXdUeC50cmFuc2Zlci5zaWduZWQpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBUcmFuc2ZlckJ1aWxkZXIsICdleHBlY3RlZCBUcmFuc2ZlckJ1aWxkZXIgZm9yIHY3IHR4SGV4Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIGJ1ZyB3aGVyZSBnZXRCdWlsZGVyKCkgZGVjb2RlZCBhIHY4IGFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnNcbiAgLy8gcGF5bG9hZCB3aXRoIHY3IG1ldGFkYXRhIChzYW1lIGNhbGwgaW5kZXgsIHNvIG5vIHRocm93KSwgc2lsZW50bHkgbG9zdCBzZW5kZXIuZGlkLCB0aGVuXG4gIC8vIHJvdXRlZCB0byB0aGUgdjcgVG9rZW5UcmFuc2ZlckJ1aWxkZXIg4oCUIGNhdXNpbmcgSm9pIHRvIHRocm93XG4gIC8vICdsZWdzWzBdLmZ1bmdpYmxlLnNlbmRlci5kaWQgaXMgcmVxdWlyZWQnLlxuICBkZXNjcmliZSgndjggdG9rZW4gdHJhbnNmZXIgcm91dGluZyByZWdyZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IEZST01fRElEID0gJzB4MTIwOGQ3ODUxZTY2OTgyNDlhZWE0MDc0MjcwMWVlMWVmNmNkY2NlZDI2MGE3YzQ5YzFjY2ExYTlkYjgzNjM0Mic7XG4gICAgY29uc3QgVE9fRElEID0gJzB4YmM2ZjdlYzgwOGYzNjFjMTM1M2FiOWRjODhjM2NjNTRiOThkOWViNjBmZWQ5YzA2M2U2N2E0MDkyNWI4ZWY2MSc7XG4gICAgY29uc3QgQVNTRVRfSUQgPSAnMHg3ODA2MDI4ODdiMzU4Y2Y0ODk4OWQwZDlhYTZjOGQyOCc7XG4gICAgY29uc3QgVkFMSURJVFkgPSB7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9O1xuICAgIGNvbnN0IFJFRl9CTE9DSyA9ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnO1xuXG4gICAgbGV0IHVuc2lnbmVkSGV4OiBzdHJpbmc7XG4gICAgbGV0IHNpZ25lZEhleDogc3RyaW5nO1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuXG4gICAgICAvLyB1bnNpZ25lZCAobm8gc2lnbmF0dXJlIGF0dGFjaGVkKVxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFzc2V0SWQoQVNTRVRfSUQpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAuZnJvbURJRChGUk9NX0RJRClcbiAgICAgICAgLnRvRElEKFRPX0RJRClcbiAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KFZBTElESVRZKVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pXG4gICAgICAgIC5idWlsZCgpO1xuICAgICAgdW5zaWduZWRIZXggPSB1bnNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIHNpZ25lZFxuICAgICAgY29uc3Qgc2lnbmVkQnVpbGRlciA9IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFzc2V0SWQoQVNTRVRfSUQpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAuZnJvbURJRChGUk9NX0RJRClcbiAgICAgICAgLnRvRElEKFRPX0RJRClcbiAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KFZBTElESVRZKVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgc2lnbmVkQnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgc2lnbmVkQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2lnbmVkSGV4ID0gc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3V0ZXMgYSB2OCB0b2tlbiB0cmFuc2ZlciB0eCB0byBWOFRva2VuVHJhbnNmZXJCdWlsZGVyIChub3QgVG9rZW5UcmFuc2ZlckJ1aWxkZXIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIGNhbGwgaW5kZXggZm9yIGFkZEFuZEFmZmlybVdpdGhNZWRpYXRvcnMgaXMgaWRlbnRpY2FsIGluIHY3IGFuZCB2OCwgc28gdGhlIHY3IGRlY29kZVxuICAgICAgLy8gcGF0aCBcInN1Y2NlZWRzXCIgYnV0IGRyb3BzIHNlbmRlci5kaWQuIFRoZSBmaXggaW4gZ2V0QnVpbGRlcigpIGRldGVjdHMgdGhlIG1pc3NpbmcgZmllbGRcbiAgICAgIC8vIGFuZCByZWRpcmVjdHMgdG8gdHJ5R2V0VjhCdWlsZGVyKCkgYmVmb3JlIEpvaSB2YWxpZGF0aW9uIGZpcmVzLlxuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbShzaWduZWRIZXgpO1xuICAgICAgc2hvdWxkLm9rKFxuICAgICAgICBidWlsZGVyIGluc3RhbmNlb2YgVjhUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgICAgICAgJ2V4cGVjdGVkIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIg4oCUIHY4IHBheWxvYWQgbXVzdCBub3QgYmUgc2lsZW50bHkgbWlzLXJvdXRlZCB0byB2NyBUb2tlblRyYW5zZmVyQnVpbGRlcidcbiAgICAgICk7XG4gICAgICAvLyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgVG9rZW5UcmFuc2ZlckJ1aWxkZXI7IHZlcmlmeSBpdCBpcyB0aGUgdjggc3ViY2xhc3NcbiAgICAgIC8vIHNwZWNpZmljYWxseSAoY29uc3RydWN0b3IgbmFtZSkgc28gYSBmdXR1cmUgcmVmYWN0b3IgdGhhdCBicmVha3MgdGhlIGNsYXNzIGhpZXJhcmNoeVxuICAgICAgLy8gaXMgY2F1Z2h0IGhlcmUgcmF0aGVyIHRoYW4gc2lsZW50bHkgYWxsb3dpbmcgYSBwbGFpbiBUb2tlblRyYW5zZmVyQnVpbGRlciB0aHJvdWdoLlxuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBidWlsZGVyLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICdWOFRva2VuVHJhbnNmZXJCdWlsZGVyJyxcbiAgICAgICAgJ2NvbnN0cnVjdG9yIG11c3QgYmUgVjhUb2tlblRyYW5zZmVyQnVpbGRlciwgbm90IHBsYWluIFRva2VuVHJhbnNmZXJCdWlsZGVyJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBmcm9tIHVuc2lnbmVkIHY4IHRva2VuIHRyYW5zZmVyIGhleCB3aXRoIGNvcnJlY3QgZmllbGRzIGFuZCBtYXRjaGluZyByYXcgb3V0cHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbSh1bnNpZ25lZEhleCk7XG4gICAgICBidWlsZGVyLnZhbGlkaXR5KFZBTElESVRZKS5yZWZlcmVuY2VCbG9jayhSRUZfQkxPQ0spLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pO1xuICAgICAgY29uc3QgcmVidWlsdCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QganNvbiA9IHJlYnVpbHQudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwoanNvbi5hc3NldElkLCBBU1NFVF9JRCk7XG4gICAgICBzaG91bGQuZXF1YWwoanNvbi5hbW91bnQsICcxMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZXF1YWwoanNvbi5mcm9tRElELCBGUk9NX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwoanNvbi50b0RJRCwgVE9fRElEKTtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHVuc2lnbmVkSGV4LCAndW5zaWduZWQgcm91bmQtdHJpcCBoZXggbXVzdCBtYXRjaCBvcmlnaW5hbCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlYnVpbGRzIGZyb20gc2lnbmVkIHY4IHRva2VuIHRyYW5zZmVyIGhleCB3aXRoIGNvcnJlY3QgZmllbGRzIGFuZCBtYXRjaGluZyByYXcgb3V0cHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmFjdG9yeUluc3QgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeUluc3QuZnJvbShzaWduZWRIZXgpO1xuICAgICAgYnVpbGRlci52YWxpZGl0eShWQUxJRElUWSkucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKTtcbiAgICAgIGNvbnN0IHJlYnVpbHQgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSByZWJ1aWx0LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uYXNzZXRJZCwgQVNTRVRfSUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uYW1vdW50LCAnMTAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24uZnJvbURJRCwgRlJPTV9ESUQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGpzb24udG9ESUQsIFRPX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwocmVidWlsdC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzaWduZWRIZXgsICdzaWduZWQgcm91bmQtdHJpcCBoZXggbXVzdCBtYXRjaCBvcmlnaW5hbCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvcndhcmRzIGZhY3RvcnkgbGl2ZSBtYXRlcmlhbCBzcGVjVmVyc2lvbiB0byBWOFRva2VuVHJhbnNmZXJCdWlsZGVyIChTSS1YWFhYIHJlZ3Jlc3Npb24pJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmVncmVzc2lvbiBmb3IgdGhlIGJ1ZyB3aGVyZSBnZXRWOFRva2VuVHJhbnNmZXJCdWlsZGVyKCkgd2FzIGNhbGxlZCB3aXRob3V0XG4gICAgICAvLyAubWF0ZXJpYWwodGhpcy5fbWF0ZXJpYWwpLCBjYXVzaW5nIHRoZSBidWlsZGVyIHRvIHVzZSB0aGUgc3RhdGljIHBsYWNlaG9sZGVyXG4gICAgICAvLyBzcGVjVmVyc2lvbiAoODAwMDAwMCkgaW5zdGVhZCBvZiB0aGUgbGl2ZSBjaGFpbiBzcGVjVmVyc2lvbi4gVGhpcyBwcm9kdWNlZCBhXG4gICAgICAvLyByZWJ1aWx0IHNpZ25hYmxlUGF5bG9hZCB3aXRoIHdyb25nIGFkZGl0aW9uYWwgYnl0ZXMsIGZhaWxpbmcgdmVyaWZ5U2lnbmF0dXJlLlxuICAgICAgY29uc3QgbGl2ZVNwZWNWZXJzaW9uID0gODAwMDAyMDtcbiAgICAgIGNvbnN0IGxpdmVNYXRlcmlhbCA9IHtcbiAgICAgICAgLi4udXRpbHMuZ2V0VjhNYXRlcmlhbChOZXR3b3JrVHlwZS5URVNUTkVUKSxcbiAgICAgICAgc3BlY1ZlcnNpb246IGxpdmVTcGVjVmVyc2lvbixcbiAgICAgIH0gYXMgSW50ZXJmYWNlLk1hdGVyaWFsO1xuXG4gICAgICAvLyBCdWlsZCBhbiB1bnNpZ25lZCB0eCB3aXRoIHRoZSBsaXZlIG1hdGVyaWFsIOKAlCBpdHMgc2lnbmFibGUgcGF5bG9hZCBlbmNvZGVzIGxpdmVTcGVjVmVyc2lvbi5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCBuZXcgVjhUb2tlblRyYW5zZmVyQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgICAgLm1hdGVyaWFsKGxpdmVNYXRlcmlhbClcbiAgICAgICAgLmFzc2V0SWQoQVNTRVRfSUQpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAuZnJvbURJRChGUk9NX0RJRClcbiAgICAgICAgLnRvRElEKFRPX0RJRClcbiAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KFZBTElESVRZKVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soUkVGX0JMT0NLKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pXG4gICAgICAgIC5idWlsZCgpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxTaWduYWJsZSA9IG9yaWdpbmFsVHguc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHNpZ25pbmdQYXlsb2FkSGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBGYWN0b3J5IHdpdGggdGhlIHNhbWUgbGl2ZSBtYXRlcmlhbCBtdXN0IGZvcndhcmQgaXQgdG8gdGhlIGNyZWF0ZWQgVjhUb2tlblRyYW5zZmVyQnVpbGRlclxuICAgICAgLy8gc28gdGhlIHJlYnVpbGQgdXNlcyBsaXZlU3BlY1ZlcnNpb24sIG5vdCB0aGUgc3RhdGljIDgwMDAwMDAgcGxhY2Vob2xkZXIuXG4gICAgICBjb25zdCBmYWN0b3J5SW5zdCA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKS5tYXRlcmlhbChsaXZlTWF0ZXJpYWwpO1xuICAgICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBmYWN0b3J5SW5zdC5mcm9tKHNpZ25pbmdQYXlsb2FkSGV4KTtcbiAgICAgIHJlYnVpbHRCdWlsZGVyLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pLnZhbGlkaXR5KFZBTElESVRZKS5yZWZlcmVuY2VCbG9jayhSRUZfQkxPQ0spO1xuICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICByZWJ1aWx0VHguc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgb3JpZ2luYWxTaWduYWJsZSxcbiAgICAgICAgJ3NpZ25hYmxlUGF5bG9hZCBtdXN0IG1hdGNoOiBmYWN0b3J5IG11c3QgZm9yd2FyZCBsaXZlIG1hdGVyaWFsIHRvIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXInXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}
|