dop-wallet-v6 1.1.5 → 1.1.7

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 (111) hide show
  1. package/README.md +0 -2
  2. package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
  3. package/dist/services/artifacts/artifact-downloader.js +20 -20
  4. package/dist/services/artifacts/artifact-downloader.js.map +1 -1
  5. package/dist/services/artifacts/artifact-hash.d.ts +1 -2
  6. package/dist/services/artifacts/artifact-hash.js +8 -8
  7. package/dist/services/artifacts/artifact-hash.js.map +1 -1
  8. package/dist/services/artifacts/artifact-store.d.ts +0 -1
  9. package/dist/services/artifacts/artifact-util.d.ts +1 -1
  10. package/dist/services/artifacts/artifact-util.js +18 -26
  11. package/dist/services/artifacts/artifact-util.js.map +1 -1
  12. package/dist/services/artifacts/json/artifact-v2-hashes.json +0 -65
  13. package/dist/services/dop/core/artifacts.d.ts +3 -3
  14. package/dist/services/dop/core/artifacts.js +6 -8
  15. package/dist/services/dop/core/artifacts.js.map +1 -1
  16. package/dist/services/dop/core/engine.d.ts +2 -2
  17. package/dist/services/dop/core/engine.js +13 -16
  18. package/dist/services/dop/core/engine.js.map +1 -1
  19. package/dist/services/dop/core/prover.d.ts +1 -1
  20. package/dist/services/dop/core/prover.js +2 -2
  21. package/dist/services/dop/core/prover.js.map +1 -1
  22. package/dist/services/dop/core/providers.d.ts +3 -3
  23. package/dist/services/dop/core/providers.js +16 -16
  24. package/dist/services/dop/core/providers.js.map +1 -1
  25. package/dist/services/dop/core/shields.d.ts +1 -1
  26. package/dist/services/dop/core/shields.js +2 -2
  27. package/dist/services/dop/core/shields.js.map +1 -1
  28. package/dist/services/dop/history/transaction-history.d.ts +2 -2
  29. package/dist/services/dop/history/transaction-history.js +14 -14
  30. package/dist/services/dop/history/transaction-history.js.map +1 -1
  31. package/dist/services/dop/process/extract-first-note.d.ts +2 -2
  32. package/dist/services/dop/process/extract-first-note.js +15 -15
  33. package/dist/services/dop/process/extract-first-note.js.map +1 -1
  34. package/dist/services/dop/quick-sync/empty-events.d.ts +1 -1
  35. package/dist/services/dop/quick-sync/empty-events.js.map +1 -1
  36. package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +1 -1
  37. package/dist/services/dop/quick-sync/graph-type-formatters.js +15 -15
  38. package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -1
  39. package/dist/services/dop/quick-sync/graphql/index.js +5 -5
  40. package/dist/services/dop/quick-sync/graphql/index.js.map +1 -1
  41. package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +1 -1
  42. package/dist/services/dop/quick-sync/quick-sync-graph.js +17 -17
  43. package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -1
  44. package/dist/services/dop/util/bytes.d.ts +1 -1
  45. package/dist/services/dop/util/bytes.js +7 -7
  46. package/dist/services/dop/util/bytes.js.map +1 -1
  47. package/dist/services/dop/util/commitment.d.ts +2 -1
  48. package/dist/services/dop/util/commitment.js +4 -5
  49. package/dist/services/dop/util/commitment.js.map +1 -1
  50. package/dist/services/dop/util/crypto.d.ts +2 -2
  51. package/dist/services/dop/util/crypto.js +15 -15
  52. package/dist/services/dop/util/crypto.js.map +1 -1
  53. package/dist/services/dop/util/db.d.ts +1 -1
  54. package/dist/services/dop/util/db.js +2 -2
  55. package/dist/services/dop/util/db.js.map +1 -1
  56. package/dist/services/dop/wallets/balance-update.d.ts +2 -2
  57. package/dist/services/dop/wallets/balance-update.js +6 -6
  58. package/dist/services/dop/wallets/balance-update.js.map +1 -1
  59. package/dist/services/dop/wallets/balances.d.ts +2 -2
  60. package/dist/services/dop/wallets/balances.js.map +1 -1
  61. package/dist/services/dop/wallets/wallets.d.ts +2 -4
  62. package/dist/services/dop/wallets/wallets.js +12 -27
  63. package/dist/services/dop/wallets/wallets.js.map +1 -1
  64. package/dist/services/ethers/ethers-util.js +2 -2
  65. package/dist/services/ethers/ethers-util.js.map +1 -1
  66. package/dist/services/transactions/proof-cache.d.ts +1 -1
  67. package/dist/services/transactions/proof-cache.js +16 -16
  68. package/dist/services/transactions/proof-cache.js.map +1 -1
  69. package/dist/services/transactions/tx-cross-contract-calls.d.ts +4 -2
  70. package/dist/services/transactions/tx-cross-contract-calls.js +117 -269
  71. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
  72. package/dist/services/transactions/tx-gas-details.d.ts +1 -1
  73. package/dist/services/transactions/tx-gas-details.js +24 -36
  74. package/dist/services/transactions/tx-gas-details.js.map +1 -1
  75. package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +4 -1
  76. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +88 -187
  77. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
  78. package/dist/services/transactions/tx-generator.d.ts +5 -4
  79. package/dist/services/transactions/tx-generator.js +42 -71
  80. package/dist/services/transactions/tx-generator.js.map +1 -1
  81. package/dist/services/transactions/tx-notes.d.ts +2 -2
  82. package/dist/services/transactions/tx-notes.js +13 -13
  83. package/dist/services/transactions/tx-notes.js.map +1 -1
  84. package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
  85. package/dist/services/transactions/tx-nullifiers.js.map +1 -1
  86. package/dist/services/transactions/tx-proof-transfer.d.ts +3 -4
  87. package/dist/services/transactions/tx-proof-transfer.js +19 -13
  88. package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
  89. package/dist/services/transactions/tx-proof-unshield.d.ts +4 -3
  90. package/dist/services/transactions/tx-proof-unshield.js +87 -146
  91. package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
  92. package/dist/services/transactions/tx-shield-base-token.d.ts +2 -2
  93. package/dist/services/transactions/tx-shield-base-token.js +10 -13
  94. package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
  95. package/dist/services/transactions/tx-shield.d.ts +1 -1
  96. package/dist/services/transactions/tx-shield.js +12 -16
  97. package/dist/services/transactions/tx-shield.js.map +1 -1
  98. package/dist/services/transactions/tx-transfer.d.ts +2 -1
  99. package/dist/services/transactions/tx-transfer.js +16 -55
  100. package/dist/services/transactions/tx-transfer.js.map +1 -1
  101. package/dist/services/transactions/tx-unshield.d.ts +3 -1
  102. package/dist/services/transactions/tx-unshield.js +40 -119
  103. package/dist/services/transactions/tx-unshield.js.map +1 -1
  104. package/dist/utils/blocked-address.js +3 -3
  105. package/dist/utils/blocked-address.js.map +1 -1
  106. package/dist/utils/error.js +2 -2
  107. package/dist/utils/error.js.map +1 -1
  108. package/dist/utils/gas-price.d.ts +1 -1
  109. package/dist/utils/gas-price.js +13 -13
  110. package/dist/utils/gas-price.js.map +1 -1
  111. package/package.json +3 -3
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.populateProvedCrossContractCalls = exports.createNFTTokenDataFromDopNFTAmount = exports.createRelayAdaptUnshieldNFTAmountRecipients = exports.createRelayAdaptUnshieldERC20AmountRecipients = void 0;
4
- const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
3
+ exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.generateCrossContractCallsProof = exports.gasEstimateForUnprovenCrossContractCalls = exports.populateProvedCrossContractCalls = exports.createNFTTokenDataFromDopNFTAmount = exports.createRelayAdaptUnshieldNFTAmountRecipients = exports.createRelayAdaptUnshieldERC20AmountRecipients = void 0;
4
+ const dop_sharedmodel_1 = require("dop-sharedmodel");
5
5
  const providers_1 = require("../dop/core/providers");
