dop-wallet-v6 1.1.5

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 (206) hide show
  1. package/.eslintrc.js +73 -0
  2. package/.prettierrc.js +21 -0
  3. package/LICENSE +21 -0
  4. package/README.md +2 -0
  5. package/dist/index.d.ts +4 -0
  6. package/dist/index.js +20 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
  9. package/dist/services/artifacts/artifact-downloader.js +131 -0
  10. package/dist/services/artifacts/artifact-downloader.js.map +1 -0
  11. package/dist/services/artifacts/artifact-hash.d.ts +4 -0
  12. package/dist/services/artifacts/artifact-hash.js +54 -0
  13. package/dist/services/artifacts/artifact-hash.js.map +1 -0
  14. package/dist/services/artifacts/artifact-store.d.ts +12 -0
  15. package/dist/services/artifacts/artifact-store.js +12 -0
  16. package/dist/services/artifacts/artifact-store.js.map +1 -0
  17. package/dist/services/artifacts/artifact-util.d.ts +7 -0
  18. package/dist/services/artifacts/artifact-util.js +83 -0
  19. package/dist/services/artifacts/artifact-util.js.map +1 -0
  20. package/dist/services/artifacts/index.d.ts +2 -0
  21. package/dist/services/artifacts/index.js +19 -0
  22. package/dist/services/artifacts/index.js.map +1 -0
  23. package/dist/services/artifacts/json/artifact-v2-hashes.json +337 -0
  24. package/dist/services/dop/core/artifacts.d.ts +10 -0
  25. package/dist/services/dop/core/artifacts.js +69 -0
  26. package/dist/services/dop/core/artifacts.js.map +1 -0
  27. package/dist/services/dop/core/engine.d.ts +25 -0
  28. package/dist/services/dop/core/engine.js +103 -0
  29. package/dist/services/dop/core/engine.js.map +1 -0
  30. package/dist/services/dop/core/index.d.ts +5 -0
  31. package/dist/services/dop/core/index.js +22 -0
  32. package/dist/services/dop/core/index.js.map +1 -0
  33. package/dist/services/dop/core/prover.d.ts +3 -0
  34. package/dist/services/dop/core/prover.js +14 -0
  35. package/dist/services/dop/core/prover.js.map +1 -0
  36. package/dist/services/dop/core/providers.d.ts +18 -0
  37. package/dist/services/dop/core/providers.js +162 -0
  38. package/dist/services/dop/core/providers.js.map +1 -0
  39. package/dist/services/dop/core/shields.d.ts +7 -0
  40. package/dist/services/dop/core/shields.js +20 -0
  41. package/dist/services/dop/core/shields.js.map +1 -0
  42. package/dist/services/dop/history/transaction-history.d.ts +4 -0
  43. package/dist/services/dop/history/transaction-history.js +166 -0
  44. package/dist/services/dop/history/transaction-history.js.map +1 -0
  45. package/dist/services/dop/index.d.ts +4 -0
  46. package/dist/services/dop/index.js +21 -0
  47. package/dist/services/dop/index.js.map +1 -0
  48. package/dist/services/dop/process/extract-first-note.d.ts +6 -0
  49. package/dist/services/dop/process/extract-first-note.js +163 -0
  50. package/dist/services/dop/process/extract-first-note.js.map +1 -0
  51. package/dist/services/dop/process/index.d.ts +1 -0
  52. package/dist/services/dop/process/index.js +18 -0
  53. package/dist/services/dop/process/index.js.map +1 -0
  54. package/dist/services/dop/quick-sync/empty-events.d.ts +2 -0
  55. package/dist/services/dop/quick-sync/empty-events.js +9 -0
  56. package/dist/services/dop/quick-sync/empty-events.js.map +1 -0
  57. package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +13 -0
  58. package/dist/services/dop/quick-sync/graph-type-formatters.js +168 -0
  59. package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -0
  60. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.d.ts +2 -0
  61. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js +24081 -0
  62. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js.map +1 -0
  63. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.d.ts +1628 -0
  64. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js +4 -0
  65. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js.map +1 -0
  66. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.d.ts +2 -0
  67. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js +24081 -0
  68. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js.map +1 -0
  69. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.d.ts +1628 -0
  70. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js +4 -0
  71. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js.map +1 -0
  72. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.d.ts +2 -0
  73. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js +24081 -0
  74. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js.map +1 -0
  75. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.d.ts +1628 -0
  76. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js +4 -0
  77. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js.map +1 -0
  78. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.d.ts +2 -0
  79. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js +24081 -0
  80. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js.map +1 -0
  81. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.d.ts +1628 -0
  82. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js +4 -0
  83. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js.map +1 -0
  84. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.d.ts +2 -0
  85. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js +24081 -0
  86. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js.map +1 -0
  87. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.d.ts +1628 -0
  88. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js +4 -0
  89. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js.map +1 -0
  90. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.d.ts +2 -0
  91. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js +24081 -0
  92. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js.map +1 -0
  93. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.d.ts +1628 -0
  94. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js +4 -0
  95. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js.map +1 -0
  96. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
  97. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js +24081 -0
  98. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
  99. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.d.ts +1628 -0
  100. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js +4 -0
  101. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
  102. package/dist/services/dop/quick-sync/graphql/index.d.ts +1976 -0
  103. package/dist/services/dop/quick-sync/graphql/index.js +512 -0
  104. package/dist/services/dop/quick-sync/graphql/index.js.map +1 -0
  105. package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +2 -0
  106. package/dist/services/dop/quick-sync/quick-sync-graph.js +150 -0
  107. package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -0
  108. package/dist/services/dop/util/bytes.d.ts +5 -0
  109. package/dist/services/dop/util/bytes.js +21 -0
  110. package/dist/services/dop/util/bytes.js.map +1 -0
  111. package/dist/services/dop/util/commitment.d.ts +2 -0
  112. package/dist/services/dop/util/commitment.js +17 -0
  113. package/dist/services/dop/util/commitment.js.map +1 -0
  114. package/dist/services/dop/util/crypto.d.ts +14 -0
  115. package/dist/services/dop/util/crypto.js +79 -0
  116. package/dist/services/dop/util/crypto.js.map +1 -0
  117. package/dist/services/dop/util/db.d.ts +2 -0
  118. package/dist/services/dop/util/db.js +6 -0
  119. package/dist/services/dop/util/db.js.map +1 -0
  120. package/dist/services/dop/util/index.d.ts +4 -0
  121. package/dist/services/dop/util/index.js +21 -0
  122. package/dist/services/dop/util/index.js.map +1 -0
  123. package/dist/services/dop/wallets/balance-update.d.ts +8 -0
  124. package/dist/services/dop/wallets/balance-update.js +90 -0
  125. package/dist/services/dop/wallets/balance-update.js.map +1 -0
  126. package/dist/services/dop/wallets/balances.d.ts +6 -0
  127. package/dist/services/dop/wallets/balances.js +57 -0
  128. package/dist/services/dop/wallets/balances.js.map +1 -0
  129. package/dist/services/dop/wallets/index.d.ts +4 -0
  130. package/dist/services/dop/wallets/index.js +21 -0
  131. package/dist/services/dop/wallets/index.js.map +1 -0
  132. package/dist/services/dop/wallets/wallets.d.ts +19 -0
  133. package/dist/services/dop/wallets/wallets.js +226 -0
  134. package/dist/services/dop/wallets/wallets.js.map +1 -0
  135. package/dist/services/ethers/ethers-util.d.ts +1 -0
  136. package/dist/services/ethers/ethers-util.js +9 -0
  137. package/dist/services/ethers/ethers-util.js.map +1 -0
  138. package/dist/services/ethers/index.d.ts +1 -0
  139. package/dist/services/ethers/index.js +18 -0
  140. package/dist/services/ethers/index.js.map +1 -0
  141. package/dist/services/index.d.ts +4 -0
  142. package/dist/services/index.js +21 -0
  143. package/dist/services/index.js.map +1 -0
  144. package/dist/services/transactions/index.d.ts +13 -0
  145. package/dist/services/transactions/index.js +30 -0
  146. package/dist/services/transactions/index.js.map +1 -0
  147. package/dist/services/transactions/proof-cache.d.ts +27 -0
  148. package/dist/services/transactions/proof-cache.js +128 -0
  149. package/dist/services/transactions/proof-cache.js.map +1 -0
  150. package/dist/services/transactions/tx-cross-contract-calls.d.ts +9 -0
  151. package/dist/services/transactions/tx-cross-contract-calls.js +386 -0
  152. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
  153. package/dist/services/transactions/tx-gas-details.d.ts +5 -0
  154. package/dist/services/transactions/tx-gas-details.js +120 -0
  155. package/dist/services/transactions/tx-gas-details.js.map +1 -0
  156. package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +2 -0
  157. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +209 -0
  158. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -0
  159. package/dist/services/transactions/tx-generator.d.ts +9 -0
  160. package/dist/services/transactions/tx-generator.js +205 -0
  161. package/dist/services/transactions/tx-generator.js.map +1 -0
  162. package/dist/services/transactions/tx-notes.d.ts +10 -0
  163. package/dist/services/transactions/tx-notes.js +154 -0
  164. package/dist/services/transactions/tx-notes.js.map +1 -0
  165. package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
  166. package/dist/services/transactions/tx-nullifiers.js +17 -0
  167. package/dist/services/transactions/tx-nullifiers.js.map +1 -0
  168. package/dist/services/transactions/tx-proof-transfer.d.ts +4 -0
  169. package/dist/services/transactions/tx-proof-transfer.js +49 -0
  170. package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
  171. package/dist/services/transactions/tx-proof-unshield.d.ts +3 -0
  172. package/dist/services/transactions/tx-proof-unshield.js +183 -0
  173. package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
  174. package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
  175. package/dist/services/transactions/tx-shield-base-token.js +61 -0
  176. package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
  177. package/dist/services/transactions/tx-shield.d.ts +6 -0
  178. package/dist/services/transactions/tx-shield.js +84 -0
  179. package/dist/services/transactions/tx-shield.js.map +1 -0
  180. package/dist/services/transactions/tx-transfer.d.ts +2 -0
  181. package/dist/services/transactions/tx-transfer.js +78 -0
  182. package/dist/services/transactions/tx-transfer.js.map +1 -0
  183. package/dist/services/transactions/tx-unshield.d.ts +3 -0
  184. package/dist/services/transactions/tx-unshield.js +174 -0
  185. package/dist/services/transactions/tx-unshield.js.map +1 -0
  186. package/dist/utils/blocked-address.d.ts +2 -0
  187. package/dist/utils/blocked-address.js +21 -0
  188. package/dist/utils/blocked-address.js.map +1 -0
  189. package/dist/utils/error.d.ts +1 -0
  190. package/dist/utils/error.js +20 -0
  191. package/dist/utils/error.js.map +1 -0
  192. package/dist/utils/gas-price.d.ts +6 -0
  193. package/dist/utils/gas-price.js +31 -0
  194. package/dist/utils/gas-price.js.map +1 -0
  195. package/dist/utils/index.d.ts +3 -0
  196. package/dist/utils/index.js +20 -0
  197. package/dist/utils/index.js.map +1 -0
  198. package/dist/utils/logger.d.ts +3 -0
  199. package/dist/utils/logger.js +21 -0
  200. package/dist/utils/logger.js.map +1 -0
  201. package/dist/utils/utils.d.ts +3 -0
  202. package/dist/utils/utils.js +47 -0
  203. package/dist/utils/utils.js.map +1 -0
  204. package/package.json +85 -0
  205. package/postinstall.js +52 -0
  206. package/react-native-shims.js +42 -0
