dop-wallet-v6 1.3.1 → 1.3.31

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 (124) hide show
  1. package/.eslintrc.js +5 -0
  2. package/dist/services/dop/core/react-native-init.d.ts +2 -2
  3. package/dist/services/dop/core/react-native-init.js +36 -15
  4. package/dist/services/dop/core/react-native-init.js.map +1 -1
  5. package/dist/services/dop/crypto/react-native-crypto-provider.js +4 -2
  6. package/dist/services/dop/crypto/react-native-crypto-provider.js.map +1 -1
  7. package/dist/services/dop/wallets/balances.js +49 -2
  8. package/dist/services/dop/wallets/balances.js.map +1 -1
  9. package/dist/services/dop/wallets/wallets.js +12 -17
  10. package/dist/services/dop/wallets/wallets.js.map +1 -1
  11. package/package.json +6 -1
  12. package/patches/dop-engine-v3+1.4.9.patch +55 -33
  13. package/dist/__tests__/index.test.d.ts +0 -1
  14. package/dist/__tests__/index.test.js +0 -13
  15. package/dist/__tests__/index.test.js.map +0 -1
  16. package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +0 -1
  17. package/dist/services/artifacts/__tests__/artifact-downloader.test.js +0 -70
  18. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +0 -1
  19. package/dist/services/dop/__tests__/integration.test.d.ts +0 -1
  20. package/dist/services/dop/__tests__/integration.test.js +0 -378
  21. package/dist/services/dop/__tests__/integration.test.js.map +0 -1
  22. package/dist/services/dop/core/__tests__/engine.test.d.ts +0 -1
  23. package/dist/services/dop/core/__tests__/engine.test.js +0 -30
  24. package/dist/services/dop/core/__tests__/engine.test.js.map +0 -1
  25. package/dist/services/dop/core/__tests__/providers.test.d.ts +0 -1
  26. package/dist/services/dop/core/__tests__/providers.test.js +0 -69
  27. package/dist/services/dop/core/__tests__/providers.test.js.map +0 -1
  28. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.d.ts +0 -1
  29. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js +0 -168
  30. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +0 -1
  31. package/dist/services/dop/history/__tests__/transaction-history.test.d.ts +0 -0
  32. package/dist/services/dop/history/__tests__/transaction-history.test.js +0 -2
  33. package/dist/services/dop/history/__tests__/transaction-history.test.js.map +0 -1
  34. package/dist/services/dop/profile/__tests__/profile-manager.test.d.ts +0 -1
  35. package/dist/services/dop/profile/__tests__/profile-manager.test.js +0 -170
  36. package/dist/services/dop/profile/__tests__/profile-manager.test.js.map +0 -1
  37. package/dist/services/dop/profile/__tests__/selective-transparency.test.d.ts +0 -1
  38. package/dist/services/dop/profile/__tests__/selective-transparency.test.js +0 -256
  39. package/dist/services/dop/profile/__tests__/selective-transparency.test.js.map +0 -1
  40. package/dist/services/dop/profile/__tests__/storage.test.d.ts +0 -1
  41. package/dist/services/dop/profile/__tests__/storage.test.js +0 -174
  42. package/dist/services/dop/profile/__tests__/storage.test.js.map +0 -1
  43. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.d.ts +0 -1
  44. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js +0 -126
  45. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +0 -1
  46. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +0 -1
  47. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +0 -63
  48. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +0 -1
  49. package/dist/services/dop/util/__tests__/bytes-util.test.d.ts +0 -1
  50. package/dist/services/dop/util/__tests__/bytes-util.test.js +0 -23
  51. package/dist/services/dop/util/__tests__/bytes-util.test.js.map +0 -1
  52. package/dist/services/dop/util/__tests__/crypto-util.test.d.ts +0 -1
  53. package/dist/services/dop/util/__tests__/crypto-util.test.js +0 -62
  54. package/dist/services/dop/util/__tests__/crypto-util.test.js.map +0 -1
  55. package/dist/services/dop/wallets/__tests__/balances-live.test.d.ts +0 -1
  56. package/dist/services/dop/wallets/__tests__/balances-live.test.js +0 -58
  57. package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +0 -1
  58. package/dist/services/dop/wallets/__tests__/balances-update.test.d.ts +0 -1
  59. package/dist/services/dop/wallets/__tests__/balances-update.test.js +0 -90
  60. package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +0 -1
  61. package/dist/services/dop/wallets/__tests__/balances.test.d.ts +0 -1
  62. package/dist/services/dop/wallets/__tests__/balances.test.js +0 -59
  63. package/dist/services/dop/wallets/__tests__/balances.test.js.map +0 -1
  64. package/dist/services/dop/wallets/__tests__/wallets.test.d.ts +0 -1
  65. package/dist/services/dop/wallets/__tests__/wallets.test.js +0 -80
  66. package/dist/services/dop/wallets/__tests__/wallets.test.js.map +0 -1
  67. package/dist/services/ethers/__tests__/ethers-util.test.d.ts +0 -1
  68. package/dist/services/ethers/__tests__/ethers-util.test.js +0 -19
  69. package/dist/services/ethers/__tests__/ethers-util.test.js.map +0 -1
  70. package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +0 -216
  71. package/dist/services/transactions/__tests__/proof-cache.test.d.ts +0 -1
  72. package/dist/services/transactions/__tests__/proof-cache.test.js +0 -128
  73. package/dist/services/transactions/__tests__/proof-cache.test.js.map +0 -1
  74. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +0 -1
  75. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +0 -385
  76. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +0 -1
  77. package/dist/services/transactions/__tests__/tx-decrypt.test.d.ts +0 -0
  78. package/dist/services/transactions/__tests__/tx-decrypt.test.js +0 -2
  79. package/dist/services/transactions/__tests__/tx-decrypt.test.js.map +0 -1
  80. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.d.ts +0 -1
  81. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js +0 -101
  82. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +0 -1
  83. package/dist/services/transactions/__tests__/tx-encrypt.test.d.ts +0 -0
  84. package/dist/services/transactions/__tests__/tx-encrypt.test.js +0 -2
  85. package/dist/services/transactions/__tests__/tx-encrypt.test.js.map +0 -1
  86. package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +0 -1
  87. package/dist/services/transactions/__tests__/tx-gas-details.test.js +0 -112
  88. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +0 -1
  89. package/dist/services/transactions/__tests__/tx-notes.test.d.ts +0 -1
  90. package/dist/services/transactions/__tests__/tx-notes.test.js +0 -193
  91. package/dist/services/transactions/__tests__/tx-notes.test.js.map +0 -1
  92. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.d.ts +0 -1
  93. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js +0 -50
  94. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js.map +0 -1
  95. package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +0 -1
  96. package/dist/services/transactions/__tests__/tx-transfer.test.js +0 -280
  97. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +0 -1
  98. package/dist/tests/balances.test.d.ts +0 -1
  99. package/dist/tests/balances.test.js +0 -419
  100. package/dist/tests/balances.test.js.map +0 -1
  101. package/dist/tests/helper.test.d.ts +0 -3
  102. package/dist/tests/helper.test.js +0 -16
  103. package/dist/tests/helper.test.js.map +0 -1
  104. package/dist/tests/mocks.test.d.ts +0 -50
  105. package/dist/tests/mocks.test.js +0 -202
  106. package/dist/tests/mocks.test.js.map +0 -1
  107. package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +0 -10
  108. package/dist/tests/poi/test-wallet-poi-requester.test.js +0 -15
  109. package/dist/tests/poi/test-wallet-poi-requester.test.js.map +0 -1
  110. package/dist/tests/setup.test.d.ts +0 -9
  111. package/dist/tests/setup.test.js +0 -110
  112. package/dist/tests/setup.test.js.map +0 -1
  113. package/dist/tests/stubs/engine-stubs.test.d.ts +0 -7
  114. package/dist/tests/stubs/engine-stubs.test.js +0 -75
  115. package/dist/tests/stubs/engine-stubs.test.js.map +0 -1
  116. package/dist/utils/__tests__/blocked-address.test.d.ts +0 -1
  117. package/dist/utils/__tests__/blocked-address.test.js +0 -23
  118. package/dist/utils/__tests__/blocked-address.test.js.map +0 -1
  119. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  120. package/dist/utils/__tests__/logger.test.js +0 -28
  121. package/dist/utils/__tests__/logger.test.js.map +0 -1
  122. package/dist/utils/__tests__/utils.test.d.ts +0 -1
  123. package/dist/utils/__tests__/utils.test.js +0 -21
  124. package/dist/utils/__tests__/utils.test.js.map +0 -1