6
+ const tx_generator_1 = require("./tx-generator");
6
7
  const proof_cache_1 = require("./proof-cache");
7
8
  const logger_1 = require("../../utils/logger");
8
- const dop_engine_v5_1 = require("dop-engine-v5");
9
+ const dop_engine_1 = require("dop-engine");
9
10
  const blocked_address_1 = require("../../utils/blocked-address");
10
- // import { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';
11
+ const tx_gas_relayer_fee_estimator_1 = require("./tx-gas-relayer-fee-estimator");
11
12
  const error_1 = require("../../utils/error");
12
13
  const createValidCrossContractCalls = (crossContractCalls) => {
13
14
  if (!crossContractCalls.length) {
@@ -21,7 +22,7 @@ const createValidCrossContractCalls = (crossContractCalls) => {
21
22
  const transaction = {
22
23
  to: transactionRequest.to,
23
24
  value: transactionRequest.value,
24
- data: (0, dop_engine_v5_1.hexlify)(transactionRequest.data, true),
25
+ data: (0, dop_engine_1.hexlify)(transactionRequest.data, true),
25
26
  };
26
27
  (0, blocked_address_1.assertNotBlockedAddress)(transaction.to);
27
28
  return transaction;
@@ -64,9 +65,9 @@ const createNFTTokenDataFromDopNFTAmount = (nftAmount) => {
64
65
  // ? bigIntStringToHex(nftAmount.tokenSubID)
65
66
  // : nftAmount.tokenSubID;
66
67
  return {
67
- tokenAddress: (0, dop_engine_v5_1.formatToByteLength)(nftAmount.nftAddress, dop_engine_v5_1.ByteLength.Address, true),
68
+ tokenAddress: (0, dop_engine_1.formatToByteLength)(nftAmount.nftAddress, dop_engine_1.ByteLength.Address, true),
68
69
  tokenType: nftAmount.nftTokenType,
69
- tokenSubID: (0, dop_engine_v5_1.formatToByteLength)(nftAmount.tokenSubID, dop_engine_v5_1.ByteLength.UINT_256, true),
70
+ tokenSubID: (0, dop_engine_1.formatToByteLength)(nftAmount.tokenSubID, dop_engine_1.ByteLength.UINT_256, true),
70
71
  };
71
72
  };
72
73
  exports.createNFTTokenDataFromDopNFTAmount = createNFTTokenDataFromDopNFTAmount;
@@ -78,7 +79,7 @@ const createRelayAdaptShieldNFTRecipients = (relayAdaptShieldNFTRecipients) => {
78
79
  };
79
80
  const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
80
81
  try {
81
- const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, dop_sharedmodel_v5_1.ProofType.CrossContractCalls, dopWalletID, false, // showSenderAddressToRecipient
82
+ const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, dop_sharedmodel_1.ProofType.CrossContractCalls, dopWalletID, false, // showSenderAddressToRecipient
82
83
  undefined, // memoText
83
84
  [], // erc20AmountRecipients
84
85
  [], // nftAmountRecipients
@@ -94,271 +95,118 @@ const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayA
94
95
  }
95
96
  };
96
97
  exports.populateProvedCrossContractCalls = populateProvedCrossContractCalls;
97
- /*
98
- export const gasEstimateForUnprovenCrossContractCalls = async (
99
- networkName: NetworkName,
100
- dopWalletID: string,
101
- encryptionKey: string,
102
- relayAdaptUnshieldERC20Amounts: DopERC20Amount[],
103
- relayAdaptUnshieldNFTAmounts: DopNFTAmount[],
104
- relayAdaptShieldERC20Recipients: DopERC20Recipient[],
105
- relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],
106
- crossContractCalls: ContractTransaction[],
107
- originalGasDetails: TransactionGasDetails,
108
- feeTokenDetails: Optional<FeeTokenDetails>,
109
- sendWithPublicWallet: boolean,
110
- minGasLimit: Optional<bigint>,
111
- valueCheck: bigint
112
- ): Promise<DopTransactionGasEstimateResponse> => {
113
- try {
114
- setCachedProvedTransaction(undefined);
115
-
116
- const overallBatchMinGasPrice = 0n;
117
-
118
- const validCrossContractCalls =
119
- createValidCrossContractCalls(crossContractCalls);
120
-
121
- const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);
122
-
123
- const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =
124
- createRelayAdaptUnshieldERC20AmountRecipients(
125
- networkName,
126
- relayAdaptUnshieldERC20Amounts,
127
- );
128
- const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =
129
- createRelayAdaptUnshieldNFTAmountRecipients(
130
- networkName,
131
- relayAdaptUnshieldNFTAmounts,
132
- );
133
-
134
- const shieldRandom = randomHex(16);
135
- const relayShieldRequests =
136
- await RelayAdaptHelper.generateRelayShieldRequests(
137
- shieldRandom,
138
- relayAdaptShieldERC20Recipients,
139
- createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),
140
- );
141
-
142
- const minimumGasLimit =
143
- minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
144
-
145
- const response = await gasEstimateResponseDummyProofIterativeRelayerFee(
146
- (relayerFeeERC20Amount: Optional<DopERC20Amount>) =>
147
- generateDummyProofTransactions(
148
- ProofType.CrossContractCalls,
149
- networkName,
150
- dopWalletID,
151
- encryptionKey,
152
- false, // showSenderAddressToRecipient
153
- undefined, // memoText
154
- relayAdaptUnshieldERC20AmountRecipients,
155
- relayAdaptUnshieldNFTAmountRecipients,
156
- relayerFeeERC20Amount,
157
- sendWithPublicWallet,
158
- overallBatchMinGasPrice,
159
- valueCheck
160
- ),
161
- async (txs: TransactionStruct[]) => {
162
- const relayAdaptParamsRandom = randomHex(31);
163
-
164
- // TODO: We should add the relay adapt contract gas limit here.
165
- const transaction = await relayAdaptContract.populateCrossContractCalls(
166
- txs,
167
- validCrossContractCalls,
168
- relayShieldRequests,
169
- relayAdaptParamsRandom,
170
- true, // isGasEstimate
171
- !sendWithPublicWallet, // isRelayerTransaction
172
- minimumGasLimit,
173
- );
174
- // Remove gasLimit, we'll set to the minimum below.
175
- // TODO: Remove after callbacks upgrade.
176
- delete transaction.gasLimit;
177
- return transaction;
178
- },
179
- networkName,
180
- dopWalletID,
181
- relayAdaptUnshieldERC20AmountRecipients,
182
- originalGasDetails,
183
- feeTokenDetails,
184
- sendWithPublicWallet,
185
- true, // isCrossContractCall
186
- );
187
-
188
- // TODO: Remove this after callbacks upgrade.
189
- // If gas estimate is under the cross-contract-minimum, replace it with the minimum.
190
- if (response.gasEstimate) {
191
- if (response.gasEstimate < minimumGasLimit) {
192
- response.gasEstimate = minimumGasLimit;
193
- }
98
+ const gasEstimateForUnprovenCrossContractCalls = async (networkName, dopWalletID, encryptionKey, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, originalGasDetails, feeTokenDetails, sendWithPublicWallet, minGasLimit) => {
99
+ try {
100
+ (0, proof_cache_1.setCachedProvedTransaction)(undefined);
101
+ const overallBatchMinGasPrice = 0n;
102
+ const validCrossContractCalls = createValidCrossContractCalls(crossContractCalls);
103
+ const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
104
+ const relayAdaptUnshieldERC20AmountRecipients = (0, exports.createRelayAdaptUnshieldERC20AmountRecipients)(networkName, relayAdaptUnshieldERC20Amounts);
105
+ const relayAdaptUnshieldNFTAmountRecipients = (0, exports.createRelayAdaptUnshieldNFTAmountRecipients)(networkName, relayAdaptUnshieldNFTAmounts);
106
+ const shieldRandom = (0, dop_engine_1.randomHex)(16);
107
+ const relayShieldRequests = await dop_engine_1.RelayAdaptHelper.generateRelayShieldRequests(shieldRandom, relayAdaptShieldERC20Recipients, createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients));
108
+ const minimumGasLimit = minGasLimit ?? dop_engine_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
109
+ const response = await (0, tx_gas_relayer_fee_estimator_1.gasEstimateResponseDummyProofIterativeRelayerFee)((relayerFeeERC20Amount) => (0, tx_generator_1.generateDummyProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
110
+ undefined, // memoText
111
+ relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20Amount, sendWithPublicWallet, overallBatchMinGasPrice), async (txs) => {
112
+ const relayAdaptParamsRandom = (0, dop_engine_1.randomHex)(31);
113
+ // TODO: We should add the relay adapt contract gas limit here.
114
+ const transaction = await relayAdaptContract.populateCrossContractCalls(txs, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, true, // isGasEstimate
115
+ !sendWithPublicWallet, // isRelayerTransaction
116
+ minimumGasLimit);
117
+ // Remove gasLimit, we'll set to the minimum below.
118
+ // TODO: Remove after callbacks upgrade.
119
+ delete transaction.gasLimit;
120
+ return transaction;
121
+ }, networkName, dopWalletID, relayAdaptUnshieldERC20AmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet, true);
122
+ // TODO: Remove this after callbacks upgrade.
123
+ // If gas estimate is under the cross-contract-minimum, replace it with the minimum.
124
+ if (response.gasEstimate) {
125
+ if (response.gasEstimate < minimumGasLimit) {
126
+ response.gasEstimate = minimumGasLimit;
127
+ }
128
+ }
129
+ return response;
130
+ }
131
+ catch (err) {
132
+ throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenCrossContractCalls.name, err);
194
133
  }
195
-
196
- return response;
197
- } catch (err) {
198
- throw reportAndSanitizeError(
199
- gasEstimateForUnprovenCrossContractCalls.name,
200
- err,
201
- );
202
- }
203
134
  };
204
- */
205
- /*
206
- export const generateCrossContractCallsProof = async (
207
- networkName: NetworkName,
208
- dopWalletID: string,
209
- encryptionKey: string,
210
- relayAdaptUnshieldERC20Amounts: DopERC20Amount[],
211
- relayAdaptUnshieldNFTAmounts: DopNFTAmount[],
212
- relayAdaptShieldERC20Recipients: DopERC20Recipient[],
213
- relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],
214
- crossContractCalls: ContractTransaction[],
215
- relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,
216
- sendWithPublicWallet: boolean,
217
- overallBatchMinGasPrice: Optional<bigint>,
218
- minGasLimit: Optional<bigint>,
219
- progressCallback: ProverProgressCallback,
220
- valueCheck: bigint
221
- ): Promise<void> => {
222
- try {
223
- setCachedProvedTransaction(undefined);
224
-
225
- const validCrossContractCalls =
226
- createValidCrossContractCalls(crossContractCalls);
227
-
228
- const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);
229
-
230
- const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =
231
- createRelayAdaptUnshieldERC20AmountRecipients(
232
- networkName,
233
- relayAdaptUnshieldERC20Amounts,
234
- );
235
- const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =
236
- createRelayAdaptUnshieldNFTAmountRecipients(
237
- networkName,
238
- relayAdaptUnshieldNFTAmounts,
239
- );
240
-
241
- // Generate dummy txs for relay adapt params.
242
- const dummyUnshieldTxs = await generateDummyProofTransactions(
243
- ProofType.CrossContractCalls,
244
- networkName,
245
- dopWalletID,
246
- encryptionKey,
247
- false, // showSenderAddressToRecipient
248
- undefined, // memoText
249
- relayAdaptUnshieldERC20AmountRecipients,
250
- relayAdaptUnshieldNFTAmountRecipients,
251
- relayerFeeERC20AmountRecipient,
252
- sendWithPublicWallet,
253
- overallBatchMinGasPrice,
254
- valueCheck
255
- );
256
-
257
- // Generate relay adapt params from dummy transactions.
258
- const shieldRandom = randomHex(16);
259
-
260
- const relayShieldRequests =
261
- await RelayAdaptHelper.generateRelayShieldRequests(
262
- shieldRandom,
263
- relayAdaptShieldERC20Recipients,
264
- createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),
265
- );
266
-
267
- const minimumGasLimit =
268
- minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
269
-
270
- const isRelayerTransaction = !sendWithPublicWallet;
271
- const relayAdaptParamsRandom = randomHex(31);
272
- const relayAdaptParams =
273
- await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(
274
- dummyUnshieldTxs,
275
- validCrossContractCalls,
276
- relayShieldRequests,
277
- relayAdaptParamsRandom,
278
- isRelayerTransaction,
279
- minimumGasLimit,
280
- );
281
- const relayAdaptID: AdaptID = {
282
- contract: relayAdaptContract.address,
283
- parameters: relayAdaptParams,
284
- };
285
-
286
-
287
- // console.log("====== 4",
288
- // ProofType.CrossContractCalls,
289
- // networkName,
290
- // dopWalletID,
291
- // encryptionKey,
292
- // false, // showSenderAddressToRecipient
293
- // undefined, // memoText
294
- // relayAdaptUnshieldERC20AmountRecipients,
295
- // relayAdaptUnshieldNFTAmountRecipients,
296
- // relayerFeeERC20AmountRecipient,
297
- // sendWithPublicWallet,
298
- // relayAdaptID,
299
- // false, // useDummyProof
300
- // overallBatchMinGasPrice,
301
- // progressCallback);
302
-
303
- // Create real transactions with relay adapt params.
304
- const transactions = await generateProofTransactions(
305
- ProofType.CrossContractCalls,
306
- networkName,
307
- dopWalletID,
308
- encryptionKey,
309
- false, // showSenderAddressToRecipient
310
- undefined, // memoText
311
- relayAdaptUnshieldERC20AmountRecipients,
312
- relayAdaptUnshieldNFTAmountRecipients,
313
- relayerFeeERC20AmountRecipient,
314
- sendWithPublicWallet,
315
- relayAdaptID,
316
- false, // useDummyProof
317
- overallBatchMinGasPrice,
318
- progressCallback,
319
- valueCheck
320
- );
321
-
322
- const nullifiers = nullifiersForTransactions(transactions);
323
-
324
- const transaction = await relayAdaptContract.populateCrossContractCalls(
325
- transactions,
326
- validCrossContractCalls,
327
- relayShieldRequests,
328
- relayAdaptParamsRandom,
329
- false, // isGasEstimate
330
- isRelayerTransaction,
331
- minimumGasLimit,
332
- );
333
- delete transaction.from;
334
-
335
- setCachedProvedTransaction({
336
- proofType: ProofType.CrossContractCalls,
337
- dopWalletID,
338
- showSenderAddressToRecipient: false,
339
- memoText: undefined,
340
- erc20AmountRecipients: [],
341
- nftAmountRecipients: [],
342
- relayAdaptUnshieldERC20Amounts,
343
- relayAdaptUnshieldNFTAmounts,
344
- relayAdaptShieldERC20Recipients,
345
- relayAdaptShieldNFTRecipients,
346
- crossContractCalls: validCrossContractCalls,
347
- relayerFeeERC20AmountRecipient,
348
- sendWithPublicWallet,
349
- transaction,
350
- overallBatchMinGasPrice,
351
- nullifiers,
352
- });
353
- } catch (err) {
354
- throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);
355
- }
135
+ exports.gasEstimateForUnprovenCrossContractCalls = gasEstimateForUnprovenCrossContractCalls;
136
+ const generateCrossContractCallsProof = async (networkName, dopWalletID, encryptionKey, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, minGasLimit, progressCallback) => {
137
+ try {
138
+ (0, proof_cache_1.setCachedProvedTransaction)(undefined);
139
+ const validCrossContractCalls = createValidCrossContractCalls(crossContractCalls);
140
+ const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
141
+ const relayAdaptUnshieldERC20AmountRecipients = (0, exports.createRelayAdaptUnshieldERC20AmountRecipients)(networkName, relayAdaptUnshieldERC20Amounts);
142
+ const relayAdaptUnshieldNFTAmountRecipients = (0, exports.createRelayAdaptUnshieldNFTAmountRecipients)(networkName, relayAdaptUnshieldNFTAmounts);
143
+ // Generate dummy txs for relay adapt params.
144
+ const dummyUnshieldTxs = await (0, tx_generator_1.generateDummyProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
145
+ undefined, // memoText
146
+ relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice);
147
+ // Generate relay adapt params from dummy transactions.
148
+ const shieldRandom = (0, dop_engine_1.randomHex)(16);
149
+ const relayShieldRequests = await dop_engine_1.RelayAdaptHelper.generateRelayShieldRequests(shieldRandom, relayAdaptShieldERC20Recipients, createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients));
150
+ const minimumGasLimit = minGasLimit ?? dop_engine_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
151
+ const isRelayerTransaction = !sendWithPublicWallet;
152
+ const relayAdaptParamsRandom = (0, dop_engine_1.randomHex)(31);
153
+ const relayAdaptParams = await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(dummyUnshieldTxs, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, isRelayerTransaction, minimumGasLimit);
154
+ const relayAdaptID = {
155
+ contract: relayAdaptContract.address,
156
+ parameters: relayAdaptParams,
157
+ };
158
+ // console.log("====== 4",
159
+ // ProofType.CrossContractCalls,
160
+ // networkName,
161
+ // dopWalletID,
162
+ // encryptionKey,
163
+ // false, // showSenderAddressToRecipient
164
+ // undefined, // memoText
165
+ // relayAdaptUnshieldERC20AmountRecipients,
166
+ // relayAdaptUnshieldNFTAmountRecipients,
167
+ // relayerFeeERC20AmountRecipient,
168
+ // sendWithPublicWallet,
169
+ // relayAdaptID,
170
+ // false, // useDummyProof
171
+ // overallBatchMinGasPrice,
172
+ // progressCallback);
173
+ // Create real transactions with relay adapt params.
174
+ const transactions = await (0, tx_generator_1.generateProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
175
+ undefined, // memoText
176
+ relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20AmountRecipient, sendWithPublicWallet, relayAdaptID, false, // useDummyProof
177
+ overallBatchMinGasPrice, progressCallback);
178
+ const nullifiers = (0, tx_generator_1.nullifiersForTransactions)(transactions);
179
+ const transaction = await relayAdaptContract.populateCrossContractCalls(transactions, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, false, // isGasEstimate
180
+ isRelayerTransaction, minimumGasLimit);
181
+ delete transaction.from;
182
+ (0, proof_cache_1.setCachedProvedTransaction)({
183
+ proofType: dop_sharedmodel_1.ProofType.CrossContractCalls,
184
+ dopWalletID,
185
+ showSenderAddressToRecipient: false,
186
+ memoText: undefined,
187
+ erc20AmountRecipients: [],
188
+ nftAmountRecipients: [],
189
+ relayAdaptUnshieldERC20Amounts,
190
+ relayAdaptUnshieldNFTAmounts,
191
+ relayAdaptShieldERC20Recipients,
192
+ relayAdaptShieldNFTRecipients,
193
+ crossContractCalls: validCrossContractCalls,
194
+ relayerFeeERC20AmountRecipient,
195
+ sendWithPublicWallet,
196
+ transaction,
197
+ overallBatchMinGasPrice,
198
+ nullifiers,
199
+ });
200
+ }
201
+ catch (err) {
202
+ throw (0, error_1.reportAndSanitizeError)(exports.generateCrossContractCallsProof.name, err);
203
+ }
356
204
  };
357
- */
205
+ exports.generateCrossContractCallsProof = generateCrossContractCallsProof;
358
206
  const getRelayAdaptTransactionError = (receiptLogs) => {
359
207
  try {
360
- const relayAdaptError = dop_engine_v5_1.RelayAdaptContract.getRelayAdaptCallError(receiptLogs);
361
- if ((0, dop_sharedmodel_v5_1.isDefined)(relayAdaptError)) {
208
+ const relayAdaptError = dop_engine_1.RelayAdaptContract.getRelayAdaptCallError(receiptLogs);
209
+ if ((0, dop_sharedmodel_1.isDefined)(relayAdaptError)) {
362
210
  (0, logger_1.sendErrorMessage)(relayAdaptError);
363
211
  return relayAdaptError;
364
212
  }
@@ -371,7 +219,7 @@ const getRelayAdaptTransactionError = (receiptLogs) => {
371
219
  exports.getRelayAdaptTransactionError = getRelayAdaptTransactionError;
372
220
  const parseRelayAdaptReturnValue = (data) => {
373
221
  try {
374
- const relayAdaptErrorParsed = dop_engine_v5_1.RelayAdaptContract.parseRelayAdaptReturnValue(data);
222
+ const relayAdaptErrorParsed = dop_engine_1.RelayAdaptContract.parseRelayAdaptReturnValue(data);
375
223
  if (relayAdaptErrorParsed) {
376
224
  (0, logger_1.sendErrorMessage)(relayAdaptErrorParsed.error);
377
225
  return relayAdaptErrorParsed.error;
@@ -1 +1 @@
1
- {"version":3,"file":"tx-cross-contract-calls.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-cross-contract-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n} from 'dop-sharedmodel-v5';\nimport { getRelayAdaptContractForNetwork } from '../dop/core/providers';\nimport {\n generateDummyProofTransactions,\n generateProofTransactions,\n nullifiersForTransactions,\n} from './tx-generator';\nimport {\n populateProvedTransaction,\n setCachedProvedTransaction,\n} from './proof-cache';\nimport { sendErrorMessage } from '../../utils/logger';\nimport {\n RelayAdaptHelper,\n AdaptID,\n TransactionStruct,\n hexlify,\n randomHex,\n RelayAdaptContract,\n ProverProgressCallback,\n NFTTokenData,\n formatToByteLength,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT,\n RelayAdaptShieldNFTRecipient,\n} from 'dop-engine-v5';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\n// import { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction, Log } from 'ethers';\n\nconst createValidCrossContractCalls = (\n crossContractCalls: ContractTransaction[],\n): ContractTransaction[] => {\n if (!crossContractCalls.length) {\n throw new Error('No cross contract calls in transaction.');\n }\n try {\n return crossContractCalls.map(transactionRequest => {\n if (!transactionRequest.to || !transactionRequest.data) {\n throw new Error(`Cross-contract calls require 'to' and 'data' fields.`);\n }\n const transaction: ContractTransaction = {\n to: transactionRequest.to,\n value: transactionRequest.value,\n data: hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, err);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nconst isDecimalStr = (str: string): boolean => {\n const decimalPattern = /^[-+]?(\\d+(\\.\\d*)?|\\.\\d+)$/;\n return decimalPattern.test(str);\n}\n\nconst bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n\n // const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n // ? bigIntStringToHex(nftAmount.tokenSubID)\n // : nftAmount.tokenSubID;\n\n return {\n tokenAddress: formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: formatToByteLength(\n nftAmount.tokenSubID,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } = await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n delete transaction.from;\n\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedCrossContractCalls.name, err);\n }\n};\n/*\nexport const gasEstimateForUnprovenCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n valueCheck: bigint\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = randomHex(16);\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const response = await gasEstimateResponseDummyProofIterativeRelayerFee(\n (relayerFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n valueCheck\n ),\n async (txs: TransactionStruct[]) => {\n const relayAdaptParamsRandom = randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isRelayerTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n // TODO: Remove after callbacks upgrade.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n dopWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\n // TODO: Remove this after callbacks upgrade.\n // If gas estimate is under the cross-contract-minimum, replace it with the minimum.\n if (response.gasEstimate) {\n if (response.gasEstimate < minimumGasLimit) {\n response.gasEstimate = minimumGasLimit;\n }\n }\n\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenCrossContractCalls.name,\n err,\n );\n }\n};\n*/\n/*\nexport const generateCrossContractCallsProof = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n valueCheck: bigint\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyUnshieldTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n valueCheck\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = randomHex(16);\n\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const isRelayerTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = randomHex(31);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isRelayerTransaction,\n minimumGasLimit,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n\n // console.log(\"====== 4\",\n // ProofType.CrossContractCalls,\n // networkName,\n // dopWalletID,\n // encryptionKey,\n // false, // showSenderAddressToRecipient\n // undefined, // memoText\n // relayAdaptUnshieldERC20AmountRecipients,\n // relayAdaptUnshieldNFTAmountRecipients,\n // relayerFeeERC20AmountRecipient,\n // sendWithPublicWallet,\n // relayAdaptID,\n // false, // useDummyProof\n // overallBatchMinGasPrice,\n // progressCallback);\n\n // Create real transactions with relay adapt params.\n const transactions = await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n valueCheck\n );\n\n const nullifiers = nullifiersForTransactions(transactions);\n\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n transactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isRelayerTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n transaction,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);\n }\n};\n*/\n\nexport const getRelayAdaptTransactionError = (\n receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptContract.getRelayAdaptCallError(receiptLogs);\n if (isDefined(relayAdaptError)) {\n sendErrorMessage(relayAdaptError);\n return relayAdaptError;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n\nexport const parseRelayAdaptReturnValue = (data: string): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptContract.parseRelayAdaptReturnValue(data);\n if (relayAdaptErrorParsed) {\n sendErrorMessage(relayAdaptErrorParsed.error);\n return relayAdaptErrorParsed.error;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n"]}
1
+ {"version":3,"file":"tx-cross-contract-calls.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-cross-contract-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n} from 'dop-sharedmodel';\nimport { getRelayAdaptContractForNetwork } from '../dop/core/providers';\nimport {\n generateDummyProofTransactions,\n generateProofTransactions,\n nullifiersForTransactions,\n} from './tx-generator';\nimport {\n populateProvedTransaction,\n setCachedProvedTransaction,\n} from './proof-cache';\nimport { sendErrorMessage } from '../../utils/logger';\nimport {\n RelayAdaptHelper,\n AdaptID,\n TransactionStruct,\n hexlify,\n randomHex,\n RelayAdaptContract,\n ProverProgressCallback,\n NFTTokenData,\n formatToByteLength,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT,\n RelayAdaptShieldNFTRecipient,\n} from 'dop-engine';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction, Log } from 'ethers';\n\nconst createValidCrossContractCalls = (\n crossContractCalls: ContractTransaction[],\n): ContractTransaction[] => {\n if (!crossContractCalls.length) {\n throw new Error('No cross contract calls in transaction.');\n }\n try {\n return crossContractCalls.map(transactionRequest => {\n if (!transactionRequest.to || !transactionRequest.data) {\n throw new Error(`Cross-contract calls require 'to' and 'data' fields.`);\n }\n const transaction: ContractTransaction = {\n to: transactionRequest.to,\n value: transactionRequest.value,\n data: hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, err);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nconst isDecimalStr = (str: string): boolean => {\n const decimalPattern = /^[-+]?(\\d+(\\.\\d*)?|\\.\\d+)$/;\n return decimalPattern.test(str);\n}\n\nconst bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n\n // const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n // ? bigIntStringToHex(nftAmount.tokenSubID)\n // : nftAmount.tokenSubID;\n\n return {\n tokenAddress: formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: formatToByteLength(\n nftAmount.tokenSubID,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } = await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n delete transaction.from;\n\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedCrossContractCalls.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = randomHex(16);\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const response = await gasEstimateResponseDummyProofIterativeRelayerFee(\n (relayerFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: TransactionStruct[]) => {\n const relayAdaptParamsRandom = randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isRelayerTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n // TODO: Remove after callbacks upgrade.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n dopWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\n // TODO: Remove this after callbacks upgrade.\n // If gas estimate is under the cross-contract-minimum, replace it with the minimum.\n if (response.gasEstimate) {\n if (response.gasEstimate < minimumGasLimit) {\n response.gasEstimate = minimumGasLimit;\n }\n }\n\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenCrossContractCalls.name,\n err,\n );\n }\n};\n\nexport const generateCrossContractCallsProof = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyUnshieldTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = randomHex(16);\n\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const isRelayerTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = randomHex(31);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isRelayerTransaction,\n minimumGasLimit,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n\n // console.log(\"====== 4\",\n // ProofType.CrossContractCalls,\n // networkName,\n // dopWalletID,\n // encryptionKey,\n // false, // showSenderAddressToRecipient\n // undefined, // memoText\n // relayAdaptUnshieldERC20AmountRecipients,\n // relayAdaptUnshieldNFTAmountRecipients,\n // relayerFeeERC20AmountRecipient,\n // sendWithPublicWallet,\n // relayAdaptID,\n // false, // useDummyProof\n // overallBatchMinGasPrice,\n // progressCallback);\n\n // Create real transactions with relay adapt params.\n const transactions = await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(transactions);\n\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n transactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isRelayerTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n transaction,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);\n }\n};\n\nexport const getRelayAdaptTransactionError = (\n receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptContract.getRelayAdaptCallError(receiptLogs);\n if (isDefined(relayAdaptError)) {\n sendErrorMessage(relayAdaptError);\n return relayAdaptError;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n\nexport const parseRelayAdaptReturnValue = (data: string): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptContract.parseRelayAdaptReturnValue(data);\n if (relayAdaptErrorParsed) {\n sendErrorMessage(relayAdaptErrorParsed.error);\n return relayAdaptErrorParsed.error;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel-v5';
1
+ import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel';
2
2
  import { ContractTransaction } from 'ethers';
3
3
  export declare const getGasEstimate: (networkName: NetworkName, transaction: ContractTransaction, fromWalletAddress: string, sendWithPublicWallet: boolean, isCrossContractCall: boolean) => Promise<bigint>;
4
4
  export declare const gasEstimateResponse: (gasEstimate: bigint, relayerFeeCommitment: Optional<CommitmentSummary>, isGasEstimateWithDummyProof: boolean) => DopTransactionGasEstimateResponse;