@@ -0,0 +1,386 @@
1
+ "use strict";
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");
5
+ const providers_1 = require("../dop/core/providers");
6
+ const proof_cache_1 = require("./proof-cache");
7
+ const logger_1 = require("../../utils/logger");
8
+ const dop_engine_v5_1 = require("dop-engine-v5");
9
+ const blocked_address_1 = require("../../utils/blocked-address");
10
+ // import { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';
11
+ const error_1 = require("../../utils/error");
12
+ const createValidCrossContractCalls = (crossContractCalls) => {
13
+ if (!crossContractCalls.length) {
14
+ throw new Error('No cross contract calls in transaction.');
15
+ }
16
+ try {
17
+ return crossContractCalls.map(transactionRequest => {
18
+ if (!transactionRequest.to || !transactionRequest.data) {
19
+ throw new Error(`Cross-contract calls require 'to' and 'data' fields.`);
20
+ }
21
+ const transaction = {
22
+ to: transactionRequest.to,
23
+ value: transactionRequest.value,
24
+ data: (0, dop_engine_v5_1.hexlify)(transactionRequest.data, true),
25
+ };
26
+ (0, blocked_address_1.assertNotBlockedAddress)(transaction.to);
27
+ return transaction;
28
+ });
29
+ }
30
+ catch (err) {
31
+ if (!(err instanceof Error)) {
32
+ throw err;
33
+ }
34
+ throw (0, error_1.reportAndSanitizeError)(createValidCrossContractCalls.name, err);
35
+ }
36
+ };
37
+ const createRelayAdaptUnshieldERC20AmountRecipients = (networkName, unshieldERC20Amounts) => {
38
+ const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
39
+ const unshieldERC20AmountRecipients = unshieldERC20Amounts.map(unshieldERC20Amount => ({
40
+ ...unshieldERC20Amount,
41
+ recipientAddress: relayAdaptContract.address,
42
+ }));
43
+ return unshieldERC20AmountRecipients;
44
+ };
45
+ exports.createRelayAdaptUnshieldERC20AmountRecipients = createRelayAdaptUnshieldERC20AmountRecipients;
46
+ const createRelayAdaptUnshieldNFTAmountRecipients = (networkName, unshieldNFTAmounts) => {
47
+ const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
48
+ const unshieldNFTAmountRecipients = unshieldNFTAmounts.map(unshieldNFTAmount => ({
49
+ ...unshieldNFTAmount,
50
+ recipientAddress: relayAdaptContract.address,
51
+ }));
52
+ return unshieldNFTAmountRecipients;
53
+ };
54
+ exports.createRelayAdaptUnshieldNFTAmountRecipients = createRelayAdaptUnshieldNFTAmountRecipients;
55
+ const isDecimalStr = (str) => {
56
+ const decimalPattern = /^[-+]?(\d+(\.\d*)?|\.\d+)$/;
57
+ return decimalPattern.test(str);
58
+ };
59
+ const bigIntStringToHex = (bigintString) => {
60
+ return `0x${BigInt(bigintString).toString(16)}`;
61
+ };
62
+ const createNFTTokenDataFromDopNFTAmount = (nftAmount) => {
63
+ // const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)
64
+ // ? bigIntStringToHex(nftAmount.tokenSubID)
65
+ // : nftAmount.tokenSubID;
66
+ return {
67
+ tokenAddress: (0, dop_engine_v5_1.formatToByteLength)(nftAmount.nftAddress, dop_engine_v5_1.ByteLength.Address, true),
68
+ tokenType: nftAmount.nftTokenType,
69
+ tokenSubID: (0, dop_engine_v5_1.formatToByteLength)(nftAmount.tokenSubID, dop_engine_v5_1.ByteLength.UINT_256, true),
70
+ };
71
+ };
72
+ exports.createNFTTokenDataFromDopNFTAmount = createNFTTokenDataFromDopNFTAmount;
73
+ const createRelayAdaptShieldNFTRecipients = (relayAdaptShieldNFTRecipients) => {
74
+ return relayAdaptShieldNFTRecipients.map((nftRecipient) => ({
75
+ nftTokenData: (0, exports.createNFTTokenDataFromDopNFTAmount)(nftRecipient),
76
+ recipientAddress: nftRecipient.recipientAddress,
77
+ }));
78
+ };
79
+ const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
80
+ try {
81
+ const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, dop_sharedmodel_v5_1.ProofType.CrossContractCalls, dopWalletID, false, // showSenderAddressToRecipient
82
+ undefined, // memoText
83
+ [], // erc20AmountRecipients
84
+ [], // nftAmountRecipients
85
+ relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails);
86
+ delete transaction.from;
87
+ return {
88
+ nullifiers,
89
+ transaction,
90
+ };
91
+ }
92
+ catch (err) {
93
+ throw (0, error_1.reportAndSanitizeError)(exports.populateProvedCrossContractCalls.name, err);
94
+ }
95
+ };
96
+ 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
+ }
194
+ }
195
+
196
+ return response;
197
+ } catch (err) {
198
+ throw reportAndSanitizeError(
199
+ gasEstimateForUnprovenCrossContractCalls.name,
200
+ err,
201
+ );
202
+ }
203
+ };
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
+ }
356
+ };
357
+ */
358
+ const getRelayAdaptTransactionError = (receiptLogs) => {
359
+ try {
360
+ const relayAdaptError = dop_engine_v5_1.RelayAdaptContract.getRelayAdaptCallError(receiptLogs);
361
+ if ((0, dop_sharedmodel_v5_1.isDefined)(relayAdaptError)) {
362
+ (0, logger_1.sendErrorMessage)(relayAdaptError);
363
+ return relayAdaptError;
364
+ }
365
+ return undefined;
366
+ }
367
+ catch (err) {
368
+ throw (0, error_1.reportAndSanitizeError)(exports.getRelayAdaptTransactionError.name, err);
369
+ }
370
+ };
371
+ exports.getRelayAdaptTransactionError = getRelayAdaptTransactionError;
372
+ const parseRelayAdaptReturnValue = (data) => {
373
+ try {
374
+ const relayAdaptErrorParsed = dop_engine_v5_1.RelayAdaptContract.parseRelayAdaptReturnValue(data);
375
+ if (relayAdaptErrorParsed) {
376
+ (0, logger_1.sendErrorMessage)(relayAdaptErrorParsed.error);
377
+ return relayAdaptErrorParsed.error;
378
+ }
379
+ return undefined;
380
+ }
381
+ catch (err) {
382
+ throw (0, error_1.reportAndSanitizeError)(exports.getRelayAdaptTransactionError.name, err);
383
+ }
384
+ };
385
+ exports.parseRelayAdaptReturnValue = parseRelayAdaptReturnValue;
386
+ //# sourceMappingURL=tx-cross-contract-calls.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,5 @@
1
+ import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel-v5';
2
+ import { ContractTransaction } from 'ethers';
3
+ export declare const getGasEstimate: (networkName: NetworkName, transaction: ContractTransaction, fromWalletAddress: string, sendWithPublicWallet: boolean, isCrossContractCall: boolean) => Promise<bigint>;
4
+ export declare const gasEstimateResponse: (gasEstimate: bigint, relayerFeeCommitment: Optional<CommitmentSummary>, isGasEstimateWithDummyProof: boolean) => DopTransactionGasEstimateResponse;
5
+ export declare const setGasDetailsForTransaction: (networkName: NetworkName, transaction: ContractTransaction, gasDetails: TransactionGasDetails, sendWithPublicWallet: boolean) => void;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setGasDetailsForTransaction = exports.gasEstimateResponse = exports.getGasEstimate = void 0;
4
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
5
+ const dop_1 = require("../dop");
6
+ const error_1 = require("../../utils/error");
7
+ const dop_engine_v5_1 = require("dop-engine-v5");
8
+ const getGasEstimate = async (networkName, transaction, fromWalletAddress, sendWithPublicWallet, isCrossContractCall) => {
9
+ const evmGasType = (0, dop_sharedmodel_v5_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
10
+ // Add 'from' field, which is required, as a mock address.
11
+ // Note that DEPOSIT needs a real address, as it checks the balance for transfer.
12
+ const estimateGasTransactionRequest = {
13
+ ...transaction,
14
+ from: fromWalletAddress,
15
+ type: evmGasType,
16
+ };
17
+ console.log("estimateGasTransactionRequest:::1", estimateGasTransactionRequest);
18
+ if (shouldRemoveGasLimitForL2GasEstimate(networkName)) {
19
+ delete estimateGasTransactionRequest.gasLimit;
20
+ }
21
+ try {
22
+ const gasEstimate = await estimateGas(networkName, estimateGasTransactionRequest, isCrossContractCall);
23
+ console.log("before gasEstimate", gasEstimate);
24
+ return gasEstimate;
25
+ }
26
+ catch (err) {
27
+ throw (0, error_1.reportAndSanitizeError)(exports.getGasEstimate.name, err);
28
+ }
29
+ };
30
+ exports.getGasEstimate = getGasEstimate;
31
+ 0xe4899c1300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000261705b09939a2271eb98b782fb02435c02beeda000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024e9a059a3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000261705b09939a2271eb98b782fb02435c02beeda000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184bf8d1c5b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000082389495bb548e00e901f8ac82e9761152898834000000000000000000000000000000000000000000000000000000000000000120cd37ba9a49df5deeddb3f6355431c55d21b8aeaa6a2a91dddd12378bd76ebc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc10000504b0dc14f036567d6deb04c09480a1f36c4682faa260c0bf15ff98e66714d252592874afaf1beb2866a003fd1677caaf7b128cbd075709aa8d494dbf482c04d3958b0826a15613654d15cce9a622b2dc1553ead6243f9c77fbc6f15d01c985f8026f7ae910774362b20aa14a3e4f6bb8e8762038d58f4094576bd9ffe92c87200000000000000000000000000000000000000000000000000000000;
32
+ const estimateGas = (networkName, transaction, isCrossContractCall) => {
33
+ const provider = (0, dop_1.getFallbackProviderForNetwork)(networkName);
34
+ console.log("before isCrossContractCall", isCrossContractCall);
35
+ if (isCrossContractCall) {
36
+ // Includes custom error handler for relay-adapt transactions.
37
+ return dop_engine_v5_1.RelayAdaptContract.estimateGasWithErrorHandler(provider, transaction);
38
+ }
39
+ try {
40
+ return provider.estimateGas(transaction);
41
+ }
42
+ catch (e) {
43
+ console.log("before error:::", e);
44
+ return new Promise(resolve => resolve);
45
+ }
46
+ };
47
+ /**
48
+ * Gas estimates can fail for relay-adapt transactions on L2s like Arbitrum.
49
+ * This occurs on cross-contract calls (relay-adapt) which have a manual minimum gas limit set by Dop Engine.
50
+ */
51
+ const shouldRemoveGasLimitForL2GasEstimate = (networkName) => {
52
+ switch (networkName) {
53
+ case dop_sharedmodel_v5_1.NetworkName.Arbitrum:
54
+ case dop_sharedmodel_v5_1.NetworkName.ArbitrumGoerli:
55
+ return true;
56
+ case dop_sharedmodel_v5_1.NetworkName.Xlayer:
57
+ case dop_sharedmodel_v5_1.NetworkName.XlayerTestnet:
58
+ return true;
59
+ case dop_sharedmodel_v5_1.NetworkName.Dop:
60
+ throw new Error('Invalid network for transaction');
61
+ case dop_sharedmodel_v5_1.NetworkName.Ethereum:
62
+ case dop_sharedmodel_v5_1.NetworkName.BNBChain:
63
+ case dop_sharedmodel_v5_1.NetworkName.Polygon:
64
+ case dop_sharedmodel_v5_1.NetworkName.EthereumRopsten_DEPRECATED:
65
+ case dop_sharedmodel_v5_1.NetworkName.EthereumGoerli:
66
+ case dop_sharedmodel_v5_1.NetworkName.PolygonMumbai:
67
+ case dop_sharedmodel_v5_1.NetworkName.Hardhat:
68
+ return false;
69
+ }
70
+ };
71
+ const gasEstimateResponse = (gasEstimate, relayerFeeCommitment, isGasEstimateWithDummyProof) => {
72
+ // TODO: This variance will be different on L2s.
73
+ // However, it's small enough that it shouldn't matter very much.
74
+ const gasEstimateWithDummyProofVariance = isGasEstimateWithDummyProof
75
+ ? gasEstimate + BigInt(dop_engine_v5_1.GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION)
76
+ : gasEstimate;
77
+ console.log("gasEstimateWithDummyProofVariance:::2", gasEstimateWithDummyProofVariance);
78
+ const response = {
79
+ gasEstimate: gasEstimateWithDummyProofVariance,
80
+ relayerFeeCommitment,
81
+ };
82
+ console.log("before DopTransactionGasEstimateResponse return:::1");
83
+ return response;
84
+ };
85
+ exports.gasEstimateResponse = gasEstimateResponse;
86
+ const setGasDetailsForTransaction = (networkName, transaction, gasDetails, sendWithPublicWallet) => {
87
+ const { gasEstimate } = gasDetails;
88
+ // eslint-disable-next-line no-param-reassign
89
+ transaction.gasLimit = (0, dop_sharedmodel_v5_1.calculateGasLimit)(gasEstimate);
90
+ const evmGasType = (0, dop_sharedmodel_v5_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
91
+ if (gasDetails.evmGasType !== evmGasType) {
92
+ const transactionType = sendWithPublicWallet ? 'self-signed' : 'Relayer';
93
+ throw new Error(`Invalid evmGasType for ${networkName} (${transactionType}): expected Type${evmGasType}, received Type${gasDetails.evmGasType} in gasDetails. Retrieve appropriate gas type with getEVMGasTypeForTransaction (dop-sharedmodel-v5).`);
94
+ }
95
+ // eslint-disable-next-line no-param-reassign
96
+ transaction.type = gasDetails.evmGasType;
97
+ switch (gasDetails.evmGasType) {
98
+ case dop_sharedmodel_v5_1.EVMGasType.Type0: {
99
+ // eslint-disable-next-line no-param-reassign
100
+ transaction.gasPrice = gasDetails.gasPrice;
101
+ // eslint-disable-next-line no-param-reassign
102
+ delete transaction.accessList;
103
+ break;
104
+ }
105
+ case dop_sharedmodel_v5_1.EVMGasType.Type1: {
106
+ // eslint-disable-next-line no-param-reassign
107
+ transaction.gasPrice = gasDetails.gasPrice;
108
+ break;
109
+ }
110
+ case dop_sharedmodel_v5_1.EVMGasType.Type2: {
111
+ // eslint-disable-next-line no-param-reassign
112
+ transaction.maxFeePerGas = gasDetails.maxFeePerGas;
113
+ // eslint-disable-next-line no-param-reassign
114
+ transaction.maxPriorityFeePerGas = gasDetails.maxPriorityFeePerGas;
115
+ break;
116
+ }
117
+ }
118
+ };
119
+ exports.setGasDetailsForTransaction = setGasDetailsForTransaction;
120
+ //# sourceMappingURL=tx-gas-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-gas-details.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-gas-details.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopTransactionGasEstimateResponse,\n EVMGasType,\n calculateGasLimit,\n NetworkName,\n getEVMGasTypeForTransaction,\n CommitmentSummary,\n TransactionGasDetails,\n} from 'dop-sharedmodel-v5';\nimport { getFallbackProviderForNetwork } from '../dop';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport {\n GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION,\n RelayAdaptContract,\n} from 'dop-engine-v5';\nimport { ContractTransaction } from 'ethers';\n\nexport const getGasEstimate = async (\n networkName: NetworkName,\n transaction: ContractTransaction,\n fromWalletAddress: string,\n sendWithPublicWallet: boolean,\n isCrossContractCall: boolean,\n): Promise<bigint> => {\n const evmGasType = getEVMGasTypeForTransaction(\n networkName,\n sendWithPublicWallet,\n );\n\n // Add 'from' field, which is required, as a mock address.\n // Note that DEPOSIT needs a real address, as it checks the balance for transfer.\n const estimateGasTransactionRequest: ContractTransaction = {\n ...transaction,\n from: fromWalletAddress,\n type: evmGasType,\n };\n console.log(\"estimateGasTransactionRequest:::1\", estimateGasTransactionRequest);\n\n\n if (shouldRemoveGasLimitForL2GasEstimate(networkName)) {\n delete estimateGasTransactionRequest.gasLimit;\n }\n\n try {\n const gasEstimate = await estimateGas(\n networkName,\n estimateGasTransactionRequest,\n isCrossContractCall,\n );\n console.log(\"before gasEstimate\", gasEstimate);\n\n return gasEstimate;\n } catch (err) {\n throw reportAndSanitizeError(getGasEstimate.name, err);\n }\n};\n\n0xe4899c1300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000261705b09939a2271eb98b782fb02435c02beeda000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024e9a059a3000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000261705b09939a2271eb98b782fb02435c02beeda000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184bf8d1c5b000000000000000000000000000000000000000000000000000000000000004000000000000000000000000082389495bb548e00e901f8ac82e9761152898834000000000000000000000000000000000000000000000000000000000000000120cd37ba9a49df5deeddb3f6355431c55d21b8aeaa6a2a91dddd12378bd76ebc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc10000504b0dc14f036567d6deb04c09480a1f36c4682faa260c0bf15ff98e66714d252592874afaf1beb2866a003fd1677caaf7b128cbd075709aa8d494dbf482c04d3958b0826a15613654d15cce9a622b2dc1553ead6243f9c77fbc6f15d01c985f8026f7ae910774362b20aa14a3e4f6bb8e8762038d58f4094576bd9ffe92c87200000000000000000000000000000000000000000000000000000000\n\nconst estimateGas = (\n networkName: NetworkName,\n transaction: ContractTransaction,\n isCrossContractCall: boolean,\n): Promise<bigint> => {\n const provider = getFallbackProviderForNetwork(networkName);\n console.log(\"before isCrossContractCall\", isCrossContractCall);\n\n if (isCrossContractCall) {\n // Includes custom error handler for relay-adapt transactions.\n return RelayAdaptContract.estimateGasWithErrorHandler(\n provider,\n transaction,\n );\n }\n try{\n\n return provider.estimateGas(transaction);\n }catch(e){\n console.log(\"before error:::\", e)\n return new Promise(resolve => resolve)\n }\n};\n\n/**\n * Gas estimates can fail for relay-adapt transactions on L2s like Arbitrum.\n * This occurs on cross-contract calls (relay-adapt) which have a manual minimum gas limit set by Dop Engine.\n */\nconst shouldRemoveGasLimitForL2GasEstimate = (networkName: NetworkName) => {\n switch (networkName) {\n case NetworkName.Arbitrum:\n case NetworkName.ArbitrumGoerli:\n return true;\n case NetworkName.Xlayer:\n case NetworkName.XlayerTestnet:\n return true;\n case NetworkName.Dop:\n throw new Error('Invalid network for transaction');\n case NetworkName.Ethereum:\n case NetworkName.BNBChain:\n case NetworkName.Polygon:\n case NetworkName.EthereumRopsten_DEPRECATED:\n case NetworkName.EthereumGoerli:\n case NetworkName.PolygonMumbai:\n case NetworkName.Hardhat:\n return false;\n }\n};\n\nexport const gasEstimateResponse = (\n gasEstimate: bigint,\n relayerFeeCommitment: Optional<CommitmentSummary>,\n isGasEstimateWithDummyProof: boolean,\n): DopTransactionGasEstimateResponse => {\n // TODO: This variance will be different on L2s.\n // However, it's small enough that it shouldn't matter very much.\n const gasEstimateWithDummyProofVariance = isGasEstimateWithDummyProof\n ? gasEstimate + BigInt(GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION)\n : gasEstimate;\n\n console.log(\"gasEstimateWithDummyProofVariance:::2\", gasEstimateWithDummyProofVariance);\n\n const response: DopTransactionGasEstimateResponse = {\n gasEstimate: gasEstimateWithDummyProofVariance,\n relayerFeeCommitment,\n };\n console.log(\"before DopTransactionGasEstimateResponse return:::1\");\n\n\n return response;\n};\n\nexport const setGasDetailsForTransaction = (\n networkName: NetworkName,\n transaction: ContractTransaction,\n gasDetails: TransactionGasDetails,\n sendWithPublicWallet: boolean,\n) => {\n const { gasEstimate } = gasDetails;\n\n // eslint-disable-next-line no-param-reassign\n transaction.gasLimit = calculateGasLimit(gasEstimate);\n\n const evmGasType = getEVMGasTypeForTransaction(\n networkName,\n sendWithPublicWallet,\n );\n\n if (gasDetails.evmGasType !== evmGasType) {\n const transactionType = sendWithPublicWallet ? 'self-signed' : 'Relayer';\n throw new Error(\n `Invalid evmGasType for ${networkName} (${transactionType}): expected Type${evmGasType}, received Type${gasDetails.evmGasType} in gasDetails. Retrieve appropriate gas type with getEVMGasTypeForTransaction (dop-sharedmodel-v5).`,\n );\n }\n\n // eslint-disable-next-line no-param-reassign\n transaction.type = gasDetails.evmGasType;\n\n switch (gasDetails.evmGasType) {\n case EVMGasType.Type0: {\n // eslint-disable-next-line no-param-reassign\n transaction.gasPrice = gasDetails.gasPrice;\n // eslint-disable-next-line no-param-reassign\n delete transaction.accessList;\n break;\n }\n case EVMGasType.Type1: {\n // eslint-disable-next-line no-param-reassign\n transaction.gasPrice = gasDetails.gasPrice;\n break;\n }\n case EVMGasType.Type2: {\n // eslint-disable-next-line no-param-reassign\n transaction.maxFeePerGas = gasDetails.maxFeePerGas;\n // eslint-disable-next-line no-param-reassign\n transaction.maxPriorityFeePerGas = gasDetails.maxPriorityFeePerGas;\n break;\n }\n }\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { TransactionGasDetails, DopERC20Amount, FeeTokenDetails } from 'dop-sharedmodel-v5';
2
+ export declare const calculateRelayerFeeERC20Amount: (feeTokenDetails: FeeTokenDetails, gasDetails: TransactionGasDetails) => DopERC20Amount;