@@ -1,385 +0,0 @@
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 chai_1 = __importDefault(require("chai"));
7
- const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
8
- const sinon_1 = __importDefault(require("sinon"));
9
- const dop_engine_v3_1 = require("dop-engine-v3");
10
- const dop_sharedmodels_v3_1 = require("dop-sharedmodels-v3");
11
- const setup_test_1 = require("../../../tests/setup.test");
12
- const mocks_test_1 = require("../../../tests/mocks.test");
13
- const wallets_1 = require("../../dop/wallets/wallets");
14
- const proof_cache_1 = require("../proof-cache");
15
- const tx_cross_contract_calls_1 = require("../tx-cross-contract-calls");
16
- const formatted_relay_adapt_error_logs_json_1 = __importDefault(require("./json/formatted-relay-adapt-error-logs.json"));
17
- const ethers_1 = require("ethers");
18
- const helper_test_1 = require("../../../tests/helper.test");
19
- let gasEstimateStub;
20
- let dopProveStub;
21
- let dopDummyProveStub;
22
- let relayAdaptPopulateCrossContractCalls;
23
- let relayAdaptGasEstimateStub;
24
- let addDecryptDataSpy;
25
- let erc20NoteSpy;
26
- let dopWallet;
27
- let broadcasterFeeERC20AmountRecipient;
28
- const polygonRelayAdaptContract = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.Polygon].relayAdaptContract;
29
- chai_1.default.use(chai_as_promised_1.default);
30
- const { expect } = chai_1.default;
31
- const txidVersion = (0, helper_test_1.getTestTXIDVersion)();
32
- const mockERC20TokenData0 = (0, dop_engine_v3_1.getTokenDataERC20)(mocks_test_1.MOCK_TOKEN_AMOUNTS[0].tokenAddress);
33
- const mockERC20TokenData1 = (0, dop_engine_v3_1.getTokenDataERC20)(mocks_test_1.MOCK_TOKEN_AMOUNTS[1].tokenAddress);
34
- const mockNFTTokenData0 = (0, tx_cross_contract_calls_1.createNFTTokenDataFromDopNFTAmount)(mocks_test_1.MOCK_NFT_AMOUNTS[0]);
35
- const mockNFTTokenData1 = (0, tx_cross_contract_calls_1.createNFTTokenDataFromDopNFTAmount)(mocks_test_1.MOCK_NFT_AMOUNTS[1]);
36
- const mockCrossContractCalls = [
37
- {
38
- to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
39
- data: '0x0789',
40
- value: BigInt('0x01'),
41
- },
42
- {
43
- to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
44
- data: '0x9789',
45
- value: BigInt('0x02'),
46
- },
47
- ];
48
- const MOCK_TOKEN_AMOUNTS_DIFFERENT = [
49
- {
50
- tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS,
51
- amount: 100n,
52
- },
53
- {
54
- tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS_2,
55
- amount: 300n,
56
- },
57
- ];
58
- const overallBatchMinGasPrice = BigInt('0x1000');
59
- const minGasLimit = dop_engine_v3_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;
60
- const gasDetails = {
61
- evmGasType: dop_sharedmodels_v3_1.EVMGasType.Type1,
62
- gasEstimate: 2000n,
63
- gasPrice: overallBatchMinGasPrice,
64
- };
65
- const stubRelayAdaptGasEstimate = () => {
66
- relayAdaptGasEstimateStub = sinon_1.default.stub(dop_engine_v3_1.RelayAdaptVersionedSmartContracts, 'estimateGasWithErrorHandler').resolves(BigInt('200'));
67
- };
68
- const stubGasEstimateSuccess = () => {
69
- gasEstimateStub = sinon_1.default.stub(ethers_1.FallbackProvider.prototype, 'estimateGas').resolves(BigInt('200'));
70
- };
71
- const stubRelayAdaptGasEstimateFailure = () => {
72
- relayAdaptGasEstimateStub = sinon_1.default.stub(dop_engine_v3_1.RelayAdaptVersionedSmartContracts, 'estimateGasWithErrorHandler').rejects(new Error('RelayAdapt multicall failed at index UNKNOWN.'));
73
- };
74
- const spyOnSetDecrypt = () => {
75
- addDecryptDataSpy = sinon_1.default.spy(dop_engine_v3_1.TransactionBatch.prototype, 'addDecryptData');
76
- };
77
- describe('tx-cross-contract-calls', () => {
78
- before(async function run() {
79
- this.timeout(60000);
80
- await (0, setup_test_1.initTestEngine)();
81
- await (0, setup_test_1.initTestEngineNetworks)(dop_sharedmodels_v3_1.NetworkName.Polygon, mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_POLYGON);
82
- const dopWalletInfo = await (0, wallets_1.createDopWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
83
- if (!(0, dop_sharedmodels_v3_1.isDefined)(dopWalletInfo)) {
84
- throw new Error('Expected dopWalletInfo');
85
- }
86
- dopWallet = (0, wallets_1.fullWalletForID)(dopWalletInfo.id);
87
- const broadcasterWalletInfo = await (0, wallets_1.createDopWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
88
- if (!(0, dop_sharedmodels_v3_1.isDefined)(broadcasterWalletInfo)) {
89
- throw new Error('Expected broadcasterWalletInfo');
90
- }
91
- const broadcasterDopAddress = broadcasterWalletInfo.dopAddress;
92
- broadcasterFeeERC20AmountRecipient = {
93
- ...mocks_test_1.MOCK_TOKEN_FEE,
94
- recipientAddress: broadcasterDopAddress,
95
- };
96
- dopProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateTransactions').resolves({
97
- provedTransactions: [
98
- {
99
- nullifiers: mocks_test_1.MOCK_NULLIFIERS,
100
- },
101
- ],
102
- preTransactionPOIsPerTxidLeafPerList: {},
103
- });
104
- dopDummyProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateDummyTransactions').resolves([
105
- {
106
- txidVersion,
107
- commitments: mocks_test_1.MOCK_COMMITMENTS,
108
- boundParams: (0, helper_test_1.isV2Test)() ? mocks_test_1.MOCK_BOUND_PARAMS_V2 : mocks_test_1.MOCK_BOUND_PARAMS_V3,
109
- nullifiers: mocks_test_1.MOCK_NULLIFIERS,
110
- },
111
- ]);
112
- relayAdaptPopulateCrossContractCalls = sinon_1.default.stub(dop_engine_v3_1.RelayAdaptVersionedSmartContracts, 'populateCrossContractCalls').resolves({ data: '0x0123' });
113
- });
114
- afterEach(() => {
115
- gasEstimateStub?.restore();
116
- addDecryptDataSpy?.restore();
117
- erc20NoteSpy?.restore();
118
- relayAdaptGasEstimateStub?.restore();
119
- });
120
- after(async () => {
121
- dopProveStub.restore();
122
- dopDummyProveStub.restore();
123
- relayAdaptPopulateCrossContractCalls.restore();
124
- await (0, setup_test_1.closeTestEngine)();
125
- });
126
- // GAS ESTIMATE
127
- it('Should get gas estimates for valid cross contract calls', async () => {
128
- stubRelayAdaptGasEstimate();
129
- spyOnSetDecrypt();
130
- const rsp = await (0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
131
- minGasLimit);
132
- expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;
133
- expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal((0, helper_test_1.isV2Test)()
134
- ? mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2
135
- : mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3);
136
- expect(addDecryptDataSpy.called).to.be.true;
137
- expect(addDecryptDataSpy.args).to.deep.equal([
138
- [
139
- {
140
- toAddress: polygonRelayAdaptContract,
141
- tokenData: mockERC20TokenData0,
142
- value: BigInt('0x0100'),
143
- allowOverride: false,
144
- },
145
- ],
146
- [
147
- {
148
- toAddress: polygonRelayAdaptContract,
149
- tokenData: mockERC20TokenData1,
150
- value: BigInt('0x0200'),
151
- allowOverride: false,
152
- },
153
- ],
154
- [
155
- {
156
- toAddress: polygonRelayAdaptContract,
157
- tokenData: mockNFTTokenData0,
158
- value: BigInt('1'),
159
- allowOverride: false,
160
- },
161
- ],
162
- [
163
- {
164
- toAddress: polygonRelayAdaptContract,
165
- tokenData: mockNFTTokenData1,
166
- value: BigInt('2'),
167
- allowOverride: false,
168
- },
169
- ],
170
- [
171
- {
172
- toAddress: polygonRelayAdaptContract,
173
- tokenData: mockERC20TokenData0,
174
- value: BigInt('0x0100'),
175
- allowOverride: false,
176
- },
177
- ],
178
- [
179
- {
180
- toAddress: polygonRelayAdaptContract,
181
- tokenData: mockERC20TokenData1,
182
- value: BigInt('0x0200'),
183
- allowOverride: false,
184
- },
185
- ],
186
- [
187
- {
188
- toAddress: polygonRelayAdaptContract,
189
- tokenData: mockNFTTokenData0,
190
- value: BigInt('1'),
191
- allowOverride: false,
192
- },
193
- ],
194
- [
195
- {
196
- toAddress: polygonRelayAdaptContract,
197
- tokenData: mockNFTTokenData1,
198
- value: BigInt('2'),
199
- allowOverride: false,
200
- },
201
- ], // run 2 - nft 1
202
- ]);
203
- // Add 9000 for the dummy tx variance
204
- // expect(rsp.gasEstimate).to.equal(9000n + 280n);
205
- expect(rsp.gasEstimate).to.equal(3200000n); // Cross Contract Minimum
206
- }).timeout(10000);
207
- it('Should get gas estimates for valid cross contract calls, public wallet', async () => {
208
- stubRelayAdaptGasEstimate();
209
- spyOnSetDecrypt();
210
- const rsp = await (0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, true, // sendWithPublicWallet
211
- minGasLimit);
212
- expect(rsp.broadcasterFeeCommitment).to.be.undefined;
213
- expect(addDecryptDataSpy.called).to.be.true;
214
- expect(addDecryptDataSpy.args).to.deep.equal([
215
- [
216
- {
217
- toAddress: polygonRelayAdaptContract,
218
- tokenData: mockERC20TokenData0,
219
- value: BigInt('0x0100'),
220
- allowOverride: false,
221
- },
222
- ],
223
- [
224
- {
225
- toAddress: polygonRelayAdaptContract,
226
- tokenData: mockERC20TokenData1,
227
- value: BigInt('0x0200'),
228
- allowOverride: false,
229
- },
230
- ],
231
- [
232
- {
233
- toAddress: polygonRelayAdaptContract,
234
- tokenData: mockNFTTokenData0,
235
- value: BigInt('1'),
236
- allowOverride: false,
237
- },
238
- ],
239
- [
240
- {
241
- toAddress: polygonRelayAdaptContract,
242
- tokenData: mockNFTTokenData1,
243
- value: BigInt('2'),
244
- allowOverride: false,
245
- },
246
- ], // run 1 - nft 1
247
- ]);
248
- // Add 9000 for the dummy tx variance
249
- // expect(rsp.gasEstimate).to.equal(9000n + 280n);
250
- expect(rsp.gasEstimate).to.equal(3200000n); // Cross Contract Minimum
251
- }).timeout(10000);
252
- it('Should error on gas estimates for invalid cross contract calls', async () => {
253
- stubGasEstimateSuccess();
254
- await expect((0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, [{ data: 'abc' }], // Invalid
255
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
256
- minGasLimit)).rejectedWith(`Cross-contract calls require to and data fields.`);
257
- });
258
- it('Should error on cross contract calls gas estimate for ethers rejections', async () => {
259
- stubRelayAdaptGasEstimateFailure();
260
- await expect((0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
261
- minGasLimit)).rejectedWith('RelayAdapt multicall failed at index UNKNOWN.');
262
- });
263
- // PROVE AND SEND
264
- it('Should populate tx for valid cross contract calls', async () => {
265
- stubGasEstimateSuccess();
266
- (0, proof_cache_1.setCachedProvedTransaction)(undefined);
267
- spyOnSetDecrypt();
268
- await (0, tx_cross_contract_calls_1.generateCrossContractCallsProof)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
269
- overallBatchMinGasPrice, minGasLimit, () => { });
270
- expect(addDecryptDataSpy.called).to.be.true;
271
- expect(addDecryptDataSpy.args).to.deep.equal([
272
- [
273
- {
274
- toAddress: polygonRelayAdaptContract,
275
- tokenData: mockERC20TokenData0,
276
- value: BigInt('0x0100'),
277
- allowOverride: false,
278
- },
279
- ],
280
- [
281
- {
282
- toAddress: polygonRelayAdaptContract,
283
- tokenData: mockERC20TokenData1,
284
- value: BigInt('0x0200'),
285
- allowOverride: false,
286
- },
287
- ],
288
- [
289
- {
290
- toAddress: polygonRelayAdaptContract,
291
- tokenData: mockNFTTokenData0,
292
- value: BigInt('1'),
293
- allowOverride: false,
294
- },
295
- ],
296
- [
297
- {
298
- toAddress: polygonRelayAdaptContract,
299
- tokenData: mockNFTTokenData1,
300
- value: BigInt('2'),
301
- allowOverride: false,
302
- },
303
- ],
304
- [
305
- {
306
- toAddress: polygonRelayAdaptContract,
307
- tokenData: mockERC20TokenData0,
308
- value: BigInt('0x0100'),
309
- allowOverride: false,
310
- },
311
- ],
312
- [
313
- {
314
- toAddress: polygonRelayAdaptContract,
315
- tokenData: mockERC20TokenData1,
316
- value: BigInt('0x0200'),
317
- allowOverride: false,
318
- },
319
- ],
320
- [
321
- {
322
- toAddress: polygonRelayAdaptContract,
323
- tokenData: mockNFTTokenData0,
324
- value: BigInt('1'),
325
- allowOverride: false,
326
- },
327
- ],
328
- [
329
- {
330
- toAddress: polygonRelayAdaptContract,
331
- tokenData: mockNFTTokenData1,
332
- value: BigInt('2'),
333
- allowOverride: false,
334
- },
335
- ], // actual proof - nft 1
336
- ]);
337
- const populateResponse = await (0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
338
- overallBatchMinGasPrice, gasDetails);
339
- expect(populateResponse.nullifiers).to.deep.equal([
340
- '0x0000000000000000000000000000000000000000000000000000000000000001',
341
- '0x0000000000000000000000000000000000000000000000000000000000000002',
342
- ]);
343
- const { transaction } = populateResponse;
344
- expect(transaction.nonce).to.equal(undefined);
345
- expect(transaction.gasPrice?.toString()).to.equal('4096');
346
- expect(transaction.gasLimit).to.equal(2400n);
347
- expect(transaction.value?.toString()).to.equal(undefined);
348
- expect(transaction.data).to.equal('0x0123');
349
- expect(transaction.to).to.equal(undefined);
350
- expect(transaction.chainId).to.equal(undefined);
351
- expect(transaction.type).to.equal(1);
352
- });
353
- it('Should error on populate tx for invalid cross contract calls', async () => {
354
- stubGasEstimateSuccess();
355
- await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, MOCK_TOKEN_AMOUNTS_DIFFERENT, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, [{ data: '123' }], // Invalid
356
- broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
357
- overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
358
- });
359
- it('Should error on populate cross contract calls tx for unproved transaction', async () => {
360
- stubGasEstimateSuccess();
361
- (0, proof_cache_1.setCachedProvedTransaction)(undefined);
362
- await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
363
- overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
364
- });
365
- it('Should error on populate cross contract calls tx when params changed (invalid cached proof)', async () => {
366
- stubGasEstimateSuccess();
367
- await (0, tx_cross_contract_calls_1.generateCrossContractCallsProof)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
368
- overallBatchMinGasPrice, minGasLimit, () => { });
369
- await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, MOCK_TOKEN_AMOUNTS_DIFFERENT, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
370
- overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
371
- });
372
- it('Should decode and parse relay adapt error logs (from failed Sushi V2 LP removal)', () => {
373
- const transactionError = (0, tx_cross_contract_calls_1.getRelayAdaptTransactionError)(txidVersion, formatted_relay_adapt_error_logs_json_1.default);
374
- expect(transactionError).to.equal('ds-math-sub-underflow');
375
- });
376
- it('Should parse relay adapt log revert data', () => {
377
- const transactionError = (0, tx_cross_contract_calls_1.parseRelayAdaptReturnValue)(txidVersion, `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001564732d6d6174682d7375622d756e646572666c6f77000000000000000000000000000000000000000000000000000000000000000000000000000000`);
378
- expect(transactionError).to.equal('ds-math-sub-underflow');
379
- });
380
- it('Should parse relay adapt revert data from dop cookbook', () => {
381
- const transactionError = (0, tx_cross_contract_calls_1.parseRelayAdaptReturnValue)(txidVersion, `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002d52656c617941646170743a205265667573696e6720746f2063616c6c205261696c67756e20636f6e747261637400000000000000000000000000000000000000`);
382
- expect(transactionError).to.equal('RelayAdapt: Refusing to call Dop contract');
383
- });
384
- });
385
- //# sourceMappingURL=tx-cross-contract-calls.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-cross-contract-calls.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-cross-contract-calls.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,kDAAmD;AACnD,iDAQuB;AACvB,6DAQ6B;AAC7B,0DAImC;AACnC,0DAoBmC;AACnC,uDAGmC;AACnC,gDAA4D;AAC5D,wEAOoC;AACpC,yHAAwF;AACxF,mCAA+D;AAC/D,4DAA0E;AAE1E,IAAI,eAA0B,CAAC;AAC/B,IAAI,YAAuB,CAAC;AAC5B,IAAI,iBAA4B,CAAC;AACjC,IAAI,oCAA+C,CAAC;AACpD,IAAI,yBAAoC,CAAC;AACzC,IAAI,iBAA2B,CAAC;AAChC,IAAI,YAAsB,CAAC;AAE3B,IAAI,SAAoB,CAAC;AACzB,IAAI,kCAA2D,CAAC;AAEhE,MAAM,yBAAyB,GAC7B,oCAAc,CAAC,iCAAW,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC;AAEzD,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,MAAM,WAAW,GAAG,IAAA,gCAAkB,GAAE,CAAC;AAEzC,MAAM,mBAAmB,GAAG,IAAA,iCAAiB,EAC3C,+BAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,CACnC,CAAC;AACF,MAAM,mBAAmB,GAAG,IAAA,iCAAiB,EAC3C,+BAAkB,CAAC,CAAC,CAAC,CAAC,YAAY,CACnC,CAAC;AACF,MAAM,iBAAiB,GAAG,IAAA,4DAAkC,EAC1D,6BAAgB,CAAC,CAAC,CAAC,CACpB,CAAC;AACF,MAAM,iBAAiB,GAAG,IAAA,4DAAkC,EAC1D,6BAAgB,CAAC,CAAC,CAAC,CACpB,CAAC;AAEF,MAAM,sBAAsB,GAA0B;IACpD;QACE,EAAE,EAAE,oCAAuB;QAC3B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;KACtB;IACD;QACE,EAAE,EAAE,oCAAuB;QAC3B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,4BAA4B,GAAqB;IACrD;QACE,YAAY,EAAE,+BAAkB;QAChC,MAAM,EAAE,IAAI;KACb;IACD;QACE,YAAY,EAAE,iCAAoB;QAClC,MAAM,EAAE,IAAI;KACb;CACF,CAAC;AAEF,MAAM,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEjD,MAAM,WAAW,GAAG,qEAAqD,CAAC;AAE1E,MAAM,UAAU,GAA0B;IACxC,UAAU,EAAE,gCAAU,CAAC,KAAK;IAC5B,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,uBAAuB;CAClC,CAAC;AAEF,MAAM,yBAAyB,GAAG,GAAG,EAAE;IACrC,yBAAyB,GAAG,eAAK,CAAC,IAAI,CACpC,iDAAiC,EACjC,6BAA6B,CAC9B,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;IAClC,eAAe,GAAG,eAAK,CAAC,IAAI,CAC1B,yBAAgB,CAAC,SAAS,EAC1B,aAAa,CACd,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,GAAG,EAAE;IAC5C,yBAAyB,GAAG,eAAK,CAAC,IAAI,CACpC,iDAAiC,EACjC,6BAA6B,CAC9B,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE;IAC3B,iBAAiB,GAAG,eAAK,CAAC,GAAG,CAAC,gCAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,CAAC,KAAK,UAAU,GAAG;QACvB,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;QACrB,MAAM,IAAA,2BAAc,GAAE,CAAC;QACvB,MAAM,IAAA,mCAAsB,EAC1B,iCAAW,CAAC,OAAO,EACnB,uDAA0C,CAC3C,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAA,yBAAe,EACzC,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,+BAAS,EAAC,aAAa,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;QACD,SAAS,GAAG,IAAA,yBAAe,EAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE9C,MAAM,qBAAqB,GAAG,MAAM,IAAA,yBAAe,EACjD,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,+BAAS,EAAC,qBAAqB,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,UAAU,CAAC;QAE/D,kCAAkC,GAAG;YACnC,GAAG,2BAAc;YACjB,gBAAgB,EAAE,qBAAqB;SACxC,CAAC;QAEF,YAAY,GAAG,eAAK,CAAC,IAAI,CACvB,gCAAgB,CAAC,SAAS,EAC1B,sBAAsB,CACvB,CAAC,QAAQ,CAAC;YACT,kBAAkB,EAAE;gBAClB;oBACE,UAAU,EAAE,4BAAe;iBAC5B;aAC+C;YAClD,oCAAoC,EAAE,EAAE;SACzC,CAAC,CAAC;QACH,iBAAiB,GAAG,eAAK,CAAC,IAAI,CAC5B,gCAAgB,CAAC,SAAS,EAC1B,2BAA2B,CAC5B,CAAC,QAAQ,CAAC;YACT;gBACE,WAAW;gBACX,WAAW,EAAE,6BAAgB;gBAC7B,WAAW,EAAE,IAAA,sBAAQ,GAAE,CAAC,CAAC,CAAC,iCAAoB,CAAC,CAAC,CAAC,iCAAoB;gBACrE,UAAU,EAAE,4BAAe;aAC5B;SAC+C,CAAC,CAAC;QACpD,oCAAoC,GAAG,eAAK,CAAC,IAAI,CAC/C,iDAAiC,EACjC,4BAA4B,CAC7B,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAyB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,EAAE,OAAO,EAAE,CAAC;QAC3B,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAC7B,YAAY,EAAE,OAAO,EAAE,CAAC;QACxB,yBAAyB,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,YAAY,CAAC,OAAO,EAAE,CAAC;QACvB,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAC5B,oCAAoC,CAAC,OAAO,EAAE,CAAC;QAC/C,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,eAAe;IAEf,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,yBAAyB,EAAE,CAAC;QAC5B,eAAe,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,IAAA,kEAAwC,EACxD,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,2DAA8C,EAC9C,mCAAsB,EACtB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzD,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACtE,IAAA,sBAAQ,GAAE;YACR,CAAC,CAAC,oEAAuD;YACzD,CAAC,CAAC,oEAAuD,CAC5D,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF,EAAE,gBAAgB;SACpB,CAAC,CAAC;QACH,qCAAqC;QACrC,kDAAkD;QAClD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAU,CAAC,CAAC,CAAC,yBAAyB;IACzE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,yBAAyB,EAAE,CAAC;QAC5B,eAAe,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,IAAA,kEAAwC,EACxD,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,2DAA8C,EAC9C,mCAAsB,EACtB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,CACZ,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF,EAAE,gBAAgB;SACpB,CAAC,CAAC;QACH,qCAAqC;QACrC,kDAAkD;QAClD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAU,CAAC,CAAC,CAAC,yBAAyB;IACzE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,sBAAsB,EAAE,CAAC;QACzB,MAAM,MAAM,CACV,IAAA,kEAAwC,EACtC,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAyB,CAAC,EAAE,UAAU;QACpD,2DAA8C,EAC9C,mCAAsB,EACtB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,CACZ,CACF,CAAC,YAAY,CAAC,kDAAkD,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,gCAAgC,EAAE,CAAC;QACnC,MAAM,MAAM,CACV,IAAA,kEAAwC,EACtC,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,2DAA8C,EAC9C,mCAAsB,EACtB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,CACZ,CACF,CAAC,YAAY,CAAC,+CAA+C,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,iBAAiB;IAEjB,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,sBAAsB,EAAE,CAAC;QACzB,IAAA,wCAA0B,EAAC,SAAS,CAAC,CAAC;QACtC,eAAe,EAAE,CAAC;QAClB,MAAM,IAAA,yDAA+B,EACnC,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,WAAW,EACX,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,mBAAmB;oBAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACvB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF;YACD;gBACE;oBACE,SAAS,EAAE,yBAAyB;oBACpC,SAAS,EAAE,iBAAiB;oBAC5B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,aAAa,EAAE,KAAK;iBACrB;aACF,EAAE,uBAAuB;SAC3B,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,IAAA,0DAAgC,EAC7D,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,UAAU,CACX,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAChD,oEAAoE;YACpE,oEAAoE;SACrE,CAAC,CAAC;QAEH,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC;QAEzC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,sBAAsB,EAAE,CAAC;QACzB,MAAM,MAAM,CACV,IAAA,0DAAgC,EAC9B,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,4BAA4B,EAC5B,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAyB,CAAC,EAAE,UAAU;QACpD,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,UAAU,CACX,CACF,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,sBAAsB,EAAE,CAAC;QACzB,IAAA,wCAA0B,EAAC,SAAS,CAAC,CAAC;QACtC,MAAM,MAAM,CACV,IAAA,0DAAgC,EAC9B,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,UAAU,CACX,CACF,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,sBAAsB,EAAE,CAAC;QACzB,MAAM,IAAA,yDAA+B,EACnC,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,mCAAsB,EACtB,+BAAkB,EAClB,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,WAAW,EACX,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;QACF,MAAM,MAAM,CACV,IAAA,0DAAgC,EAC9B,WAAW,EACX,iCAAW,CAAC,OAAO,EACnB,SAAS,CAAC,EAAE,EACZ,4BAA4B,EAC5B,6BAAgB,EAChB,kCAAqB,EACrB,uCAA0B,EAC1B,sBAAsB,EACtB,kCAAkC,EAClC,KAAK,EAAE,uBAAuB;QAC9B,uBAAuB,EACvB,UAAU,CACX,CACF,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,gBAAgB,GAAG,IAAA,uDAA6B,EACpD,WAAW,EACX,+CAA4B,CAC7B,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,gBAAgB,GAAG,IAAA,oDAA0B,EACjD,WAAW,EACX,4cAA4c,CAC7c,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,gBAAgB,GAAG,IAAA,oDAA0B,EACjD,WAAW,EACX,4UAA4U,CAC7U,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAC/B,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon, { SinonStub, SinonSpy } from 'sinon';\nimport {\n DopWallet,\n TransactionBatch,\n getTokenDataERC20,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n TransactionStructV2,\n TransactionStructV3,\n RelayAdaptVersionedSmartContracts,\n} from 'dop-engine-v3';\nimport {\n DopERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n EVMGasType,\n DopERC20AmountRecipient,\n TransactionGasDetails,\n isDefined,\n} from 'dop-sharedmodels-v3';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n MOCK_BOUND_PARAMS_V2,\n MOCK_BOUND_PARAMS_V3,\n MOCK_COMMITMENTS,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ERC20_RECIPIENTS,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_POLYGON,\n MOCK_FEE_TOKEN_DETAILS,\n MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2,\n MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n MOCK_MNEMONIC,\n MOCK_NFT_AMOUNTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n MOCK_NULLIFIERS,\n MOCK_TOKEN_ADDRESS,\n MOCK_TOKEN_ADDRESS_2,\n MOCK_TOKEN_AMOUNTS,\n MOCK_TOKEN_FEE,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n} from '../../../tests/mocks.test';\nimport {\n createDopWallet,\n fullWalletForID,\n} from '../../dop/wallets/wallets';\nimport { setCachedProvedTransaction } from '../proof-cache';\nimport {\n createNFTTokenDataFromDopNFTAmount,\n gasEstimateForUnprovenCrossContractCalls,\n generateCrossContractCallsProof,\n getRelayAdaptTransactionError,\n parseRelayAdaptReturnValue,\n populateProvedCrossContractCalls,\n} from '../tx-cross-contract-calls';\nimport FormattedRelayAdaptErrorLogs from './json/formatted-relay-adapt-error-logs.json';\nimport { ContractTransaction, FallbackProvider } from 'ethers';\nimport { getTestTXIDVersion, isV2Test } from '../../../tests/helper.test';\n\nlet gasEstimateStub: SinonStub;\nlet dopProveStub: SinonStub;\nlet dopDummyProveStub: SinonStub;\nlet relayAdaptPopulateCrossContractCalls: SinonStub;\nlet relayAdaptGasEstimateStub: SinonStub;\nlet addDecryptDataSpy: SinonSpy;\nlet erc20NoteSpy: SinonSpy;\n\nlet dopWallet: DopWallet;\nlet broadcasterFeeERC20AmountRecipient: DopERC20AmountRecipient;\n\nconst polygonRelayAdaptContract =\n NETWORK_CONFIG[NetworkName.Polygon].relayAdaptContract;\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst txidVersion = getTestTXIDVersion();\n\nconst mockERC20TokenData0 = getTokenDataERC20(\n MOCK_TOKEN_AMOUNTS[0].tokenAddress,\n);\nconst mockERC20TokenData1 = getTokenDataERC20(\n MOCK_TOKEN_AMOUNTS[1].tokenAddress,\n);\nconst mockNFTTokenData0 = createNFTTokenDataFromDopNFTAmount(\n MOCK_NFT_AMOUNTS[0],\n);\nconst mockNFTTokenData1 = createNFTTokenDataFromDopNFTAmount(\n MOCK_NFT_AMOUNTS[1],\n);\n\nconst mockCrossContractCalls: ContractTransaction[] = [\n {\n to: MOCK_ETH_WALLET_ADDRESS,\n data: '0x0789',\n value: BigInt('0x01'),\n },\n {\n to: MOCK_ETH_WALLET_ADDRESS,\n data: '0x9789',\n value: BigInt('0x02'),\n },\n];\n\nconst MOCK_TOKEN_AMOUNTS_DIFFERENT: DopERC20Amount[] = [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: 100n,\n },\n {\n tokenAddress: MOCK_TOKEN_ADDRESS_2,\n amount: 300n,\n },\n];\n\nconst overallBatchMinGasPrice = BigInt('0x1000');\n\nconst minGasLimit = MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\nconst gasDetails: TransactionGasDetails = {\n evmGasType: EVMGasType.Type1,\n gasEstimate: 2000n,\n gasPrice: overallBatchMinGasPrice,\n};\n\nconst stubRelayAdaptGasEstimate = () => {\n relayAdaptGasEstimateStub = Sinon.stub(\n RelayAdaptVersionedSmartContracts,\n 'estimateGasWithErrorHandler',\n ).resolves(BigInt('200'));\n};\n\nconst stubGasEstimateSuccess = () => {\n gasEstimateStub = Sinon.stub(\n FallbackProvider.prototype,\n 'estimateGas',\n ).resolves(BigInt('200'));\n};\n\nconst stubRelayAdaptGasEstimateFailure = () => {\n relayAdaptGasEstimateStub = Sinon.stub(\n RelayAdaptVersionedSmartContracts,\n 'estimateGasWithErrorHandler',\n ).rejects(new Error('RelayAdapt multicall failed at index UNKNOWN.'));\n};\n\nconst spyOnSetDecrypt = () => {\n addDecryptDataSpy = Sinon.spy(TransactionBatch.prototype, 'addDecryptData');\n};\n\ndescribe('tx-cross-contract-calls', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks(\n NetworkName.Polygon,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_POLYGON,\n );\n\n const dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n dopWallet = fullWalletForID(dopWalletInfo.id);\n\n const broadcasterWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(broadcasterWalletInfo)) {\n throw new Error('Expected broadcasterWalletInfo');\n }\n const broadcasterDopAddress = broadcasterWalletInfo.dopAddress;\n\n broadcasterFeeERC20AmountRecipient = {\n ...MOCK_TOKEN_FEE,\n recipientAddress: broadcasterDopAddress,\n };\n\n dopProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateTransactions',\n ).resolves({\n provedTransactions: [\n {\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV2 | TransactionStructV3)[],\n preTransactionPOIsPerTxidLeafPerList: {},\n });\n dopDummyProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateDummyTransactions',\n ).resolves([\n {\n txidVersion,\n commitments: MOCK_COMMITMENTS,\n boundParams: isV2Test() ? MOCK_BOUND_PARAMS_V2 : MOCK_BOUND_PARAMS_V3,\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV2 | TransactionStructV3)[]);\n relayAdaptPopulateCrossContractCalls = Sinon.stub(\n RelayAdaptVersionedSmartContracts,\n 'populateCrossContractCalls',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n });\n afterEach(() => {\n gasEstimateStub?.restore();\n addDecryptDataSpy?.restore();\n erc20NoteSpy?.restore();\n relayAdaptGasEstimateStub?.restore();\n });\n after(async () => {\n dopProveStub.restore();\n dopDummyProveStub.restore();\n relayAdaptPopulateCrossContractCalls.restore();\n await closeTestEngine();\n });\n\n // GAS ESTIMATE\n\n it('Should get gas estimates for valid cross contract calls', async () => {\n stubRelayAdaptGasEstimate();\n spyOnSetDecrypt();\n const rsp = await gasEstimateForUnprovenCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\n );\n expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;\n expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal(\n isV2Test()\n ? MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2\n : MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n );\n expect(addDecryptDataSpy.called).to.be.true;\n expect(addDecryptDataSpy.args).to.deep.equal([\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 1 - erc20 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - erc20 2\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 1 - nft 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 1 - nft 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 2 - erc20 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 2 - erc20 2\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 2 - nft 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 2 - nft 1\n ]);\n // Add 9000 for the dummy tx variance\n // expect(rsp.gasEstimate).to.equal(9000n + 280n);\n expect(rsp.gasEstimate).to.equal(3_200_000n); // Cross Contract Minimum\n }).timeout(10_000);\n\n it('Should get gas estimates for valid cross contract calls, public wallet', async () => {\n stubRelayAdaptGasEstimate();\n spyOnSetDecrypt();\n const rsp = await gasEstimateForUnprovenCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n true, // sendWithPublicWallet\n minGasLimit,\n );\n\n expect(rsp.broadcasterFeeCommitment).to.be.undefined;\n expect(addDecryptDataSpy.called).to.be.true;\n expect(addDecryptDataSpy.args).to.deep.equal([\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 1 - erc20 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - erc20 2\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 1 - nft 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 1 - nft 1\n ]);\n // Add 9000 for the dummy tx variance\n // expect(rsp.gasEstimate).to.equal(9000n + 280n);\n expect(rsp.gasEstimate).to.equal(3_200_000n); // Cross Contract Minimum\n }).timeout(10_000);\n\n it('Should error on gas estimates for invalid cross contract calls', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n [{ data: 'abc' } as ContractTransaction], // Invalid\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\n ),\n ).rejectedWith(`Cross-contract calls require to and data fields.`);\n });\n\n it('Should error on cross contract calls gas estimate for ethers rejections', async () => {\n stubRelayAdaptGasEstimateFailure();\n await expect(\n gasEstimateForUnprovenCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\n ),\n ).rejectedWith('RelayAdapt multicall failed at index UNKNOWN.');\n });\n\n // PROVE AND SEND\n\n it('Should populate tx for valid cross contract calls', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnSetDecrypt();\n await generateCrossContractCallsProof(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n minGasLimit,\n () => {}, // progressCallback\n );\n expect(addDecryptDataSpy.called).to.be.true;\n expect(addDecryptDataSpy.args).to.deep.equal([\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // dummy proof - erc20 token 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // dummy proof - erc20 token 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // dummy proof - nft 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // actual proof - nft 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // actual proof - erc20 token 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // actual proof - erc20 token 1\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // actual proof - nft 0\n [\n {\n toAddress: polygonRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // actual proof - nft 1\n ]);\n const populateResponse = await populateProvedCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails, // gasDetails\n );\n expect(populateResponse.nullifiers).to.deep.equal([\n '0x0000000000000000000000000000000000000000000000000000000000000001',\n '0x0000000000000000000000000000000000000000000000000000000000000002',\n ]);\n\n const { transaction } = populateResponse;\n\n expect(transaction.nonce).to.equal(undefined);\n expect(transaction.gasPrice?.toString()).to.equal('4096');\n expect(transaction.gasLimit).to.equal(2400n);\n expect(transaction.value?.toString()).to.equal(undefined);\n expect(transaction.data).to.equal('0x0123');\n expect(transaction.to).to.equal(undefined);\n expect(transaction.chainId).to.equal(undefined);\n expect(transaction.type).to.equal(1);\n });\n\n it('Should error on populate tx for invalid cross contract calls', async () => {\n stubGasEstimateSuccess();\n await expect(\n populateProvedCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n [{ data: '123' } as ContractTransaction], // Invalid\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate cross contract calls tx for unproved transaction', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n await expect(\n populateProvedCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate cross contract calls tx when params changed (invalid cached proof)', async () => {\n stubGasEstimateSuccess();\n await generateCrossContractCallsProof(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n minGasLimit,\n () => {}, // progressCallback\n );\n await expect(\n populateProvedCrossContractCalls(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should decode and parse relay adapt error logs (from failed Sushi V2 LP removal)', () => {\n const transactionError = getRelayAdaptTransactionError(\n txidVersion,\n FormattedRelayAdaptErrorLogs,\n );\n expect(transactionError).to.equal('ds-math-sub-underflow');\n });\n\n it('Should parse relay adapt log revert data', () => {\n const transactionError = parseRelayAdaptReturnValue(\n txidVersion,\n `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001564732d6d6174682d7375622d756e646572666c6f77000000000000000000000000000000000000000000000000000000000000000000000000000000`,\n );\n expect(transactionError).to.equal('ds-math-sub-underflow');\n });\n\n it('Should parse relay adapt revert data from dop cookbook', () => {\n const transactionError = parseRelayAdaptReturnValue(\n txidVersion,\n `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002d52656c617941646170743a205265667573696e6720746f2063616c6c205261696c67756e20636f6e747261637400000000000000000000000000000000000000`,\n );\n expect(transactionError).to.equal(\n 'RelayAdapt: Refusing to call Dop contract',\n );\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=tx-decrypt.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-decrypt.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-decrypt.test.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -1,101 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const chai_1 = __importDefault(require("chai"));
30
- const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
31
- const sinon_1 = __importDefault(require("sinon"));
32
- const dop_sharedmodels_v3_1 = require("dop-sharedmodels-v3");
33
- const setup_test_1 = require("../../../tests/setup.test");
34
- const mocks_test_1 = require("../../../tests/mocks.test");
35
- const tx_encrypt_base_token_1 = require("../tx-encrypt-base-token");
36
- const txGasDetailsModule = __importStar(require("../tx-gas-details"));
37
- const wallets_1 = require("../../dop/wallets/wallets");
38
- const dop_engine_v3_1 = require("dop-engine-v3");
39
- const helper_test_1 = require("../../../tests/helper.test");
40
- let getGasEstimateStub;
41
- let gasEstimateStub;
42
- let sendTxStub;
43
- let dopAddress;
44
- const txidVersion = (0, helper_test_1.getTestTXIDVersion)();
45
- const encryptPrivateKey = dop_engine_v3_1.ByteUtils.randomHex(32);
46
- chai_1.default.use(chai_as_promised_1.default);
47
- const { expect } = chai_1.default;
48
- const gasDetails = {
49
- evmGasType: dop_sharedmodels_v3_1.EVMGasType.Type2,
50
- gasEstimate: 1000n,
51
- maxFeePerGas: BigInt('0x1000'),
52
- maxPriorityFeePerGas: BigInt('0x100'),
53
- };
54
- const stubGetGasEstimate = () => {
55
- getGasEstimateStub = sinon_1.default.stub(txGasDetailsModule, 'getGasEstimate').resolves(200n);
56
- };
57
- const stubGetGasEstimateFailure = () => {
58
- getGasEstimateStub = sinon_1.default.stub(txGasDetailsModule, 'getGasEstimate').rejects(new Error('test rejection - gas estimate'));
59
- };
60
- describe('tx-encrypt-base-token', () => {
61
- before(async function run() {
62
- this.timeout(60000);
63
- await (0, setup_test_1.initTestEngine)();
64
- await (0, setup_test_1.initTestEngineNetworks)();
65
- const dopWalletInfo = await (0, wallets_1.createDopWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
66
- dopAddress = dopWalletInfo.dopAddress;
67
- });
68
- afterEach(() => {
69
- gasEstimateStub?.restore();
70
- sendTxStub?.restore();
71
- getGasEstimateStub?.restore();
72
- });
73
- after(async () => {
74
- await (0, setup_test_1.closeTestEngine)();
75
- });
76
- it('Should get gas estimate for valid encrypt base token', async () => {
77
- stubGetGasEstimate();
78
- const rsp = await (0, tx_encrypt_base_token_1.gasEstimateForEncryptBaseToken)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopAddress, encryptPrivateKey, mocks_test_1.MOCK_TOKEN_AMOUNTS[0], mocks_test_1.MOCK_ETH_WALLET_ADDRESS);
79
- expect(rsp.gasEstimate).to.equal(200n);
80
- });
81
- it('Should error on gas estimates for invalid encrypt base token', async () => {
82
- stubGetGasEstimate();
83
- await expect((0, tx_encrypt_base_token_1.gasEstimateForEncryptBaseToken)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, '123456789', encryptPrivateKey, mocks_test_1.MOCK_TOKEN_AMOUNTS[0], mocks_test_1.MOCK_ETH_WALLET_ADDRESS)).rejectedWith('Invalid DOP address.');
84
- });
85
- it('Should error for ethers rejections', async () => {
86
- stubGetGasEstimateFailure();
87
- await expect((0, tx_encrypt_base_token_1.gasEstimateForEncryptBaseToken)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopAddress, encryptPrivateKey, mocks_test_1.MOCK_TOKEN_AMOUNTS[0], mocks_test_1.MOCK_ETH_WALLET_ADDRESS)).rejectedWith('test rejection - gas estimate');
88
- });
89
- it('Should send tx for valid encrypt base token', async () => {
90
- stubGetGasEstimate();
91
- const { transaction } = await (0, tx_encrypt_base_token_1.populateEncryptBaseToken)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopAddress, encryptPrivateKey, mocks_test_1.MOCK_TOKEN_AMOUNTS[0], "", gasDetails);
92
- expect(transaction).to.be.an('object');
93
- expect(transaction.data).to.be.a('string');
94
- expect(transaction.to).to.be.a('string');
95
- });
96
- it('Should error on send tx for invalid encrypt base token', async () => {
97
- stubGetGasEstimate();
98
- await expect((0, tx_encrypt_base_token_1.populateEncryptBaseToken)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, '123456789', encryptPrivateKey, mocks_test_1.MOCK_TOKEN_AMOUNTS[0], "", gasDetails)).rejectedWith('Invalid DOP address.');
99
- });
100
- });
101
- //# sourceMappingURL=tx-encrypt-base-token.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-encrypt-base-token.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-encrypt-base-token.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n NetworkName,\n EVMGasType,\n TransactionGasDetails,\n} from 'dop-sharedmodels-v3';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_MNEMONIC,\n MOCK_TOKEN_AMOUNTS,\n} from '../../../tests/mocks.test';\nimport {\n populateEncryptBaseToken,\n gasEstimateForEncryptBaseToken,\n} from '../tx-encrypt-base-token';\nimport * as txGasDetailsModule from '../tx-gas-details';\nimport { createDopWallet } from '../../dop/wallets/wallets';\nimport { ByteUtils } from 'dop-engine-v3';\nimport { getTestTXIDVersion } from '../../../tests/helper.test';\n\nlet getGasEstimateStub: SinonStub;\nlet gasEstimateStub: SinonStub;\nlet sendTxStub: SinonStub;\nlet dopAddress: string;\n\nconst txidVersion = getTestTXIDVersion();\n\nconst encryptPrivateKey = ByteUtils.randomHex(32);\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst gasDetails: TransactionGasDetails = {\n evmGasType: EVMGasType.Type2,\n gasEstimate: 1000n,\n maxFeePerGas: BigInt('0x1000'),\n maxPriorityFeePerGas: BigInt('0x100'),\n};\n\nconst stubGetGasEstimate = () => {\n getGasEstimateStub = Sinon.stub(\n txGasDetailsModule,\n 'getGasEstimate',\n ).resolves(200n);\n};\n\nconst stubGetGasEstimateFailure = () => {\n getGasEstimateStub = Sinon.stub(txGasDetailsModule, 'getGasEstimate').rejects(\n new Error('test rejection - gas estimate'),\n );\n};\n\ndescribe('tx-encrypt-base-token', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n\n dopAddress = dopWalletInfo.dopAddress;\n });\n afterEach(() => {\n gasEstimateStub?.restore();\n sendTxStub?.restore();\n getGasEstimateStub?.restore();\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should get gas estimate for valid encrypt base token', async () => {\n stubGetGasEstimate();\n const rsp = await gasEstimateForEncryptBaseToken(\n txidVersion,\n NetworkName.Polygon,\n dopAddress,\n encryptPrivateKey,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_ETH_WALLET_ADDRESS,\n );\n expect(rsp.gasEstimate).to.equal(200n);\n });\n\n it('Should error on gas estimates for invalid encrypt base token', async () => {\n stubGetGasEstimate();\n await expect(\n gasEstimateForEncryptBaseToken(\n txidVersion,\n NetworkName.Polygon,\n '123456789',\n encryptPrivateKey,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_ETH_WALLET_ADDRESS,\n ),\n ).rejectedWith('Invalid DOP address.');\n });\n\n it('Should error for ethers rejections', async () => {\n stubGetGasEstimateFailure();\n await expect(\n gasEstimateForEncryptBaseToken(\n txidVersion,\n NetworkName.Polygon,\n dopAddress,\n encryptPrivateKey,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_ETH_WALLET_ADDRESS,\n ),\n ).rejectedWith('test rejection - gas estimate');\n });\n\n it('Should send tx for valid encrypt base token', async () => {\n stubGetGasEstimate();\n const { transaction } = await populateEncryptBaseToken(\n txidVersion,\n NetworkName.Polygon,\n dopAddress,\n encryptPrivateKey,\n MOCK_TOKEN_AMOUNTS[0],\n \"\",\n gasDetails,\n );\n expect(transaction).to.be.an('object');\n expect(transaction.data).to.be.a('string');\n expect(transaction.to).to.be.a('string');\n });\n\n it('Should error on send tx for invalid encrypt base token', async () => {\n stubGetGasEstimate();\n await expect(\n populateEncryptBaseToken(\n txidVersion,\n NetworkName.Polygon,\n '123456789',\n encryptPrivateKey,\n MOCK_TOKEN_AMOUNTS[0],\n \"\",\n gasDetails,\n ),\n ).rejectedWith('Invalid DOP address.');\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=tx-encrypt.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-encrypt.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-encrypt.test.ts"],"names":[],"mappings":"","sourcesContent":[""]}