@bitgo-beta/sdk-coin-vet 1.0.1-beta.64 → 1.0.1-beta.641
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/constants.d.ts +28 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +30 -2
- package/dist/src/lib/iface.d.ts +28 -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 +21 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +44 -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 +29 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +151 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +143 -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/stakeClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -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 +99 -58
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +32 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +170 -0
- 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 +59 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -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/stakeClauseTxnBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -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/transactionBuilder/validatorRegistrationBuilder.d.ts +79 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +150 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +124 -1
- package/dist/src/lib/types.d.ts +21 -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 +102 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +277 -8
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/vet.d.ts +94 -3
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +505 -10
- 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 +1 -1
- package/dist/src/vetToken.d.ts.map +1 -1
- package/dist/src/vetToken.js +2 -2
- package/dist/test/resources/vet.d.ts +88 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +143 -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 +150 -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 +183 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -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 +150 -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/stakeClauseTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -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 +244 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +231 -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 +292 -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 +336 -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 -40
|
@@ -0,0 +1,209 @@
|
|
|
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 lib_1 = require("../../src/lib");
|
|
41
|
+
const should_1 = __importDefault(require("should"));
|
|
42
|
+
const constants_1 = require("../../src/lib/constants");
|
|
43
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
44
|
+
const testData = __importStar(require("../resources/vet"));
|
|
45
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
46
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
47
|
+
describe('VET Delegation Transaction', function () {
|
|
48
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
49
|
+
const tokenId = '100201'; // Test token ID
|
|
50
|
+
const validatorAddress = '0x9a7aFCACc88c106f3bbD6B213CD0821D9224d945';
|
|
51
|
+
// Helper function to create a basic transaction builder with common properties
|
|
52
|
+
const createBasicTxBuilder = () => {
|
|
53
|
+
const txBuilder = factory.getStakingDelegateBuilder();
|
|
54
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
55
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
56
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
57
|
+
txBuilder.expiration(64);
|
|
58
|
+
txBuilder.gas(100000);
|
|
59
|
+
txBuilder.gasPriceCoef(0);
|
|
60
|
+
txBuilder.nonce('12345');
|
|
61
|
+
return txBuilder;
|
|
62
|
+
};
|
|
63
|
+
it('should build a delegate transaction', async function () {
|
|
64
|
+
const txBuilder = factory.getStakingDelegateBuilder();
|
|
65
|
+
txBuilder.stakingContractAddress(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
66
|
+
txBuilder.tokenId(tokenId);
|
|
67
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
68
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
69
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
70
|
+
txBuilder.expiration(64);
|
|
71
|
+
txBuilder.gas(100000);
|
|
72
|
+
txBuilder.gasPriceCoef(0);
|
|
73
|
+
txBuilder.nonce('12345');
|
|
74
|
+
txBuilder.validator(validatorAddress);
|
|
75
|
+
const tx = await txBuilder.build();
|
|
76
|
+
should_1.default.exist(tx);
|
|
77
|
+
tx.should.be.instanceof(lib_1.Transaction);
|
|
78
|
+
tx.should.be.instanceof(lib_1.DelegateClauseTransaction);
|
|
79
|
+
const delegationTx = tx;
|
|
80
|
+
delegationTx.stakingContractAddress.should.equal(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
81
|
+
delegationTx.tokenId.should.equal(tokenId);
|
|
82
|
+
delegationTx.validator.should.equal(validatorAddress);
|
|
83
|
+
// Verify clauses
|
|
84
|
+
delegationTx.clauses.length.should.equal(1);
|
|
85
|
+
should_1.default.exist(delegationTx.clauses[0].to);
|
|
86
|
+
delegationTx.clauses[0].to?.should.equal(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
87
|
+
// Verify transaction data is correctly encoded using ethereumABI
|
|
88
|
+
should_1.default.exist(delegationTx.clauses[0].data);
|
|
89
|
+
const txData = delegationTx.clauses[0].data;
|
|
90
|
+
txData.should.startWith(constants_1.DELEGATE_CLAUSE_METHOD_ID);
|
|
91
|
+
// Verify the encoded data matches what we expect from ethereumABI
|
|
92
|
+
const methodName = 'delegate';
|
|
93
|
+
const types = ['uint256', 'address'];
|
|
94
|
+
const params = [new ethereumjs_util_1.BN(tokenId), validatorAddress];
|
|
95
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
96
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
97
|
+
const expectedData = '0x' + Buffer.concat([method, args]).toString('hex');
|
|
98
|
+
txData.should.equal(expectedData);
|
|
99
|
+
// Verify recipients
|
|
100
|
+
delegationTx.recipients.length.should.equal(1);
|
|
101
|
+
delegationTx.recipients[0].address.should.equal(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
102
|
+
});
|
|
103
|
+
describe('Failure scenarios', function () {
|
|
104
|
+
it('should throw error when stakingContractAddress is missing', async function () {
|
|
105
|
+
const txBuilder = createBasicTxBuilder();
|
|
106
|
+
txBuilder.tokenId(tokenId);
|
|
107
|
+
txBuilder.validator(validatorAddress);
|
|
108
|
+
await txBuilder.build().should.be.rejectedWith('Staking contract address is required');
|
|
109
|
+
});
|
|
110
|
+
it('should throw error when tokenId is missing', async function () {
|
|
111
|
+
const txBuilder = createBasicTxBuilder();
|
|
112
|
+
txBuilder.stakingContractAddress(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
113
|
+
await txBuilder.build().should.be.rejectedWith('Token ID is required');
|
|
114
|
+
});
|
|
115
|
+
it('should throw error when validator address is missing', async function () {
|
|
116
|
+
const txBuilder = createBasicTxBuilder();
|
|
117
|
+
txBuilder.stakingContractAddress(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
118
|
+
txBuilder.tokenId(tokenId);
|
|
119
|
+
await txBuilder.build().should.be.rejectedWith('Validator address is required');
|
|
120
|
+
});
|
|
121
|
+
it('should throw error when stakingContractAddress is invalid', async function () {
|
|
122
|
+
const txBuilder = createBasicTxBuilder();
|
|
123
|
+
// Invalid address (wrong format)
|
|
124
|
+
(0, should_1.default)(() => {
|
|
125
|
+
txBuilder.stakingContractAddress('invalid-address');
|
|
126
|
+
}).throw(/Invalid address/);
|
|
127
|
+
});
|
|
128
|
+
it('should build transaction with undefined sender but include it in inputs', async function () {
|
|
129
|
+
const txBuilder = factory.getStakingDelegateBuilder();
|
|
130
|
+
txBuilder.stakingContractAddress(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
131
|
+
txBuilder.tokenId(tokenId);
|
|
132
|
+
txBuilder.chainTag(0x27);
|
|
133
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
134
|
+
txBuilder.expiration(64);
|
|
135
|
+
txBuilder.gas(100000);
|
|
136
|
+
txBuilder.gasPriceCoef(0);
|
|
137
|
+
txBuilder.nonce('12345');
|
|
138
|
+
txBuilder.validator(validatorAddress);
|
|
139
|
+
// Not setting sender
|
|
140
|
+
const tx = await txBuilder.build();
|
|
141
|
+
tx.should.be.instanceof(lib_1.DelegateClauseTransaction);
|
|
142
|
+
const delegationTx = tx;
|
|
143
|
+
// Verify the transaction has inputs but with undefined address
|
|
144
|
+
delegationTx.inputs.length.should.equal(1);
|
|
145
|
+
should_1.default.not.exist(delegationTx.inputs[0].address);
|
|
146
|
+
// Verify the transaction has the correct output
|
|
147
|
+
delegationTx.outputs.length.should.equal(1);
|
|
148
|
+
delegationTx.outputs[0].address.should.equal(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
149
|
+
});
|
|
150
|
+
it('should use network default chainTag when not explicitly set', async function () {
|
|
151
|
+
const txBuilder = factory.getStakingDelegateBuilder();
|
|
152
|
+
txBuilder.stakingContractAddress(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
153
|
+
txBuilder.tokenId(tokenId);
|
|
154
|
+
// Not setting chainTag
|
|
155
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
156
|
+
txBuilder.expiration(64);
|
|
157
|
+
txBuilder.gas(100000);
|
|
158
|
+
txBuilder.gasPriceCoef(0);
|
|
159
|
+
txBuilder.nonce('12345');
|
|
160
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
161
|
+
txBuilder.validator(validatorAddress);
|
|
162
|
+
const tx = await txBuilder.build();
|
|
163
|
+
tx.should.be.instanceof(lib_1.DelegateClauseTransaction);
|
|
164
|
+
const delegationTx = tx;
|
|
165
|
+
// Verify the chainTag is set to the testnet default (39)
|
|
166
|
+
delegationTx.chainTag.should.equal(39);
|
|
167
|
+
});
|
|
168
|
+
it('should build a signed tx and validate its toJson', async function () {
|
|
169
|
+
const tokenIdForDelegateTxn = '15685';
|
|
170
|
+
const txBuilder = factory.from(testData.DELEGATION_TRANSACTION);
|
|
171
|
+
const tx = txBuilder.transaction;
|
|
172
|
+
const toJson = tx.toJson();
|
|
173
|
+
toJson.id.should.equal('0x841fd66a1d7feff7ab3d432720a659697197e6c67da1aeb9ce9d93b131e46ab7');
|
|
174
|
+
toJson.stakingContractAddress?.should.equal('0x1e02b2953adefec225cf0ec49805b1146a4429c1');
|
|
175
|
+
toJson.nonce.should.equal('0xf341b4c6b5ff5294');
|
|
176
|
+
toJson.gas.should.equal(242796);
|
|
177
|
+
toJson.gasPriceCoef.should.equal(128);
|
|
178
|
+
toJson.expiration.should.equal(400);
|
|
179
|
+
toJson.chainTag.should.equal(39);
|
|
180
|
+
toJson.tokenId?.should.equal(tokenIdForDelegateTxn);
|
|
181
|
+
toJson.validatorAddress?.should.equal('0x00000021cbe0de65ea10f7658effeea70727154a');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('decodeDelegateClauseData', function () {
|
|
185
|
+
it('should correctly decode delegate transaction data with proper address formatting', function () {
|
|
186
|
+
const decodedData = utils_1.default.decodeDelegateClauseData(testData.DELEGATE_CLAUSE_DATA);
|
|
187
|
+
decodedData.tokenId.should.equal(testData.DELEGATE_TOKEN_ID);
|
|
188
|
+
decodedData.validator.should.equal(testData.DELEGATE_VALIDATOR);
|
|
189
|
+
decodedData.validator.should.startWith('0x');
|
|
190
|
+
decodedData.validator.should.equal(decodedData.validator.toLowerCase());
|
|
191
|
+
});
|
|
192
|
+
it('should correctly deserialize real signed delegate transaction from raw hex', async function () {
|
|
193
|
+
const txBuilder = factory.from(testData.SIGNED_DELEGATE_RAW_HEX);
|
|
194
|
+
const tx = txBuilder.transaction;
|
|
195
|
+
tx.should.be.instanceof(lib_1.DelegateClauseTransaction);
|
|
196
|
+
tx.stakingContractAddress.should.equal(testData.SIGNED_DELEGATE_RAW_EXPECTED_STAKING_CONTRACT);
|
|
197
|
+
tx.tokenId.should.equal(testData.SIGNED_DELEGATE_RAW_EXPECTED_TOKEN_ID);
|
|
198
|
+
tx.validator.should.equal(testData.SIGNED_DELEGATE_RAW_EXPECTED_VALIDATOR);
|
|
199
|
+
tx.validator.should.startWith('0x');
|
|
200
|
+
tx.validator.should.equal(tx.validator.toLowerCase());
|
|
201
|
+
should_1.default.exist(tx.inputs);
|
|
202
|
+
tx.inputs.length.should.equal(1);
|
|
203
|
+
const decodedData = utils_1.default.decodeDelegateClauseData(tx.clauses[0].data);
|
|
204
|
+
decodedData.tokenId.should.equal(testData.SIGNED_DELEGATE_RAW_EXPECTED_TOKEN_ID);
|
|
205
|
+
decodedData.validator.should.equal(testData.SIGNED_DELEGATE_RAW_EXPECTED_VALIDATOR);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGVDbGF1c2VUeG5CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC90cmFuc2FjdGlvbkJ1aWxkZXIvZGVsZWdhdGVDbGF1c2VUeG5CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHVDQUFrRztBQUNsRyxvREFBNEI7QUFDNUIsdURBQXVHO0FBQ3ZHLG9FQUF5QztBQUN6QywyREFBNkM7QUFDN0MscURBQXFDO0FBQ3JDLGdFQUF3QztBQUV4QyxRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsZ0JBQWdCO0lBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7SUFFdEUsK0VBQStFO0lBQy9FLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3RELFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sU0FB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QUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDL0YsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3hFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMzRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDakYsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2FjdGlvbiwgRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgREVMRUdBVEVfQ0xBVVNFX01FVEhPRF9JRCwgU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy92ZXQnO1xuaW1wb3J0IHsgQk4gfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgnVkVUIERlbGVnYXRpb24gVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gIGNvbnN0IHRva2VuSWQgPSAnMTAwMjAxJzsgLy8gVGVzdCB0b2tlbiBJRFxuICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gJzB4OWE3YUZDQUNjODhjMTA2ZjNiYkQ2QjIxM0NEMDgyMUQ5MjI0ZDk0NSc7XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGJhc2ljIHRyYW5zYWN0aW9uIGJ1aWxkZXIgd2l0aCBjb21tb24gcHJvcGVydGllc1xuICBjb25zdCBjcmVhdGVCYXNpY1R4QnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdEZWxlZ2F0ZUJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKCcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknKTtcbiAgICB0eEJ1aWxkZXIuY2hhaW5UYWcoMHgyNyk7IC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKCcxMjM0NScpO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIGRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0RlbGVnYXRlQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgdHhCdWlsZGVyLnNlbmRlcignMHg5Mzc4YzEyQkQ3NTAyQTExRjc3MGE1QzFGMjIzYzk1OUIyODA1ZEE5Jyk7XG4gICAgdHhCdWlsZGVyLmNoYWluVGFnKDB4MjcpOyAvLyBUZXN0bmV0IGNoYWluIHRhZ1xuICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDApO1xuICAgIHR4QnVpbGRlci5ub25jZSgnMTIzNDUnKTtcbiAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXhpc3QodHgpO1xuICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFRyYW5zYWN0aW9uKTtcbiAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IGRlbGVnYXRpb25UeCA9IHR4IGFzIERlbGVnYXRlQ2xhdXNlVHJhbnNhY3Rpb247XG4gICAgZGVsZWdhdGlvblR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgZGVsZWdhdGlvblR4LnRva2VuSWQuc2hvdWxkLmVxdWFsKHRva2VuSWQpO1xuICAgIGRlbGVnYXRpb25UeC52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHZhbGlkYXRvckFkZHJlc3MpO1xuXG4gICAgLy8gVmVyaWZ5IGNsYXVzZXNcbiAgICBkZWxlZ2F0aW9uVHguY2xhdXNlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHNob3VsZC5leGlzdChkZWxlZ2F0aW9uVHguY2xhdXNlc1swXS50byk7XG4gICAgZGVsZWdhdGlvblR4LmNsYXVzZXNbMF0udG8/LnNob3VsZC5lcXVhbChTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuXG4gICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIGRhdGEgaXMgY29ycmVjdGx5IGVuY29kZWQgdXNpbmcgZXRoZXJldW1BQklcbiAgICBzaG91bGQuZXhpc3QoZGVsZWdhdGlvblR4LmNsYXVzZXNbMF0uZGF0YSk7XG4gICAgY29uc3QgdHhEYXRhID0gZGVsZWdhdGlvblR4LmNsYXVzZXNbMF0uZGF0YTtcbiAgICB0eERhdGEuc2hvdWxkLnN0YXJ0V2l0aChERUxFR0FURV9DTEFVU0VfTUVUSE9EX0lEKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgZW5jb2RlZCBkYXRhIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgZnJvbSBldGhlcmV1bUFCSVxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnZGVsZWdhdGUnO1xuICAgIGNvbnN0IHR5cGVzID0gWyd1aW50MjU2JywgJ2FkZHJlc3MnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbbmV3IEJOKHRva2VuSWQpLCB2YWxpZGF0b3JBZGRyZXNzXTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuICAgIGNvbnN0IGV4cGVjdGVkRGF0YSA9ICcweCcgKyBCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICB0eERhdGEuc2hvdWxkLmVxdWFsKGV4cGVjdGVkRGF0YSk7XG5cbiAgICAvLyBWZXJpZnkgcmVjaXBpZW50c1xuICAgIGRlbGVnYXRpb25UeC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgZGVsZWdhdGlvblR4LnJlY2lwaWVudHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZhaWx1cmUgc2NlbmFyaW9zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBzdGFraW5nQ29udHJhY3RBZGRyZXNzIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdTdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiB0b2tlbklkIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3MoU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVG9rZW4gSUQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiB2YWxpZGF0b3IgYWRkcmVzcyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlQmFzaWNUeEJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVmFsaWRhdG9yIGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBzdGFraW5nQ29udHJhY3RBZGRyZXNzIGlzIGludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuXG4gICAgICAvLyBJbnZhbGlkIGFkZHJlc3MgKHdyb25nIGZvcm1hdClcbiAgICAgIHNob3VsZCgoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKCdpbnZhbGlkLWFkZHJlc3MnKTtcbiAgICAgIH0pLnRocm93KC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdHJhbnNhY3Rpb24gd2l0aCB1bmRlZmluZWQgc2VuZGVyIGJ1dCBpbmNsdWRlIGl0IGluIGlucHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0RlbGVnYXRlQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3MoU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgdHhCdWlsZGVyLmNoYWluVGFnKDB4MjcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgLy8gTm90IHNldHRpbmcgc2VuZGVyXG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgZGVsZWdhdGlvblR4ID0gdHggYXMgRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbjtcbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gaGFzIGlucHV0cyBidXQgd2l0aCB1bmRlZmluZWQgYWRkcmVzc1xuICAgICAgZGVsZWdhdGlvblR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWxlZ2F0aW9uVHguaW5wdXRzWzBdLmFkZHJlc3MpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgY29ycmVjdCBvdXRwdXRcbiAgICAgIGRlbGVnYXRpb25UeC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBkZWxlZ2F0aW9uVHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgbmV0d29yayBkZWZhdWx0IGNoYWluVGFnIHdoZW4gbm90IGV4cGxpY2l0bHkgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICAvLyBOb3Qgc2V0dGluZyBjaGFpblRhZ1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKCcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknKTtcbiAgICAgIHR4QnVpbGRlci52YWxpZGF0b3IodmFsaWRhdG9yQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgZGVsZWdhdGlvblR4ID0gdHggYXMgRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbjtcbiAgICAgIC8vIFZlcmlmeSB0aGUgY2hhaW5UYWcgaXMgc2V0IHRvIHRoZSB0ZXN0bmV0IGRlZmF1bHQgKDM5KVxuICAgICAgZGVsZWdhdGlvblR4LmNoYWluVGFnLnNob3VsZC5lcXVhbCgzOSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHR4IGFuZCB2YWxpZGF0ZSBpdHMgdG9Kc29uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdG9rZW5JZEZvckRlbGVnYXRlVHhuID0gJzE1Njg1JztcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5ERUxFR0FUSU9OX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIERlbGVnYXRlQ2xhdXNlVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB0b0pzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHRvSnNvbi5pZC5zaG91bGQuZXF1YWwoJzB4ODQxZmQ2NmExZDdmZWZmN2FiM2Q0MzI3MjBhNjU5Njk3MTk3ZTZjNjdkYTFhZWI5Y2U5ZDkzYjEzMWU0NmFiNycpO1xuICAgICAgdG9Kc29uLnN0YWtpbmdDb250cmFjdEFkZHJlc3M/LnNob3VsZC5lcXVhbCgnMHgxZTAyYjI5NTNhZGVmZWMyMjVjZjBlYzQ5ODA1YjExNDZhNDQyOWMxJyk7XG4gICAgICB0b0pzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKCcweGYzNDFiNGM2YjVmZjUyOTQnKTtcbiAgICAgIHRvSnNvbi5nYXMuc2hvdWxkLmVxdWFsKDI0Mjc5Nik7XG4gICAgICB0b0pzb24uZ2FzUHJpY2VDb2VmLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgICAgdG9Kc29uLmV4cGlyYXRpb24uc2hvdWxkLmVxdWFsKDQwMCk7XG4gICAgICB0b0pzb24uY2hhaW5UYWcuc2hvdWxkLmVxdWFsKDM5KTtcbiAgICAgIHRvSnNvbi50b2tlbklkPy5zaG91bGQuZXF1YWwodG9rZW5JZEZvckRlbGVnYXRlVHhuKTtcbiAgICAgIHRvSnNvbi52YWxpZGF0b3JBZGRyZXNzPy5zaG91bGQuZXF1YWwoJzB4MDAwMDAwMjFjYmUwZGU2NWVhMTBmNzY1OGVmZmVlYTcwNzI3MTU0YScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVjb2RlRGVsZWdhdGVDbGF1c2VEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGRlY29kZSBkZWxlZ2F0ZSB0cmFuc2FjdGlvbiBkYXRhIHdpdGggcHJvcGVyIGFkZHJlc3MgZm9ybWF0dGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdXRpbHMuZGVjb2RlRGVsZWdhdGVDbGF1c2VEYXRhKHRlc3REYXRhLkRFTEVHQVRFX0NMQVVTRV9EQVRBKTtcblxuICAgICAgZGVjb2RlZERhdGEudG9rZW5JZC5zaG91bGQuZXF1YWwodGVzdERhdGEuREVMRUdBVEVfVE9LRU5fSUQpO1xuICAgICAgZGVjb2RlZERhdGEudmFsaWRhdG9yLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5ERUxFR0FURV9WQUxJREFUT1IpO1xuICAgICAgZGVjb2RlZERhdGEudmFsaWRhdG9yLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICBkZWNvZGVkRGF0YS52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKGRlY29kZWREYXRhLnZhbGlkYXRvci50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGRlc2VyaWFsaXplIHJlYWwgc2lnbmVkIGRlbGVnYXRlIHRyYW5zYWN0aW9uIGZyb20gcmF3IGhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TSUdORURfREVMRUdBVEVfUkFXX0hFWCk7XG4gICAgICBjb25zdCB0eCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbiBhcyBEZWxlZ2F0ZUNsYXVzZVRyYW5zYWN0aW9uO1xuICAgICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoRGVsZWdhdGVDbGF1c2VUcmFuc2FjdGlvbik7XG4gICAgICB0eC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TSUdORURfREVMRUdBVEVfUkFXX0VYUEVDVEVEX1NUQUtJTkdfQ09OVFJBQ1QpO1xuICAgICAgdHgudG9rZW5JZC5zaG91bGQuZXF1YWwodGVzdERhdGEuU0lHTkVEX0RFTEVHQVRFX1JBV19FWFBFQ1RFRF9UT0tFTl9JRCk7XG4gICAgICB0eC52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNJR05FRF9ERUxFR0FURV9SQVdfRVhQRUNURURfVkFMSURBVE9SKTtcbiAgICAgIHR4LnZhbGlkYXRvci5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgdHgudmFsaWRhdG9yLnNob3VsZC5lcXVhbCh0eC52YWxpZGF0b3IudG9Mb3dlckNhc2UoKSk7XG4gICAgICBzaG91bGQuZXhpc3QodHguaW5wdXRzKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHV0aWxzLmRlY29kZURlbGVnYXRlQ2xhdXNlRGF0YSh0eC5jbGF1c2VzWzBdLmRhdGEpO1xuICAgICAgZGVjb2RlZERhdGEudG9rZW5JZC5zaG91bGQuZXF1YWwodGVzdERhdGEuU0lHTkVEX0RFTEVHQVRFX1JBV19FWFBFQ1RFRF9UT0tFTl9JRCk7XG4gICAgICBkZWNvZGVkRGF0YS52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNJR05FRF9ERUxFR0FURV9SQVdfRVhQRUNURURfVkFMSURBVE9SKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exitDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/exitDelegationBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
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 Exit Delegation Transaction', () => {
|
|
46
|
+
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
47
|
+
const stakingContractAddress = constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET;
|
|
48
|
+
describe('Build and Sign', () => {
|
|
49
|
+
it('should build an exit delegation transaction', async function () {
|
|
50
|
+
const tokenId = '123456';
|
|
51
|
+
const txBuilder = factory.getExitDelegationBuilder();
|
|
52
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
53
|
+
txBuilder.tokenId(tokenId);
|
|
54
|
+
txBuilder.stakingContractAddress(stakingContractAddress);
|
|
55
|
+
txBuilder.gas(21000);
|
|
56
|
+
txBuilder.nonce('64248');
|
|
57
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
58
|
+
txBuilder.expiration(64);
|
|
59
|
+
txBuilder.gasPriceCoef(128);
|
|
60
|
+
const tx = (await txBuilder.build());
|
|
61
|
+
should_1.default.equal(tx.sender, testData.addresses.validAddresses[0]);
|
|
62
|
+
should_1.default.equal(tx.tokenId, tokenId);
|
|
63
|
+
should_1.default.equal(tx.stakingContractAddress, constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
64
|
+
should_1.default.equal(tx.gas, 21000);
|
|
65
|
+
should_1.default.equal(tx.nonce, '64248');
|
|
66
|
+
should_1.default.equal(tx.expiration, 64);
|
|
67
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingUnlock);
|
|
68
|
+
// Verify the transaction data contains the correct method ID and tokenId
|
|
69
|
+
tx.clauses[0].data.should.startWith(constants_1.EXIT_DELEGATION_METHOD_ID);
|
|
70
|
+
// Verify the transaction has the correct structure
|
|
71
|
+
tx.clauses.length.should.equal(1);
|
|
72
|
+
should_1.default.exist(tx.clauses[0]);
|
|
73
|
+
should_1.default.exist(tx.clauses[0].to);
|
|
74
|
+
tx.clauses[0]?.to?.should.equal(constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
75
|
+
should_1.default.exist(tx.clauses[0].value);
|
|
76
|
+
tx.clauses[0].value.should.equal('0x0');
|
|
77
|
+
tx.inputs.length.should.equal(1);
|
|
78
|
+
tx.outputs.length.should.equal(1);
|
|
79
|
+
should_1.default.equal(tx.inputs[0].address, testData.addresses.validAddresses[0]);
|
|
80
|
+
should_1.default.equal(tx.inputs[0].value, '0');
|
|
81
|
+
should_1.default.equal(tx.inputs[0].coin, 'tvet');
|
|
82
|
+
should_1.default.equal(tx.outputs[0].address, constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
83
|
+
should_1.default.equal(tx.outputs[0].value, '0');
|
|
84
|
+
should_1.default.equal(tx.outputs[0].coin, 'tvet');
|
|
85
|
+
});
|
|
86
|
+
it('should deserialize and reserialize a signed exit delegation transaction', async function () {
|
|
87
|
+
// Create a mock serialized transaction for exit delegation
|
|
88
|
+
const tokenId = '123456';
|
|
89
|
+
const txBuilder = factory.getExitDelegationBuilder();
|
|
90
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
91
|
+
txBuilder.tokenId(tokenId);
|
|
92
|
+
txBuilder.stakingContractAddress(stakingContractAddress);
|
|
93
|
+
txBuilder.gas(21000);
|
|
94
|
+
txBuilder.nonce('64248');
|
|
95
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
96
|
+
txBuilder.expiration(64);
|
|
97
|
+
txBuilder.gasPriceCoef(128);
|
|
98
|
+
const tx = (await txBuilder.build());
|
|
99
|
+
const serializedTx = tx.toBroadcastFormat();
|
|
100
|
+
// Now deserialize and check
|
|
101
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
102
|
+
const deserializedTx = (await deserializedBuilder.build());
|
|
103
|
+
should_1.default.equal(deserializedTx.type, sdk_core_1.TransactionType.StakingUnlock);
|
|
104
|
+
should_1.default.equal(deserializedTx.tokenId, tokenId);
|
|
105
|
+
should_1.default.equal(deserializedTx.stakingContractAddress, constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET);
|
|
106
|
+
});
|
|
107
|
+
it('should validate the transaction data structure', async function () {
|
|
108
|
+
const txBuilder = factory.getExitDelegationBuilder();
|
|
109
|
+
// Should throw error when building without required fields
|
|
110
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('Staking contract address is required');
|
|
111
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
112
|
+
txBuilder.stakingContractAddress(stakingContractAddress);
|
|
113
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('Token ID is required');
|
|
114
|
+
// Now add the token ID and it should build successfully
|
|
115
|
+
txBuilder.tokenId('123456');
|
|
116
|
+
txBuilder.gas(21000);
|
|
117
|
+
txBuilder.nonce('64248');
|
|
118
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
119
|
+
const tx = await txBuilder.build();
|
|
120
|
+
should_1.default.exist(tx);
|
|
121
|
+
});
|
|
122
|
+
it('should build from raw signed tx', async function () {
|
|
123
|
+
const txBuilder = factory.from(testData.EXIT_DELEGATION_TRANSACTION);
|
|
124
|
+
const tx = txBuilder.transaction;
|
|
125
|
+
const toJson = tx.toJson();
|
|
126
|
+
toJson.id.should.equal('0xeca0ba2c8fa91332a1fe037232aa0af9fe6e939313458a6838c6d4060ede0278');
|
|
127
|
+
toJson.stakingContractAddress?.should.equal('0x1e02b2953adefec225cf0ec49805b1146a4429c1');
|
|
128
|
+
toJson.nonce.should.equal('390746');
|
|
129
|
+
toJson.gas.should.equal(217695);
|
|
130
|
+
toJson.gasPriceCoef.should.equal(128);
|
|
131
|
+
toJson.expiration.should.equal(64);
|
|
132
|
+
toJson.chainTag.should.equal(39);
|
|
133
|
+
toJson.tokenId?.should.equal('15661');
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('Validation', () => {
|
|
137
|
+
it('should fail with invalid contract address', function () {
|
|
138
|
+
const txBuilder = factory.getExitDelegationBuilder();
|
|
139
|
+
(0, should_1.default)(() => txBuilder.stakingContractAddress('invalid-address')).throwError('Invalid address invalid-address');
|
|
140
|
+
});
|
|
141
|
+
it('should fail with invalid token ID', async function () {
|
|
142
|
+
const txBuilder = factory.getExitDelegationBuilder();
|
|
143
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
144
|
+
txBuilder.stakingContractAddress(stakingContractAddress);
|
|
145
|
+
txBuilder.tokenId('');
|
|
146
|
+
await (0, should_1.default)(txBuilder.build()).be.rejectedWith('Token ID is required');
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpdERlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC90cmFuc2FjdGlvbkJ1aWxkZXIvZXhpdERlbGVnYXRpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUN2RCxpREFBNEM7QUFDNUMsbUNBQXNEO0FBRXRELDJEQUE2QztBQUM3Qyx1REFBdUc7QUFFdkcsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLHNCQUFzQixHQUFHLDZDQUFpQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUs7WUFDckQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBRXJELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FB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QUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSztZQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNyRCxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsU0FBUyxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDekQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV0QixNQUFNLElBQUEsZ0JBQU0sRUFBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24vZXhpdERlbGVnYXRpb24nO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgeyBFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lELCBTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5cbmRlc2NyaWJlKCdWZXQgRXhpdCBEZWxlZ2F0aW9uIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0dmV0JykpO1xuICBjb25zdCBzdGFraW5nQ29udHJhY3RBZGRyZXNzID0gU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBhbmQgU2lnbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTIzNDU2JztcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhpdERlbGVnYXRpb25CdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uO1xuXG4gICAgICBzaG91bGQuZXF1YWwodHguc2VuZGVyLCB0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRva2VuSWQsIHRva2VuSWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3MsIFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguZ2FzLCAyMTAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgubm9uY2UsICc2NDI0OCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZGF0YSBjb250YWlucyB0aGUgY29ycmVjdCBtZXRob2QgSUQgYW5kIHRva2VuSWRcbiAgICAgIHR4LmNsYXVzZXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgY29ycmVjdCBzdHJ1Y3R1cmVcbiAgICAgIHR4LmNsYXVzZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5jbGF1c2VzWzBdKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5jbGF1c2VzWzBdLnRvKTtcbiAgICAgIHR4LmNsYXVzZXNbMF0/LnRvPy5zaG91bGQuZXF1YWwoU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5jbGF1c2VzWzBdLnZhbHVlKTtcbiAgICAgIHR4LmNsYXVzZXNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcweDAnKTtcblxuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsICcwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLmNvaW4sICd0dmV0Jyk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MsIFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgJzAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmNvaW4sICd0dmV0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlc2VyaWFsaXplIGFuZCByZXNlcmlhbGl6ZSBhIHNpZ25lZCBleGl0IGRlbGVnYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDcmVhdGUgYSBtb2NrIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gZm9yIGV4aXQgZGVsZWdhdGlvblxuICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMjM0NTYnO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeGl0RGVsZWdhdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIEV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBOb3cgZGVzZXJpYWxpemUgYW5kIGNoZWNrXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRUeCA9IChhd2FpdCBkZXNlcmlhbGl6ZWRCdWlsZGVyLmJ1aWxkKCkpIGFzIEV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb247XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZXNlcmlhbGl6ZWRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVzZXJpYWxpemVkVHgudG9rZW5JZCwgdG9rZW5JZCk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcywgU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uIGRhdGEgc3RydWN0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeGl0RGVsZWdhdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgLy8gU2hvdWxkIHRocm93IGVycm9yIHdoZW4gYnVpbGRpbmcgd2l0aG91dCByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGF3YWl0IHNob3VsZCh0eEJ1aWxkZXIuYnVpbGQoKSkuYmUucmVqZWN0ZWRXaXRoKCdTdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcblxuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBhd2FpdCBzaG91bGQodHhCdWlsZGVyLmJ1aWxkKCkpLmJlLnJlamVjdGVkV2l0aCgnVG9rZW4gSUQgaXMgcmVxdWlyZWQnKTtcblxuICAgICAgLy8gTm93IGFkZCB0aGUgdG9rZW4gSUQgYW5kIGl0IHNob3VsZCBidWlsZCBzdWNjZXNzZnVsbHlcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKCcxMjM0NTYnKTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5FWElUX0RFTEVHQVRJT05fVFJBTlNBQ1RJT04pO1xuICAgICAgY29uc3QgdHggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24gYXMgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHRvSnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdG9Kc29uLmlkLnNob3VsZC5lcXVhbCgnMHhlY2EwYmEyYzhmYTkxMzMyYTFmZTAzNzIzMmFhMGFmOWZlNmU5MzkzMTM0NThhNjgzOGM2ZDQwNjBlZGUwMjc4Jyk7XG4gICAgICB0b0pzb24uc3Rha2luZ0NvbnRyYWN0QWRkcmVzcz8uc2hvdWxkLmVxdWFsKCcweDFlMDJiMjk1M2FkZWZlYzIyNWNmMGVjNDk4MDViMTE0NmE0NDI5YzEnKTtcbiAgICAgIHRvSnNvbi5ub25jZS5zaG91bGQuZXF1YWwoJzM5MDc0NicpO1xuICAgICAgdG9Kc29uLmdhcy5zaG91bGQuZXF1YWwoMjE3Njk1KTtcbiAgICAgIHRvSnNvbi5nYXNQcmljZUNvZWYuc2hvdWxkLmVxdWFsKDEyOCk7XG4gICAgICB0b0pzb24uZXhwaXJhdGlvbi5zaG91bGQuZXF1YWwoNjQpO1xuICAgICAgdG9Kc29uLmNoYWluVGFnLnNob3VsZC5lcXVhbCgzOSk7XG4gICAgICB0b0pzb24udG9rZW5JZD8uc2hvdWxkLmVxdWFsKCcxNTY2MScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4aXREZWxlZ2F0aW9uQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKCdpbnZhbGlkLWFkZHJlc3MnKSkudGhyb3dFcnJvcignSW52YWxpZCBhZGRyZXNzIGludmFsaWQtYWRkcmVzcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCB0b2tlbiBJRCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhpdERlbGVnYXRpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbklkKCcnKTtcblxuICAgICAgYXdhaXQgc2hvdWxkKHR4QnVpbGRlci5idWlsZCgpKS5iZS5yZWplY3RlZFdpdGgoJ1Rva2VuIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flushTokenTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/flushTokenTransactionBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
41
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
42
|
+
const src_1 = require("../../src");
|
|
43
|
+
const testData = __importStar(require("../resources/vet"));
|
|
44
|
+
describe('Flush Token Transaction', () => {
|
|
45
|
+
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
46
|
+
describe('Succeed', () => {
|
|
47
|
+
it('should build a flush token transaction', async function () {
|
|
48
|
+
const transaction = new src_1.FlushTokenTransaction(statics_1.coins.get('tvet'));
|
|
49
|
+
const txBuilder = factory.getFlushTokenTransactionBuilder(transaction);
|
|
50
|
+
txBuilder.gas(21000);
|
|
51
|
+
txBuilder.nonce('64248');
|
|
52
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
53
|
+
txBuilder.expiration(64);
|
|
54
|
+
txBuilder.gasPriceCoef(128);
|
|
55
|
+
txBuilder.contract(testData.FORWARDER_ADDRESS);
|
|
56
|
+
txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
|
|
57
|
+
txBuilder.forwarderVersion(4);
|
|
58
|
+
const tx = (await txBuilder.build());
|
|
59
|
+
should_1.default.equal(tx.gas, 21000);
|
|
60
|
+
should_1.default.equal(tx.nonce, '64248');
|
|
61
|
+
should_1.default.equal(tx.expiration, 64);
|
|
62
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushTokens);
|
|
63
|
+
should_1.default.equal(tx.blockRef, '0x014ead140e77bbc1');
|
|
64
|
+
should_1.default.equal(tx.clauses.length, 1);
|
|
65
|
+
should_1.default.equal(tx.clauses[0].to, testData.FORWARDER_ADDRESS);
|
|
66
|
+
should_1.default.equal(tx.clauses[0].data, testData.FLUSH_TOKEN_DATA);
|
|
67
|
+
should_1.default.equal(tx.clauses[0].value, '0x0');
|
|
68
|
+
const rawTx = tx.toBroadcastFormat();
|
|
69
|
+
should_1.default.equal(txBuilder.isValidRawTransaction(rawTx), true);
|
|
70
|
+
rawTx.should.equal(testData.FLUSH_TOKEN_TRANSACTION);
|
|
71
|
+
});
|
|
72
|
+
it('should succeed to validate a valid signablePayload', async function () {
|
|
73
|
+
const transaction = new src_1.FlushTokenTransaction(statics_1.coins.get('tvet'));
|
|
74
|
+
const txBuilder = factory.getFlushTokenTransactionBuilder(transaction);
|
|
75
|
+
txBuilder.gas(21000);
|
|
76
|
+
txBuilder.nonce('64248');
|
|
77
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
78
|
+
txBuilder.expiration(64);
|
|
79
|
+
txBuilder.gasPriceCoef(128);
|
|
80
|
+
txBuilder.contract(testData.FORWARDER_ADDRESS);
|
|
81
|
+
txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
|
|
82
|
+
txBuilder.forwarderVersion(4);
|
|
83
|
+
const tx = (await txBuilder.build());
|
|
84
|
+
const signablePayload = tx.signablePayload;
|
|
85
|
+
should_1.default.equal(signablePayload.toString('hex'), testData.FLUSH_TOKEN_SIGNABLE_PAYLOAD);
|
|
86
|
+
});
|
|
87
|
+
it('should build a unsigned tx and validate its toJson', async function () {
|
|
88
|
+
const transaction = new src_1.FlushTokenTransaction(statics_1.coins.get('tvet'));
|
|
89
|
+
const txBuilder = factory.getFlushTokenTransactionBuilder(transaction);
|
|
90
|
+
txBuilder.gas(21000);
|
|
91
|
+
txBuilder.nonce('64248');
|
|
92
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
93
|
+
txBuilder.expiration(64);
|
|
94
|
+
txBuilder.gasPriceCoef(128);
|
|
95
|
+
txBuilder.contract(testData.FORWARDER_ADDRESS);
|
|
96
|
+
txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
|
|
97
|
+
txBuilder.forwarderVersion(4);
|
|
98
|
+
const tx = (await txBuilder.build());
|
|
99
|
+
const toJson = tx.toJson();
|
|
100
|
+
should_1.default.equal(toJson.nonce, '64248');
|
|
101
|
+
should_1.default.equal(toJson.gas, 21000);
|
|
102
|
+
should_1.default.equal(toJson.gasPriceCoef, 128);
|
|
103
|
+
should_1.default.equal(toJson.expiration, 64);
|
|
104
|
+
should_1.default.equal(toJson.data, testData.FLUSH_TOKEN_DATA);
|
|
105
|
+
should_1.default.equal(toJson.to, testData.FORWARDER_ADDRESS);
|
|
106
|
+
should_1.default.equal(toJson.tokenAddress, testData.TOKEN_ADDRESS);
|
|
107
|
+
should_1.default.equal(toJson.value, '0');
|
|
108
|
+
});
|
|
109
|
+
it('should build properly from serialized', async () => {
|
|
110
|
+
const txBuilder = factory.from(testData.SERIALIZED_SIGNED_FLUSH_TOKEN_TX);
|
|
111
|
+
const signedTx = await txBuilder.build();
|
|
112
|
+
const signedtxJson = signedTx.toJson();
|
|
113
|
+
should_1.default.equal(signedtxJson.gas, 150000);
|
|
114
|
+
txBuilder.gas(180000);
|
|
115
|
+
const tx = await txBuilder.build();
|
|
116
|
+
const txJson = tx.toJson();
|
|
117
|
+
should_1.default.equal(txJson.to, testData.FORWARDER_ADDRESS_NEW);
|
|
118
|
+
should_1.default.equal(txJson.gas, 180000);
|
|
119
|
+
console.log('txJson:', txJson);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
describe('Fail', () => {
|
|
123
|
+
it('should fail if invalid params are used to build a tx', async function () {
|
|
124
|
+
const transaction = new src_1.FlushTokenTransaction(statics_1.coins.get('tvet'));
|
|
125
|
+
const txBuilder = factory.getFlushTokenTransactionBuilder(transaction);
|
|
126
|
+
(0, should_1.default)(() => txBuilder.tokenAddress('randomString')).throwError('Invalid address randomString');
|
|
127
|
+
(0, should_1.default)(() => txBuilder.contract('randomString')).throwError('Invalid address randomString');
|
|
128
|
+
(0, should_1.default)(() => txBuilder.forwarderVersion(3)).throwError('Invalid forwarder version: 3');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCxtQ0FBNkU7QUFDN0UsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7SUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFakUsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUs7WUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSwyQkFBcUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZFLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0MsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFD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QUFDLHNEQUFzRCxFQUFFLEtBQUs7WUFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBSSwyQkFBcUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDakUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXZFLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDaEcsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUM1RixJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIEZsdXNoVG9rZW5UcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvdmV0JztcblxuZGVzY3JpYmUoJ0ZsdXNoIFRva2VuIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0dmV0JykpO1xuXG4gIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBmbHVzaCB0b2tlbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IEZsdXNoVG9rZW5UcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigxMjgpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLkZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModGVzdERhdGEuVE9LRU5fQUREUkVTUyk7XG4gICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBGbHVzaFRva2VuVHJhbnNhY3Rpb247XG4gICAgICBzaG91bGQuZXF1YWwodHguZ2FzLCAyMTAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgubm9uY2UsICc2NDI0OCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmJsb2NrUmVmLCAnMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguY2xhdXNlcy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNsYXVzZXNbMF0udG8sIHRlc3REYXRhLkZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5jbGF1c2VzWzBdLmRhdGEsIHRlc3REYXRhLkZMVVNIX1RPS0VOX0RBVEEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmNsYXVzZXNbMF0udmFsdWUsICcweDAnKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEJ1aWxkZXIuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwodGVzdERhdGEuRkxVU0hfVE9LRU5fVFJBTlNBQ1RJT04pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIGEgdmFsaWQgc2lnbmFibGVQYXlsb2FkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgRmx1c2hUb2tlblRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldCcpKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Rmx1c2hUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QodGVzdERhdGEuRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0ZXN0RGF0YS5UT0tFTl9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDQpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIEZsdXNoVG9rZW5UcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHNpZ25hYmxlUGF5bG9hZCA9IHR4LnNpZ25hYmxlUGF5bG9hZDtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpLCB0ZXN0RGF0YS5GTFVTSF9UT0tFTl9TSUdOQUJMRV9QQVlMT0FEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB0eCBhbmQgdmFsaWRhdGUgaXRzIHRvSnNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IEZsdXNoVG9rZW5UcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEZsdXNoVG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigxMjgpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLkZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModGVzdERhdGEuVE9LRU5fQUREUkVTUyk7XG4gICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBGbHVzaFRva2VuVHJhbnNhY3Rpb247XG5cbiAgICAgIGNvbnN0IHRvSnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5ub25jZSwgJzY0MjQ4Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXNQcmljZUNvZWYsIDEyOCk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uZGF0YSwgdGVzdERhdGEuRkxVU0hfVE9LRU5fREFUQSk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLnRvLCB0ZXN0RGF0YS5GT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLnRva2VuQWRkcmVzcywgdGVzdERhdGEuVE9LRU5fQUREUkVTUyk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLnZhbHVlLCAnMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBwcm9wZXJseSBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU0VSSUFMSVpFRF9TSUdORURfRkxVU0hfVE9LRU5fVFgpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNpZ25lZHR4SnNvbiA9IHNpZ25lZFR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZHR4SnNvbi5nYXMsIDE1MDAwMCk7XG5cbiAgICAgIHR4QnVpbGRlci5nYXMoMTgwMDAwKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIHRlc3REYXRhLkZPUldBUkRFUl9BRERSRVNTX05FVyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmdhcywgMTgwMDAwKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0eEpzb246JywgdHhKc29uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIGludmFsaWQgcGFyYW1zIGFyZSB1c2VkIHRvIGJ1aWxkIGEgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBGbHVzaFRva2VuVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0dmV0JykpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRGbHVzaFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHRyYW5zYWN0aW9uKTtcblxuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci50b2tlbkFkZHJlc3MoJ3JhbmRvbVN0cmluZycpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGFkZHJlc3MgcmFuZG9tU3RyaW5nJyk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmNvbnRyYWN0KCdyYW5kb21TdHJpbmcnKSkudGhyb3dFcnJvcignSW52YWxpZCBhZGRyZXNzIHJhbmRvbVN0cmluZycpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDMpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGZvcndhcmRlciB2ZXJzaW9uOiAzJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nftTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/nftTransactionBuilder.ts"],"names":[],"mappings":""}
|