@bitgo-beta/sdk-coin-vet 1.0.1-beta.65 → 1.0.1-beta.651

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.
Files changed (160) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/constants.d.ts +28 -0
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +30 -2
  7. package/dist/src/lib/iface.d.ts +28 -2
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/index.d.ts +21 -0
  11. package/dist/src/lib/index.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +44 -2
  13. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
  14. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
  15. package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
  16. package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
  17. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
  19. package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
  20. package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
  21. package/dist/src/lib/transaction/claimRewards.js +151 -0
  22. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
  23. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
  25. package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
  26. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/exitDelegation.js +143 -0
  28. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
  31. package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
  32. package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/nftTransaction.js +108 -0
  34. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
  35. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
  37. package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
  38. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/stakingTransaction.js +169 -0
  40. package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
  41. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/tokenTransaction.js +95 -0
  43. package/dist/src/lib/transaction/transaction.d.ts +18 -28
  44. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  45. package/dist/src/lib/transaction/transaction.js +99 -58
  46. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +32 -0
  47. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction/validatorRegistrationTransaction.js +170 -0
  49. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
  50. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
  52. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
  53. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
  55. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
  56. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
  58. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
  59. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
  61. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
  62. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
  64. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
  65. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
  67. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
  68. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
  70. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
  71. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
  73. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
  74. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
  76. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
  77. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
  79. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
  80. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
  82. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +79 -0
  83. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +150 -0
  85. package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
  86. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  87. package/dist/src/lib/transactionBuilderFactory.js +124 -1
  88. package/dist/src/lib/types.d.ts +21 -0
  89. package/dist/src/lib/types.d.ts.map +1 -1
  90. package/dist/src/lib/types.js +1 -1
  91. package/dist/src/lib/utils.d.ts +102 -1
  92. package/dist/src/lib/utils.d.ts.map +1 -1
  93. package/dist/src/lib/utils.js +277 -8
  94. package/dist/src/register.d.ts.map +1 -1
  95. package/dist/src/register.js +5 -1
  96. package/dist/src/vet.d.ts +94 -3
  97. package/dist/src/vet.d.ts.map +1 -1
  98. package/dist/src/vet.js +505 -10
  99. package/dist/src/vetNFTCollection.d.ts +18 -0
  100. package/dist/src/vetNFTCollection.d.ts.map +1 -0
  101. package/dist/src/vetNFTCollection.js +52 -0
  102. package/dist/src/vetToken.d.ts +1 -1
  103. package/dist/src/vetToken.d.ts.map +1 -1
  104. package/dist/src/vetToken.js +2 -2
  105. package/dist/test/resources/vet.d.ts +88 -0
  106. package/dist/test/resources/vet.d.ts.map +1 -0
  107. package/dist/test/resources/vet.js +143 -0
  108. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  109. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  110. package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
  111. package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
  112. package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  113. package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
  114. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
  115. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  116. package/dist/test/transactionBuilder/claimRewardsBuilder.js +183 -0
  117. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
  118. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
  119. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
  120. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
  121. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  122. package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
  123. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
  124. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  125. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
  126. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
  127. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  128. package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
  129. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
  130. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
  131. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
  132. package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
  133. package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
  134. package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
  135. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
  136. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  137. package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
  138. package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
  139. package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
  140. package/dist/test/transactionBuilder/transferBuilder.js +244 -0
  141. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
  142. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
  143. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +231 -0
  144. package/dist/test/unit/keyPair.d.ts +2 -0
  145. package/dist/test/unit/keyPair.d.ts.map +1 -0
  146. package/dist/test/unit/keyPair.js +181 -0
  147. package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
  148. package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
  149. package/dist/test/unit/stakingFlowE2E.js +292 -0
  150. package/dist/test/unit/utils.d.ts +2 -0
  151. package/dist/test/unit/utils.d.ts.map +1 -0
  152. package/dist/test/unit/utils.js +106 -0
  153. package/dist/test/unit/vet.d.ts +2 -0
  154. package/dist/test/unit/vet.d.ts.map +1 -0
  155. package/dist/test/unit/vet.js +336 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/package.json +16 -10
  158. package/.eslintignore +0 -5
  159. package/.mocharc.yml +0 -8
  160. package/CHANGELOG.md +0 -40
