@bitgo-beta/abstract-eth 1.0.2-beta.211 → 1.0.2-beta.2110

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 (178) hide show
  1. package/dist/src/abstractEthLikeCoin.d.ts +20 -9
  2. package/dist/src/abstractEthLikeCoin.d.ts.map +1 -1
  3. package/dist/src/abstractEthLikeCoin.js +46 -15
  4. package/dist/src/abstractEthLikeNewCoins.d.ts +876 -0
  5. package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -0
  6. package/dist/src/abstractEthLikeNewCoins.js +2664 -0
  7. package/dist/src/ethLikeToken.d.ts +38 -6
  8. package/dist/src/ethLikeToken.d.ts.map +1 -1
  9. package/dist/src/ethLikeToken.js +289 -10
  10. package/dist/src/index.d.ts +2 -0
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +8 -2
  13. package/dist/src/lib/constants.d.ts +4 -0
  14. package/dist/src/lib/constants.d.ts.map +1 -0
  15. package/dist/src/lib/constants.js +11 -0
  16. package/dist/src/lib/contractCall.d.ts +8 -0
  17. package/dist/src/lib/contractCall.d.ts.map +1 -0
  18. package/dist/src/lib/contractCall.js +17 -0
  19. package/dist/src/lib/decryptionDelegationBuilder.d.ts +90 -0
  20. package/dist/src/lib/decryptionDelegationBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/decryptionDelegationBuilder.js +59 -0
  22. package/dist/src/lib/iface.d.ts +143 -0
  23. package/dist/src/lib/iface.d.ts.map +1 -0
  24. package/dist/src/lib/iface.js +8 -0
  25. package/dist/src/lib/index.d.ts +19 -0
  26. package/dist/src/lib/index.d.ts.map +1 -0
  27. package/dist/src/lib/index.js +60 -0
  28. package/dist/src/lib/keyPair.d.ts +26 -0
  29. package/dist/src/lib/keyPair.d.ts.map +1 -0
  30. package/dist/src/lib/keyPair.js +65 -0
  31. package/dist/src/lib/messages/eip191/eip191Message.d.ts +12 -0
  32. package/dist/src/lib/messages/eip191/eip191Message.d.ts.map +1 -0
  33. package/dist/src/lib/messages/eip191/eip191Message.js +25 -0
  34. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts +19 -0
  35. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/messages/eip191/eip191MessageBuilder.js +27 -0
  37. package/dist/src/lib/messages/eip191/index.d.ts +3 -0
  38. package/dist/src/lib/messages/eip191/index.d.ts.map +1 -0
  39. package/dist/src/lib/messages/eip191/index.js +19 -0
  40. package/dist/src/lib/messages/eip712/eip712Message.d.ts +6 -0
  41. package/dist/src/lib/messages/eip712/eip712Message.d.ts.map +1 -0
  42. package/dist/src/lib/messages/eip712/eip712Message.js +27 -0
  43. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts +7 -0
  44. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/messages/eip712/eip712MessageBuilder.js +15 -0
  46. package/dist/src/lib/messages/eip712/index.d.ts +3 -0
  47. package/dist/src/lib/messages/eip712/index.d.ts.map +1 -0
  48. package/dist/src/lib/messages/eip712/index.js +19 -0
  49. package/dist/src/lib/messages/index.d.ts +4 -0
  50. package/dist/src/lib/messages/index.d.ts.map +1 -0
  51. package/dist/src/lib/messages/index.js +20 -0
  52. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  53. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  54. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  55. package/dist/src/lib/transaction.d.ts +69 -0
  56. package/dist/src/lib/transaction.d.ts.map +1 -0
  57. package/dist/src/lib/transaction.js +149 -0
  58. package/dist/src/lib/transactionBuilder.d.ts +313 -0
  59. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder.js +926 -0
  61. package/dist/src/lib/transferBuilder.d.ts +76 -0
  62. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transferBuilder.js +307 -0
  64. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +54 -0
  65. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +120 -0
  67. package/dist/src/lib/transferBuilders/index.d.ts +5 -0
  68. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -0
  69. package/dist/src/lib/transferBuilders/index.js +21 -0
  70. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +17 -0
  71. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +1 -0
  72. package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +96 -0
  73. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +21 -0
  74. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +1 -0
  75. package/dist/src/lib/transferBuilders/transferBuilderERC721.js +91 -0
  76. package/dist/src/lib/transferBuilders/transferBuilderERC7984.d.ts +35 -0
  77. package/dist/src/lib/transferBuilders/transferBuilderERC7984.d.ts.map +1 -0
  78. package/dist/src/lib/transferBuilders/transferBuilderERC7984.js +113 -0
  79. package/dist/src/lib/types.d.ts +40 -0
  80. package/dist/src/lib/types.d.ts.map +1 -0
  81. package/dist/src/lib/types.js +140 -0
  82. package/dist/src/lib/utils.d.ts +365 -0
  83. package/dist/src/lib/utils.d.ts.map +1 -0
  84. package/dist/src/lib/utils.js +969 -0
  85. package/dist/src/lib/walletUtil.d.ts +46 -0
  86. package/dist/src/lib/walletUtil.d.ts.map +1 -0
  87. package/dist/src/lib/walletUtil.js +53 -0
  88. package/dist/src/lib/zamaUtils.d.ts +107 -0
  89. package/dist/src/lib/zamaUtils.d.ts.map +1 -0
  90. package/dist/src/lib/zamaUtils.js +220 -0
  91. package/dist/src/types.d.ts +9 -0
  92. package/dist/src/types.d.ts.map +1 -0
  93. package/dist/src/types.js +3 -0
  94. package/dist/test/index.d.ts +2 -0
  95. package/dist/test/index.d.ts.map +1 -0
  96. package/dist/test/index.js +18 -0
  97. package/dist/test/unit/coin.d.ts +8 -0
  98. package/dist/test/unit/coin.d.ts.map +1 -0
  99. package/dist/test/unit/coin.js +577 -0
  100. package/dist/test/unit/decryptionDelegationBuilder.d.ts +2 -0
  101. package/dist/test/unit/decryptionDelegationBuilder.d.ts.map +1 -0
  102. package/dist/test/unit/decryptionDelegationBuilder.js +265 -0
  103. package/dist/test/unit/index.d.ts +8 -0
  104. package/dist/test/unit/index.d.ts.map +1 -0
  105. package/dist/test/unit/index.js +24 -0
  106. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts +3 -0
  107. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts.map +1 -0
  108. package/dist/test/unit/messages/abstractEthMessageBuilderTests.js +110 -0
  109. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts +43 -0
  110. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts.map +1 -0
  111. package/dist/test/unit/messages/abstractEthMessageTestTypes.js +3 -0
  112. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts +3 -0
  113. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts.map +1 -0
  114. package/dist/test/unit/messages/abstractEthMessagesTests.js +129 -0
  115. package/dist/test/unit/messages/eip191/eip191Message.d.ts +2 -0
  116. package/dist/test/unit/messages/eip191/eip191Message.d.ts.map +1 -0
  117. package/dist/test/unit/messages/eip191/eip191Message.js +15 -0
  118. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts +2 -0
  119. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
  120. package/dist/test/unit/messages/eip191/eip191MessageBuilder.js +16 -0
  121. package/dist/test/unit/messages/eip191/fixtures.d.ts +109 -0
  122. package/dist/test/unit/messages/eip191/fixtures.d.ts.map +1 -0
  123. package/dist/test/unit/messages/eip191/fixtures.js +63 -0
  124. package/dist/test/unit/messages/eip712/eip712Message.d.ts +2 -0
  125. package/dist/test/unit/messages/eip712/eip712Message.d.ts.map +1 -0
  126. package/dist/test/unit/messages/eip712/eip712Message.js +15 -0
  127. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts +2 -0
  128. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
  129. package/dist/test/unit/messages/eip712/eip712MessageBuilder.js +16 -0
  130. package/dist/test/unit/messages/eip712/fixtures.d.ts +76 -0
  131. package/dist/test/unit/messages/eip712/fixtures.d.ts.map +1 -0
  132. package/dist/test/unit/messages/eip712/fixtures.js +120 -0
  133. package/dist/test/unit/messages/index.d.ts +4 -0
  134. package/dist/test/unit/messages/index.d.ts.map +1 -0
  135. package/dist/test/unit/messages/index.js +20 -0
  136. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  137. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  138. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  139. package/dist/test/unit/token.d.ts +2 -0
  140. package/dist/test/unit/token.d.ts.map +1 -0
  141. package/dist/test/unit/token.js +37 -0
  142. package/dist/test/unit/transaction.d.ts +3 -0
  143. package/dist/test/unit/transaction.d.ts.map +1 -0
  144. package/dist/test/unit/transaction.js +73 -0
  145. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +8 -0
  146. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  147. package/dist/test/unit/transactionBuilder/addressInitialization.js +95 -0
  148. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +3 -0
  149. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  150. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +161 -0
  151. package/dist/test/unit/transactionBuilder/flushERC7984.d.ts +3 -0
  152. package/dist/test/unit/transactionBuilder/flushERC7984.d.ts.map +1 -0
  153. package/dist/test/unit/transactionBuilder/flushERC7984.js +292 -0
  154. package/dist/test/unit/transactionBuilder/flushNft.d.ts +2 -0
  155. package/dist/test/unit/transactionBuilder/flushNft.d.ts.map +1 -0
  156. package/dist/test/unit/transactionBuilder/flushNft.js +381 -0
  157. package/dist/test/unit/transactionBuilder/index.d.ts +7 -0
  158. package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -0
  159. package/dist/test/unit/transactionBuilder/index.js +23 -0
  160. package/dist/test/unit/transactionBuilder/send.d.ts +3 -0
  161. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  162. package/dist/test/unit/transactionBuilder/send.js +197 -0
  163. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +11 -0
  164. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  165. package/dist/test/unit/transactionBuilder/walletInitialization.js +137 -0
  166. package/dist/test/unit/transferBuilder.d.ts +2 -0
  167. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  168. package/dist/test/unit/transferBuilder.js +76 -0
  169. package/dist/test/unit/utils.d.ts +2 -0
  170. package/dist/test/unit/utils.d.ts.map +1 -0
  171. package/dist/test/unit/utils.js +214 -0
  172. package/dist/test/unit/zamaUtils.d.ts +2 -0
  173. package/dist/test/unit/zamaUtils.d.ts.map +1 -0
  174. package/dist/test/unit/zamaUtils.js +352 -0
  175. package/dist/tsconfig.tsbuildinfo +1 -8286
  176. package/package.json +34 -10
  177. package/.eslintignore +0 -5
  178. package/CHANGELOG.md +0 -178
