@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.210

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 (225) 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/baseBuilder.d.ts +24 -0
  5. package/dist/src/lib/baseBuilder.d.ts.map +1 -0
  6. package/dist/src/lib/baseBuilder.js +31 -0
  7. package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
  8. package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/batchStakingBuilder.js +302 -0
  10. package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
  11. package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/batchUnstakingBuilder.js +129 -0
  13. package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
  14. package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/bondExtraBuilder.js +103 -0
  16. package/dist/src/lib/constants.d.ts +21 -0
  17. package/dist/src/lib/constants.d.ts.map +1 -0
  18. package/dist/src/lib/constants.js +24 -0
  19. package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
  20. package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
  22. package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
  23. package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/hexTransferBuilder.js +51 -0
  25. package/dist/src/lib/iface.d.ts +249 -0
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +48 -1
  28. package/dist/src/lib/index.d.ts +36 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +82 -5
  31. package/dist/src/lib/nominateBuilder.d.ts +18 -0
  32. package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/nominateBuilder.js +101 -0
  34. package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
  35. package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/preApproveAssetBuilder.js +77 -0
  37. package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
  38. package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
  40. package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
  41. package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/rejectInstructionBuilder.js +89 -0
  43. package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
  44. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/tokenTransferBuilder.js +167 -0
  46. package/dist/src/lib/transaction.d.ts +30 -0
  47. package/dist/src/lib/transaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction.js +211 -0
  49. package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
  50. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  51. package/dist/src/lib/transactionBuilderFactory.js +288 -8
  52. package/dist/src/lib/transferBuilder.d.ts +4 -2
  53. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  54. package/dist/src/lib/transferBuilder.js +12 -5
  55. package/dist/src/lib/txnSchema.d.ts +67 -0
  56. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  57. package/dist/src/lib/txnSchema.js +231 -2
  58. package/dist/src/lib/unbondBuilder.d.ts +37 -0
  59. package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/unbondBuilder.js +100 -0
  61. package/dist/src/lib/utils.d.ts +40 -0
  62. package/dist/src/lib/utils.d.ts.map +1 -1
  63. package/dist/src/lib/utils.js +94 -1
  64. package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
  65. package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
  67. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
  68. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
  70. package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
  71. package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/v8BondExtraBuilder.js +21 -0
  73. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
  74. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
  76. package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
  77. package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/v8HexTransferBuilder.js +21 -0
  79. package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
  80. package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
  81. package/dist/src/lib/v8NominateBuilder.js +21 -0
  82. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
  83. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
  85. package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
  86. package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
  87. package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
  88. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
  89. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  90. package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
  91. package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
  92. package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
  93. package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
  94. package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
  95. package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
  96. package/dist/src/lib/v8TransferBuilder.js +21 -0
  97. package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
  98. package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
  99. package/dist/src/lib/v8UnbondBuilder.js +21 -0
  100. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
  101. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
  102. package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
  103. package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
  104. package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
  105. package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
  106. package/dist/src/polyx.d.ts +51 -9
  107. package/dist/src/polyx.d.ts.map +1 -1
  108. package/dist/src/polyx.js +272 -15
  109. package/dist/src/polyxToken.d.ts +20 -0
  110. package/dist/src/polyxToken.d.ts.map +1 -0
  111. package/dist/src/polyxToken.js +55 -0
  112. package/dist/src/register.d.ts.map +1 -1
  113. package/dist/src/register.js +5 -1
  114. package/dist/src/resources/index.d.ts +2 -0
  115. package/dist/src/resources/index.d.ts.map +1 -1
  116. package/dist/src/resources/index.js +3 -1
  117. package/dist/src/resources/mainnetV8.d.ts +13 -0
  118. package/dist/src/resources/mainnetV8.d.ts.map +1 -0
  119. package/dist/src/resources/mainnetV8.js +24 -0
  120. package/dist/src/resources/testnetV8.d.ts +13 -0
  121. package/dist/src/resources/testnetV8.d.ts.map +1 -0
  122. package/dist/src/resources/testnetV8.js +16 -0
  123. package/dist/src/tpolyx.d.ts +7 -0
  124. package/dist/src/tpolyx.d.ts.map +1 -1
  125. package/dist/src/tpolyx.js +11 -1
  126. package/dist/test/integration/index.d.ts +1 -0
  127. package/dist/test/integration/index.d.ts.map +1 -0
  128. package/dist/test/integration/index.js +1 -0
  129. package/dist/test/resources/index.d.ts +139 -0
  130. package/dist/test/resources/index.d.ts.map +1 -0
  131. package/dist/test/resources/index.js +150 -0
  132. package/dist/test/resources/mainnet.d.ts +2 -0
  133. package/dist/test/resources/mainnet.d.ts.map +1 -0
  134. package/dist/test/resources/mainnet.js +5 -0
  135. package/dist/test/resources/materialData.json +8 -0
  136. package/dist/test/resources/materialDataModified.json +8 -0
  137. package/dist/test/resources/testnet.d.ts +2 -0
  138. package/dist/test/resources/testnet.d.ts.map +1 -0
  139. package/dist/test/resources/testnet.js +5 -0
  140. package/dist/test/resources/wrwUsers.d.ts +19 -0
  141. package/dist/test/resources/wrwUsers.d.ts.map +1 -0
  142. package/dist/test/resources/wrwUsers.js +60 -0
  143. package/dist/test/unit/polyx.d.ts +2 -0
  144. package/dist/test/unit/polyx.d.ts.map +1 -0
  145. package/dist/test/unit/polyx.js +356 -0
  146. package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
  147. package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
  148. package/dist/test/unit/transactionBuilder/base.js +245 -0
  149. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
  150. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
  151. package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
  152. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
  153. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
  154. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
  155. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
  156. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
  157. package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
  158. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
  159. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
  160. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
  161. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
  162. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
  163. package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
  164. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
  165. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
  166. package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
  167. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
  168. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
  169. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
  170. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
  171. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
  172. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
  173. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
  174. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
  175. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
  176. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
  177. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
  178. package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
  179. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  180. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  181. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
  182. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  183. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  184. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +240 -0
  185. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  186. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  187. package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
  188. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
  189. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
  190. package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
  191. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
  192. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
  193. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
  194. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
  195. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
  196. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
  197. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
  198. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
  199. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
  200. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
  201. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
  202. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
  203. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
  204. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
  205. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
  206. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
  207. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  208. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
  209. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
  210. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
  211. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
  212. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
  213. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
  214. package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
  215. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
  216. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
  217. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
  218. package/dist/test/unit/utils.d.ts +2 -0
  219. package/dist/test/unit/utils.d.ts.map +1 -0
  220. package/dist/test/unit/utils.js +143 -0
  221. package/dist/tsconfig.tsbuildinfo +1 -0
  222. package/package.json +15 -9
  223. package/.eslintignore +0 -4
  224. package/.mocharc.yml +0 -8
  225. package/CHANGELOG.md +0 -22
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const should_1 = __importDefault(require("should"));
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ const lib_1 = require("../../../src/lib");
11
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
12
+ const utils_1 = __importDefault(require("../../../src/lib/utils"));
13
+ const resources_1 = require("../../resources");
14
+ function createMockTransaction(txData) {
15
+ return {
16
+ id: '123',
17
+ type: sdk_core_1.TransactionType.Batch,
18
+ toBroadcastFormat: () => txData,
19
+ inputs: [],
20
+ outputs: [],
21
+ signature: ['mock-signature'],
22
+ toJson: () => ({
23
+ id: '123',
24
+ type: 'Batch',
25
+ sender: resources_1.accounts.account1.address,
26
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
27
+ blockNumber: 100,
28
+ genesisHash: '0x',
29
+ nonce: 1,
30
+ tip: 0,
31
+ specVersion: 1,
32
+ transactionVersion: 1,
33
+ chainName: 'Polymesh',
34
+ inputs: [],
35
+ outputs: [],
36
+ }),
37
+ };
38
+ }
39
+ describe('Polyx Batch Builder', function () {
40
+ let builder;
41
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
42
+ const senderAddress = resources_1.accounts.account1.address;
43
+ const controllerAddress = resources_1.accounts.account2.address;
44
+ const validatorAddress = '5C7kNpSvVr22Z1X6gVAUjfahSJfSpvw4DHNoY7uUHpLfEJZR';
45
+ const testAmount = '10000';
46
+ beforeEach(() => {
47
+ builder = factory.getBatchBuilder();
48
+ });
49
+ describe('setter validation', () => {
50
+ it('should validate staking amount', () => {
51
+ const spy = sinon_1.default.spy(builder, 'validateValue');
52
+ should_1.default.throws(() => builder.amount('-1'), /Value cannot be less than zero/);
53
+ should_1.default.doesNotThrow(() => builder.amount('1000'));
54
+ sinon_1.default.assert.calledTwice(spy);
55
+ });
56
+ it('should validate controller address', () => {
57
+ const spy = sinon_1.default.spy(builder, 'validateAddress');
58
+ should_1.default.throws(() => builder.controller({ address: 'invalid-address' }), /is not a well-formed/);
59
+ should_1.default.doesNotThrow(() => builder.controller({ address: controllerAddress }));
60
+ sinon_1.default.assert.calledTwice(spy);
61
+ });
62
+ it('should validate validator addresses', () => {
63
+ const spy = sinon_1.default.spy(builder, 'validateAddress');
64
+ should_1.default.throws(() => builder.validators(['invalid-address']), /is not a well-formed/);
65
+ should_1.default.doesNotThrow(() => builder.validators([validatorAddress]));
66
+ sinon_1.default.assert.calledTwice(spy);
67
+ });
68
+ });
69
+ describe('Bond and Nominate', function () {
70
+ it('should validate bond and nominate args together', () => {
71
+ builder
72
+ .amount(testAmount)
73
+ .controller({ address: controllerAddress })
74
+ .payee('Staked')
75
+ .validators([validatorAddress]);
76
+ should_1.default.doesNotThrow(() => {
77
+ builder.testValidateFields();
78
+ });
79
+ builder = factory.getBatchBuilder();
80
+ builder.amount(testAmount).controller({ address: controllerAddress }).payee('Staked');
81
+ should_1.default.throws(() => {
82
+ builder.testValidateFields();
83
+ }, /must include both bond and nominate operations/);
84
+ builder = factory.getBatchBuilder();
85
+ builder.validators([validatorAddress]);
86
+ should_1.default.throws(() => {
87
+ builder.testValidateFields();
88
+ }, /must include both bond and nominate operations/);
89
+ });
90
+ it('should build a batch transaction with both bond and nominate', async () => {
91
+ builder
92
+ .amount(testAmount)
93
+ .controller({ address: controllerAddress })
94
+ .payee('Staked')
95
+ .validators([validatorAddress])
96
+ .sender({ address: senderAddress })
97
+ .validity({ firstValid: 3933, maxDuration: 64 })
98
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
99
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
100
+ const mockTx = createMockTransaction(resources_1.stakingTx.batch.bondAndNominate.unsigned);
101
+ sinon_1.default.stub(builder, 'build').resolves(mockTx);
102
+ const tx = await builder.build();
103
+ should_1.default.exist(tx);
104
+ should_1.default.equal(builder.getAmount(), testAmount);
105
+ should_1.default.equal(builder.getController(), controllerAddress);
106
+ should_1.default.equal(builder.getPayee(), 'Staked');
107
+ should_1.default.deepEqual(builder.getValidators(), [validatorAddress]);
108
+ });
109
+ });
110
+ describe('Transaction Validation', function () {
111
+ it('should build, decode, and validate a real batch staking transaction', () => {
112
+ // Build the transaction with real parameters
113
+ builder
114
+ .amount(testAmount)
115
+ .controller({ address: controllerAddress })
116
+ .payee('Staked')
117
+ .validators([validatorAddress])
118
+ .sender({ address: senderAddress })
119
+ .validity({ firstValid: 3933, maxDuration: 64 })
120
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
121
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
122
+ // Set up material for decoding
123
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
124
+ builder.material(material);
125
+ // Build the actual unsigned transaction
126
+ const unsignedTx = builder['buildTransaction']();
127
+ const registry = builder['_registry'];
128
+ // Decode the actual built transaction
129
+ const decodedTx = (0, txwrapper_polkadot_1.decode)(unsignedTx, {
130
+ metadataRpc: material.metadata,
131
+ registry: registry,
132
+ });
133
+ // Validate the decoded transaction structure
134
+ should_1.default.equal(decodedTx.method.name, 'batchAll');
135
+ should_1.default.equal(decodedTx.method.pallet, 'utility');
136
+ const batchArgs = decodedTx.method.args;
137
+ should_1.default.exist(batchArgs.calls);
138
+ should_1.default.equal(batchArgs.calls.length, 2);
139
+ // Validate first call is bond
140
+ const firstCall = batchArgs.calls[0];
141
+ const firstCallMethod = utils_1.default.decodeMethodName(firstCall, registry);
142
+ should_1.default.equal(firstCallMethod, 'bond');
143
+ const bondArgs = firstCall.args;
144
+ should_1.default.equal(bondArgs.value, testAmount);
145
+ // Controller can be either a string or an object with id property
146
+ const controllerValue = typeof bondArgs.controller === 'string' ? bondArgs.controller : bondArgs.controller.id;
147
+ should_1.default.equal(controllerValue, controllerAddress);
148
+ // Payee can be either a string or an object with staked property
149
+ const payeeValue = typeof bondArgs.payee === 'string'
150
+ ? bondArgs.payee
151
+ : bondArgs.payee.staked !== undefined
152
+ ? 'Staked'
153
+ : bondArgs.payee;
154
+ should_1.default.equal(payeeValue, 'Staked');
155
+ // Validate second call is nominate
156
+ const secondCall = batchArgs.calls[1];
157
+ const secondCallMethod = utils_1.default.decodeMethodName(secondCall, registry);
158
+ should_1.default.equal(secondCallMethod, 'nominate');
159
+ const nominateArgs = secondCall.args;
160
+ // Targets can be either strings or objects with id property
161
+ const targetValues = nominateArgs.targets.map((target) => typeof target === 'string' ? target : target.id);
162
+ should_1.default.deepEqual(targetValues, [validatorAddress]);
163
+ // Now validate using the builder's validation method
164
+ should_1.default.doesNotThrow(() => {
165
+ builder.validateDecodedTransaction(decodedTx);
166
+ });
167
+ });
168
+ it('should reject invalid batch transaction when built', () => {
169
+ // Try to build a batch with only bond (missing nominate)
170
+ builder
171
+ .amount(testAmount)
172
+ .controller({ address: controllerAddress })
173
+ .payee('Staked')
174
+ .sender({ address: senderAddress })
175
+ .validity({ firstValid: 3933, maxDuration: 64 })
176
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
177
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
178
+ // Set up material
179
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
180
+ builder.material(material);
181
+ // Should throw when trying to build without validators
182
+ should_1.default.throws(() => {
183
+ builder['buildTransaction']();
184
+ }, /must include both bond and nominate operations/);
185
+ });
186
+ it('should reject validation of non-batch method name', () => {
187
+ // Create a mock decoded transaction with wrong method name
188
+ const mockDecodedTx = {
189
+ method: {
190
+ name: 'bond',
191
+ pallet: 'staking',
192
+ args: {},
193
+ },
194
+ };
195
+ should_1.default.throws(() => {
196
+ builder.validateDecodedTransaction(mockDecodedTx);
197
+ }, /Invalid transaction type/);
198
+ });
199
+ });
200
+ describe('signablePayload (Substrate 256-byte blake2 rule)', function () {
201
+ const buildBatchTx = async (numValidators) => {
202
+ const batchBuilder = factory.getBatchBuilder();
203
+ batchBuilder
204
+ .amount(testAmount)
205
+ .controller({ address: controllerAddress })
206
+ .payee('Staked')
207
+ .validators(Array(numValidators).fill(validatorAddress))
208
+ .sender({ address: senderAddress })
209
+ .validity({ firstValid: 3933, maxDuration: 64 })
210
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
211
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
212
+ batchBuilder.material(utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type));
213
+ return batchBuilder.build();
214
+ };
215
+ it('should return raw payload bytes when the batch extrinsic is at most 256 bytes', async () => {
216
+ // bond + nominate with a single validator stays under the 256-byte threshold
217
+ const tx = await buildBatchTx(1);
218
+ const signablePayload = tx.signablePayload;
219
+ signablePayload.length.should.be.belowOrEqual(256);
220
+ signablePayload.length.should.not.equal(32);
221
+ });
222
+ it('should return the 32-byte blake2_256 hash when the batch extrinsic exceeds 256 bytes', async () => {
223
+ // bond + nominate with many validators pushes the batch over the 256-byte threshold
224
+ const tx = await buildBatchTx(6);
225
+ const signablePayload = tx.signablePayload;
226
+ should_1.default.equal(signablePayload.length, 32);
227
+ });
228
+ });
229
+ describe('From Raw Transaction', function () {
230
+ it('should rebuild from real batch transaction', async () => {
231
+ // First build a transaction to get a real raw transaction
232
+ const originalBuilder = factory.getBatchBuilder();
233
+ originalBuilder
234
+ .amount(testAmount)
235
+ .controller({ address: controllerAddress })
236
+ .payee('Staked')
237
+ .validators([validatorAddress])
238
+ .sender({ address: senderAddress })
239
+ .validity({ firstValid: 3933, maxDuration: 64 })
240
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
241
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
242
+ // Set up material
243
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
244
+ originalBuilder.material(material);
245
+ // Build the transaction and get the serialized hex
246
+ const tx = await originalBuilder.build();
247
+ const rawTxHex = tx.toBroadcastFormat();
248
+ // Create a new builder and reconstruct from the transaction hex
249
+ const newBuilder = factory.getBatchBuilder();
250
+ newBuilder.material(material);
251
+ newBuilder.from(rawTxHex);
252
+ // Verify the reconstructed builder has the same parameters
253
+ should_1.default.equal(newBuilder.getAmount(), testAmount);
254
+ should_1.default.equal(newBuilder.getController(), controllerAddress);
255
+ should_1.default.equal(newBuilder.getPayee(), 'Staked');
256
+ should_1.default.deepEqual(newBuilder.getValidators(), [validatorAddress]);
257
+ });
258
+ it('factory.from routes a v7 bond+nominate transaction to BatchStakingBuilder (SI-981 regression)', async () => {
259
+ // A v7 bond call carries a `controller`, so routing must keep it on the v7 builder and not
260
+ // fall through to the v8 batch staking builder.
261
+ const originalBuilder = factory.getBatchBuilder();
262
+ originalBuilder
263
+ .amount(testAmount)
264
+ .controller({ address: controllerAddress })
265
+ .payee('Staked')
266
+ .validators([validatorAddress])
267
+ .sender({ address: senderAddress })
268
+ .validity({ firstValid: 3933, maxDuration: 64 })
269
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
270
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
271
+ const rawTxHex = (await originalBuilder.build()).toBroadcastFormat();
272
+ const builder = factory.from(rawTxHex);
273
+ should_1.default.ok(builder instanceof lib_1.BatchBuilder);
274
+ });
275
+ });
276
+ describe('should create properly configured transactions', function () {
277
+ it('a batch transaction', async function () {
278
+ builder
279
+ .amount(testAmount)
280
+ .controller({ address: controllerAddress })
281
+ .payee('Staked')
282
+ .validators([validatorAddress])
283
+ .sender({ address: senderAddress })
284
+ .validity({ firstValid: 3933, maxDuration: 64 })
285
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
286
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
287
+ const mockTx = createMockTransaction(resources_1.stakingTx.batch.bondAndNominate.unsigned);
288
+ sinon_1.default.stub(builder, 'build').resolves(mockTx);
289
+ const tx = await builder.build();
290
+ should_1.default.exist(tx);
291
+ });
292
+ it('a batch transaction with custom replay protection', async function () {
293
+ builder
294
+ .amount(testAmount)
295
+ .controller({ address: controllerAddress })
296
+ .payee('Staked')
297
+ .validators([validatorAddress])
298
+ .sender({ address: senderAddress })
299
+ .validity({ firstValid: 4000, maxDuration: 100 })
300
+ .referenceBlock('0x249799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754e')
301
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 });
302
+ const mockTx = createMockTransaction('custom-tx-format');
303
+ sinon_1.default.stub(builder, 'build').resolves(mockTx);
304
+ const tx = await builder.build();
305
+ should_1.default.exist(tx);
306
+ });
307
+ });
308
+ });
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hTdGFraW5nQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvYmF0Y2hTdGFraW5nQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHNFQUF1RDtBQUN2RCxpREFBNEM7QUFDNUMsb0RBQTRCO0FBQzVCLGtEQUEwQjtBQUMxQiwwQ0FBd0Y7QUFDeEYsbURBQXVEO0FBRXZELG1FQUEyQztBQUUzQywrQ0FBc0Q7QUFFdEQsU0FBUyxxQkFBcUIsQ0FBQyxNQUFjO0lBQzNDLE9BQU87UUFDTCxFQUFFLEVBQUUsS0FBSztRQUNULElBQUksRUFBRSwwQkFBZSxDQUFDLEtBQUs7UUFDM0IsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTTtRQUMvQixNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsS0FBSztZQUNULElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTSxFQUFFLG9CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDakMsY0FBYyxFQUFFLG9FQUFvRTtZQUNwRixXQUFXLEVBQUUsR0FBRztZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxDQUFDO1lBQ04sV0FBVyxFQUFFLENBQUM7WUFDZCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMscUJBQXFCLEVBQUU7SUFDOUIsSUFBSSxPQUFxQixDQUFDO0lBQzFCLE1BQU0sT0FBTyxHQUFHLElB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QUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLO1lBQzNELE9BQU87aUJBQ0osTUFBTSxDQUFDLFVBQVUsQ0FBQztpQkFDbEIsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7aUJBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUM7aUJBQ2YsVUFBVSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQkFDOUIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUNsQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQztpQkFDaEQsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2lCQUNwRixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFL0QsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN6RCxlQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1lBRTdELE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29kZWRTaWduaW5nUGF5bG9hZCB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBCYXRjaEJ1aWxkZXIsIFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXRjaEFyZ3MsIEJvbmRBcmdzLCBOb21pbmF0ZUFyZ3MgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcblxuaW1wb3J0IHsgYWNjb3VudHMsIHN0YWtpbmdUeCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vY2tUcmFuc2FjdGlvbih0eERhdGE6IHN0cmluZyk6IFBhcnRpYWw8VHJhbnNhY3Rpb24+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJzEyMycsXG4gICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkJhdGNoLFxuICAgIHRvQnJvYWRjYXN0Rm9ybWF0OiAoKSA9PiB0eERhdGEsXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICBzaWduYXR1cmU6IFsnbW9jay1zaWduYXR1cmUnXSxcbiAgICB0b0pzb246ICgpID0+ICh7XG4gICAgICBpZDogJzEyMycsXG4gICAgICB0eXBlOiAnQmF0Y2gnLFxuICAgICAgc2VuZGVyOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgcmVmZXJlbmNlQmxvY2s6ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnLFxuICAgICAgYmxvY2tOdW1iZXI6IDEwMCxcbiAgICAgIGdlbmVzaXNIYXNoOiAnMHgnLFxuICAgICAgbm9uY2U6IDEsXG4gICAgICB0aXA6IDAsXG4gICAgICBzcGVjVmVyc2lvbjogMSxcbiAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogMSxcbiAgICAgIGNoYWluTmFtZTogJ1BvbHltZXNoJyxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICB9KSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ1BvbHl4IEJhdGNoIEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBidWlsZGVyOiBCYXRjaEJ1aWxkZXI7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcblxuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcztcbiAgY29uc3QgY29udHJvbGxlckFkZHJlc3MgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gJzVDN2tOcFN2VnIyMloxWDZnVkFVamZhaFNKZlNwdnc0REhOb1k3dVVIcExmRUpaUic7XG4gIGNvbnN0IHRlc3RBbW91bnQgPSAnMTAwMDAnO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldEJhdGNoQnVpbGRlcigpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzdGFraW5nIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVWYWx1ZScpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLmFtb3VudCgnLTEnKSwgL1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby8pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmFtb3VudCgnMTAwMCcpKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBjb250cm9sbGVyIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlQWRkcmVzcycpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLmNvbnRyb2xsZXIoeyBhZGRyZXNzOiAnaW52YWxpZC1hZGRyZXNzJyB9KSwgL2lzIG5vdCBhIHdlbGwtZm9ybWVkLyk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuY29udHJvbGxlcih7IGFkZHJlc3M6IGNvbnRyb2xsZXJBZGRyZXNzIH0pKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZGF0b3IgYWRkcmVzc2VzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZUFkZHJlc3MnKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci52YWxpZGF0b3JzKFsnaW52YWxpZC1hZGRyZXNzJ10pLCAvaXMgbm90IGEgd2VsbC1mb3JtZWQvKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0b3JzKFt2YWxpZGF0b3JBZGRyZXNzXSkpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZFR3aWNlKHNweSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCb25kIGFuZCBOb21pbmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJvbmQgYW5kIG5vbWluYXRlIGFyZ3MgdG9nZXRoZXInLCAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLmNvbnRyb2xsZXIoeyBhZGRyZXNzOiBjb250cm9sbGVyQWRkcmVzcyB9KVxuICAgICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JBZGRyZXNzXSk7XG5cbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpO1xuICAgICAgfSk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldEJhdGNoQnVpbGRlcigpO1xuXG4gICAgICBidWlsZGVyLmFtb3VudCh0ZXN0QW1vdW50KS5jb250cm9sbGVyKHsgYWRkcmVzczogY29udHJvbGxlckFkZHJlc3MgfSkucGF5ZWUoJ1N0YWtlZCcpO1xuXG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50ZXN0VmFsaWRhdGVGaWVsZHMoKTtcbiAgICAgIH0sIC9tdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zLyk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldEJhdGNoQnVpbGRlcigpO1xuXG4gICAgICBidWlsZGVyLnZhbGlkYXRvcnMoW3ZhbGlkYXRvckFkZHJlc3NdKTtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCk7XG4gICAgICB9LCAvbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJhdGNoIHRyYW5zYWN0aW9uIHdpdGggYm90aCBib25kIGFuZCBub21pbmF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCh0ZXN0QW1vdW50KVxuICAgICAgICAuY29udHJvbGxlcih7IGFkZHJlc3M6IGNvbnRyb2xsZXJBZGRyZXNzIH0pXG4gICAgICAgIC5wYXllZSgnU3Rha2VkJylcbiAgICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvckFkZHJlc3NdKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tUeCA9IGNyZWF0ZU1vY2tUcmFuc2FjdGlvbihzdGFraW5nVHguYmF0Y2guYm9uZEFuZE5vbWluYXRlLnVuc2lnbmVkKTtcbiAgICAgIHNpbm9uLnN0dWIoYnVpbGRlciwgJ2J1aWxkJykucmVzb2x2ZXMobW9ja1R4IGFzIFRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodHgpO1xuXG4gICAgICBzaG91bGQuZXF1YWwoYnVpbGRlci5nZXRBbW91bnQoKSwgdGVzdEFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoYnVpbGRlci5nZXRDb250cm9sbGVyKCksIGNvbnRyb2xsZXJBZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChidWlsZGVyLmdldFBheWVlKCksICdTdGFrZWQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoYnVpbGRlci5nZXRWYWxpZGF0b3JzKCksIFt2YWxpZGF0b3JBZGRyZXNzXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIGRlY29kZSwgYW5kIHZhbGlkYXRlIGEgcmVhbCBiYXRjaCBzdGFraW5nIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgdGhlIHRyYW5zYWN0aW9uIHdpdGggcmVhbCBwYXJhbWV0ZXJzXG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLmNvbnRyb2xsZXIoeyBhZGRyZXNzOiBjb250cm9sbGVyQWRkcmVzcyB9KVxuICAgICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JBZGRyZXNzXSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgbWF0ZXJpYWwgZm9yIGRlY29kaW5nXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIGJ1aWxkZXIubWF0ZXJpYWwobWF0ZXJpYWwpO1xuICAgICAgLy8gQnVpbGQgdGhlIGFjdHVhbCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGJ1aWxkZXJbJ2J1aWxkVHJhbnNhY3Rpb24nXSgpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBidWlsZGVyWydfcmVnaXN0cnknXTtcblxuICAgICAgLy8gRGVjb2RlIHRoZSBhY3R1YWwgYnVpbHQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh1bnNpZ25lZFR4LCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiBtYXRlcmlhbC5tZXRhZGF0YSxcbiAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWRUeC5tZXRob2QubmFtZSwgJ2JhdGNoQWxsJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFR4Lm1ldGhvZC5wYWxsZXQsICd1dGlsaXR5Jyk7XG5cbiAgICAgIGNvbnN0IGJhdGNoQXJncyA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEJhdGNoQXJncztcbiAgICAgIHNob3VsZC5leGlzdChiYXRjaEFyZ3MuY2FsbHMpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJhdGNoQXJncy5jYWxscy5sZW5ndGgsIDIpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBmaXJzdCBjYWxsIGlzIGJvbmRcbiAgICAgIGNvbnN0IGZpcnN0Q2FsbCA9IGJhdGNoQXJncy5jYWxsc1swXTtcbiAgICAgIGNvbnN0IGZpcnN0Q2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoZmlyc3RDYWxsLCByZWdpc3RyeSk7XG4gICAgICBzaG91bGQuZXF1YWwoZmlyc3RDYWxsTWV0aG9kLCAnYm9uZCcpO1xuXG4gICAgICBjb25zdCBib25kQXJncyA9IGZpcnN0Q2FsbC5hcmdzIGFzIHVua25vd24gYXMgQm9uZEFyZ3M7XG4gICAgICBzaG91bGQuZXF1YWwoYm9uZEFyZ3MudmFsdWUsIHRlc3RBbW91bnQpO1xuICAgICAgLy8gQ29udHJvbGxlciBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIGlkIHByb3BlcnR5XG4gICAgICBjb25zdCBjb250cm9sbGVyVmFsdWUgPVxuICAgICAgICB0eXBlb2YgYm9uZEFyZ3MuY29udHJvbGxlciA9PT0gJ3N0cmluZycgPyBib25kQXJncy5jb250cm9sbGVyIDogKGJvbmRBcmdzLmNvbnRyb2xsZXIgYXMgeyBpZDogc3RyaW5nIH0pLmlkO1xuICAgICAgc2hvdWxkLmVxdWFsKGNvbnRyb2xsZXJWYWx1ZSwgY29udHJvbGxlckFkZHJlc3MpO1xuICAgICAgLy8gUGF5ZWUgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBzdGFrZWQgcHJvcGVydHlcbiAgICAgIGNvbnN0IHBheWVlVmFsdWUgPVxuICAgICAgICB0eXBlb2YgYm9uZEFyZ3MucGF5ZWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBib25kQXJncy5wYXllZVxuICAgICAgICAgIDogKGJvbmRBcmdzLnBheWVlIGFzIHsgc3Rha2VkPzogbnVsbCB9KS5zdGFrZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gJ1N0YWtlZCdcbiAgICAgICAgICA6IGJvbmRBcmdzLnBheWVlO1xuICAgICAgc2hvdWxkLmVxdWFsKHBheWVlVmFsdWUsICdTdGFrZWQnKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc2Vjb25kIGNhbGwgaXMgbm9taW5hdGVcbiAgICAgIGNvbnN0IHNlY29uZENhbGwgPSBiYXRjaEFyZ3MuY2FsbHNbMV07XG4gICAgICBjb25zdCBzZWNvbmRDYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShzZWNvbmRDYWxsLCByZWdpc3RyeSk7XG4gICAgICBzaG91bGQuZXF1YWwoc2Vjb25kQ2FsbE1ldGhvZCwgJ25vbWluYXRlJyk7XG5cbiAgICAgIGNvbnN0IG5vbWluYXRlQXJncyA9IHNlY29uZENhbGwuYXJncyBhcyB1bmtub3duIGFzIE5vbWluYXRlQXJncztcbiAgICAgIC8vIFRhcmdldHMgY2FuIGJlIGVpdGhlciBzdHJpbmdzIG9yIG9iamVjdHMgd2l0aCBpZCBwcm9wZXJ0eVxuICAgICAgY29uc3QgdGFyZ2V0VmFsdWVzID0gbm9taW5hdGVBcmdzLnRhcmdldHMubWFwKCh0YXJnZXQpID0+XG4gICAgICAgIHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnID8gdGFyZ2V0IDogKHRhcmdldCBhcyB7IGlkOiBzdHJpbmcgfSkuaWRcbiAgICAgICk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHRhcmdldFZhbHVlcywgW3ZhbGlkYXRvckFkZHJlc3NdKTtcblxuICAgICAgLy8gTm93IHZhbGlkYXRlIHVzaW5nIHRoZSBidWlsZGVyJ3MgdmFsaWRhdGlvbiBtZXRob2RcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgYmF0Y2ggdHJhbnNhY3Rpb24gd2hlbiBidWlsdCcsICgpID0+IHtcbiAgICAgIC8vIFRyeSB0byBidWlsZCBhIGJhdGNoIHdpdGggb25seSBib25kIChtaXNzaW5nIG5vbWluYXRlKVxuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KHRlc3RBbW91bnQpXG4gICAgICAgIC5jb250cm9sbGVyKHsgYWRkcmVzczogY29udHJvbGxlckFkZHJlc3MgfSlcbiAgICAgICAgLnBheWVlKCdTdGFrZWQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBtYXRlcmlhbFxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBidWlsZGVyLm1hdGVyaWFsKG1hdGVyaWFsKTtcblxuICAgICAgLy8gU2hvdWxkIHRocm93IHdoZW4gdHJ5aW5nIHRvIGJ1aWxkIHdpdGhvdXQgdmFsaWRhdG9yc1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXJbJ2J1aWxkVHJhbnNhY3Rpb24nXSgpO1xuICAgICAgfSwgL211c3QgaW5jbHVkZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHZhbGlkYXRpb24gb2Ygbm9uLWJhdGNoIG1ldGhvZCBuYW1lJywgKCkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIGEgbW9jayBkZWNvZGVkIHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgbWV0aG9kIG5hbWVcbiAgICAgIGNvbnN0IG1vY2tEZWNvZGVkVHg6IERlY29kZWRTaWduaW5nUGF5bG9hZCA9IHtcbiAgICAgICAgbWV0aG9kOiB7XG4gICAgICAgICAgbmFtZTogJ2JvbmQnLFxuICAgICAgICAgIHBhbGxldDogJ3N0YWtpbmcnLFxuICAgICAgICAgIGFyZ3M6IHt9LFxuICAgICAgICB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIERlY29kZWRTaWduaW5nUGF5bG9hZDtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24obW9ja0RlY29kZWRUeCk7XG4gICAgICB9LCAvSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduYWJsZVBheWxvYWQgKFN1YnN0cmF0ZSAyNTYtYnl0ZSBibGFrZTIgcnVsZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRCYXRjaFR4ID0gYXN5bmMgKG51bVZhbGlkYXRvcnM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgYmF0Y2hCdWlsZGVyID0gZmFjdG9yeS5nZXRCYXRjaEJ1aWxkZXIoKTtcbiAgICAgIGJhdGNoQnVpbGRlclxuICAgICAgICAuYW1vdW50KHRlc3RBbW91bnQpXG4gICAgICAgIC5jb250cm9sbGVyKHsgYWRkcmVzczogY29udHJvbGxlckFkZHJlc3MgfSlcbiAgICAgICAgLnBheWVlKCdTdGFrZWQnKVxuICAgICAgICAudmFsaWRhdG9ycyhBcnJheShudW1WYWxpZGF0b3JzKS5maWxsKHZhbGlkYXRvckFkZHJlc3MpKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG4gICAgICBiYXRjaEJ1aWxkZXIubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpKTtcbiAgICAgIHJldHVybiBiYXRjaEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmF3IHBheWxvYWQgYnl0ZXMgd2hlbiB0aGUgYmF0Y2ggZXh0cmluc2ljIGlzIGF0IG1vc3QgMjU2IGJ5dGVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYm9uZCArIG5vbWluYXRlIHdpdGggYSBzaW5nbGUgdmFsaWRhdG9yIHN0YXlzIHVuZGVyIHRoZSAyNTYtYnl0ZSB0aHJlc2hvbGRcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRCYXRjaFR4KDEpO1xuICAgICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gdHguc2lnbmFibGVQYXlsb2FkO1xuICAgICAgc2lnbmFibGVQYXlsb2FkLmxlbmd0aC5zaG91bGQuYmUuYmVsb3dPckVxdWFsKDI1Nik7XG4gICAgICBzaWduYWJsZVBheWxvYWQubGVuZ3RoLnNob3VsZC5ub3QuZXF1YWwoMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIDMyLWJ5dGUgYmxha2UyXzI1NiBoYXNoIHdoZW4gdGhlIGJhdGNoIGV4dHJpbnNpYyBleGNlZWRzIDI1NiBieXRlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGJvbmQgKyBub21pbmF0ZSB3aXRoIG1hbnkgdmFsaWRhdG9ycyBwdXNoZXMgdGhlIGJhdGNoIG92ZXIgdGhlIDI1Ni1ieXRlIHRocmVzaG9sZFxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZEJhdGNoVHgoNik7XG4gICAgICBjb25zdCBzaWduYWJsZVBheWxvYWQgPSB0eC5zaWduYWJsZVBheWxvYWQ7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmFibGVQYXlsb2FkLmxlbmd0aCwgMzIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRnJvbSBSYXcgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZWJ1aWxkIGZyb20gcmVhbCBiYXRjaCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEZpcnN0IGJ1aWxkIGEgdHJhbnNhY3Rpb24gdG8gZ2V0IGEgcmVhbCByYXcgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IG9yaWdpbmFsQnVpbGRlciA9IGZhY3RvcnkuZ2V0QmF0Y2hCdWlsZGVyKCk7XG4gICAgICBvcmlnaW5hbEJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCh0ZXN0QW1vdW50KVxuICAgICAgICAuY29udHJvbGxlcih7IGFkZHJlc3M6IGNvbnRyb2xsZXJBZGRyZXNzIH0pXG4gICAgICAgIC5wYXllZSgnU3Rha2VkJylcbiAgICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvckFkZHJlc3NdKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBtYXRlcmlhbFxuICAgICAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChjb2lucy5nZXQoJ3Rwb2x5eCcpLm5ldHdvcmsudHlwZSk7XG4gICAgICBvcmlnaW5hbEJ1aWxkZXIubWF0ZXJpYWwobWF0ZXJpYWwpO1xuXG4gICAgICAvLyBCdWlsZCB0aGUgdHJhbnNhY3Rpb24gYW5kIGdldCB0aGUgc2VyaWFsaXplZCBoZXhcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgb3JpZ2luYWxCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWlsZGVyIGFuZCByZWNvbnN0cnVjdCBmcm9tIHRoZSB0cmFuc2FjdGlvbiBoZXhcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBmYWN0b3J5LmdldEJhdGNoQnVpbGRlcigpO1xuICAgICAgbmV3QnVpbGRlci5tYXRlcmlhbChtYXRlcmlhbCk7XG4gICAgICBuZXdCdWlsZGVyLmZyb20ocmF3VHhIZXgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHJlY29uc3RydWN0ZWQgYnVpbGRlciBoYXMgdGhlIHNhbWUgcGFyYW1ldGVyc1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld0J1aWxkZXIuZ2V0QW1vdW50KCksIHRlc3RBbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld0J1aWxkZXIuZ2V0Q29udHJvbGxlcigpLCBjb250cm9sbGVyQWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRQYXllZSgpLCAnU3Rha2VkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG5ld0J1aWxkZXIuZ2V0VmFsaWRhdG9ycygpLCBbdmFsaWRhdG9yQWRkcmVzc10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkuZnJvbSByb3V0ZXMgYSB2NyBib25kK25vbWluYXRlIHRyYW5zYWN0aW9uIHRvIEJhdGNoU3Rha2luZ0J1aWxkZXIgKFNJLTk4MSByZWdyZXNzaW9uKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEEgdjcgYm9uZCBjYWxsIGNhcnJpZXMgYSBgY29udHJvbGxlcmAsIHNvIHJvdXRpbmcgbXVzdCBrZWVwIGl0IG9uIHRoZSB2NyBidWlsZGVyIGFuZCBub3RcbiAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgdjggYmF0Y2ggc3Rha2luZyBidWlsZGVyLlxuICAgICAgY29uc3Qgb3JpZ2luYWxCdWlsZGVyID0gZmFjdG9yeS5nZXRCYXRjaEJ1aWxkZXIoKTtcbiAgICAgIG9yaWdpbmFsQnVpbGRlclxuICAgICAgICAuYW1vdW50KHRlc3RBbW91bnQpXG4gICAgICAgIC5jb250cm9sbGVyKHsgYWRkcmVzczogY29udHJvbGxlckFkZHJlc3MgfSlcbiAgICAgICAgLnBheWVlKCdTdGFrZWQnKVxuICAgICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yQWRkcmVzc10pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEwMCB9KTtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gKGF3YWl0IG9yaWdpbmFsQnVpbGRlci5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgQmF0Y2hCdWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBjcmVhdGUgcHJvcGVybHkgY29uZmlndXJlZCB0cmFuc2FjdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2EgYmF0Y2ggdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLmNvbnRyb2xsZXIoeyBhZGRyZXNzOiBjb250cm9sbGVyQWRkcmVzcyB9KVxuICAgICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAgIC52YWxpZGF0b3JzKFt2YWxpZGF0b3JBZGRyZXNzXSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICBjb25zdCBtb2NrVHggPSBjcmVhdGVNb2NrVHJhbnNhY3Rpb24oc3Rha2luZ1R4LmJhdGNoLmJvbmRBbmROb21pbmF0ZS51bnNpZ25lZCk7XG4gICAgICBzaW5vbi5zdHViKGJ1aWxkZXIsICdidWlsZCcpLnJlc29sdmVzKG1vY2tUeCBhcyBUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4KTtcbiAgICB9KTtcblxuICAgIGl0KCdhIGJhdGNoIHRyYW5zYWN0aW9uIHdpdGggY3VzdG9tIHJlcGxheSBwcm90ZWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KHRlc3RBbW91bnQpXG4gICAgICAgIC5jb250cm9sbGVyKHsgYWRkcmVzczogY29udHJvbGxlckFkZHJlc3MgfSlcbiAgICAgICAgLnBheWVlKCdTdGFrZWQnKVxuICAgICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yQWRkcmVzc10pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDQwMDAsIG1heER1cmF0aW9uOiAxMDAgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDI0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGUnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tUeCA9IGNyZWF0ZU1vY2tUcmFuc2FjdGlvbignY3VzdG9tLXR4LWZvcm1hdCcpO1xuICAgICAgc2lub24uc3R1YihidWlsZGVyLCAnYnVpbGQnKS5yZXNvbHZlcyhtb2NrVHggYXMgVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=batchUnstakingBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchUnstakingBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/batchUnstakingBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const should_1 = __importDefault(require("should"));
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ const lib_1 = require("../../../src/lib");
11
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
12
+ const utils_1 = __importDefault(require("../../../src/lib/utils"));
13
+ const resources_1 = require("../../resources");
14
+ function createMockTransaction(txData) {
15
+ return {
16
+ id: '123',
17
+ type: sdk_core_1.TransactionType.Batch,
18
+ toBroadcastFormat: () => txData,
19
+ inputs: [],
20
+ outputs: [],
21
+ signature: ['mock-signature'],
22
+ toJson: () => ({
23
+ id: '123',
24
+ type: 'Batch',
25
+ sender: resources_1.accounts.account1.address,
26
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
27
+ blockNumber: 100,
28
+ genesisHash: '0x',
29
+ nonce: 1,
30
+ tip: 0,
31
+ specVersion: 1,
32
+ transactionVersion: 1,
33
+ chainName: 'Polymesh',
34
+ inputs: [],
35
+ outputs: [],
36
+ }),
37
+ };
38
+ }
39
+ describe('Polyx BatchUnstaking Builder', function () {
40
+ let builder;
41
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
42
+ const senderAddress = resources_1.accounts.account1.address;
43
+ const testAmount = '10000';
44
+ beforeEach(() => {
45
+ builder = factory.getBatchUnstakingBuilder();
46
+ });
47
+ describe('setter validation', () => {
48
+ it('should validate unstaking amount', () => {
49
+ const spy = sinon_1.default.spy(builder, 'validateValue');
50
+ should_1.default.throws(() => builder.amount('-1'), /Value cannot be less than zero/);
51
+ should_1.default.doesNotThrow(() => builder.amount('1000'));
52
+ sinon_1.default.assert.calledTwice(spy);
53
+ });
54
+ });
55
+ describe('Build and Sign', function () {
56
+ it('should build a batch unstaking transaction', async () => {
57
+ builder
58
+ .amount(testAmount)
59
+ .sender({ address: senderAddress })
60
+ .validity({ firstValid: 3933, maxDuration: 64 })
61
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
62
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
63
+ const mockTx = createMockTransaction(resources_1.rawTx.unstake.unsigned);
64
+ sinon_1.default.stub(builder, 'build').resolves(mockTx);
65
+ const tx = await builder.build();
66
+ should_1.default.exist(tx);
67
+ should_1.default.equal(builder.getAmount(), testAmount);
68
+ });
69
+ });
70
+ describe('Transaction Validation', function () {
71
+ it('should build, decode, and validate a real batch unstaking transaction', () => {
72
+ // Build the transaction with real parameters
73
+ builder
74
+ .amount(testAmount)
75
+ .sender({ address: senderAddress })
76
+ .validity({ firstValid: 3933, maxDuration: 64 })
77
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
78
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
79
+ // Set up material for decoding
80
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
81
+ builder.material(material);
82
+ // Build the actual unsigned transaction
83
+ const unsignedTx = builder['buildTransaction']();
84
+ const registry = builder['_registry'];
85
+ // Decode the actual built transaction
86
+ const decodedTx = (0, txwrapper_polkadot_1.decode)(unsignedTx, {
87
+ metadataRpc: material.metadata,
88
+ registry: registry,
89
+ });
90
+ // Validate the decoded transaction structure
91
+ should_1.default.equal(decodedTx.method.name, 'batchAll');
92
+ should_1.default.equal(decodedTx.method.pallet, 'utility');
93
+ const batchArgs = decodedTx.method.args;
94
+ should_1.default.exist(batchArgs.calls);
95
+ should_1.default.equal(batchArgs.calls.length, 2);
96
+ // Validate first call is chill
97
+ const firstCall = batchArgs.calls[0];
98
+ const firstCallMethod = utils_1.default.decodeMethodName(firstCall, registry);
99
+ should_1.default.equal(firstCallMethod, 'chill');
100
+ // Validate second call is unbond
101
+ const secondCall = batchArgs.calls[1];
102
+ const secondCallMethod = utils_1.default.decodeMethodName(secondCall, registry);
103
+ should_1.default.equal(secondCallMethod, 'unbond');
104
+ const unbondArgs = secondCall.args;
105
+ should_1.default.equal(unbondArgs.value, testAmount);
106
+ // Now validate using the builder's validation method
107
+ should_1.default.doesNotThrow(() => {
108
+ builder.validateDecodedTransaction(decodedTx);
109
+ });
110
+ });
111
+ it('should reject invalid transaction types', () => {
112
+ const mockDecodedTx = {
113
+ method: {
114
+ name: 'transfer',
115
+ pallet: 'balances',
116
+ args: {},
117
+ },
118
+ };
119
+ should_1.default.throws(() => {
120
+ builder.validateDecodedTransaction(mockDecodedTx);
121
+ }, /Invalid transaction type/);
122
+ });
123
+ it('should validate amount is positive', () => {
124
+ builder.amount(testAmount);
125
+ should_1.default.doesNotThrow(() => {
126
+ builder.testValidateFields();
127
+ });
128
+ should_1.default.throws(() => {
129
+ builder.amount('-10');
130
+ builder.testValidateFields();
131
+ }, /Value cannot be less than zero/);
132
+ });
133
+ });
134
+ describe('From Raw Transaction', function () {
135
+ it('should rebuild from real batch unstaking transaction', async () => {
136
+ // First build a transaction to get a real raw transaction
137
+ const originalBuilder = factory.getBatchUnstakingBuilder();
138
+ originalBuilder
139
+ .amount(testAmount)
140
+ .sender({ address: senderAddress })
141
+ .validity({ firstValid: 3933, maxDuration: 64 })
142
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
143
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
144
+ // Set up material
145
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
146
+ originalBuilder.material(material);
147
+ // Build the transaction and get the serialized hex
148
+ const tx = await originalBuilder.build();
149
+ const rawTxHex = tx.toBroadcastFormat();
150
+ // Create a new builder and reconstruct from the transaction hex
151
+ const newBuilder = factory.getBatchUnstakingBuilder();
152
+ newBuilder.material(material);
153
+ newBuilder.from(rawTxHex);
154
+ // Verify the reconstructed builder has the same parameters
155
+ should_1.default.equal(newBuilder.getAmount(), testAmount);
156
+ });
157
+ });
158
+ });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hVbnN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9iYXRjaFVuc3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxzRUFBdUQ7QUFDdkQsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QixrREFBMEI7QUFDMUIsMENBQWlHO0FBQ2pHLG1EQUF1RDtBQUV2RCxtRUFBMkM7QUFFM0MsK0NBQWtEO0FBRWxELFNBQVMscUJBQXFCLENBQUMsTUFBYztJQUMzQyxPQUFPO1FBQ0wsRUFBRSxFQUFFLEtBQUs7UUFDVCxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxLQUFLO1FBQzNCLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU07UUFDL0IsTUFBTSxFQUFFLEVBQUU7UUFDVixPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxFQUFFLEtBQUs7WUFDVCxJQUFJLEVBQUUsT0FBTztZQUNiLE1BQU0sRUFBRSxvQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQ2pDLGNBQWMsRUFBRSxvRUFBb0U7WUFDcEYsV0FBVyxFQUFFLEdBQUc7WUFDaEIsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsQ0FBQztZQUNOLFdBQVcsRUFBRSxDQUFDO1lBQ2Qsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixTQUFTLEVBQUUsVUFBVTtZQUNyQixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBRUQsUUFBUSxDQUFDLDhCQUE4QixFQUFFO0lBQ3ZDLElBQUksT0FBOEIsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FB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QTJEO1lBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvZGVkU2lnbmluZ1BheWxvYWQgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgQmF0Y2hVbnN0YWtpbmdCdWlsZGVyLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmF0Y2hBcmdzIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmltcG9ydCB7IGFjY291bnRzLCByYXdUeCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vY2tUcmFuc2FjdGlvbih0eERhdGE6IHN0cmluZyk6IFBhcnRpYWw8VHJhbnNhY3Rpb24+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJzEyMycsXG4gICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkJhdGNoLFxuICAgIHRvQnJvYWRjYXN0Rm9ybWF0OiAoKSA9PiB0eERhdGEsXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICBzaWduYXR1cmU6IFsnbW9jay1zaWduYXR1cmUnXSxcbiAgICB0b0pzb246ICgpID0+ICh7XG4gICAgICBpZDogJzEyMycsXG4gICAgICB0eXBlOiAnQmF0Y2gnLFxuICAgICAgc2VuZGVyOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgcmVmZXJlbmNlQmxvY2s6ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnLFxuICAgICAgYmxvY2tOdW1iZXI6IDEwMCxcbiAgICAgIGdlbmVzaXNIYXNoOiAnMHgnLFxuICAgICAgbm9uY2U6IDEsXG4gICAgICB0aXA6IDAsXG4gICAgICBzcGVjVmVyc2lvbjogMSxcbiAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogMSxcbiAgICAgIGNoYWluTmFtZTogJ1BvbHltZXNoJyxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICB9KSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ1BvbHl4IEJhdGNoVW5zdGFraW5nIEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBidWlsZGVyOiBCYXRjaFVuc3Rha2luZ0J1aWxkZXI7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcblxuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcztcbiAgY29uc3QgdGVzdEFtb3VudCA9ICcxMDAwMCc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXR0ZXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHVuc3Rha2luZyBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzcHkgPSBzaW5vbi5zcHkoYnVpbGRlciwgJ3ZhbGlkYXRlVmFsdWUnKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci5hbW91bnQoJy0xJyksIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5hbW91bnQoJzEwMDAnKSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkVHdpY2Uoc3B5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkIGFuZCBTaWduJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBiYXRjaCB1bnN0YWtpbmcgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICBjb25zdCBtb2NrVHggPSBjcmVhdGVNb2NrVHJhbnNhY3Rpb24ocmF3VHgudW5zdGFrZS51bnNpZ25lZCk7XG4gICAgICBzaW5vbi5zdHViKGJ1aWxkZXIsICdidWlsZCcpLnJlc29sdmVzKG1vY2tUeCBhcyBUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGJ1aWxkZXIuZ2V0QW1vdW50KCksIHRlc3RBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkLCBkZWNvZGUsIGFuZCB2YWxpZGF0ZSBhIHJlYWwgYmF0Y2ggdW5zdGFraW5nIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgdGhlIHRyYW5zYWN0aW9uIHdpdGggcmVhbCBwYXJhbWV0ZXJzXG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgbWF0ZXJpYWwgZm9yIGRlY29kaW5nXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIGJ1aWxkZXIubWF0ZXJpYWwobWF0ZXJpYWwpO1xuXG4gICAgICAvLyBCdWlsZCB0aGUgYWN0dWFsIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYnVpbGRlclsnYnVpbGRUcmFuc2FjdGlvbiddKCk7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IGJ1aWxkZXJbJ19yZWdpc3RyeSddO1xuXG4gICAgICAvLyBEZWNvZGUgdGhlIGFjdHVhbCBidWlsdCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHVuc2lnbmVkVHgsIHtcbiAgICAgICAgbWV0YWRhdGFScGM6IG1hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlXG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFR4Lm1ldGhvZC5uYW1lLCAnYmF0Y2hBbGwnKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLnBhbGxldCwgJ3V0aWxpdHknKTtcblxuICAgICAgY29uc3QgYmF0Y2hBcmdzID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQmF0Y2hBcmdzO1xuICAgICAgc2hvdWxkLmV4aXN0KGJhdGNoQXJncy5jYWxscyk7XG4gICAgICBzaG91bGQuZXF1YWwoYmF0Y2hBcmdzLmNhbGxzLmxlbmd0aCwgMik7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGZpcnN0IGNhbGwgaXMgY2hpbGxcbiAgICAgIGNvbnN0IGZpcnN0Q2FsbCA9IGJhdGNoQXJncy5jYWxsc1swXTtcbiAgICAgIGNvbnN0IGZpcnN0Q2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoZmlyc3RDYWxsLCByZWdpc3RyeSk7XG4gICAgICBzaG91bGQuZXF1YWwoZmlyc3RDYWxsTWV0aG9kLCAnY2hpbGwnKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc2Vjb25kIGNhbGwgaXMgdW5ib25kXG4gICAgICBjb25zdCBzZWNvbmRDYWxsID0gYmF0Y2hBcmdzLmNhbGxzWzFdO1xuICAgICAgY29uc3Qgc2Vjb25kQ2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoc2Vjb25kQ2FsbCwgcmVnaXN0cnkpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlY29uZENhbGxNZXRob2QsICd1bmJvbmQnKTtcblxuICAgICAgY29uc3QgdW5ib25kQXJncyA9IHNlY29uZENhbGwuYXJncyBhcyB7IHZhbHVlOiBzdHJpbmcgfTtcbiAgICAgIHNob3VsZC5lcXVhbCh1bmJvbmRBcmdzLnZhbHVlLCB0ZXN0QW1vdW50KTtcblxuICAgICAgLy8gTm93IHZhbGlkYXRlIHVzaW5nIHRoZSBidWlsZGVyJ3MgdmFsaWRhdGlvbiBtZXRob2RcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgdHJhbnNhY3Rpb24gdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrRGVjb2RlZFR4OiBEZWNvZGVkU2lnbmluZ1BheWxvYWQgPSB7XG4gICAgICAgIG1ldGhvZDoge1xuICAgICAgICAgIG5hbWU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgcGFsbGV0OiAnYmFsYW5jZXMnLFxuICAgICAgICAgIGFyZ3M6IHt9LFxuICAgICAgICB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIERlY29kZWRTaWduaW5nUGF5bG9hZDtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24obW9ja0RlY29kZWRUeCk7XG4gICAgICB9LCAvSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFtb3VudCBpcyBwb3NpdGl2ZScsICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KHRlc3RBbW91bnQpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCk7XG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KCctMTAnKTtcbiAgICAgICAgYnVpbGRlci50ZXN0VmFsaWRhdGVGaWVsZHMoKTtcbiAgICAgIH0sIC9WYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8vKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Zyb20gUmF3IFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVidWlsZCBmcm9tIHJlYWwgYmF0Y2ggdW5zdGFraW5nIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgYnVpbGQgYSB0cmFuc2FjdGlvbiB0byBnZXQgYSByZWFsIHJhdyB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgb3JpZ2luYWxCdWlsZGVyID0gZmFjdG9yeS5nZXRCYXRjaFVuc3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIG9yaWdpbmFsQnVpbGRlclxuICAgICAgICAuYW1vdW50KHRlc3RBbW91bnQpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEwMCB9KTtcblxuICAgICAgLy8gU2V0IHVwIG1hdGVyaWFsXG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW5zLmdldCgndHBvbHl4JykubmV0d29yay50eXBlKTtcbiAgICAgIG9yaWdpbmFsQnVpbGRlci5tYXRlcmlhbChtYXRlcmlhbCk7XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSB0cmFuc2FjdGlvbiBhbmQgZ2V0IHRoZSBzZXJpYWxpemVkIGhleFxuICAgICAgY29uc3QgdHggPSBhd2FpdCBvcmlnaW5hbEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJ1aWxkZXIgYW5kIHJlY29uc3RydWN0IGZyb20gdGhlIHRyYW5zYWN0aW9uIGhleFxuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgICBuZXdCdWlsZGVyLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgcmVjb25zdHJ1Y3RlZCBidWlsZGVyIGhhcyB0aGUgc2FtZSBwYXJhbWV0ZXJzXG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRBbW91bnQoKSwgdGVzdEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bondExtraBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bondExtraBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/bondExtraBuilder.ts"],"names":[],"mappings":""}