@@ -0,0 +1,250 @@
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
+ describe('VET Staking Transaction', function () {
46
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
47
+ const stakingContractAddress = constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET;
48
+ const amountToStake = '1000000000000000000'; // 1 VET in wei
49
+ const levelId = 8; // Test level ID
50
+ const autorenew = true; // Test autorenew flag
51
+ // Helper function to create a basic transaction builder with common properties
52
+ const createBasicTxBuilder = () => {
53
+ const txBuilder = factory.getStakingBuilder();
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 staking transaction', async function () {
64
+ const txBuilder = factory.getStakingBuilder();
65
+ txBuilder.stakingContractAddress(stakingContractAddress);
66
+ txBuilder.amountToStake(amountToStake);
67
+ txBuilder.levelId(levelId);
68
+ txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
69
+ txBuilder.chainTag(0x27); // Testnet chain tag
70
+ txBuilder.blockRef('0x0000000000000000');
71
+ txBuilder.expiration(64);
72
+ txBuilder.gas(100000);
73
+ txBuilder.gasPriceCoef(0);
74
+ txBuilder.nonce('12345');
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.StakingTransaction);
79
+ const stakingTx = tx;
80
+ stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
81
+ stakingTx.amountToStake.should.equal(amountToStake);
82
+ stakingTx.levelId.should.equal(levelId);
83
+ stakingTx.autorenew.should.equal(autorenew);
84
+ // Verify clauses
85
+ stakingTx.clauses.length.should.equal(1);
86
+ should_1.default.exist(stakingTx.clauses[0].to);
87
+ stakingTx.clauses[0].to?.should.equal(stakingContractAddress);
88
+ stakingTx.clauses[0].value.should.equal(amountToStake);
89
+ // Verify transaction data is correctly encoded using ethereumABI
90
+ should_1.default.exist(stakingTx.clauses[0].data);
91
+ const txData = stakingTx.clauses[0].data;
92
+ txData.should.startWith(constants_1.STAKING_METHOD_ID);
93
+ // Verify the encoded data matches what we expect from ethereumABI
94
+ const methodName = 'stakeAndDelegate';
95
+ const types = ['uint8', 'bool'];
96
+ const params = [levelId, autorenew];
97
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
98
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
99
+ const expectedData = '0x' + Buffer.concat([method, args]).toString('hex');
100
+ txData.should.equal(expectedData);
101
+ // Verify recipients
102
+ stakingTx.recipients.length.should.equal(1);
103
+ stakingTx.recipients[0].address.should.equal(stakingContractAddress);
104
+ stakingTx.recipients[0].amount.should.equal(amountToStake);
105
+ });
106
+ describe('Failure scenarios', function () {
107
+ it('should throw error when stakingContractAddress is missing', async function () {
108
+ const txBuilder = createBasicTxBuilder();
109
+ txBuilder.amountToStake(amountToStake);
110
+ txBuilder.levelId(levelId);
111
+ await txBuilder.build().should.be.rejectedWith('Staking contract address is required');
112
+ });
113
+ it('should throw error when levelId is missing', async function () {
114
+ const txBuilder = createBasicTxBuilder();
115
+ txBuilder.stakingContractAddress(stakingContractAddress);
116
+ txBuilder.amountToStake(amountToStake);
117
+ await txBuilder.build().should.be.rejectedWith('Level ID is required');
118
+ });
119
+ it('should throw error when amountToStake is missing', async function () {
120
+ const txBuilder = createBasicTxBuilder();
121
+ txBuilder.stakingContractAddress(stakingContractAddress);
122
+ txBuilder.levelId(levelId);
123
+ await txBuilder.build().should.be.rejectedWith('Amount to stake is required');
124
+ });
125
+ it('should throw error when stakingContractAddress is invalid', async function () {
126
+ const txBuilder = createBasicTxBuilder();
127
+ // Invalid address (wrong format)
128
+ (0, should_1.default)(() => {
129
+ txBuilder.stakingContractAddress('invalid-address');
130
+ }).throw(/Invalid address/);
131
+ });
132
+ it('should throw error when amountToStake is not a valid number string', async function () {
133
+ const txBuilder = createBasicTxBuilder();
134
+ txBuilder.stakingContractAddress(stakingContractAddress);
135
+ txBuilder.levelId(levelId);
136
+ // Invalid amount (not a number)
137
+ txBuilder.amountToStake('not-a-number');
138
+ // Should fail when building the transaction due to invalid amount
139
+ await txBuilder.build().should.be.rejected();
140
+ });
141
+ it('should allow zero amountToStake but encode it properly', async function () {
142
+ const txBuilder = createBasicTxBuilder();
143
+ txBuilder.stakingContractAddress(stakingContractAddress);
144
+ txBuilder.levelId(levelId);
145
+ txBuilder.amountToStake('0');
146
+ const tx = await txBuilder.build();
147
+ tx.should.be.instanceof(lib_1.StakingTransaction);
148
+ const stakingTx = tx;
149
+ // Verify the amount is correctly set to zero
150
+ stakingTx.amountToStake.should.equal('0');
151
+ // Verify the transaction data is correctly encoded with levelId and autorenew for stakeAndDelegate
152
+ // Expected data for stakeAndDelegate(8, true) where 8 is levelId and true is autorenew
153
+ const expectedData = '0xd8da3bbf00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001';
154
+ stakingTx.clauses[0].data.should.equal(expectedData);
155
+ });
156
+ it('should build transaction with undefined sender but include it in inputs', async function () {
157
+ const txBuilder = factory.getStakingBuilder();
158
+ txBuilder.stakingContractAddress(stakingContractAddress);
159
+ txBuilder.amountToStake(amountToStake);
160
+ txBuilder.levelId(levelId);
161
+ txBuilder.chainTag(0x27);
162
+ txBuilder.blockRef('0x0000000000000000');
163
+ txBuilder.expiration(64);
164
+ txBuilder.gas(100000);
165
+ txBuilder.gasPriceCoef(0);
166
+ txBuilder.nonce('12345');
167
+ // Not setting sender
168
+ const tx = await txBuilder.build();
169
+ tx.should.be.instanceof(lib_1.StakingTransaction);
170
+ const stakingTx = tx;
171
+ // Verify the transaction has inputs but with undefined address
172
+ stakingTx.inputs.length.should.equal(1);
173
+ should_1.default.not.exist(stakingTx.inputs[0].address);
174
+ // Verify the transaction has the correct output
175
+ stakingTx.outputs.length.should.equal(1);
176
+ stakingTx.outputs[0].address.should.equal(stakingContractAddress);
177
+ stakingTx.outputs[0].value.should.equal(amountToStake);
178
+ });
179
+ it('should use network default chainTag when not explicitly set', async function () {
180
+ const txBuilder = factory.getStakingBuilder();
181
+ txBuilder.stakingContractAddress(stakingContractAddress);
182
+ txBuilder.amountToStake(amountToStake);
183
+ txBuilder.levelId(levelId);
184
+ // Not setting chainTag
185
+ txBuilder.blockRef('0x0000000000000000');
186
+ txBuilder.expiration(64);
187
+ txBuilder.gas(100000);
188
+ txBuilder.gasPriceCoef(0);
189
+ txBuilder.nonce('12345');
190
+ txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
191
+ const tx = await txBuilder.build();
192
+ tx.should.be.instanceof(lib_1.StakingTransaction);
193
+ const stakingTx = tx;
194
+ // Verify the chainTag is set to the testnet default (39)
195
+ stakingTx.chainTag.should.equal(39);
196
+ });
197
+ it('should verify ABI encoding matches expected output for different amounts', async function () {
198
+ const txBuilder = createBasicTxBuilder();
199
+ txBuilder.stakingContractAddress(stakingContractAddress);
200
+ txBuilder.levelId(levelId);
201
+ // Test with a different amount
202
+ const differentAmount = '500000000000000000'; // 0.5 VET
203
+ txBuilder.amountToStake(differentAmount);
204
+ const tx = await txBuilder.build();
205
+ const stakingTx = tx;
206
+ // Manually encode the expected data for stakeAndDelegate method
207
+ const methodName = 'stakeAndDelegate';
208
+ const types = ['uint8', 'bool'];
209
+ const params = [levelId, autorenew];
210
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
211
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
212
+ const expectedData = '0x' + Buffer.concat([method, args]).toString('hex');
213
+ // Verify the transaction data matches our manual encoding
214
+ stakingTx.clauses[0].data.should.equal(expectedData);
215
+ stakingTx.clauses[0].data.should.startWith(constants_1.STAKING_METHOD_ID);
216
+ });
217
+ it('should handle extremely large stake amounts correctly', async function () {
218
+ const txBuilder = createBasicTxBuilder();
219
+ txBuilder.stakingContractAddress(stakingContractAddress);
220
+ txBuilder.levelId(levelId);
221
+ // Test with a very large amount (near uint256 max)
222
+ const largeAmount = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // 2^256 - 1
223
+ txBuilder.amountToStake(largeAmount);
224
+ const tx = await txBuilder.build();
225
+ const stakingTx = tx;
226
+ // Verify the amount is stored correctly
227
+ stakingTx.amountToStake.should.equal(largeAmount);
228
+ // The data should still be properly encoded
229
+ stakingTx.clauses[0].data.should.startWith(constants_1.STAKING_METHOD_ID);
230
+ // Verify recipients
231
+ stakingTx.recipients[0].amount.should.equal(largeAmount);
232
+ });
233
+ it('should build a signed tx and validate its toJson', async function () {
234
+ const txBuilder = factory.from(testData.STAKING_TRANSACTION);
235
+ const tx = txBuilder.transaction;
236
+ const toJson = tx.toJson();
237
+ toJson.id.should.equal('0x99325b39cd04bd1821f6f6af7b679c247e6425a4eb95eb429fa8dff477298d0e');
238
+ toJson.stakingContractAddress?.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
239
+ toJson.amountToStake?.should.equal('0xde0b6b3a7640000');
240
+ toJson.nonce.should.equal('609363');
241
+ toJson.gas.should.equal(25988);
242
+ toJson.gasPriceCoef.should.equal(128);
243
+ toJson.expiration.should.equal(64);
244
+ toJson.chainTag.should.equal(39);
245
+ toJson.nftTokenId?.should.equal(8);
246
+ toJson.autorenew?.should.equal(true);
247
+ });
248
+ });
249
+ });
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1RyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC90cmFuc2FjdGlvbkJ1aWxkZXIvc3Rha2luZ1RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTRDO0FBQzVDLHVDQUEyRjtBQUMzRixvREFBNEI7QUFDNUIsdURBQStGO0FBQy9GLG9FQUF5QztBQUN6QywyREFBNkM7QUFFN0MsUUFBUSxDQUFDLHlCQUF5QixFQUFFO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sc0JBQXNCLEdBQUcsNkNBQWlDLENBQUM7SUFDakUsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxlQUFlO0lBQzVELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxzQkFBc0I7SUFFOUMsK0VBQStFO0lBQy9FLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixT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SyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zYWN0aW9uLCBTdGFraW5nVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFNUQUtJTkdfTUVUSE9EX0lELCBTVEFSR0FURV9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHZldCcpKTtcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IFNUQVJHQVRFX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVDtcbiAgY29uc3QgYW1vdW50VG9TdGFrZSA9ICcxMDAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gMSBWRVQgaW4gd2VpXG4gIGNvbnN0IGxldmVsSWQgPSA4OyAvLyBUZXN0IGxldmVsIElEXG4gIGNvbnN0IGF1dG9yZW5ldyA9IHRydWU7IC8vIFRlc3QgYXV0b3JlbmV3IGZsYWdcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgYmFzaWMgdHJhbnNhY3Rpb24gYnVpbGRlciB3aXRoIGNvbW1vbiBwcm9wZXJ0aWVzXG4gIGNvbnN0IGNyZWF0ZUJhc2ljVHhCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKCcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknKTtcbiAgICB0eEJ1aWxkZXIuY2hhaW5UYWcoMHgyNyk7IC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgdHhCdWlsZGVyLm5vbmNlKCcxMjM0NScpO1xuICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gIH07XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHN0YWtpbmcgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuICAgIHR4QnVpbGRlci5sZXZlbElkKGxldmVsSWQpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuICAgIHR4QnVpbGRlci5jaGFpblRhZygweDI3KTsgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICB0eEJ1aWxkZXIuZ2FzKDEwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5leGlzdCh0eCk7XG4gICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoVHJhbnNhY3Rpb24pO1xuICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtpbmdUcmFuc2FjdGlvbik7XG5cbiAgICBjb25zdCBzdGFraW5nVHggPSB0eCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgc3Rha2luZ1R4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICBzdGFraW5nVHgubGV2ZWxJZC5zaG91bGQuZXF1YWwobGV2ZWxJZCk7XG4gICAgc3Rha2luZ1R4LmF1dG9yZW5ldy5zaG91bGQuZXF1YWwoYXV0b3JlbmV3KTtcblxuICAgIC8vIFZlcmlmeSBjbGF1c2VzXG4gICAgc3Rha2luZ1R4LmNsYXVzZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LmNsYXVzZXNbMF0udG8pO1xuICAgIHN0YWtpbmdUeC5jbGF1c2VzWzBdLnRvPy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgc3Rha2luZ1R4LmNsYXVzZXNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKGFtb3VudFRvU3Rha2UpO1xuXG4gICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIGRhdGEgaXMgY29ycmVjdGx5IGVuY29kZWQgdXNpbmcgZXRoZXJldW1BQklcbiAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LmNsYXVzZXNbMF0uZGF0YSk7XG4gICAgY29uc3QgdHhEYXRhID0gc3Rha2luZ1R4LmNsYXVzZXNbMF0uZGF0YTtcbiAgICB0eERhdGEuc2hvdWxkLnN0YXJ0V2l0aChTVEFLSU5HX01FVEhPRF9JRCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIGVuY29kZWQgZGF0YSBtYXRjaGVzIHdoYXQgd2UgZXhwZWN0IGZyb20gZXRoZXJldW1BQklcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3N0YWtlQW5kRGVsZWdhdGUnO1xuICAgIGNvbnN0IHR5cGVzID0gWyd1aW50OCcsICdib29sJ107XG4gICAgY29uc3QgcGFyYW1zID0gW2xldmVsSWQsIGF1dG9yZW5ld107XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcbiAgICBjb25zdCBleHBlY3RlZERhdGEgPSAnMHgnICsgQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgdHhEYXRhLnNob3VsZC5lcXVhbChleHBlY3RlZERhdGEpO1xuXG4gICAgLy8gVmVyaWZ5IHJlY2lwaWVudHNcbiAgICBzdGFraW5nVHgucmVjaXBpZW50cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHN0YWtpbmdUeC5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgIHN0YWtpbmdUeC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGYWlsdXJlIHNjZW5hcmlvcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlQmFzaWNUeEJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuICAgICAgdHhCdWlsZGVyLmxldmVsSWQobGV2ZWxJZCk7XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1N0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGxldmVsSWQgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdMZXZlbCBJRCBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGFtb3VudFRvU3Rha2UgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5sZXZlbElkKGxldmVsSWQpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdBbW91bnQgdG8gc3Rha2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBzdGFraW5nQ29udHJhY3RBZGRyZXNzIGlzIGludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuXG4gICAgICAvLyBJbnZhbGlkIGFkZHJlc3MgKHdyb25nIGZvcm1hdClcbiAgICAgIHNob3VsZCgoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKCdpbnZhbGlkLWFkZHJlc3MnKTtcbiAgICAgIH0pLnRocm93KC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBhbW91bnRUb1N0YWtlIGlzIG5vdCBhIHZhbGlkIG51bWJlciBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIubGV2ZWxJZChsZXZlbElkKTtcblxuICAgICAgLy8gSW52YWxpZCBhbW91bnQgKG5vdCBhIG51bWJlcilcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKCdub3QtYS1udW1iZXInKTtcblxuICAgICAgLy8gU2hvdWxkIGZhaWwgd2hlbiBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24gZHVlIHRvIGludmFsaWQgYW1vdW50XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgemVybyBhbW91bnRUb1N0YWtlIGJ1dCBlbmNvZGUgaXQgcHJvcGVybHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIubGV2ZWxJZChsZXZlbElkKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKCcwJyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFraW5nVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdGFraW5nVHggPSB0eCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgICAvLyBWZXJpZnkgdGhlIGFtb3VudCBpcyBjb3JyZWN0bHkgc2V0IHRvIHplcm9cbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbCgnMCcpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGRhdGEgaXMgY29ycmVjdGx5IGVuY29kZWQgd2l0aCBsZXZlbElkIGFuZCBhdXRvcmVuZXcgZm9yIHN0YWtlQW5kRGVsZWdhdGVcbiAgICAgIC8vIEV4cGVjdGVkIGRhdGEgZm9yIHN0YWtlQW5kRGVsZWdhdGUoOCwgdHJ1ZSkgd2hlcmUgOCBpcyBsZXZlbElkIGFuZCB0cnVlIGlzIGF1dG9yZW5ld1xuICAgICAgY29uc3QgZXhwZWN0ZWREYXRhID1cbiAgICAgICAgJzB4ZDhkYTNiYmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG4gICAgICBzdGFraW5nVHguY2xhdXNlc1swXS5kYXRhLnNob3VsZC5lcXVhbChleHBlY3RlZERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCB0cmFuc2FjdGlvbiB3aXRoIHVuZGVmaW5lZCBzZW5kZXIgYnV0IGluY2x1ZGUgaXQgaW4gaW5wdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKTtcbiAgICAgIHR4QnVpbGRlci5sZXZlbElkKGxldmVsSWQpO1xuICAgICAgdHhCdWlsZGVyLmNoYWluVGFnKDB4MjcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgICAvLyBOb3Qgc2V0dGluZyBzZW5kZXJcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtpbmdUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHN0YWtpbmdUeCA9IHR4IGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gaGFzIGlucHV0cyBidXQgd2l0aCB1bmRlZmluZWQgYWRkcmVzc1xuICAgICAgc3Rha2luZ1R4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChzdGFraW5nVHguaW5wdXRzWzBdLmFkZHJlc3MpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgY29ycmVjdCBvdXRwdXRcbiAgICAgIHN0YWtpbmdUeC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBzdGFraW5nVHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIG5ldHdvcmsgZGVmYXVsdCBjaGFpblRhZyB3aGVuIG5vdCBleHBsaWNpdGx5IHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSk7XG4gICAgICB0eEJ1aWxkZXIubGV2ZWxJZChsZXZlbElkKTtcbiAgICAgIC8vIE5vdCBzZXR0aW5nIGNoYWluVGFnXG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnMTIzNDUnKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2luZ1RyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gdHggYXMgU3Rha2luZ1RyYW5zYWN0aW9uO1xuICAgICAgLy8gVmVyaWZ5IHRoZSBjaGFpblRhZyBpcyBzZXQgdG8gdGhlIHRlc3RuZXQgZGVmYXVsdCAoMzkpXG4gICAgICBzdGFraW5nVHguY2hhaW5UYWcuc2hvdWxkLmVxdWFsKDM5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IEFCSSBlbmNvZGluZyBtYXRjaGVzIGV4cGVjdGVkIG91dHB1dCBmb3IgZGlmZmVyZW50IGFtb3VudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIubGV2ZWxJZChsZXZlbElkKTtcblxuICAgICAgLy8gVGVzdCB3aXRoIGEgZGlmZmVyZW50IGFtb3VudFxuICAgICAgY29uc3QgZGlmZmVyZW50QW1vdW50ID0gJzUwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDAuNSBWRVRcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGRpZmZlcmVudEFtb3VudCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBzdGFraW5nVHggPSB0eCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIE1hbnVhbGx5IGVuY29kZSB0aGUgZXhwZWN0ZWQgZGF0YSBmb3Igc3Rha2VBbmREZWxlZ2F0ZSBtZXRob2RcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnc3Rha2VBbmREZWxlZ2F0ZSc7XG4gICAgICBjb25zdCB0eXBlcyA9IFsndWludDgnLCAnYm9vbCddO1xuICAgICAgY29uc3QgcGFyYW1zID0gW2xldmVsSWQsIGF1dG9yZW5ld107XG5cbiAgICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG4gICAgICBjb25zdCBleHBlY3RlZERhdGEgPSAnMHgnICsgQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGRhdGEgbWF0Y2hlcyBvdXIgbWFudWFsIGVuY29kaW5nXG4gICAgICBzdGFraW5nVHguY2xhdXNlc1swXS5kYXRhLnNob3VsZC5lcXVhbChleHBlY3RlZERhdGEpO1xuICAgICAgc3Rha2luZ1R4LmNsYXVzZXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKFNUQUtJTkdfTUVUSE9EX0lEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGV4dHJlbWVseSBsYXJnZSBzdGFrZSBhbW91bnRzIGNvcnJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5sZXZlbElkKGxldmVsSWQpO1xuXG4gICAgICAvLyBUZXN0IHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCAobmVhciB1aW50MjU2IG1heClcbiAgICAgIGNvbnN0IGxhcmdlQW1vdW50ID0gJzExNTc5MjA4OTIzNzMxNjE5NTQyMzU3MDk4NTAwODY4NzkwNzg1MzI2OTk4NDY2NTY0MDU2NDAzOTQ1NzU4NDAwNzkxMzEyOTYzOTkzNSc7IC8vIDJeMjU2IC0gMVxuICAgICAgdHhCdWlsZGVyLmFtb3VudFRvU3Rha2UobGFyZ2VBbW91bnQpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gdHggYXMgU3Rha2luZ1RyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIGFtb3VudCBpcyBzdG9yZWQgY29ycmVjdGx5XG4gICAgICBzdGFraW5nVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwobGFyZ2VBbW91bnQpO1xuXG4gICAgICAvLyBUaGUgZGF0YSBzaG91bGQgc3RpbGwgYmUgcHJvcGVybHkgZW5jb2RlZFxuICAgICAgc3Rha2luZ1R4LmNsYXVzZXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKFNUQUtJTkdfTUVUSE9EX0lEKTtcblxuICAgICAgLy8gVmVyaWZ5IHJlY2lwaWVudHNcbiAgICAgIHN0YWtpbmdUeC5yZWNpcGllbnRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwobGFyZ2VBbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCB0eCBhbmQgdmFsaWRhdGUgaXRzIHRvSnNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHRvSnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdG9Kc29uLmlkLnNob3VsZC5lcXVhbCgnMHg5OTMyNWIzOWNkMDRiZDE4MjFmNmY2YWY3YjY3OWMyNDdlNjQyNWE0ZWI5NWViNDI5ZmE4ZGZmNDc3Mjk4ZDBlJyk7XG4gICAgICB0b0pzb24uc3Rha2luZ0NvbnRyYWN0QWRkcmVzcz8uc2hvdWxkLmVxdWFsKCcweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTcnKTtcbiAgICAgIHRvSnNvbi5hbW91bnRUb1N0YWtlPy5zaG91bGQuZXF1YWwoJzB4ZGUwYjZiM2E3NjQwMDAwJyk7XG4gICAgICB0b0pzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKCc2MDkzNjMnKTtcbiAgICAgIHRvSnNvbi5nYXMuc2hvdWxkLmVxdWFsKDI1OTg4KTtcbiAgICAgIHRvSnNvbi5nYXNQcmljZUNvZWYuc2hvdWxkLmVxdWFsKDEyOCk7XG4gICAgICB0b0pzb24uZXhwaXJhdGlvbi5zaG91bGQuZXF1YWwoNjQpO1xuICAgICAgdG9Kc29uLmNoYWluVGFnLnNob3VsZC5lcXVhbCgzOSk7XG4gICAgICB0b0pzb24ubmZ0VG9rZW5JZD8uc2hvdWxkLmVxdWFsKDgpO1xuICAgICAgdG9Kc29uLmF1dG9yZW5ldz8uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokenTransactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/tokenTransactionBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,249 @@
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('tokenTransactionBuilder', () => {
45
+ const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tvet:vtho'));
46
+ describe('Succeed', () => {
47
+ it('should build a token transfer transaction', async function () {
48
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
49
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
50
+ txBuilder.sender(testData.addresses.validAddresses[0]);
51
+ txBuilder.gas(21000);
52
+ txBuilder.nonce('64248');
53
+ txBuilder.blockRef('0x014ead140e77bbc1');
54
+ txBuilder.expiration(64);
55
+ txBuilder.gasPriceCoef(128);
56
+ txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
57
+ txBuilder.recipients(testData.recipients);
58
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
59
+ const tx = (await txBuilder.build());
60
+ should_1.default.equal(tx.sender, testData.addresses.validAddresses[0]);
61
+ should_1.default.equal(tx.recipients[0].address, testData.recipients[0].address);
62
+ should_1.default.equal(tx.recipients[0].amount, testData.recipients[0].amount);
63
+ should_1.default.equal(tx.gas, 21000);
64
+ should_1.default.equal(tx.getFee(), '315411764705882352');
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.Send);
68
+ tx.inputs.length.should.equal(1);
69
+ tx.inputs[0].should.deepEqual({
70
+ address: testData.addresses.validAddresses[0],
71
+ value: testData.recipients[0].amount,
72
+ coin: 'tvet:vtho',
73
+ });
74
+ tx.outputs.length.should.equal(1);
75
+ tx.outputs[0].should.deepEqual({
76
+ address: testData.recipients[0].address,
77
+ value: testData.recipients[0].amount,
78
+ coin: 'tvet:vtho',
79
+ });
80
+ const rawTx = tx.toBroadcastFormat();
81
+ should_1.default.equal(txBuilder.isValidRawTransaction(rawTx), true);
82
+ rawTx.should.equal(testData.UNSIGNED_TRANSACTION_3);
83
+ });
84
+ it('should build and send a signed tx', async function () {
85
+ const txBuilder = factory.from(testData.SPONSORED_TOKEN_TRANSACTION);
86
+ txBuilder.getNonce().should.equal('517737');
87
+ const tx = (await txBuilder.build());
88
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
89
+ tx.inputs.length.should.equal(1);
90
+ tx.inputs[0].should.deepEqual({
91
+ address: testData.addresses.validAddresses[2],
92
+ value: testData.AMOUNT.toString(),
93
+ coin: 'tvet:vtho',
94
+ });
95
+ tx.outputs.length.should.equal(1);
96
+ tx.outputs[0].should.deepEqual({
97
+ address: testData.recipients[0].address,
98
+ value: testData.AMOUNT.toString(),
99
+ coin: 'tvet:vtho',
100
+ });
101
+ should_1.default.equal(tx.id, '0x16a0ebdfe43a8a62e7d62e65603c9563c8342fff6d8150c71bff9ec37634f50e');
102
+ should_1.default.equal(tx.gas, 51518);
103
+ should_1.default.equal(tx.getFee(), '773780156862745098');
104
+ should_1.default.equal(tx.nonce, '517737');
105
+ should_1.default.equal(tx.expiration, 64);
106
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
107
+ const rawTx = tx.toBroadcastFormat();
108
+ should_1.default.equal(txBuilder.isValidRawTransaction(rawTx), true);
109
+ should_1.default.equal(rawTx, testData.SPONSORED_TOKEN_TRANSACTION);
110
+ });
111
+ it('should validate a valid signablePayload', async function () {
112
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
113
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
114
+ txBuilder.sender(testData.addresses.validAddresses[0]);
115
+ txBuilder.recipients(testData.recipients);
116
+ txBuilder.gas(21000);
117
+ txBuilder.nonce('64248');
118
+ txBuilder.expiration(64);
119
+ txBuilder.blockRef('0x014ead140e77bbc1');
120
+ txBuilder.gasPriceCoef(128);
121
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
122
+ txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
123
+ const tx = (await txBuilder.build());
124
+ const signablePayload = tx.signablePayload;
125
+ should_1.default.equal(signablePayload.toString('hex'), testData.VALID_TOKEN_SIGNABLE_PAYLOAD);
126
+ });
127
+ it('should build a unsigned tx and validate its toJson', async function () {
128
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
129
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
130
+ txBuilder.sender(testData.addresses.validAddresses[0]);
131
+ txBuilder.recipients(testData.recipients);
132
+ txBuilder.gas(21000);
133
+ txBuilder.nonce('64248');
134
+ txBuilder.expiration(64);
135
+ txBuilder.blockRef('0x014ead140e77bbc1');
136
+ txBuilder.gasPriceCoef(128);
137
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
138
+ txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
139
+ const tx = (await txBuilder.build());
140
+ const toJson = tx.toJson();
141
+ should_1.default.equal(toJson.sender, testData.addresses.validAddresses[0]);
142
+ should_1.default.deepEqual(toJson.recipients, [
143
+ {
144
+ address: testData.recipients[0].address,
145
+ amount: testData.recipients[0].amount,
146
+ },
147
+ ]);
148
+ should_1.default.equal(toJson.nonce, '64248');
149
+ should_1.default.equal(toJson.gas, 21000);
150
+ should_1.default.equal(toJson.gasPriceCoef, 128);
151
+ should_1.default.equal(toJson.expiration, 64);
152
+ should_1.default.equal(toJson.feePayer, testData.feePayer.address);
153
+ should_1.default.equal(toJson.tokenAddress, testData.TOKEN_ADDRESS);
154
+ });
155
+ it('should build a signed tx and validate its toJson', async function () {
156
+ const txBuilder = factory.from(testData.SPONSORED_TOKEN_TRANSACTION);
157
+ const tx = (await txBuilder.build());
158
+ const toJson = tx.toJson();
159
+ should_1.default.equal(toJson.id, '0x16a0ebdfe43a8a62e7d62e65603c9563c8342fff6d8150c71bff9ec37634f50e');
160
+ should_1.default.equal(toJson.sender, testData.addresses.validAddresses[2]);
161
+ should_1.default.deepEqual(toJson.recipients, [
162
+ {
163
+ address: testData.addresses.validAddresses[1].toLowerCase(),
164
+ amount: testData.AMOUNT.toString(),
165
+ },
166
+ ]);
167
+ should_1.default.equal(toJson.nonce, '517737');
168
+ should_1.default.equal(toJson.gas, 51518);
169
+ should_1.default.equal(toJson.gasPriceCoef, 128);
170
+ should_1.default.equal(toJson.expiration, 64);
171
+ should_1.default.equal(toJson.tokenAddress, testData.TOKEN_ADDRESS);
172
+ });
173
+ it('should build a unsigned tx then add sender sig and build again', async function () {
174
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
175
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
176
+ txBuilder.sender(testData.addresses.validAddresses[2]);
177
+ txBuilder.recipients(testData.recipients);
178
+ txBuilder.gas(21000);
179
+ txBuilder.nonce('64248');
180
+ txBuilder.blockRef('0x014ead140e77bbc1');
181
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
182
+ txBuilder.expiration(64);
183
+ txBuilder.gasPriceCoef(128);
184
+ txBuilder.tokenAddress(testData.TOKEN_ADDRESS);
185
+ const tx = (await txBuilder.build());
186
+ const unsignedSerializedTx = tx.toBroadcastFormat();
187
+ const builder1 = factory.from(unsignedSerializedTx);
188
+ builder1.addSenderSignature(Buffer.from(testData.senderSig2, 'hex'));
189
+ const senderSignedTx = await builder1.build();
190
+ const senderSignedSerializedTx = senderSignedTx.toBroadcastFormat();
191
+ should_1.default.equal(senderSignedSerializedTx, testData.senderSignedSerializedTxHex2);
192
+ const builder2 = factory.from(testData.senderSignedSerializedTxHex2);
193
+ builder2.addSenderSignature(Buffer.from(testData.senderSig2, 'hex'));
194
+ builder2.addFeePayerSignature(Buffer.from(testData.feePayerSig2, 'hex'));
195
+ const completelySignedTx = await builder2.build();
196
+ should_1.default.equal(completelySignedTx.toBroadcastFormat(), testData.completeSignedSerializedHex2);
197
+ should_1.default.equal(completelySignedTx.id, '0x065dfe80e3113f8c4638f17b7f255152fc52c29b42ed617cdff72fd41289152b');
198
+ });
199
+ });
200
+ describe('Fail', () => {
201
+ it('should fail for invalid sender', async function () {
202
+ const transaction = new src_1.Transaction(statics_1.coins.get('tvet:vtho'));
203
+ const builder = factory.getTokenTransactionBuilder(transaction);
204
+ (0, should_1.default)(() => builder.sender('randomString')).throwError('Invalid address randomString');
205
+ });
206
+ it('should fail for invalid recipient', async function () {
207
+ const builder = factory.getTokenTransactionBuilder();
208
+ (0, should_1.default)(() => builder.recipients([testData.invalidRecipients[0]])).throwError('Invalid address randomString');
209
+ (0, should_1.default)(() => builder.recipients([testData.invalidRecipients[1]])).throwError('Value cannot be less than zero');
210
+ (0, should_1.default)(() => builder.recipients([testData.invalidRecipients[2]])).throwError('Invalid amount format');
211
+ });
212
+ it('should fail for invalid gas amount', async function () {
213
+ const builder = factory.getTokenTransactionBuilder();
214
+ (0, should_1.default)(() => builder.gas(-1)).throwError('Value cannot be less than zero');
215
+ });
216
+ it('should fail to build if token address if not set', async function () {
217
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
218
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
219
+ txBuilder.sender(testData.addresses.validAddresses[0]);
220
+ txBuilder.gas(21000);
221
+ txBuilder.nonce('64248');
222
+ txBuilder.blockRef('0x014ead140e77bbc1');
223
+ txBuilder.expiration(64);
224
+ txBuilder.gasPriceCoef(128);
225
+ txBuilder.recipients(testData.recipients);
226
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
227
+ try {
228
+ await txBuilder.build();
229
+ }
230
+ catch (err) {
231
+ should_1.default.equal(err.message, 'Token address is required');
232
+ }
233
+ });
234
+ it('should fail on setting invalid token address', async function () {
235
+ const transaction = new src_1.TokenTransaction(statics_1.coins.get('tvet:vtho'));
236
+ const txBuilder = factory.getTokenTransactionBuilder(transaction);
237
+ txBuilder.sender(testData.addresses.validAddresses[0]);
238
+ txBuilder.gas(21000);
239
+ txBuilder.nonce('64248');
240
+ txBuilder.blockRef('0x014ead140e77bbc1');
241
+ txBuilder.expiration(64);
242
+ txBuilder.gasPriceCoef(128);
243
+ txBuilder.recipients(testData.recipients);
244
+ txBuilder.addFeePayerAddress(testData.feePayer.address);
245
+ (0, should_1.default)(() => txBuilder.tokenAddress('InvalidTokenAddress')).throwError('Invalid address InvalidTokenAddress');
246
+ });
247
+ });
248
+ });
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3RyYW5zYWN0aW9uQnVpbGRlci90b2tlblRyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixpREFBNEM7QUFDNUMsbURBQXVEO0FBQ3ZELG1DQUFxRjtBQUNyRiwyREFBNkM7QUFFN0MsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN0RSxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtRQUN2QixFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztZQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLHNCQUFnQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxD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Q0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNoSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRva2VuVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCd0b2tlblRyYW5zYWN0aW9uQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHZldDp2dGhvJykpO1xuICBkZXNjcmliZSgnU3VjY2VlZCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldDp2dGhvJykpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKHRlc3REYXRhLlRPS0VOX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cyk7XG4gICAgICB0eEJ1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKHRlc3REYXRhLmZlZVBheWVyLmFkZHJlc3MpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRva2VuVHJhbnNhY3Rpb247XG4gICAgICBzaG91bGQuZXF1YWwodHguc2VuZGVyLCB0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnJlY2lwaWVudHNbMF0uYWRkcmVzcywgdGVzdERhdGEucmVjaXBpZW50c1swXS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5yZWNpcGllbnRzWzBdLmFtb3VudCwgdGVzdERhdGEucmVjaXBpZW50c1swXS5hbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmdldEZlZSgpLCAnMzE1NDExNzY0NzA1ODgyMzUyJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgubm9uY2UsICc2NDI0OCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEucmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIGNvaW46ICd0dmV0OnZ0aG8nLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogJ3R2ZXQ6dnRobycsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEJ1aWxkZXIuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwodGVzdERhdGEuVU5TSUdORURfVFJBTlNBQ1RJT05fMyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzZW5kIGEgc2lnbmVkIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNQT05TT1JFRF9UT0tFTl9UUkFOU0FDVElPTik7XG4gICAgICB0eEJ1aWxkZXIuZ2V0Tm9uY2UoKS5zaG91bGQuZXF1YWwoJzUxNzczNycpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVG9rZW5UcmFuc2FjdGlvbjtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4LmlucHV0c1swXS5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzJdLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEuQU1PVU5ULnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46ICd0dmV0OnZ0aG8nLFxuICAgICAgfSk7XG4gICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5vdXRwdXRzWzBdLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5BTU9VTlQudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogJ3R2ZXQ6dnRobycsXG4gICAgICB9KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pZCwgJzB4MTZhMGViZGZlNDNhOGE2MmU3ZDYyZTY1NjAzYzk1NjNjODM0MmZmZjZkODE1MGM3MWJmZjllYzM3NjM0ZjUwZScpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmdhcywgNTE1MTgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmdldEZlZSgpLCAnNzczNzgwMTU2ODYyNzQ1MDk4Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHgubm9uY2UsICc1MTc3MzcnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5leHBpcmF0aW9uLCA2NCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4QnVpbGRlci5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuU1BPTlNPUkVEX1RPS0VOX1RSQU5TQUNUSU9OKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSB2YWxpZCBzaWduYWJsZVBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldDp2dGhvJykpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIucmVjaXBpZW50cyh0ZXN0RGF0YS5yZWNpcGllbnRzKTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcbiAgICAgIHR4QnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3ModGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKHRlc3REYXRhLlRPS0VOX0FERFJFU1MpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gdHguc2lnbmFibGVQYXlsb2FkO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4JyksIHRlc3REYXRhLlZBTElEX1RPS0VOX1NJR05BQkxFX1BBWUxPQUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHVuc2lnbmVkIHR4IGFuZCB2YWxpZGF0ZSBpdHMgdG9Kc29uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVG9rZW5UcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQ6dnRobycpKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgdHhCdWlsZGVyLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cyk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKHRlc3REYXRhLmZlZVBheWVyLmFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0ZXN0RGF0YS5UT0tFTl9BRERSRVNTKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUb2tlblRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdG9Kc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLnNlbmRlciwgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodG9Kc29uLnJlY2lwaWVudHMsIFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLm5vbmNlLCAnNjQyNDgnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uZ2FzLCAyMTAwMCk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLmdhc1ByaWNlQ29lZiwgMTI4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uZXhwaXJhdGlvbiwgNjQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5mZWVQYXllciwgdGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLnRva2VuQWRkcmVzcywgdGVzdERhdGEuVE9LRU5fQUREUkVTUyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHR4IGFuZCB2YWxpZGF0ZSBpdHMgdG9Kc29uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNQT05TT1JFRF9UT0tFTl9UUkFOU0FDVElPTik7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVG9rZW5UcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHRvSnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5pZCwgJzB4MTZhMGViZGZlNDNhOGE2MmU3ZDYyZTY1NjAzYzk1NjNjODM0MmZmZjZkODE1MGM3MWJmZjllYzM3NjM0ZjUwZScpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5zZW5kZXIsIHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1syXSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHRvSnNvbi5yZWNpcGllbnRzLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMV0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLkFNT1VOVC50b1N0cmluZygpLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLm5vbmNlLCAnNTE3NzM3Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLmdhcywgNTE1MTgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXNQcmljZUNvZWYsIDEyOCk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Kc29uLmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24udG9rZW5BZGRyZXNzLCB0ZXN0RGF0YS5UT0tFTl9BRERSRVNTKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB0eCB0aGVuIGFkZCBzZW5kZXIgc2lnIGFuZCBidWlsZCBhZ2FpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRva2VuVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0dmV0OnZ0aG8nKSk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKHRyYW5zYWN0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzJdKTtcbiAgICAgIHR4QnVpbGRlci5yZWNpcGllbnRzKHRlc3REYXRhLnJlY2lwaWVudHMpO1xuICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpO1xuICAgICAgdHhCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyh0ZXN0RGF0YS5mZWVQYXllci5hZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcbiAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModGVzdERhdGEuVE9LRU5fQUREUkVTUyk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCB1bnNpZ25lZFNlcmlhbGl6ZWRUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCBidWlsZGVyMSA9IGZhY3RvcnkuZnJvbSh1bnNpZ25lZFNlcmlhbGl6ZWRUeCk7XG4gICAgICBidWlsZGVyMS5hZGRTZW5kZXJTaWduYXR1cmUoQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyU2lnMiwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHNlbmRlclNpZ25lZFR4ID0gYXdhaXQgYnVpbGRlcjEuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHNlbmRlclNpZ25lZFNlcmlhbGl6ZWRUeCA9IHNlbmRlclNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXF1YWwoc2VuZGVyU2lnbmVkU2VyaWFsaXplZFR4LCB0ZXN0RGF0YS5zZW5kZXJTaWduZWRTZXJpYWxpemVkVHhIZXgyKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuc2VuZGVyU2lnbmVkU2VyaWFsaXplZFR4SGV4Mik7XG4gICAgICBidWlsZGVyMi5hZGRTZW5kZXJTaWduYXR1cmUoQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyU2lnMiwgJ2hleCcpKTtcbiAgICAgIGJ1aWxkZXIyLmFkZEZlZVBheWVyU2lnbmF0dXJlKEJ1ZmZlci5mcm9tKHRlc3REYXRhLmZlZVBheWVyU2lnMiwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IGNvbXBsZXRlbHlTaWduZWRUeCA9IGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwoY29tcGxldGVseVNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLmNvbXBsZXRlU2lnbmVkU2VyaWFsaXplZEhleDIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGNvbXBsZXRlbHlTaWduZWRUeC5pZCwgJzB4MDY1ZGZlODBlMzExM2Y4YzQ2MzhmMTdiN2YyNTUxNTJmYzUyYzI5YjQyZWQ2MTdjZGZmNzJmZDQxMjg5MTUyYicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRmFpbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgc2VuZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0dmV0OnZ0aG8nKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5zZW5kZXIoJ3JhbmRvbVN0cmluZycpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGFkZHJlc3MgcmFuZG9tU3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VG9rZW5UcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnJlY2lwaWVudHMoW3Rlc3REYXRhLmludmFsaWRSZWNpcGllbnRzWzBdXSkpLnRocm93RXJyb3IoJ0ludmFsaWQgYWRkcmVzcyByYW5kb21TdHJpbmcnKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnJlY2lwaWVudHMoW3Rlc3REYXRhLmludmFsaWRSZWNpcGllbnRzWzFdXSkpLnRocm93RXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIucmVjaXBpZW50cyhbdGVzdERhdGEuaW52YWxpZFJlY2lwaWVudHNbMl1dKSkudGhyb3dFcnJvcignSW52YWxpZCBhbW91bnQgZm9ybWF0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgZ2FzIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRva2VuVHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXMoLTEpKS50aHJvd0Vycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBidWlsZCBpZiB0b2tlbiBhZGRyZXNzIGlmIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldDp2dGhvJykpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICB0eEJ1aWxkZXIucmVjaXBpZW50cyh0ZXN0RGF0YS5yZWNpcGllbnRzKTtcbiAgICAgIHR4QnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3ModGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzaG91bGQuZXF1YWwoZXJyLm1lc3NhZ2UsICdUb2tlbiBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgb24gc2V0dGluZyBpbnZhbGlkIHRva2VuIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUb2tlblRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldDp2dGhvJykpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zYWN0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICB0eEJ1aWxkZXIucmVjaXBpZW50cyh0ZXN0RGF0YS5yZWNpcGllbnRzKTtcbiAgICAgIHR4QnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3ModGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnRva2VuQWRkcmVzcygnSW52YWxpZFRva2VuQWRkcmVzcycpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGFkZHJlc3MgSW52YWxpZFRva2VuQWRkcmVzcycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}