@@ -0,0 +1,161 @@
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
+ exports.runDecryptionDelegationTests = runDecryptionDelegationTests;
7
+ /**
8
+ * TransactionBuilder build and rebuild tests for DecryptionDelegation transaction type.
9
+ *
10
+ * Verifies three delegation flows end-to-end through build → serialize → deserialize:
11
+ * Flow 1 — root wallet multicall (outer selector 0xac9650d8 → ContractCall)
12
+ * Flow 2 — explicit DecryptionDelegation type set by caller
13
+ * Flow 3 — forwarder callFromParent (outer selector 0x77e60b35 → ContractCall)
14
+ */
15
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
16
+ const should_1 = __importDefault(require("should"));
17
+ const zamaUtils_1 = require("../../../src/lib/zamaUtils");
18
+ const utils_1 = require("../../../src/lib/utils");
19
+ const ACL_ADDRESS = '0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D';
20
+ const DELEGATE_ADDRESS = '0x1111111111111111111111111111111111111111';
21
+ const TOKEN_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
22
+ const TOKEN_ADDRESS_2 = '0x4E7B06D78965594eB5EF5414c357ca21E1554491';
23
+ const FORWARDER_ADDRESS = '0xDeADbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF';
24
+ const EXPIRY = Math.floor(Date.now() / 1000) + 365 * 86400;
25
+ function runDecryptionDelegationTests(coinName, getBuilder) {
26
+ describe(`${coinName} transaction builder — DecryptionDelegation flows`, () => {
27
+ let txBuilder;
28
+ beforeEach(() => {
29
+ txBuilder = getBuilder(coinName);
30
+ txBuilder.fee({ fee: '1000000000', gasLimit: '200000' });
31
+ txBuilder.counter(1);
32
+ });
33
+ // -------------------------------------------------------------------------
34
+ // classifyTransaction — verify selector → type mapping
35
+ // -------------------------------------------------------------------------
36
+ describe('classifyTransaction', () => {
37
+ it('multicall selector (0xac9650d8) should classify as ContractCall', () => {
38
+ const result = (0, utils_1.classifyTransaction)(zamaUtils_1.aclMulticallMethodId + '00'.repeat(28));
39
+ should_1.default.equal(result, sdk_core_1.TransactionType.ContractCall);
40
+ });
41
+ it('callFromParent selector (0x77e60b35) should classify as ContractCall', () => {
42
+ const result = (0, utils_1.classifyTransaction)(zamaUtils_1.callFromParentMethodId + '00'.repeat(28));
43
+ should_1.default.equal(result, sdk_core_1.TransactionType.ContractCall);
44
+ });
45
+ it('delegateForUserDecryption selector (0x04f61a95) should classify as DecryptionDelegation', () => {
46
+ const result = (0, utils_1.classifyTransaction)('0x04f61a95' + '00'.repeat(28));
47
+ should_1.default.equal(result, sdk_core_1.TransactionType.DecryptionDelegation);
48
+ });
49
+ it('unknown selector should classify as ContractCall (fallback)', () => {
50
+ const result = (0, utils_1.classifyTransaction)('0xdeadbeef' + '00'.repeat(28));
51
+ should_1.default.equal(result, sdk_core_1.TransactionType.ContractCall);
52
+ });
53
+ });
54
+ // -------------------------------------------------------------------------
55
+ // Flow 1 — root wallet multicall (outer selector = multicall → ContractCall)
56
+ // -------------------------------------------------------------------------
57
+ describe('Flow 1: root wallet multicall delegation (ContractCall type)', () => {
58
+ it('should build a tx with multicall delegation data', async () => {
59
+ const calldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS, TOKEN_ADDRESS_2], EXPIRY);
60
+ txBuilder.type(sdk_core_1.TransactionType.ContractCall);
61
+ txBuilder.contract(ACL_ADDRESS);
62
+ txBuilder.data(calldata);
63
+ const tx = await txBuilder.build();
64
+ const json = tx.toJson();
65
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
66
+ json.to.should.equal(ACL_ADDRESS);
67
+ json.data.should.startWith(zamaUtils_1.aclMulticallMethodId);
68
+ json.value.should.equal('0');
69
+ });
70
+ it('should serialize and deserialize correctly (rebuild from hex)', async () => {
71
+ const calldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS, TOKEN_ADDRESS_2], EXPIRY);
72
+ txBuilder.type(sdk_core_1.TransactionType.ContractCall);
73
+ txBuilder.contract(ACL_ADDRESS);
74
+ txBuilder.data(calldata);
75
+ const originalTx = await txBuilder.build();
76
+ const rawHex = originalTx.toBroadcastFormat();
77
+ const rebuiltBuilder = getBuilder(coinName);
78
+ rebuiltBuilder.from(rawHex);
79
+ const rebuiltTx = await rebuiltBuilder.build();
80
+ should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
81
+ });
82
+ });
83
+ // -------------------------------------------------------------------------
84
+ // Flow 2 — explicit DecryptionDelegation type (WP sets this for TSS path)
85
+ // -------------------------------------------------------------------------
86
+ describe('Flow 2: explicit DecryptionDelegation type', () => {
87
+ it('should build a DecryptionDelegation tx', async () => {
88
+ const calldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
89
+ txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
90
+ txBuilder.contract(ACL_ADDRESS);
91
+ txBuilder.data(calldata);
92
+ const tx = await txBuilder.build();
93
+ const json = tx.toJson();
94
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.DecryptionDelegation);
95
+ json.to.should.equal(ACL_ADDRESS);
96
+ json.data.should.startWith(zamaUtils_1.aclMulticallMethodId);
97
+ });
98
+ it('should serialize and deserialize correctly (rebuild from hex)', async () => {
99
+ const calldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
100
+ txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
101
+ txBuilder.contract(ACL_ADDRESS);
102
+ txBuilder.data(calldata);
103
+ const originalTx = await txBuilder.build();
104
+ const rawHex = originalTx.toBroadcastFormat();
105
+ // from() classifies via outer selector (multicall → ContractCall) and rebuilds correctly
106
+ const rebuiltBuilder = getBuilder(coinName);
107
+ rebuiltBuilder.from(rawHex);
108
+ const rebuiltTx = await rebuiltBuilder.build();
109
+ should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
110
+ });
111
+ });
112
+ // -------------------------------------------------------------------------
113
+ // Flow 3 — forwarder callFromParent (outer selector = callFromParent → ContractCall)
114
+ // -------------------------------------------------------------------------
115
+ describe('Flow 3: forwarder callFromParent delegation (ContractCall type)', () => {
116
+ it('should build a tx targeting the forwarder with callFromParent data', async () => {
117
+ const innerCalldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
118
+ const outerCalldata = (0, zamaUtils_1.wrapInCallFromParent)(ACL_ADDRESS, innerCalldata);
119
+ txBuilder.type(sdk_core_1.TransactionType.ContractCall);
120
+ txBuilder.contract(FORWARDER_ADDRESS);
121
+ txBuilder.data(outerCalldata);
122
+ const tx = await txBuilder.build();
123
+ const json = tx.toJson();
124
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
125
+ // outer tx targets the forwarder, not the ACL
126
+ json.to.should.equal(FORWARDER_ADDRESS);
127
+ json.data.should.startWith(zamaUtils_1.callFromParentMethodId);
128
+ });
129
+ it('should serialize and deserialize correctly (rebuild from hex)', async () => {
130
+ const innerCalldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
131
+ const outerCalldata = (0, zamaUtils_1.wrapInCallFromParent)(ACL_ADDRESS, innerCalldata);
132
+ txBuilder.type(sdk_core_1.TransactionType.ContractCall);
133
+ txBuilder.contract(FORWARDER_ADDRESS);
134
+ txBuilder.data(outerCalldata);
135
+ const originalTx = await txBuilder.build();
136
+ const rawHex = originalTx.toBroadcastFormat();
137
+ const rebuiltBuilder = getBuilder(coinName);
138
+ rebuiltBuilder.from(rawHex);
139
+ const rebuiltTx = await rebuiltBuilder.build();
140
+ should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
141
+ });
142
+ });
143
+ // -------------------------------------------------------------------------
144
+ // Validation
145
+ // -------------------------------------------------------------------------
146
+ describe('validation', () => {
147
+ it('should throw if contract address is missing for DecryptionDelegation', async () => {
148
+ const calldata = (0, zamaUtils_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
149
+ txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
150
+ txBuilder.data(calldata);
151
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
152
+ });
153
+ it('should throw if data is missing for DecryptionDelegation', async () => {
154
+ txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
155
+ txBuilder.contract(ACL_ADDRESS);
156
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
157
+ });
158
+ });
159
+ });
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2RlY3J5cHRpb25EZWxlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBMEJBLG9FQXFLQztBQS9MRDs7Ozs7OztHQU9HO0FBQ0gsbURBQXVEO0FBQ3ZELG9EQUE0QjtBQUU1QiwwREFLb0M7QUFDcEMsa0RBQTZEO0FBRTdELE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7QUFDdEUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7QUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFDckUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBRTNELFNBQWdCLDRCQUE0QixDQUFDLFFBQWdCLEVBQUUsVUFBZ0Q7SUFDN0csUUFBUSxDQUFDLEdBQUcsUUFBUSxtREFBbUQsRUFBRSxHQUFHLEVBQUU7UUFDNUUsSUFBSSxTQUE2QixDQUFDO1FBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsdURBQXVEO1FBQ3ZELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMscUJBQXFC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LEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hFLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQzFHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zYWN0aW9uQnVpbGRlciBidWlsZCBhbmQgcmVidWlsZCB0ZXN0cyBmb3IgRGVjcnlwdGlvbkRlbGVnYXRpb24gdHJhbnNhY3Rpb24gdHlwZS5cbiAqXG4gKiBWZXJpZmllcyB0aHJlZSBkZWxlZ2F0aW9uIGZsb3dzIGVuZC10by1lbmQgdGhyb3VnaCBidWlsZCDihpIgc2VyaWFsaXplIOKGkiBkZXNlcmlhbGl6ZTpcbiAqICAgRmxvdyAxIOKAlCByb290IHdhbGxldCBtdWx0aWNhbGwgKG91dGVyIHNlbGVjdG9yIDB4YWM5NjUwZDgg4oaSIENvbnRyYWN0Q2FsbClcbiAqICAgRmxvdyAyIOKAlCBleHBsaWNpdCBEZWNyeXB0aW9uRGVsZWdhdGlvbiB0eXBlIHNldCBieSBjYWxsZXJcbiAqICAgRmxvdyAzIOKAlCBmb3J3YXJkZXIgY2FsbEZyb21QYXJlbnQgKG91dGVyIHNlbGVjdG9yIDB4NzdlNjBiMzUg4oaSIENvbnRyYWN0Q2FsbClcbiAqL1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhLFxuICB3cmFwSW5DYWxsRnJvbVBhcmVudCxcbiAgYWNsTXVsdGljYWxsTWV0aG9kSWQsXG4gIGNhbGxGcm9tUGFyZW50TWV0aG9kSWQsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvemFtYVV0aWxzJztcbmltcG9ydCB7IGNsYXNzaWZ5VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcblxuY29uc3QgQUNMX0FERFJFU1MgPSAnMHhmMEZmZGM5M2I3RTE4NmJDMmY4Q0IzZEFBNzVEODZkMTkzMEE0MzNEJztcbmNvbnN0IERFTEVHQVRFX0FERFJFU1MgPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcbmNvbnN0IFRPS0VOX0FERFJFU1MgPSAnMHg5NDE2NzEyOTE3MkEzNWFiMDkzQjQ0YjhiOTYyMTNERGJjM2NEMzg3JztcbmNvbnN0IFRPS0VOX0FERFJFU1NfMiA9ICcweDRFN0IwNkQ3ODk2NTU5NGVCNUVGNTQxNGMzNTdjYTIxRTE1NTQ0OTEnO1xuY29uc3QgRk9SV0FSREVSX0FERFJFU1MgPSAnMHhEZUFEYmVlZmRFQWRiZWVmZEVhZGJFRUZkZWFkYmVFRmRFYURiZWVGJztcbmNvbnN0IEVYUElSWSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzY1ICogODY0MDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5EZWNyeXB0aW9uRGVsZWdhdGlvblRlc3RzKGNvaW5OYW1lOiBzdHJpbmcsIGdldEJ1aWxkZXI6IChjb2luOiBzdHJpbmcpID0+IFRyYW5zYWN0aW9uQnVpbGRlcik6IHZvaWQge1xuICBkZXNjcmliZShgJHtjb2luTmFtZX0gdHJhbnNhY3Rpb24gYnVpbGRlciDigJQgRGVjcnlwdGlvbkRlbGVnYXRpb24gZmxvd3NgLCAoKSA9PiB7XG4gICAgbGV0IHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKGNvaW5OYW1lKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMDAwMDAwMDAwJywgZ2FzTGltaXQ6ICcyMDAwMDAnIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gY2xhc3NpZnlUcmFuc2FjdGlvbiDigJQgdmVyaWZ5IHNlbGVjdG9yIOKGkiB0eXBlIG1hcHBpbmdcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZGVzY3JpYmUoJ2NsYXNzaWZ5VHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnbXVsdGljYWxsIHNlbGVjdG9yICgweGFjOTY1MGQ4KSBzaG91bGQgY2xhc3NpZnkgYXMgQ29udHJhY3RDYWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbGFzc2lmeVRyYW5zYWN0aW9uKGFjbE11bHRpY2FsbE1ldGhvZElkICsgJzAwJy5yZXBlYXQoMjgpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxGcm9tUGFyZW50IHNlbGVjdG9yICgweDc3ZTYwYjM1KSBzaG91bGQgY2xhc3NpZnkgYXMgQ29udHJhY3RDYWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbGFzc2lmeVRyYW5zYWN0aW9uKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQgKyAnMDAnLnJlcGVhdCgyOCkpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBzZWxlY3RvciAoMHgwNGY2MWE5NSkgc2hvdWxkIGNsYXNzaWZ5IGFzIERlY3J5cHRpb25EZWxlZ2F0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbGFzc2lmeVRyYW5zYWN0aW9uKCcweDA0ZjYxYTk1JyArICcwMCcucmVwZWF0KDI4KSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Vua25vd24gc2VsZWN0b3Igc2hvdWxkIGNsYXNzaWZ5IGFzIENvbnRyYWN0Q2FsbCAoZmFsbGJhY2spJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjbGFzc2lmeVRyYW5zYWN0aW9uKCcweGRlYWRiZWVmJyArICcwMCcucmVwZWF0KDI4KSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN1bHQsIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRmxvdyAxIOKAlCByb290IHdhbGxldCBtdWx0aWNhbGwgKG91dGVyIHNlbGVjdG9yID0gbXVsdGljYWxsIOKGkiBDb250cmFjdENhbGwpXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdGbG93IDE6IHJvb3Qgd2FsbGV0IG11bHRpY2FsbCBkZWxlZ2F0aW9uIChDb250cmFjdENhbGwgdHlwZSknLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHggd2l0aCBtdWx0aWNhbGwgZGVsZWdhdGlvbiBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgIGpzb24udG8uc2hvdWxkLmVxdWFsKEFDTF9BRERSRVNTKTtcbiAgICAgICAganNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoYWNsTXVsdGljYWxsTWV0aG9kSWQpO1xuICAgICAgICBqc29uLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHkgKHJlYnVpbGQgZnJvbSBoZXgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHJhd0hleCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGbG93IDIg4oCUIGV4cGxpY2l0IERlY3J5cHRpb25EZWxlZ2F0aW9uIHR5cGUgKFdQIHNldHMgdGhpcyBmb3IgVFNTIHBhdGgpXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdGbG93IDI6IGV4cGxpY2l0IERlY3J5cHRpb25EZWxlZ2F0aW9uIHR5cGUnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgRGVjcnlwdGlvbkRlbGVnYXRpb24gdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgICAgICBqc29uLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUyk7XG4gICAgICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgY29ycmVjdGx5IChyZWJ1aWxkIGZyb20gaGV4KScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChBQ0xfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcblxuICAgICAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd0hleCA9IG9yaWdpbmFsVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICAvLyBmcm9tKCkgY2xhc3NpZmllcyB2aWEgb3V0ZXIgc2VsZWN0b3IgKG11bHRpY2FsbCDihpIgQ29udHJhY3RDYWxsKSBhbmQgcmVidWlsZHMgY29ycmVjdGx5XG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHJhd0hleCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGbG93IDMg4oCUIGZvcndhcmRlciBjYWxsRnJvbVBhcmVudCAob3V0ZXIgc2VsZWN0b3IgPSBjYWxsRnJvbVBhcmVudCDihpIgQ29udHJhY3RDYWxsKVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBkZXNjcmliZSgnRmxvdyAzOiBmb3J3YXJkZXIgY2FsbEZyb21QYXJlbnQgZGVsZWdhdGlvbiAoQ29udHJhY3RDYWxsIHR5cGUpJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHR4IHRhcmdldGluZyB0aGUgZm9yd2FyZGVyIHdpdGggY2FsbEZyb21QYXJlbnQgZGF0YScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgb3V0ZXJDYWxsZGF0YSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lckNhbGxkYXRhKTtcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmRhdGEob3V0ZXJDYWxsZGF0YSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgICAgLy8gb3V0ZXIgdHggdGFyZ2V0cyB0aGUgZm9yd2FyZGVyLCBub3QgdGhlIEFDTFxuICAgICAgICBqc29uLnRvLnNob3VsZC5lcXVhbChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjb3JyZWN0bHkgKHJlYnVpbGQgZnJvbSBoZXgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lckNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBvdXRlckNhbGxkYXRhID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyQ2FsbGRhdGEpO1xuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZGF0YShvdXRlckNhbGxkYXRhKTtcblxuICAgICAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJhd0hleCA9IG9yaWdpbmFsVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGdldEJ1aWxkZXIoY29pbk5hbWUpO1xuICAgICAgICByZWJ1aWx0QnVpbGRlci5mcm9tKHJhd0hleCk7XG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdIZXgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBkZXNjcmliZSgndmFsaWRhdGlvbicsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgY29udHJhY3QgYWRkcmVzcyBpcyBtaXNzaW5nIGZvciBEZWNyeXB0aW9uRGVsZWdhdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBkYXRhIGlzIG1pc3NpbmcgZm9yIERlY3J5cHRpb25EZWxlZ2F0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGNvbnRyYWN0IGNhbGwgZGF0YSBmaWVsZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { TransactionBuilder } from '../../../src';
2
+ export declare function runFlushERC7984Tests(coinName: string, getBuilder: (coin: string) => TransactionBuilder): void;
3
+ //# sourceMappingURL=flushERC7984.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flushERC7984.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/flushERC7984.ts"],"names":[],"mappings":"AAYA,OAAO,EAAsB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAgBtE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,GAAG,IAAI,CAyT7G"}
@@ -0,0 +1,292 @@
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
+ exports.runFlushERC7984Tests = runFlushERC7984Tests;
7
+ /**
8
+ * TransactionBuilder tests for FlushERC7984ForwarderToken transaction type.
9
+ *
10
+ * Verifies:
11
+ * - Building a FlushERC7984ForwarderToken tx from scratch (legacy and EIP-1559 fees)
12
+ * - Signing and serialization round-trip for both signed and unsigned transactions
13
+ * - classifyTransaction correctly identifies the type
14
+ * - Error cases for missing fields
15
+ * - contractAddress !== forwarderAddress guard
16
+ */
17
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
18
+ const should_1 = __importDefault(require("should"));
19
+ const src_1 = require("../../../src");
20
+ const zamaUtils_1 = require("../../../src/lib/zamaUtils");
21
+ const utils_1 = require("../../../src/lib/utils");
22
+ const FORWARDER_ADDRESS = '0xDeADbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF';
23
+ const TOKEN_CONTRACT_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
24
+ const PARENT_ADDRESS = '0x1111111111111111111111111111111111111111';
25
+ const ENCRYPTED_HANDLE = '0x' + 'ab'.repeat(32); // 32-byte mock handle
26
+ const OTHER_ADDRESS = '0x2222222222222222222222222222222222222222';
27
+ // Deterministic test-only private key — never used on mainnet
28
+ const TEST_PRV_KEY = 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28';
29
+ function runFlushERC7984Tests(coinName, getBuilder) {
30
+ describe(`${coinName} transaction builder — FlushERC7984ForwarderToken`, () => {
31
+ let txBuilder;
32
+ beforeEach(() => {
33
+ txBuilder = getBuilder(coinName);
34
+ txBuilder.fee({ fee: '1000000000', gasLimit: '200000' });
35
+ txBuilder.counter(1);
36
+ });
37
+ // -------------------------------------------------------------------------
38
+ // classifyTransaction — verify selector → type mapping
39
+ // -------------------------------------------------------------------------
40
+ describe('classifyTransaction', () => {
41
+ it('should classify callFromParent+confidentialTransfer as FlushERC7984ForwarderToken', () => {
42
+ const calldata = (0, zamaUtils_1.buildFlushERC7984ForwarderTokenCalldata)(TOKEN_CONTRACT_ADDRESS, PARENT_ADDRESS, ENCRYPTED_HANDLE);
43
+ const result = (0, utils_1.classifyTransaction)(calldata);
44
+ should_1.default.equal(result, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
45
+ });
46
+ it('should NOT classify plain callFromParent (delegation) as FlushERC7984ForwarderToken', () => {
47
+ // A callFromParent wrapping a multicall delegation starts with 0xac9650d8 inside, not 0x5bebed7e
48
+ // Use callFromParent prefix + arbitrary non-confidentialTransfer inner data
49
+ const fakeInner = '0xac9650d8' + '00'.repeat(64); // multicall selector
50
+ const { wrapInCallFromParent } = require('../../../src/lib/zamaUtils');
51
+ const calldata = wrapInCallFromParent(TOKEN_CONTRACT_ADDRESS, fakeInner);
52
+ const result = (0, utils_1.classifyTransaction)(calldata);
53
+ // Should fall through to ContractCall, not FlushERC7984ForwarderToken
54
+ should_1.default.equal(result, sdk_core_1.TransactionType.ContractCall);
55
+ });
56
+ it('should NOT classify confidentialTransferWithProof inside sendMultiSig as FlushERC7984ForwarderToken', () => {
57
+ // SendERC7984 uses sendMultiSig wrapping confidentialTransferWithProof
58
+ // Should remain SendERC7984, not FlushERC7984ForwarderToken
59
+ const result = (0, utils_1.classifyTransaction)('0x39125215' + '00'.repeat(28));
60
+ should_1.default.equal(result, sdk_core_1.TransactionType.Send);
61
+ });
62
+ });
63
+ // -------------------------------------------------------------------------
64
+ // Build from scratch
65
+ // -------------------------------------------------------------------------
66
+ describe('build from scratch', () => {
67
+ it('should build a FlushERC7984ForwarderToken transaction', async () => {
68
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
69
+ txBuilder.contract(FORWARDER_ADDRESS);
70
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
71
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
72
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
73
+ txBuilder.parentAddress(PARENT_ADDRESS);
74
+ const tx = await txBuilder.build();
75
+ const json = tx.toJson();
76
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
77
+ json.to.toLowerCase().should.equal(FORWARDER_ADDRESS.toLowerCase());
78
+ json.data.should.startWith(zamaUtils_1.callFromParentMethodId);
79
+ json.value.should.equal('0');
80
+ });
81
+ it('tx.data should contain the inner confidentialTransfer selector', async () => {
82
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
83
+ txBuilder.contract(FORWARDER_ADDRESS);
84
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
85
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
86
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
87
+ txBuilder.parentAddress(PARENT_ADDRESS);
88
+ const tx = await txBuilder.build();
89
+ const json = tx.toJson();
90
+ const { tokenContractAddress, parentAddress, encryptedHandle } = (0, zamaUtils_1.decodeFlushERC7984ForwarderTokenCalldata)(json.data);
91
+ tokenContractAddress.toLowerCase().should.equal(TOKEN_CONTRACT_ADDRESS.toLowerCase());
92
+ parentAddress.toLowerCase().should.equal(PARENT_ADDRESS.toLowerCase());
93
+ encryptedHandle.should.equal(ENCRYPTED_HANDLE);
94
+ });
95
+ it('tx.to should equal the forwarder address', async () => {
96
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
97
+ txBuilder.contract(FORWARDER_ADDRESS);
98
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
99
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
100
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
101
+ txBuilder.parentAddress(PARENT_ADDRESS);
102
+ const tx = await txBuilder.build();
103
+ tx.toJson().to.toLowerCase().should.equal(FORWARDER_ADDRESS.toLowerCase());
104
+ });
105
+ it('should build with EIP-1559 fee model', async () => {
106
+ const builder = getBuilder(coinName);
107
+ builder.fee({
108
+ fee: '30000000000',
109
+ eip1559: {
110
+ maxFeePerGas: '30000000000',
111
+ maxPriorityFeePerGas: '1000000000',
112
+ },
113
+ gasLimit: '200000',
114
+ });
115
+ builder.counter(1);
116
+ builder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
117
+ builder.contract(FORWARDER_ADDRESS);
118
+ builder.forwarderAddress(FORWARDER_ADDRESS);
119
+ builder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
120
+ builder.encryptedHandle(ENCRYPTED_HANDLE);
121
+ builder.parentAddress(PARENT_ADDRESS);
122
+ const tx = await builder.build();
123
+ const json = tx.toJson();
124
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
125
+ json._type.should.equal(src_1.ETHTransactionType.EIP1559);
126
+ json.maxFeePerGas.should.equal('30000000000');
127
+ json.maxPriorityFeePerGas.should.equal('1000000000');
128
+ should_1.default.not.exist(json.gasPrice);
129
+ json.data.should.startWith(zamaUtils_1.callFromParentMethodId);
130
+ });
131
+ });
132
+ // -------------------------------------------------------------------------
133
+ // Signing
134
+ // -------------------------------------------------------------------------
135
+ describe('signing', () => {
136
+ it('should produce a signed transaction with v, r, s and from fields', async () => {
137
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
138
+ txBuilder.contract(FORWARDER_ADDRESS);
139
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
140
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
141
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
142
+ txBuilder.parentAddress(PARENT_ADDRESS);
143
+ txBuilder.sign({ key: TEST_PRV_KEY });
144
+ const tx = await txBuilder.build();
145
+ const json = tx.toJson();
146
+ should_1.default.exist(json.v);
147
+ should_1.default.exist(json.r);
148
+ should_1.default.exist(json.s);
149
+ should_1.default.exist(json.from);
150
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
151
+ });
152
+ it('should round-trip a signed transaction from serialized hex', async () => {
153
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
154
+ txBuilder.contract(FORWARDER_ADDRESS);
155
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
156
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
157
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
158
+ txBuilder.parentAddress(PARENT_ADDRESS);
159
+ txBuilder.sign({ key: TEST_PRV_KEY });
160
+ const originalTx = await txBuilder.build();
161
+ const rawHex = originalTx.toBroadcastFormat();
162
+ const rebuiltBuilder = getBuilder(coinName);
163
+ rebuiltBuilder.from(rawHex);
164
+ const rebuiltTx = await rebuiltBuilder.build();
165
+ rebuiltTx.toBroadcastFormat().should.equal(rawHex);
166
+ should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
167
+ should_1.default.exist(rebuiltTx.toJson().v);
168
+ });
169
+ it('should produce a signed EIP-1559 transaction with v, r, s fields', async () => {
170
+ const builder = getBuilder(coinName);
171
+ builder.fee({
172
+ fee: '30000000000',
173
+ eip1559: {
174
+ maxFeePerGas: '30000000000',
175
+ maxPriorityFeePerGas: '1000000000',
176
+ },
177
+ gasLimit: '200000',
178
+ });
179
+ builder.counter(1);
180
+ builder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
181
+ builder.contract(FORWARDER_ADDRESS);
182
+ builder.forwarderAddress(FORWARDER_ADDRESS);
183
+ builder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
184
+ builder.encryptedHandle(ENCRYPTED_HANDLE);
185
+ builder.parentAddress(PARENT_ADDRESS);
186
+ builder.sign({ key: TEST_PRV_KEY });
187
+ const tx = await builder.build();
188
+ const json = tx.toJson();
189
+ json._type.should.equal(src_1.ETHTransactionType.EIP1559);
190
+ should_1.default.exist(json.v);
191
+ should_1.default.exist(json.r);
192
+ should_1.default.exist(json.s);
193
+ should_1.default.exist(json.from);
194
+ });
195
+ });
196
+ // -------------------------------------------------------------------------
197
+ // Serialization round-trip
198
+ // -------------------------------------------------------------------------
199
+ describe('serialization round-trip', () => {
200
+ it('should serialize and deserialize to the same transaction', async () => {
201
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
202
+ txBuilder.contract(FORWARDER_ADDRESS);
203
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
204
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
205
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
206
+ txBuilder.parentAddress(PARENT_ADDRESS);
207
+ const originalTx = await txBuilder.build();
208
+ const rawHex = originalTx.toBroadcastFormat();
209
+ const rebuiltBuilder = getBuilder(coinName);
210
+ rebuiltBuilder.from(rawHex);
211
+ const rebuiltTx = await rebuiltBuilder.build();
212
+ rebuiltTx.toBroadcastFormat().should.equal(rawHex);
213
+ });
214
+ it('deserialized tx should classify as FlushERC7984ForwarderToken', async () => {
215
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
216
+ txBuilder.contract(FORWARDER_ADDRESS);
217
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
218
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
219
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
220
+ txBuilder.parentAddress(PARENT_ADDRESS);
221
+ const originalTx = await txBuilder.build();
222
+ const rawHex = originalTx.toBroadcastFormat();
223
+ const rebuiltBuilder = getBuilder(coinName);
224
+ rebuiltBuilder.from(rawHex);
225
+ const rebuiltTx = await rebuiltBuilder.build();
226
+ should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
227
+ });
228
+ });
229
+ // -------------------------------------------------------------------------
230
+ // Error cases — missing required fields
231
+ // -------------------------------------------------------------------------
232
+ describe('missing field errors', () => {
233
+ it('should throw when forwarderAddress is not set', async () => {
234
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
235
+ txBuilder.contract(FORWARDER_ADDRESS);
236
+ // no forwarderAddress
237
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
238
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
239
+ txBuilder.parentAddress(PARENT_ADDRESS);
240
+ await txBuilder.build().should.be.rejectedWith(/missing forwarder address/i);
241
+ });
242
+ it('should throw when tokenContractAddress is not set', async () => {
243
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
244
+ txBuilder.contract(FORWARDER_ADDRESS);
245
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
246
+ // no tokenContractAddress
247
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
248
+ txBuilder.parentAddress(PARENT_ADDRESS);
249
+ await txBuilder.build().should.be.rejectedWith(/missing tokenContractAddress/i);
250
+ });
251
+ it('should throw when encryptedHandle is not set', async () => {
252
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
253
+ txBuilder.contract(FORWARDER_ADDRESS);
254
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
255
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
256
+ // no encryptedHandle
257
+ txBuilder.parentAddress(PARENT_ADDRESS);
258
+ await txBuilder.build().should.be.rejectedWith(/missing encryptedHandle/i);
259
+ });
260
+ it('should throw when parentAddress is not set', async () => {
261
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
262
+ txBuilder.contract(FORWARDER_ADDRESS);
263
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
264
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
265
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
266
+ // no parentAddress
267
+ await txBuilder.build().should.be.rejectedWith(/missing parentAddress/i);
268
+ });
269
+ it('should throw when contractAddress !== forwarderAddress', async () => {
270
+ txBuilder.type(sdk_core_1.TransactionType.FlushERC7984ForwarderToken);
271
+ txBuilder.contract(OTHER_ADDRESS); // different from forwarder
272
+ txBuilder.forwarderAddress(FORWARDER_ADDRESS);
273
+ txBuilder.tokenContractAddress(TOKEN_CONTRACT_ADDRESS);
274
+ txBuilder.encryptedHandle(ENCRYPTED_HANDLE);
275
+ txBuilder.parentAddress(PARENT_ADDRESS);
276
+ await txBuilder.build().should.be.rejectedWith(/contractAddress must equal forwarderAddress/);
277
+ });
278
+ });
279
+ // -------------------------------------------------------------------------
280
+ // Setter validation
281
+ // -------------------------------------------------------------------------
282
+ describe('setter validation', () => {
283
+ it('tokenContractAddress should reject invalid address', () => {
284
+ should_1.default.throws(() => txBuilder.tokenContractAddress('not-an-address'), /Invalid address/);
285
+ });
286
+ it('parentAddress should reject invalid address', () => {
287
+ should_1.default.throws(() => txBuilder.parentAddress('not-an-address'), /Invalid address/);
288
+ });
289
+ });
290
+ });
291
+ }
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hFUkM3OTg0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9mbHVzaEVSQzc5ODQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0QkEsb0RBeVRDO0FBclZEOzs7Ozs7Ozs7R0FTRztBQUNILG1EQUF1RDtBQUN2RCxvREFBNEI7QUFDNUIsc0NBQXNFO0FBQ3RFLDBEQUlvQztBQUNwQyxrREFBNkQ7QUFFN0QsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLHNCQUFzQixHQUFHLDRDQUE0QyxDQUFDO0FBQzVFLE1BQU0sY0FBYyxHQUFHLDRDQUE0QyxDQUFDO0FBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7QUFDdkUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7QUFDbkUsOERBQThEO0FBQzlELE1BQU0sWUFBWSxHQUFHLGtFQUFrRSxDQUFDO0FBRXhGLFNBQWdCLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsVUFBZ0Q7SUFDckcsUUFBUSxDQUFDLEdBQUcsUUFBUSxtREFBbUQsRUFBRSxHQUFHLEVBQUU7UUFDNUUsSUFBSSxTQUE2QixDQUFDO1FBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsdURBQXVEO1FBQ3ZELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FB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QyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgdGVzdHMgZm9yIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIHRyYW5zYWN0aW9uIHR5cGUuXG4gKlxuICogVmVyaWZpZXM6XG4gKiAgIC0gQnVpbGRpbmcgYSBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbiB0eCBmcm9tIHNjcmF0Y2ggKGxlZ2FjeSBhbmQgRUlQLTE1NTkgZmVlcylcbiAqICAgLSBTaWduaW5nIGFuZCBzZXJpYWxpemF0aW9uIHJvdW5kLXRyaXAgZm9yIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAqICAgLSBjbGFzc2lmeVRyYW5zYWN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzIHRoZSB0eXBlXG4gKiAgIC0gRXJyb3IgY2FzZXMgZm9yIG1pc3NpbmcgZmllbGRzXG4gKiAgIC0gY29udHJhY3RBZGRyZXNzICE9PSBmb3J3YXJkZXJBZGRyZXNzIGd1YXJkXG4gKi9cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEVUSFRyYW5zYWN0aW9uVHlwZSwgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbiAgZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMnO1xuaW1wb3J0IHsgY2xhc3NpZnlUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5jb25zdCBGT1JXQVJERVJfQUREUkVTUyA9ICcweERlQURiZWVmZEVBZGJlZWZkRWFkYkVFRmRlYWRiZUVGZEVhRGJlZUYnO1xuY29uc3QgVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyA9ICcweDk0MTY3MTI5MTcyQTM1YWIwOTNCNDRiOGI5NjIxM0REYmMzY0QzODcnO1xuY29uc3QgUEFSRU5UX0FERFJFU1MgPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcbmNvbnN0IEVOQ1JZUFRFRF9IQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpOyAvLyAzMi1ieXRlIG1vY2sgaGFuZGxlXG5jb25zdCBPVEhFUl9BRERSRVNTID0gJzB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMic7XG4vLyBEZXRlcm1pbmlzdGljIHRlc3Qtb25seSBwcml2YXRlIGtleSDigJQgbmV2ZXIgdXNlZCBvbiBtYWlubmV0XG5jb25zdCBURVNUX1BSVl9LRVkgPSAnRkFDNEQwNEFBMDAyNUVDRjIwMEQ3NEJDOUI1RTQ2MTZFNEI4MzM4QjY5QjYxMzYyQUFBRDQ5Rjc2RTY4RUYyOCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5GbHVzaEVSQzc5ODRUZXN0cyhjb2luTmFtZTogc3RyaW5nLCBnZXRCdWlsZGVyOiAoY29pbjogc3RyaW5nKSA9PiBUcmFuc2FjdGlvbkJ1aWxkZXIpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYCR7Y29pbk5hbWV9IHRyYW5zYWN0aW9uIGJ1aWxkZXIg4oCUIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuYCwgKCkgPT4ge1xuICAgIGxldCB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTAwMDAwMDAwMCcsIGdhc0xpbWl0OiAnMjAwMDAwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGNsYXNzaWZ5VHJhbnNhY3Rpb24g4oCUIHZlcmlmeSBzZWxlY3RvciDihpIgdHlwZSBtYXBwaW5nXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdjbGFzc2lmeVRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBjYWxsRnJvbVBhcmVudCtjb25maWRlbnRpYWxUcmFuc2ZlciBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoXG4gICAgICAgICAgVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyxcbiAgICAgICAgICBQQVJFTlRfQUREUkVTUyxcbiAgICAgICAgICBFTkNSWVBURURfSEFORExFXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsYXNzaWZ5VHJhbnNhY3Rpb24oY2FsbGRhdGEpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmVzdWx0LCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgTk9UIGNsYXNzaWZ5IHBsYWluIGNhbGxGcm9tUGFyZW50IChkZWxlZ2F0aW9uKSBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgLy8gQSBjYWxsRnJvbVBhcmVudCB3cmFwcGluZyBhIG11bHRpY2FsbCBkZWxlZ2F0aW9uIHN0YXJ0cyB3aXRoIDB4YWM5NjUwZDggaW5zaWRlLCBub3QgMHg1YmViZWQ3ZVxuICAgICAgICAvLyBVc2UgY2FsbEZyb21QYXJlbnQgcHJlZml4ICsgYXJiaXRyYXJ5IG5vbi1jb25maWRlbnRpYWxUcmFuc2ZlciBpbm5lciBkYXRhXG4gICAgICAgIGNvbnN0IGZha2VJbm5lciA9ICcweGFjOTY1MGQ4JyArICcwMCcucmVwZWF0KDY0KTsgLy8gbXVsdGljYWxsIHNlbGVjdG9yXG4gICAgICAgIGNvbnN0IHsgd3JhcEluQ2FsbEZyb21QYXJlbnQgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3NyYy9saWIvemFtYVV0aWxzJyk7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUywgZmFrZUlubmVyKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2xhc3NpZnlUcmFuc2FjdGlvbihjYWxsZGF0YSk7XG4gICAgICAgIC8vIFNob3VsZCBmYWxsIHRocm91Z2ggdG8gQ29udHJhY3RDYWxsLCBub3QgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBOT1QgY2xhc3NpZnkgY29uZmlkZW50aWFsVHJhbnNmZXJXaXRoUHJvb2YgaW5zaWRlIHNlbmRNdWx0aVNpZyBhcyBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbicsICgpID0+IHtcbiAgICAgICAgLy8gU2VuZEVSQzc5ODQgdXNlcyBzZW5kTXVsdGlTaWcgd3JhcHBpbmcgY29uZmlkZW50aWFsVHJhbnNmZXJXaXRoUHJvb2ZcbiAgICAgICAgLy8gU2hvdWxkIHJlbWFpbiBTZW5kRVJDNzk4NCwgbm90IEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNsYXNzaWZ5VHJhbnNhY3Rpb24oJzB4MzkxMjUyMTUnICsgJzAwJy5yZXBlYXQoMjgpKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlc3VsdCwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQnVpbGQgZnJvbSBzY3JhdGNoXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdidWlsZCBmcm9tIHNjcmF0Y2gnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBqc29uLnRvLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICAgICAganNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndHguZGF0YSBzaG91bGQgY29udGFpbiB0aGUgaW5uZXIgY29uZmlkZW50aWFsVHJhbnNmZXIgc2VsZWN0b3InLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIGNvbnN0IHsgdG9rZW5Db250cmFjdEFkZHJlc3MsIHBhcmVudEFkZHJlc3MsIGVuY3J5cHRlZEhhbmRsZSB9ID0gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShcbiAgICAgICAgICBqc29uLmRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcGFyZW50QWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChQQVJFTlRfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgZW5jcnlwdGVkSGFuZGxlLnNob3VsZC5lcXVhbChFTkNSWVBURURfSEFORExFKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndHgudG8gc2hvdWxkIGVxdWFsIHRoZSBmb3J3YXJkZXIgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC50b0pzb24oKS50by50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChGT1JXQVJERVJfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIHdpdGggRUlQLTE1NTkgZmVlIG1vZGVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIGJ1aWxkZXIuZmVlKHtcbiAgICAgICAgICBmZWU6ICczMDAwMDAwMDAwMCcsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMzAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdhc0xpbWl0OiAnMjAwMDAwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgICAgYnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgYnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBqc29uLl90eXBlLnNob3VsZC5lcXVhbChFVEhUcmFuc2FjdGlvblR5cGUuRUlQMTU1OSk7XG4gICAgICAgIGpzb24ubWF4RmVlUGVyR2FzIS5zaG91bGQuZXF1YWwoJzMwMDAwMDAwMDAwJyk7XG4gICAgICAgIGpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMhLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KChqc29uIGFzIGFueSkuZ2FzUHJpY2UpO1xuICAgICAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNpZ25pbmdcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZGVzY3JpYmUoJ3NpZ25pbmcnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSBzaWduZWQgdHJhbnNhY3Rpb24gd2l0aCB2LCByLCBzIGFuZCBmcm9tIGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IFRFU1RfUFJWX0tFWSB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24udik7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLnIpO1xuICAgICAgICBzaG91bGQuZXhpc3QoanNvbi5zKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24uZnJvbSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcm91bmQtdHJpcCBhIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhUT0tFTl9DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoUEFSRU5UX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogVEVTVF9QUlZfS0VZIH0pO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3SGV4KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVidWlsdFR4LnRvSnNvbigpLnYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIHNpZ25lZCBFSVAtMTU1OSB0cmFuc2FjdGlvbiB3aXRoIHYsIHIsIHMgZmllbGRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIGJ1aWxkZXIuZmVlKHtcbiAgICAgICAgICBmZWU6ICczMDAwMDAwMDAwMCcsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4RmVlUGVyR2FzOiAnMzAwMDAwMDAwMDAnLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdhc0xpbWl0OiAnMjAwMDAwJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1aWxkZXIuY291bnRlcigxKTtcbiAgICAgICAgYnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBidWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgYnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBURVNUX1BSVl9LRVkgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBqc29uLl90eXBlLnNob3VsZC5lcXVhbChFVEhUcmFuc2FjdGlvblR5cGUuRUlQMTU1OSk7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLnYpO1xuICAgICAgICBzaG91bGQuZXhpc3QoanNvbi5yKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KGpzb24ucyk7XG4gICAgICAgIHNob3VsZC5leGlzdChqc29uLmZyb20pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU2VyaWFsaXphdGlvbiByb3VuZC10cmlwXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGRlc2NyaWJlKCdzZXJpYWxpemF0aW9uIHJvdW5kLXRyaXAnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdG8gdGhlIHNhbWUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKFRPS0VOX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZW5jcnlwdGVkSGFuZGxlKEVOQ1JZUFRFRF9IQU5ETEUpO1xuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCByYXdIZXggPSBvcmlnaW5hbFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKGNvaW5OYW1lKTtcbiAgICAgICAgcmVidWlsdEJ1aWxkZXIuZnJvbShyYXdIZXgpO1xuICAgICAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyYXdIZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkZXNlcmlhbGl6ZWQgdHggc2hvdWxkIGNsYXNzaWZ5IGFzIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhUT0tFTl9DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmVuY3J5cHRlZEhhbmRsZShFTkNSWVBURURfSEFORExFKTtcbiAgICAgICAgdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoUEFSRU5UX0FERFJFU1MpO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSk7XG4gICAgICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBFcnJvciBjYXNlcyDigJQgbWlzc2luZyByZXF1aXJlZCBmaWVsZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgZGVzY3JpYmUoJ21pc3NpbmcgZmllbGQgZXJyb3JzJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGZvcndhcmRlckFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgLy8gbm8gZm9yd2FyZGVyQWRkcmVzc1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIGZvcndhcmRlciBhZGRyZXNzL2kpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0b2tlbkNvbnRyYWN0QWRkcmVzcyBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4pO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICAgIC8vIG5vIHRva2VuQ29udHJhY3RBZGRyZXNzXG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHRva2VuQ29udHJhY3RBZGRyZXNzL2kpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBlbmNyeXB0ZWRIYW5kbGUgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIC8vIG5vIGVuY3J5cHRlZEhhbmRsZVxuICAgICAgICB0eEJ1aWxkZXIucGFyZW50QWRkcmVzcyhQQVJFTlRfQUREUkVTUyk7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyBlbmNyeXB0ZWRIYW5kbGUvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHBhcmVudEFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIC8vIG5vIHBhcmVudEFkZHJlc3NcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHBhcmVudEFkZHJlc3MvaSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGNvbnRyYWN0QWRkcmVzcyAhPT0gZm9yd2FyZGVyQWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KE9USEVSX0FERFJFU1MpOyAvLyBkaWZmZXJlbnQgZnJvbSBmb3J3YXJkZXJcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoRk9SV0FSREVSX0FERFJFU1MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoVE9LRU5fQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHR4QnVpbGRlci5lbmNyeXB0ZWRIYW5kbGUoRU5DUllQVEVEX0hBTkRMRSk7XG4gICAgICAgIHR4QnVpbGRlci5wYXJlbnRBZGRyZXNzKFBBUkVOVF9BRERSRVNTKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9jb250cmFjdEFkZHJlc3MgbXVzdCBlcXVhbCBmb3J3YXJkZXJBZGRyZXNzLyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTZXR0ZXIgdmFsaWRhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgndG9rZW5Db250cmFjdEFkZHJlc3Mgc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKCdub3QtYW4tYWRkcmVzcycpLCAvSW52YWxpZCBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3BhcmVudEFkZHJlc3Mgc2hvdWxkIHJlamVjdCBpbnZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnBhcmVudEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJyksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare function runFlushNftTests(coinName: string, getBuilder: any): void;
2
+ //# sourceMappingURL=flushNft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flushNft.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/flushNft.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,KAAA,GAAG,IAAI,CAucnE"}