@bitgo-beta/sdk-coin-vet 1.0.1-beta.41 → 1.0.1-beta.410
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 +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/constants.d.ts +24 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +26 -3
- package/dist/src/lib/iface.d.ts +26 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +15 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +32 -2
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts +26 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +131 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +41 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +210 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +26 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +136 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/nftTransaction.js +108 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +169 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/tokenTransaction.js +95 -0
- package/dist/src/lib/transaction/transaction.d.ts +18 -28
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +95 -57
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +57 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +142 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +58 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +115 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
- package/dist/src/lib/transactionBuilderFactory.d.ts +46 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +97 -1
- package/dist/src/lib/types.d.ts +24 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +79 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +219 -10
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +9 -1
- package/dist/src/vet.d.ts +80 -2
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +478 -8
- package/dist/src/vetNFTCollection.d.ts +18 -0
- package/dist/src/vetNFTCollection.d.ts.map +1 -0
- package/dist/src/vetNFTCollection.js +52 -0
- package/dist/src/vetToken.d.ts +19 -0
- package/dist/src/vetToken.d.ts.map +1 -0
- package/dist/src/vetToken.js +52 -0
- package/dist/test/resources/vet.d.ts +68 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +123 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/burnNftBuilder.js +154 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.js +246 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.js +154 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/transferBuilder.js +214 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +181 -0
- package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
- package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
- package/dist/test/unit/stakingFlowE2E.js +229 -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 +106 -0
- package/dist/test/unit/vet.d.ts +2 -0
- package/dist/test/unit/vet.d.ts.map +1 -0
- package/dist/test/unit/vet.js +251 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burnNftBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/burnNftBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const src_1 = require("../../src");
|
|
43
|
+
const testData = __importStar(require("../resources/vet"));
|
|
44
|
+
const constants_1 = require("../../src/lib/constants");
|
|
45
|
+
describe('Vet Burn NFT Transaction', () => {
|
|
46
|
+
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
47
|
+
describe('Build and Sign', () => {
|
|
48
|
+
it('should build a burn NFT transaction', async function () {
|
|
49
|
+
const tokenId = '123456';
|
|
50
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
51
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
52
|
+
txBuilder.tokenId(tokenId);
|
|
53
|
+
txBuilder.nftContract(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
54
|
+
txBuilder.gas(21000);
|
|
55
|
+
txBuilder.nonce('64248');
|
|
56
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
57
|
+
txBuilder.expiration(64);
|
|
58
|
+
txBuilder.gasPriceCoef(128);
|
|
59
|
+
const tx = (await txBuilder.build());
|
|
60
|
+
should_1.default.equal(tx.sender, testData.addresses.validAddresses[0]);
|
|
61
|
+
should_1.default.equal(tx.tokenId, tokenId);
|
|
62
|
+
should_1.default.equal(tx.contract, constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
63
|
+
should_1.default.equal(tx.gas, 21000);
|
|
64
|
+
should_1.default.equal(tx.nonce, '64248');
|
|
65
|
+
should_1.default.equal(tx.expiration, 64);
|
|
66
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingWithdraw);
|
|
67
|
+
// Verify the transaction data contains the correct method ID and tokenId
|
|
68
|
+
tx.clauses[0].data.should.startWith(constants_1.BURN_NFT_METHOD_ID);
|
|
69
|
+
// Verify the transaction has the correct structure
|
|
70
|
+
tx.clauses.length.should.equal(1);
|
|
71
|
+
should_1.default.exist(tx.clauses[0]);
|
|
72
|
+
should_1.default.exist(tx.clauses[0].to);
|
|
73
|
+
tx.clauses[0]?.to?.should.equal(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
74
|
+
should_1.default.exist(tx.clauses[0].value);
|
|
75
|
+
tx.clauses[0].value.should.equal('0x0');
|
|
76
|
+
tx.inputs.length.should.equal(1);
|
|
77
|
+
tx.outputs.length.should.equal(1);
|
|
78
|
+
should_1.default.equal(tx.inputs[0].address, testData.addresses.validAddresses[0]);
|
|
79
|
+
should_1.default.equal(tx.inputs[0].value, '0');
|
|
80
|
+
should_1.default.equal(tx.inputs[0].coin, 'tvet');
|
|
81
|
+
should_1.default.equal(tx.outputs[0].address, constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
82
|
+
should_1.default.equal(tx.outputs[0].value, '0');
|
|
83
|
+
should_1.default.equal(tx.outputs[0].coin, 'tvet');
|
|
84
|
+
});
|
|
85
|
+
it('should build a burn NFT transaction with custom contract address', async function () {
|
|
86
|
+
const tokenId = '123456';
|
|
87
|
+
const customContractAddress = constants_1.STARGATE_NFT_ADDRESS_TESTNET; // Use the valid testnet NFT address
|
|
88
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
89
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
90
|
+
txBuilder.tokenId(tokenId);
|
|
91
|
+
txBuilder.nftContract(customContractAddress);
|
|
92
|
+
txBuilder.gas(21000);
|
|
93
|
+
txBuilder.nonce('64248');
|
|
94
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
95
|
+
txBuilder.expiration(64);
|
|
96
|
+
txBuilder.gasPriceCoef(128);
|
|
97
|
+
const tx = (await txBuilder.build());
|
|
98
|
+
should_1.default.equal(tx.contract, customContractAddress);
|
|
99
|
+
should_1.default.exist(tx.clauses[0]);
|
|
100
|
+
should_1.default.exist(tx.clauses[0].to);
|
|
101
|
+
tx.clauses[0]?.to?.should.equal(customContractAddress);
|
|
102
|
+
});
|
|
103
|
+
it('should deserialize and reserialize a signed burn NFT transaction', async function () {
|
|
104
|
+
// Create a mock serialized transaction for burn NFT
|
|
105
|
+
const tokenId = '123456';
|
|
106
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
107
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
108
|
+
txBuilder.tokenId(tokenId);
|
|
109
|
+
txBuilder.nftContract(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
110
|
+
txBuilder.gas(21000);
|
|
111
|
+
txBuilder.nonce('64248');
|
|
112
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
113
|
+
txBuilder.expiration(64);
|
|
114
|
+
txBuilder.gasPriceCoef(128);
|
|
115
|
+
const tx = (await txBuilder.build());
|
|
116
|
+
const serializedTx = tx.toBroadcastFormat();
|
|
117
|
+
// Now deserialize and check
|
|
118
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
119
|
+
const deserializedTx = (await deserializedBuilder.build());
|
|
120
|
+
should_1.default.equal(deserializedTx.type, sdk_core_1.TransactionType.StakingWithdraw);
|
|
121
|
+
should_1.default.equal(deserializedTx.tokenId, tokenId);
|
|
122
|
+
should_1.default.equal(deserializedTx.contract, constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
123
|
+
});
|
|
124
|
+
it('should validate the transaction data structure', async function () {
|
|
125
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
126
|
+
// Should throw error when building without required fields
|
|
127
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('NFT contract address is required');
|
|
128
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
129
|
+
txBuilder.nftContract(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
130
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('Token ID is required');
|
|
131
|
+
// Now add the token ID and it should build successfully
|
|
132
|
+
txBuilder.tokenId('123456');
|
|
133
|
+
txBuilder.gas(21000);
|
|
134
|
+
txBuilder.nonce('64248');
|
|
135
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
136
|
+
const tx = await txBuilder.build();
|
|
137
|
+
should_1.default.exist(tx);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('Validation', () => {
|
|
141
|
+
it('should fail with invalid contract address', function () {
|
|
142
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
143
|
+
(0, should_1.default)(() => txBuilder.nftContract('invalid-address')).throwError('Invalid address invalid-address');
|
|
144
|
+
});
|
|
145
|
+
it('should fail with invalid token ID', async function () {
|
|
146
|
+
const txBuilder = factory.getBurnNftBuilder();
|
|
147
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
148
|
+
txBuilder.nftContract(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
149
|
+
txBuilder.tokenId('');
|
|
150
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('Token ID is required');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVybk5mdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3RyYW5zYWN0aW9uQnVpbGRlci9idXJuTmZ0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsaURBQTRDO0FBQzVDLG1DQUFzRDtBQUV0RCwyREFBNkM7QUFDN0MsdURBQTJGO0FBRTNGLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFakUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUM5QixFQUFFLENBQUMscUNBQXFDLEVBQUUsS0FBSztZQUM3QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7WUFDekIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFOUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyx3Q0FBNEIsQ0FBQyxDQUFDO1lBQ3BELFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVCLE1B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Q0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlDLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUN2RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLO1lBQzNDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsV0FBVyxDQUFDLHdDQUE0QixDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV0QixNQUFNLElBQUEsZ0JBQU0sRUFBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgQnVybk5mdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9idXJuTmZ0VHJhbnNhY3Rpb24nO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgeyBCVVJOX05GVF9NRVRIT0RfSUQsIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5cbmRlc2NyaWJlKCdWZXQgQnVybiBORlQgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3R2ZXQnKSk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIGFuZCBTaWduJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBidXJuIE5GVCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTIzNDU2JztcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QnVybk5mdEJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICB0eEJ1aWxkZXIubmZ0Q29udHJhY3QoU1RBUkdBVEVfTkZUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBCdXJuTmZ0VHJhbnNhY3Rpb247XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zZW5kZXIsIHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9rZW5JZCwgdG9rZW5JZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY29udHJhY3QsIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm5vbmNlLCAnNjQyNDgnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5leHBpcmF0aW9uLCA2NCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZGF0YSBjb250YWlucyB0aGUgY29ycmVjdCBtZXRob2QgSUQgYW5kIHRva2VuSWRcbiAgICAgIHR4LmNsYXVzZXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKEJVUk5fTkZUX01FVEhPRF9JRCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gaGFzIHRoZSBjb3JyZWN0IHN0cnVjdHVyZVxuICAgICAgdHguY2xhdXNlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LmNsYXVzZXNbMF0pO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LmNsYXVzZXNbMF0udG8pO1xuICAgICAgdHguY2xhdXNlc1swXT8udG8/LnNob3VsZC5lcXVhbChTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5jbGF1c2VzWzBdLnZhbHVlKTtcbiAgICAgIHR4LmNsYXVzZXNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcweDAnKTtcblxuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICcwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLmNvaW4sICd0dmV0Jyk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MsIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0udmFsdWUsICcwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5jb2luLCAndHZldCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJ1cm4gTkZUIHRyYW5zYWN0aW9uIHdpdGggY3VzdG9tIGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1Nic7XG4gICAgICBjb25zdCBjdXN0b21Db250cmFjdEFkZHJlc3MgPSBTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVUOyAvLyBVc2UgdGhlIHZhbGlkIHRlc3RuZXQgTkZUIGFkZHJlc3NcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QnVybk5mdEJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICB0eEJ1aWxkZXIubmZ0Q29udHJhY3QoY3VzdG9tQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIEJ1cm5OZnRUcmFuc2FjdGlvbjtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNvbnRyYWN0LCBjdXN0b21Db250cmFjdEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LmNsYXVzZXNbMF0pO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4LmNsYXVzZXNbMF0udG8pO1xuICAgICAgdHguY2xhdXNlc1swXT8udG8/LnNob3VsZC5lcXVhbChjdXN0b21Db250cmFjdEFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXNlcmlhbGl6ZSBhbmQgcmVzZXJpYWxpemUgYSBzaWduZWQgYnVybiBORlQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDcmVhdGUgYSBtb2NrIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gZm9yIGJ1cm4gTkZUXG4gICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1Nic7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEJ1cm5OZnRCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgdHhCdWlsZGVyLm5mdENvbnRyYWN0KFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigxMjgpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgQnVybk5mdFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gTm93IGRlc2VyaWFsaXplIGFuZCBjaGVja1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkQnVpbGRlciA9IGZhY3RvcnkuZnJvbShzZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVHggPSAoYXdhaXQgZGVzZXJpYWxpemVkQnVpbGRlci5idWlsZCgpKSBhcyBCdXJuTmZ0VHJhbnNhY3Rpb247XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZXNlcmlhbGl6ZWRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KTtcbiAgICAgIHNob3VsZC5lcXVhbChkZXNlcmlhbGl6ZWRUeC50b2tlbklkLCB0b2tlbklkKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZXNlcmlhbGl6ZWRUeC5jb250cmFjdCwgU1RBUkdBVEVfTkZUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHN0cnVjdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QnVybk5mdEJ1aWxkZXIoKTtcblxuICAgICAgLy8gU2hvdWxkIHRocm93IGVycm9yIHdoZW4gYnVpbGRpbmcgd2l0aG91dCByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGF3YWl0IHNob3VsZCh0eEJ1aWxkZXIuYnVpbGQoKSkuYmUucmVqZWN0ZWRXaXRoKCdORlQgY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIubmZ0Q29udHJhY3QoU1RBUkdBVEVfTkZUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICBhd2FpdCBzaG91bGQodHhCdWlsZGVyLmJ1aWxkKCkpLmJlLnJlamVjdGVkV2l0aCgnVG9rZW4gSUQgaXMgcmVxdWlyZWQnKTtcblxuICAgICAgLy8gTm93IGFkZCB0aGUgdG9rZW4gSUQgYW5kIGl0IHNob3VsZCBidWlsZCBzdWNjZXNzZnVsbHlcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKCcxMjM0NTYnKTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgY29udHJhY3QgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QnVybk5mdEJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIubmZ0Q29udHJhY3QoJ2ludmFsaWQtYWRkcmVzcycpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGFkZHJlc3MgaW52YWxpZC1hZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIHRva2VuIElEJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRCdXJuTmZ0QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLm5mdENvbnRyYWN0KFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQoJycpO1xuXG4gICAgICBhd2FpdCBzaG91bGQodHhCdWlsZGVyLmJ1aWxkKCkpLmJlLnJlamVjdGVkV2l0aCgnVG9rZW4gSUQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimRewardsBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/claimRewardsBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,246 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
7
|
+
const lib_1 = require("../../src/lib");
|
|
8
|
+
const should_1 = __importDefault(require("should"));
|
|
9
|
+
const constants_1 = require("../../src/lib/constants");
|
|
10
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
11
|
+
describe('VET Claim Rewards Transaction', function () {
|
|
12
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
13
|
+
const tokenId = '12345';
|
|
14
|
+
// Helper function to create a basic transaction builder with common properties
|
|
15
|
+
const createBasicTxBuilder = () => {
|
|
16
|
+
const txBuilder = factory.getClaimRewardsBuilder();
|
|
17
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
18
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
19
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
20
|
+
txBuilder.expiration(64);
|
|
21
|
+
txBuilder.gas(100000);
|
|
22
|
+
txBuilder.gasPriceCoef(0);
|
|
23
|
+
txBuilder.nonce('12345');
|
|
24
|
+
return txBuilder;
|
|
25
|
+
};
|
|
26
|
+
it('should build a claim rewards transaction with both reward types', async function () {
|
|
27
|
+
const txBuilder = factory.getClaimRewardsBuilder();
|
|
28
|
+
txBuilder.claimRewardsData({
|
|
29
|
+
tokenId,
|
|
30
|
+
claimBaseRewards: true,
|
|
31
|
+
claimStakingRewards: true,
|
|
32
|
+
});
|
|
33
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
34
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
35
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
36
|
+
txBuilder.expiration(64);
|
|
37
|
+
txBuilder.gas(100000);
|
|
38
|
+
txBuilder.gasPriceCoef(0);
|
|
39
|
+
txBuilder.nonce('12345');
|
|
40
|
+
const tx = await txBuilder.build();
|
|
41
|
+
should_1.default.exist(tx);
|
|
42
|
+
tx.should.be.instanceof(lib_1.Transaction);
|
|
43
|
+
tx.should.be.instanceof(lib_1.ClaimRewardsTransaction);
|
|
44
|
+
const claimTx = tx;
|
|
45
|
+
claimTx.claimRewardsData.tokenId.should.equal(tokenId);
|
|
46
|
+
claimTx.claimRewardsData.claimBaseRewards?.should.be.true();
|
|
47
|
+
claimTx.claimRewardsData.claimStakingRewards?.should.be.true();
|
|
48
|
+
// Verify clauses - should have 2 clauses for both reward types
|
|
49
|
+
claimTx.clauses.length.should.equal(2);
|
|
50
|
+
// Find base rewards clause (claimVetGeneratedVtho)
|
|
51
|
+
const baseRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID));
|
|
52
|
+
should_1.default.exist(baseRewardsClause);
|
|
53
|
+
baseRewardsClause?.to?.should.equal(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
54
|
+
baseRewardsClause?.value.should.equal('0x0');
|
|
55
|
+
// Find staking rewards clause (claimRewards)
|
|
56
|
+
const stakingRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID));
|
|
57
|
+
should_1.default.exist(stakingRewardsClause);
|
|
58
|
+
stakingRewardsClause?.to?.should.equal(constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET);
|
|
59
|
+
stakingRewardsClause?.value.should.equal('0x0');
|
|
60
|
+
// Verify recipients should be empty for claim rewards
|
|
61
|
+
claimTx.recipients.length.should.equal(0);
|
|
62
|
+
});
|
|
63
|
+
it('should build a claim rewards transaction with only base rewards', async function () {
|
|
64
|
+
const txBuilder = createBasicTxBuilder();
|
|
65
|
+
txBuilder.claimRewardsData({
|
|
66
|
+
tokenId,
|
|
67
|
+
claimBaseRewards: true,
|
|
68
|
+
claimStakingRewards: false,
|
|
69
|
+
});
|
|
70
|
+
const tx = await txBuilder.build();
|
|
71
|
+
const claimTx = tx;
|
|
72
|
+
// Should have only 1 clause for base rewards
|
|
73
|
+
claimTx.clauses.length.should.equal(1);
|
|
74
|
+
claimTx.clauses[0].data.should.startWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID);
|
|
75
|
+
claimTx.clauses[0].to?.should.equal(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
76
|
+
claimTx.clauses[0].value.should.equal('0x0');
|
|
77
|
+
claimTx.claimRewardsData.claimBaseRewards?.should.be.true();
|
|
78
|
+
claimTx.claimRewardsData.claimStakingRewards?.should.be.false();
|
|
79
|
+
});
|
|
80
|
+
it('should build a claim rewards transaction with only staking rewards', async function () {
|
|
81
|
+
const txBuilder = createBasicTxBuilder();
|
|
82
|
+
txBuilder.claimRewardsData({
|
|
83
|
+
tokenId,
|
|
84
|
+
claimBaseRewards: false,
|
|
85
|
+
claimStakingRewards: true,
|
|
86
|
+
});
|
|
87
|
+
const tx = await txBuilder.build();
|
|
88
|
+
const claimTx = tx;
|
|
89
|
+
// Should have only 1 clause for staking rewards
|
|
90
|
+
claimTx.clauses.length.should.equal(1);
|
|
91
|
+
claimTx.clauses[0].data.should.startWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID);
|
|
92
|
+
claimTx.clauses[0].to?.should.equal(constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET);
|
|
93
|
+
claimTx.clauses[0].value.should.equal('0x0');
|
|
94
|
+
claimTx.claimRewardsData.claimBaseRewards?.should.be.false();
|
|
95
|
+
claimTx.claimRewardsData.claimStakingRewards?.should.be.true();
|
|
96
|
+
});
|
|
97
|
+
describe('Failure scenarios', function () {
|
|
98
|
+
it('should throw error when claim rewards data is missing', async function () {
|
|
99
|
+
const txBuilder = createBasicTxBuilder();
|
|
100
|
+
// Not setting claimRewardsData
|
|
101
|
+
await txBuilder.build().should.be.rejectedWith('Claim rewards data is required');
|
|
102
|
+
});
|
|
103
|
+
it('should throw error when token ID is missing', async function () {
|
|
104
|
+
const txBuilder = createBasicTxBuilder();
|
|
105
|
+
(0, should_1.default)(() => {
|
|
106
|
+
txBuilder.claimRewardsData({});
|
|
107
|
+
}).throw('Token ID is required');
|
|
108
|
+
});
|
|
109
|
+
it('should throw error when token ID is invalid', async function () {
|
|
110
|
+
const txBuilder = createBasicTxBuilder();
|
|
111
|
+
(0, should_1.default)(() => {
|
|
112
|
+
txBuilder.claimRewardsData({
|
|
113
|
+
tokenId: 'invalid-tokenid',
|
|
114
|
+
});
|
|
115
|
+
}).throw('Token ID must be a valid number string');
|
|
116
|
+
});
|
|
117
|
+
it('should throw error when both reward flags are false', async function () {
|
|
118
|
+
const txBuilder = createBasicTxBuilder();
|
|
119
|
+
(0, should_1.default)(() => {
|
|
120
|
+
txBuilder.claimRewardsData({
|
|
121
|
+
tokenId,
|
|
122
|
+
claimBaseRewards: false,
|
|
123
|
+
claimStakingRewards: false,
|
|
124
|
+
});
|
|
125
|
+
}).throw('At least one type of rewards (base or staking) must be claimed');
|
|
126
|
+
});
|
|
127
|
+
it('should throw error when claimBaseRewards is not boolean', async function () {
|
|
128
|
+
const txBuilder = createBasicTxBuilder();
|
|
129
|
+
(0, should_1.default)(() => {
|
|
130
|
+
txBuilder.claimRewardsData({
|
|
131
|
+
tokenId,
|
|
132
|
+
claimBaseRewards: 'true',
|
|
133
|
+
});
|
|
134
|
+
}).throw('claimBaseRewards must be a boolean');
|
|
135
|
+
});
|
|
136
|
+
it('should throw error when claimStakingRewards is not boolean', async function () {
|
|
137
|
+
const txBuilder = createBasicTxBuilder();
|
|
138
|
+
(0, should_1.default)(() => {
|
|
139
|
+
txBuilder.claimRewardsData({
|
|
140
|
+
tokenId,
|
|
141
|
+
claimStakingRewards: 1,
|
|
142
|
+
});
|
|
143
|
+
}).throw('claimStakingRewards must be a boolean');
|
|
144
|
+
});
|
|
145
|
+
it('should default to claiming both rewards when flags are undefined', async function () {
|
|
146
|
+
const txBuilder = createBasicTxBuilder();
|
|
147
|
+
txBuilder.claimRewardsData({
|
|
148
|
+
tokenId,
|
|
149
|
+
});
|
|
150
|
+
const tx = await txBuilder.build();
|
|
151
|
+
const claimTx = tx;
|
|
152
|
+
// Should have 2 clauses by default
|
|
153
|
+
claimTx.clauses.length.should.equal(2);
|
|
154
|
+
const baseRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID));
|
|
155
|
+
const stakingRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID));
|
|
156
|
+
should_1.default.exist(baseRewardsClause);
|
|
157
|
+
should_1.default.exist(stakingRewardsClause);
|
|
158
|
+
baseRewardsClause?.to?.should.equal(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
159
|
+
stakingRewardsClause?.to?.should.equal(constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET);
|
|
160
|
+
});
|
|
161
|
+
it('should build transaction with undefined sender but include it in inputs', async function () {
|
|
162
|
+
const txBuilder = factory.getClaimRewardsBuilder();
|
|
163
|
+
txBuilder.claimRewardsData({
|
|
164
|
+
tokenId,
|
|
165
|
+
});
|
|
166
|
+
txBuilder.chainTag(0x27);
|
|
167
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
168
|
+
txBuilder.expiration(64);
|
|
169
|
+
txBuilder.gas(100000);
|
|
170
|
+
txBuilder.gasPriceCoef(0);
|
|
171
|
+
txBuilder.nonce('12345');
|
|
172
|
+
// Not setting sender
|
|
173
|
+
const tx = await txBuilder.build();
|
|
174
|
+
tx.should.be.instanceof(lib_1.ClaimRewardsTransaction);
|
|
175
|
+
const claimTx = tx;
|
|
176
|
+
// Verify the transaction has inputs but with undefined address
|
|
177
|
+
claimTx.inputs.length.should.equal(1);
|
|
178
|
+
should_1.default.not.exist(claimTx.inputs[0].address);
|
|
179
|
+
// Verify the transaction has no outputs (claim rewards doesn't transfer value)
|
|
180
|
+
claimTx.outputs.length.should.equal(0);
|
|
181
|
+
});
|
|
182
|
+
it('should use network default chainTag when not explicitly set', async function () {
|
|
183
|
+
const txBuilder = factory.getClaimRewardsBuilder();
|
|
184
|
+
txBuilder.claimRewardsData({
|
|
185
|
+
tokenId,
|
|
186
|
+
});
|
|
187
|
+
// Not setting chainTag
|
|
188
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
189
|
+
txBuilder.expiration(64);
|
|
190
|
+
txBuilder.gas(100000);
|
|
191
|
+
txBuilder.gasPriceCoef(0);
|
|
192
|
+
txBuilder.nonce('12345');
|
|
193
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
194
|
+
const tx = await txBuilder.build();
|
|
195
|
+
tx.should.be.instanceof(lib_1.ClaimRewardsTransaction);
|
|
196
|
+
const claimTx = tx;
|
|
197
|
+
// Verify the chainTag is set to the testnet default (39)
|
|
198
|
+
claimTx.chainTag.should.equal(39);
|
|
199
|
+
});
|
|
200
|
+
it('should serialize and explain transaction correctly', async function () {
|
|
201
|
+
const txBuilder = createBasicTxBuilder();
|
|
202
|
+
txBuilder.claimRewardsData({
|
|
203
|
+
tokenId,
|
|
204
|
+
});
|
|
205
|
+
const tx = await txBuilder.build();
|
|
206
|
+
const claimTx = tx;
|
|
207
|
+
// Test serialization
|
|
208
|
+
const serialized = claimTx.toBroadcastFormat();
|
|
209
|
+
serialized.should.be.String();
|
|
210
|
+
serialized.should.startWith('0x');
|
|
211
|
+
// Test explanation
|
|
212
|
+
const explanation = claimTx.explainTransaction();
|
|
213
|
+
explanation.type?.should.equal(sdk_core_1.TransactionType.StakingClaim);
|
|
214
|
+
should_1.default.exist(explanation.fee);
|
|
215
|
+
explanation.outputAmount.should.equal('0');
|
|
216
|
+
explanation.changeAmount.should.equal('0');
|
|
217
|
+
// Test toJson
|
|
218
|
+
const json = claimTx.toJson();
|
|
219
|
+
should_1.default.exist(json.claimRewardsData);
|
|
220
|
+
json.claimRewardsData?.tokenId.should.equal(tokenId);
|
|
221
|
+
});
|
|
222
|
+
it('should correctly handle custom contract addresses when building transactions', async function () {
|
|
223
|
+
const customNftAddress = '0x1234567890123456789012345678901234567890';
|
|
224
|
+
const customDelegationAddress = '0x0987654321098765432109876543210987654321';
|
|
225
|
+
const txBuilder = createBasicTxBuilder();
|
|
226
|
+
txBuilder.claimRewardsData({
|
|
227
|
+
tokenId,
|
|
228
|
+
delegationContractAddress: customDelegationAddress,
|
|
229
|
+
stargateNftAddress: customNftAddress,
|
|
230
|
+
});
|
|
231
|
+
const tx = await txBuilder.build();
|
|
232
|
+
const claimTx = tx;
|
|
233
|
+
// Verify that custom addresses are stored in claimRewardsData when they differ from defaults
|
|
234
|
+
should_1.default.exist(claimTx.claimRewardsData.delegationContractAddress);
|
|
235
|
+
claimTx.claimRewardsData.delegationContractAddress?.should.equal(customDelegationAddress);
|
|
236
|
+
should_1.default.exist(claimTx.claimRewardsData.stargateNftAddress);
|
|
237
|
+
claimTx.claimRewardsData.stargateNftAddress?.should.equal(customNftAddress);
|
|
238
|
+
// Verify clauses still use the default addresses (as builders use defaults)
|
|
239
|
+
const baseRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID));
|
|
240
|
+
const stakingRewardsClause = claimTx.clauses.find((clause) => clause.data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID));
|
|
241
|
+
baseRewardsClause?.to?.should.equal(constants_1.STARGATE_NFT_ADDRESS_TESTNET);
|
|
242
|
+
stakingRewardsClause?.to?.should.equal(constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1SZXdhcmRzQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdHJhbnNhY3Rpb25CdWlsZGVyL2NsYWltUmV3YXJkc0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsdUNBQWdHO0FBRWhHLG9EQUE0QjtBQUM1Qix1REFLaUM7QUFDakMsbURBQXVEO0FBRXZELFFBQVEsQ0FBQywrQkFBK0IsRUFBRTtJQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFeEIsK0VBQStFO0lBQy9FLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25ELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FB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NkIsQ0FBQztZQUU5Qyw2RkFBNkY7WUFDN0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUUxRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMxRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTVFLDRFQUE0RTtZQUM1RSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3Q0FBNEIsQ0FBQyxDQUFDLENBQUM7WUFDakgsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLDJDQUErQixDQUFDLENBQ3hELENBQUM7WUFFRixpQkFBaUIsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBNEIsQ0FBQyxDQUFDO1lBQ2xFLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLCtDQUFtQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zYWN0aW9uLCBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgQ2xhaW1SZXdhcmRzRGF0YSB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHlwZXMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCxcbiAgQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCxcbiAgU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQsXG4gIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQsXG59IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ1ZFVCBDbGFpbSBSZXdhcmRzIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0dmV0JykpO1xuICBjb25zdCB0b2tlbklkID0gJzEyMzQ1JztcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgYmFzaWMgdHJhbnNhY3Rpb24gYnVpbGRlciB3aXRoIGNvbW1vbiBwcm9wZXJ0aWVzXG4gIGNvbnN0IGNyZWF0ZUJhc2ljVHhCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q2xhaW1SZXdhcmRzQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuICAgIHR4QnVpbGRlci5jaGFpblRhZygweDI3KTsgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICB0eEJ1aWxkZXIuZ2FzKDEwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiB3aXRoIGJvdGggcmV3YXJkIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q2xhaW1SZXdhcmRzQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5jbGFpbVJld2FyZHNEYXRhKHtcbiAgICAgIHRva2VuSWQsXG4gICAgICBjbGFpbUJhc2VSZXdhcmRzOiB0cnVlLFxuICAgICAgY2xhaW1TdGFraW5nUmV3YXJkczogdHJ1ZSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKCcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknKTtcbiAgICB0eEJ1aWxkZXIuY2hhaW5UYWcoMHgyNyk7IC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXhpc3QodHgpO1xuICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFRyYW5zYWN0aW9uKTtcbiAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihDbGFpbVJld2FyZHNUcmFuc2FjdGlvbik7XG5cbiAgICBjb25zdCBjbGFpbVR4ID0gdHggYXMgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb247XG4gICAgY2xhaW1UeC5jbGFpbVJld2FyZHNEYXRhLnRva2VuSWQuc2hvdWxkLmVxdWFsKHRva2VuSWQpO1xuICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5jbGFpbUJhc2VSZXdhcmRzPy5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5jbGFpbVN0YWtpbmdSZXdhcmRzPy5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgLy8gVmVyaWZ5IGNsYXVzZXMgLSBzaG91bGQgaGF2ZSAyIGNsYXVzZXMgZm9yIGJvdGggcmV3YXJkIHR5cGVzXG4gICAgY2xhaW1UeC5jbGF1c2VzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAvLyBGaW5kIGJhc2UgcmV3YXJkcyBjbGF1c2UgKGNsYWltVmV0R2VuZXJhdGVkVnRobylcbiAgICBjb25zdCBiYXNlUmV3YXJkc0NsYXVzZSA9IGNsYWltVHguY2xhdXNlcy5maW5kKChjbGF1c2UpID0+IGNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCkpO1xuICAgIHNob3VsZC5leGlzdChiYXNlUmV3YXJkc0NsYXVzZSk7XG4gICAgYmFzZVJld2FyZHNDbGF1c2U/LnRvPy5zaG91bGQuZXF1YWwoU1RBUkdBVEVfTkZUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgYmFzZVJld2FyZHNDbGF1c2U/LnZhbHVlLnNob3VsZC5lcXVhbCgnMHgwJyk7XG5cbiAgICAvLyBGaW5kIHN0YWtpbmcgcmV3YXJkcyBjbGF1c2UgKGNsYWltUmV3YXJkcylcbiAgICBjb25zdCBzdGFraW5nUmV3YXJkc0NsYXVzZSA9IGNsYWltVHguY2xhdXNlcy5maW5kKChjbGF1c2UpID0+XG4gICAgICBjbGF1c2UuZGF0YS5zdGFydHNXaXRoKENMQUlNX1NUQUtJTkdfUkVXQVJEU19NRVRIT0RfSUQpXG4gICAgKTtcbiAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1Jld2FyZHNDbGF1c2UpO1xuICAgIHN0YWtpbmdSZXdhcmRzQ2xhdXNlPy50bz8uc2hvdWxkLmVxdWFsKFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTU19URVNUTkVUKTtcbiAgICBzdGFraW5nUmV3YXJkc0NsYXVzZT8udmFsdWUuc2hvdWxkLmVxdWFsKCcweDAnKTtcblxuICAgIC8vIFZlcmlmeSByZWNpcGllbnRzIHNob3VsZCBiZSBlbXB0eSBmb3IgY2xhaW0gcmV3YXJkc1xuICAgIGNsYWltVHgucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgY2xhaW0gcmV3YXJkcyB0cmFuc2FjdGlvbiB3aXRoIG9ubHkgYmFzZSByZXdhcmRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgdG9rZW5JZCxcbiAgICAgIGNsYWltQmFzZVJld2FyZHM6IHRydWUsXG4gICAgICBjbGFpbVN0YWtpbmdSZXdhcmRzOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgY2xhaW1UeCA9IHR4IGFzIENsYWltUmV3YXJkc1RyYW5zYWN0aW9uO1xuXG4gICAgLy8gU2hvdWxkIGhhdmUgb25seSAxIGNsYXVzZSBmb3IgYmFzZSByZXdhcmRzXG4gICAgY2xhaW1UeC5jbGF1c2VzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgY2xhaW1UeC5jbGF1c2VzWzBdLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lEKTtcbiAgICBjbGFpbVR4LmNsYXVzZXNbMF0udG8/LnNob3VsZC5lcXVhbChTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVUKTtcbiAgICBjbGFpbVR4LmNsYXVzZXNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcweDAnKTtcblxuICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5jbGFpbUJhc2VSZXdhcmRzPy5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5jbGFpbVN0YWtpbmdSZXdhcmRzPy5zaG91bGQuYmUuZmFsc2UoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIGNsYWltIHJld2FyZHMgdHJhbnNhY3Rpb24gd2l0aCBvbmx5IHN0YWtpbmcgcmV3YXJkcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5jbGFpbVJld2FyZHNEYXRhKHtcbiAgICAgIHRva2VuSWQsXG4gICAgICBjbGFpbUJhc2VSZXdhcmRzOiBmYWxzZSxcbiAgICAgIGNsYWltU3Rha2luZ1Jld2FyZHM6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGNsYWltVHggPSB0eCBhcyBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbjtcblxuICAgIC8vIFNob3VsZCBoYXZlIG9ubHkgMSBjbGF1c2UgZm9yIHN0YWtpbmcgcmV3YXJkc1xuICAgIGNsYWltVHguY2xhdXNlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGNsYWltVHguY2xhdXNlc1swXS5kYXRhLnNob3VsZC5zdGFydFdpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCk7XG4gICAgY2xhaW1UeC5jbGF1c2VzWzBdLnRvPy5zaG91bGQuZXF1YWwoU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQpO1xuICAgIGNsYWltVHguY2xhdXNlc1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzB4MCcpO1xuXG4gICAgY2xhaW1UeC5jbGFpbVJld2FyZHNEYXRhLmNsYWltQmFzZVJld2FyZHM/LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5jbGFpbVN0YWtpbmdSZXdhcmRzPy5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnRmFpbHVyZSBzY2VuYXJpb3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGNsYWltIHJld2FyZHMgZGF0YSBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlQmFzaWNUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIE5vdCBzZXR0aW5nIGNsYWltUmV3YXJkc0RhdGFcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnQ2xhaW0gcmV3YXJkcyBkYXRhIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gdG9rZW4gSUQgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG5cbiAgICAgIHNob3VsZCgoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci5jbGFpbVJld2FyZHNEYXRhKHt9IGFzIENsYWltUmV3YXJkc0RhdGEpO1xuICAgICAgfSkudGhyb3coJ1Rva2VuIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gdG9rZW4gSUQgaXMgaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG5cbiAgICAgIHNob3VsZCgoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci5jbGFpbVJld2FyZHNEYXRhKHtcbiAgICAgICAgICB0b2tlbklkOiAnaW52YWxpZC10b2tlbmlkJyxcbiAgICAgICAgfSk7XG4gICAgICB9KS50aHJvdygnVG9rZW4gSUQgbXVzdCBiZSBhIHZhbGlkIG51bWJlciBzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBib3RoIHJld2FyZCBmbGFncyBhcmUgZmFsc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuXG4gICAgICBzaG91bGQoKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIuY2xhaW1SZXdhcmRzRGF0YSh7XG4gICAgICAgICAgdG9rZW5JZCxcbiAgICAgICAgICBjbGFpbUJhc2VSZXdhcmRzOiBmYWxzZSxcbiAgICAgICAgICBjbGFpbVN0YWtpbmdSZXdhcmRzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50aHJvdygnQXQgbGVhc3Qgb25lIHR5cGUgb2YgcmV3YXJkcyAoYmFzZSBvciBzdGFraW5nKSBtdXN0IGJlIGNsYWltZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBjbGFpbUJhc2VSZXdhcmRzIGlzIG5vdCBib29sZWFuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlQmFzaWNUeEJ1aWxkZXIoKTtcblxuICAgICAgc2hvdWxkKCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICAgIHRva2VuSWQsXG4gICAgICAgICAgY2xhaW1CYXNlUmV3YXJkczogJ3RydWUnIGFzIHVua25vd24gYXMgYm9vbGVhbixcbiAgICAgICAgfSk7XG4gICAgICB9KS50aHJvdygnY2xhaW1CYXNlUmV3YXJkcyBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGNsYWltU3Rha2luZ1Jld2FyZHMgaXMgbm90IGJvb2xlYW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuXG4gICAgICBzaG91bGQoKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIuY2xhaW1SZXdhcmRzRGF0YSh7XG4gICAgICAgICAgdG9rZW5JZCxcbiAgICAgICAgICBjbGFpbVN0YWtpbmdSZXdhcmRzOiAxIGFzIHVua25vd24gYXMgYm9vbGVhbixcbiAgICAgICAgfSk7XG4gICAgICB9KS50aHJvdygnY2xhaW1TdGFraW5nUmV3YXJkcyBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGNsYWltaW5nIGJvdGggcmV3YXJkcyB3aGVuIGZsYWdzIGFyZSB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICB0b2tlbklkLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBjbGFpbVR4ID0gdHggYXMgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFNob3VsZCBoYXZlIDIgY2xhdXNlcyBieSBkZWZhdWx0XG4gICAgICBjbGFpbVR4LmNsYXVzZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgY29uc3QgYmFzZVJld2FyZHNDbGF1c2UgPSBjbGFpbVR4LmNsYXVzZXMuZmluZCgoY2xhdXNlKSA9PiBjbGF1c2UuZGF0YS5zdGFydHNXaXRoKENMQUlNX0JBU0VfUkVXQVJEU19NRVRIT0RfSUQpKTtcbiAgICAgIGNvbnN0IHN0YWtpbmdSZXdhcmRzQ2xhdXNlID0gY2xhaW1UeC5jbGF1c2VzLmZpbmQoKGNsYXVzZSkgPT5cbiAgICAgICAgY2xhdXNlLmRhdGEuc3RhcnRzV2l0aChDTEFJTV9TVEFLSU5HX1JFV0FSRFNfTUVUSE9EX0lEKVxuICAgICAgKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGJhc2VSZXdhcmRzQ2xhdXNlKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nUmV3YXJkc0NsYXVzZSk7XG4gICAgICBiYXNlUmV3YXJkc0NsYXVzZT8udG8/LnNob3VsZC5lcXVhbChTVEFSR0FURV9ORlRfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHN0YWtpbmdSZXdhcmRzQ2xhdXNlPy50bz8uc2hvdWxkLmVxdWFsKFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTU19URVNUTkVUKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdHJhbnNhY3Rpb24gd2l0aCB1bmRlZmluZWQgc2VuZGVyIGJ1dCBpbmNsdWRlIGl0IGluIGlucHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q2xhaW1SZXdhcmRzQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICB0b2tlbklkLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY2hhaW5UYWcoMHgyNyk7XG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnMTIzNDUnKTtcbiAgICAgIC8vIE5vdCBzZXR0aW5nIHNlbmRlclxuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCBjbGFpbVR4ID0gdHggYXMgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb247XG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyBpbnB1dHMgYnV0IHdpdGggdW5kZWZpbmVkIGFkZHJlc3NcbiAgICAgIGNsYWltVHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGNsYWltVHguaW5wdXRzWzBdLmFkZHJlc3MpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyBubyBvdXRwdXRzIChjbGFpbSByZXdhcmRzIGRvZXNuJ3QgdHJhbnNmZXIgdmFsdWUpXG4gICAgICBjbGFpbVR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIG5ldHdvcmsgZGVmYXVsdCBjaGFpblRhZyB3aGVuIG5vdCBleHBsaWNpdGx5IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q2xhaW1SZXdhcmRzQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICB0b2tlbklkLFxuICAgICAgfSk7XG4gICAgICAvLyBOb3Qgc2V0dGluZyBjaGFpblRhZ1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKCcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKENsYWltUmV3YXJkc1RyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgY2xhaW1UeCA9IHR4IGFzIENsYWltUmV3YXJkc1RyYW5zYWN0aW9uO1xuICAgICAgLy8gVmVyaWZ5IHRoZSBjaGFpblRhZyBpcyBzZXQgdG8gdGhlIHRlc3RuZXQgZGVmYXVsdCAoMzkpXG4gICAgICBjbGFpbVR4LmNoYWluVGFnLnNob3VsZC5lcXVhbCgzOSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlcmlhbGl6ZSBhbmQgZXhwbGFpbiB0cmFuc2FjdGlvbiBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICB0b2tlbklkLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBjbGFpbVR4ID0gdHggYXMgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFRlc3Qgc2VyaWFsaXphdGlvblxuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGNsYWltVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNlcmlhbGl6ZWQuc2hvdWxkLmJlLlN0cmluZygpO1xuICAgICAgc2VyaWFsaXplZC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuXG4gICAgICAvLyBUZXN0IGV4cGxhbmF0aW9uXG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGNsYWltVHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBleHBsYW5hdGlvbi50eXBlPy5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSk7XG4gICAgICBzaG91bGQuZXhpc3QoZXhwbGFuYXRpb24uZmVlKTtcbiAgICAgIGV4cGxhbmF0aW9uLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhbmF0aW9uLmNoYW5nZUFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcblxuICAgICAgLy8gVGVzdCB0b0pzb25cbiAgICAgIGNvbnN0IGpzb24gPSBjbGFpbVR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb24uY2xhaW1SZXdhcmRzRGF0YSk7XG4gICAgICBqc29uLmNsYWltUmV3YXJkc0RhdGE/LnRva2VuSWQuc2hvdWxkLmVxdWFsKHRva2VuSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgaGFuZGxlIGN1c3RvbSBjb250cmFjdCBhZGRyZXNzZXMgd2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXN0b21OZnRBZGRyZXNzID0gJzB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCc7XG4gICAgICBjb25zdCBjdXN0b21EZWxlZ2F0aW9uQWRkcmVzcyA9ICcweDA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEnO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmNsYWltUmV3YXJkc0RhdGEoe1xuICAgICAgICB0b2tlbklkLFxuICAgICAgICBkZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzOiBjdXN0b21EZWxlZ2F0aW9uQWRkcmVzcyxcbiAgICAgICAgc3RhcmdhdGVOZnRBZGRyZXNzOiBjdXN0b21OZnRBZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBjbGFpbVR4ID0gdHggYXMgQ2xhaW1SZXdhcmRzVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGN1c3RvbSBhZGRyZXNzZXMgYXJlIHN0b3JlZCBpbiBjbGFpbVJld2FyZHNEYXRhIHdoZW4gdGhleSBkaWZmZXIgZnJvbSBkZWZhdWx0c1xuICAgICAgc2hvdWxkLmV4aXN0KGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5kZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGNsYWltVHguY2xhaW1SZXdhcmRzRGF0YS5kZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzPy5zaG91bGQuZXF1YWwoY3VzdG9tRGVsZWdhdGlvbkFkZHJlc3MpO1xuXG4gICAgICBzaG91bGQuZXhpc3QoY2xhaW1UeC5jbGFpbVJld2FyZHNEYXRhLnN0YXJnYXRlTmZ0QWRkcmVzcyk7XG4gICAgICBjbGFpbVR4LmNsYWltUmV3YXJkc0RhdGEuc3RhcmdhdGVOZnRBZGRyZXNzPy5zaG91bGQuZXF1YWwoY3VzdG9tTmZ0QWRkcmVzcyk7XG5cbiAgICAgIC8vIFZlcmlmeSBjbGF1c2VzIHN0aWxsIHVzZSB0aGUgZGVmYXVsdCBhZGRyZXNzZXMgKGFzIGJ1aWxkZXJzIHVzZSBkZWZhdWx0cylcbiAgICAgIGNvbnN0IGJhc2VSZXdhcmRzQ2xhdXNlID0gY2xhaW1UeC5jbGF1c2VzLmZpbmQoKGNsYXVzZSkgPT4gY2xhdXNlLmRhdGEuc3RhcnRzV2l0aChDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lEKSk7XG4gICAgICBjb25zdCBzdGFraW5nUmV3YXJkc0NsYXVzZSA9IGNsYWltVHguY2xhdXNlcy5maW5kKChjbGF1c2UpID0+XG4gICAgICAgIGNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRClcbiAgICAgICk7XG5cbiAgICAgIGJhc2VSZXdhcmRzQ2xhdXNlPy50bz8uc2hvdWxkLmVxdWFsKFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgc3Rha2luZ1Jld2FyZHNDbGF1c2U/LnRvPy5zaG91bGQuZXF1YWwoU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exitDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/exitDelegationBuilder.ts"],"names":[],"mappings":""}
|