dop-wallet-v6 1.1.7 → 1.1.8

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 (106) hide show
  1. package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
  2. package/dist/services/artifacts/artifact-downloader.js +20 -20
  3. package/dist/services/artifacts/artifact-downloader.js.map +1 -1
  4. package/dist/services/artifacts/artifact-hash.d.ts +1 -1
  5. package/dist/services/artifacts/artifact-hash.js +8 -8
  6. package/dist/services/artifacts/artifact-hash.js.map +1 -1
  7. package/dist/services/artifacts/artifact-util.d.ts +1 -1
  8. package/dist/services/artifacts/artifact-util.js +13 -13
  9. package/dist/services/artifacts/artifact-util.js.map +1 -1
  10. package/dist/services/dop/core/artifacts.d.ts +2 -2
  11. package/dist/services/dop/core/artifacts.js +5 -5
  12. package/dist/services/dop/core/artifacts.js.map +1 -1
  13. package/dist/services/dop/core/engine.d.ts +2 -2
  14. package/dist/services/dop/core/engine.js +13 -13
  15. package/dist/services/dop/core/engine.js.map +1 -1
  16. package/dist/services/dop/core/prover.d.ts +1 -1
  17. package/dist/services/dop/core/prover.js +2 -2
  18. package/dist/services/dop/core/prover.js.map +1 -1
  19. package/dist/services/dop/core/providers.d.ts +3 -3
  20. package/dist/services/dop/core/providers.js +16 -16
  21. package/dist/services/dop/core/providers.js.map +1 -1
  22. package/dist/services/dop/core/shields.d.ts +1 -1
  23. package/dist/services/dop/core/shields.js +2 -2
  24. package/dist/services/dop/core/shields.js.map +1 -1
  25. package/dist/services/dop/history/transaction-history.d.ts +2 -2
  26. package/dist/services/dop/history/transaction-history.js +14 -14
  27. package/dist/services/dop/history/transaction-history.js.map +1 -1
  28. package/dist/services/dop/process/extract-first-note.d.ts +2 -2
  29. package/dist/services/dop/process/extract-first-note.js +15 -15
  30. package/dist/services/dop/process/extract-first-note.js.map +1 -1
  31. package/dist/services/dop/quick-sync/empty-events.d.ts +1 -1
  32. package/dist/services/dop/quick-sync/empty-events.js.map +1 -1
  33. package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +1 -1
  34. package/dist/services/dop/quick-sync/graph-type-formatters.js +15 -15
  35. package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -1
  36. package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +1 -1
  37. package/dist/services/dop/quick-sync/quick-sync-graph.js +17 -17
  38. package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -1
  39. package/dist/services/dop/util/bytes.d.ts +1 -1
  40. package/dist/services/dop/util/bytes.js +7 -7
  41. package/dist/services/dop/util/bytes.js.map +1 -1
  42. package/dist/services/dop/util/commitment.d.ts +2 -2
  43. package/dist/services/dop/util/commitment.js +2 -2
  44. package/dist/services/dop/util/commitment.js.map +1 -1
  45. package/dist/services/dop/util/crypto.d.ts +2 -2
  46. package/dist/services/dop/util/crypto.js +15 -15
  47. package/dist/services/dop/util/crypto.js.map +1 -1
  48. package/dist/services/dop/util/db.d.ts +1 -1
  49. package/dist/services/dop/util/db.js +2 -2
  50. package/dist/services/dop/util/db.js.map +1 -1
  51. package/dist/services/dop/wallets/balance-update.d.ts +2 -2
  52. package/dist/services/dop/wallets/balance-update.js +6 -6
  53. package/dist/services/dop/wallets/balance-update.js.map +1 -1
  54. package/dist/services/dop/wallets/balances.d.ts +2 -2
  55. package/dist/services/dop/wallets/balances.js.map +1 -1
  56. package/dist/services/dop/wallets/wallets.d.ts +2 -2
  57. package/dist/services/dop/wallets/wallets.js +10 -10
  58. package/dist/services/dop/wallets/wallets.js.map +1 -1
  59. package/dist/services/ethers/ethers-util.js +2 -2
  60. package/dist/services/ethers/ethers-util.js.map +1 -1
  61. package/dist/services/transactions/proof-cache.d.ts +1 -1
  62. package/dist/services/transactions/proof-cache.js +16 -16
  63. package/dist/services/transactions/proof-cache.js.map +1 -1
  64. package/dist/services/transactions/tx-cross-contract-calls.d.ts +2 -2
  65. package/dist/services/transactions/tx-cross-contract-calls.js +21 -21
  66. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
  67. package/dist/services/transactions/tx-gas-details.d.ts +1 -1
  68. package/dist/services/transactions/tx-gas-details.js +22 -22
  69. package/dist/services/transactions/tx-gas-details.js.map +1 -1
  70. package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +2 -2
  71. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +2 -2
  72. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
  73. package/dist/services/transactions/tx-generator.d.ts +2 -2
  74. package/dist/services/transactions/tx-generator.js +17 -17
  75. package/dist/services/transactions/tx-generator.js.map +1 -1
  76. package/dist/services/transactions/tx-notes.d.ts +2 -2
  77. package/dist/services/transactions/tx-notes.js +13 -13
  78. package/dist/services/transactions/tx-notes.js.map +1 -1
  79. package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
  80. package/dist/services/transactions/tx-nullifiers.js.map +1 -1
  81. package/dist/services/transactions/tx-proof-transfer.d.ts +2 -2
  82. package/dist/services/transactions/tx-proof-transfer.js +3 -3
  83. package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
  84. package/dist/services/transactions/tx-proof-unshield.d.ts +2 -2
  85. package/dist/services/transactions/tx-proof-unshield.js +8 -8
  86. package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
  87. package/dist/services/transactions/tx-shield-base-token.d.ts +1 -1
  88. package/dist/services/transactions/tx-shield-base-token.js +5 -5
  89. package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
  90. package/dist/services/transactions/tx-shield.d.ts +1 -1
  91. package/dist/services/transactions/tx-shield.js +12 -12
  92. package/dist/services/transactions/tx-shield.js.map +1 -1
  93. package/dist/services/transactions/tx-transfer.d.ts +1 -1
  94. package/dist/services/transactions/tx-transfer.js +3 -3
  95. package/dist/services/transactions/tx-transfer.js.map +1 -1
  96. package/dist/services/transactions/tx-unshield.d.ts +1 -1
  97. package/dist/services/transactions/tx-unshield.js +7 -7
  98. package/dist/services/transactions/tx-unshield.js.map +1 -1
  99. package/dist/utils/blocked-address.js +3 -3
  100. package/dist/utils/blocked-address.js.map +1 -1
  101. package/dist/utils/error.js +2 -2
  102. package/dist/utils/error.js.map +1 -1
  103. package/dist/utils/gas-price.d.ts +1 -1
  104. package/dist/utils/gas-price.js +13 -13
  105. package/dist/utils/gas-price.js.map +1 -1
  106. package/package.json +1 -1
@@ -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';\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
+ {"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';\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';
1
+ import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel-v5';
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;
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setGasDetailsForTransaction = exports.gasEstimateResponse = exports.getGasEstimate = void 0;
4
- const dop_sharedmodel_1 = require("dop-sharedmodel");
4
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
5
5
  const dop_1 = require("../dop");
6
6
  const error_1 = require("../../utils/error");
7
- const dop_engine_1 = require("dop-engine");
7
+ const dop_engine_v5_1 = require("dop-engine-v5");
8
8
  const getGasEstimate = async (networkName, transaction, fromWalletAddress, sendWithPublicWallet, isCrossContractCall) => {
9
- const evmGasType = (0, dop_sharedmodel_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
9
+ const evmGasType = (0, dop_sharedmodel_v5_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
10
10
  // Add 'from' field, which is required, as a mock address.
11
11
  // Note that DEPOSIT needs a real address, as it checks the balance for transfer.
12
12
  const estimateGasTransactionRequest = {
@@ -30,7 +30,7 @@ const estimateGas = (networkName, transaction, isCrossContractCall) => {
30
30
  const provider = (0, dop_1.getFallbackProviderForNetwork)(networkName);
31
31
  if (isCrossContractCall) {
32
32
  // Includes custom error handler for relay-adapt transactions.
33
- return dop_engine_1.RelayAdaptContract.estimateGasWithErrorHandler(provider, transaction);
33
+ return dop_engine_v5_1.RelayAdaptContract.estimateGasWithErrorHandler(provider, transaction);
34
34
  }
35
35
  return provider.estimateGas(transaction);
36
36
  };
@@ -40,21 +40,21 @@ const estimateGas = (networkName, transaction, isCrossContractCall) => {
40
40
  */
41
41
  const shouldRemoveGasLimitForL2GasEstimate = (networkName) => {
42
42
  switch (networkName) {
43
- case dop_sharedmodel_1.NetworkName.Arbitrum:
44
- case dop_sharedmodel_1.NetworkName.ArbitrumGoerli:
43
+ case dop_sharedmodel_v5_1.NetworkName.Arbitrum:
44
+ case dop_sharedmodel_v5_1.NetworkName.ArbitrumGoerli:
45
45
  return true;
46
- case dop_sharedmodel_1.NetworkName.Xlayer:
47
- case dop_sharedmodel_1.NetworkName.XlayerTestnet:
46
+ case dop_sharedmodel_v5_1.NetworkName.Xlayer:
47
+ case dop_sharedmodel_v5_1.NetworkName.XlayerTestnet:
48
48
  return true;
49
- case dop_sharedmodel_1.NetworkName.Dop:
49
+ case dop_sharedmodel_v5_1.NetworkName.Dop:
50
50
  throw new Error('Invalid network for transaction');
51
- case dop_sharedmodel_1.NetworkName.Ethereum:
52
- case dop_sharedmodel_1.NetworkName.BNBChain:
53
- case dop_sharedmodel_1.NetworkName.Polygon:
54
- case dop_sharedmodel_1.NetworkName.EthereumRopsten_DEPRECATED:
55
- case dop_sharedmodel_1.NetworkName.EthereumGoerli:
56
- case dop_sharedmodel_1.NetworkName.PolygonMumbai:
57
- case dop_sharedmodel_1.NetworkName.Hardhat:
51
+ case dop_sharedmodel_v5_1.NetworkName.Ethereum:
52
+ case dop_sharedmodel_v5_1.NetworkName.BNBChain:
53
+ case dop_sharedmodel_v5_1.NetworkName.Polygon:
54
+ case dop_sharedmodel_v5_1.NetworkName.EthereumRopsten_DEPRECATED:
55
+ case dop_sharedmodel_v5_1.NetworkName.EthereumGoerli:
56
+ case dop_sharedmodel_v5_1.NetworkName.PolygonMumbai:
57
+ case dop_sharedmodel_v5_1.NetworkName.Hardhat:
58
58
  return false;
59
59
  }
60
60
  };
@@ -62,7 +62,7 @@ const gasEstimateResponse = (gasEstimate, relayerFeeCommitment, isGasEstimateWit
62
62
  // TODO: This variance will be different on L2s.
63
63
  // However, it's small enough that it shouldn't matter very much.
64
64
  const gasEstimateWithDummyProofVariance = isGasEstimateWithDummyProof
65
- ? gasEstimate + BigInt(dop_engine_1.GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION)
65
+ ? gasEstimate + BigInt(dop_engine_v5_1.GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION)
66
66
  : gasEstimate;
67
67
  const response = {
68
68
  gasEstimate: gasEstimateWithDummyProofVariance,
@@ -74,8 +74,8 @@ exports.gasEstimateResponse = gasEstimateResponse;
74
74
  const setGasDetailsForTransaction = (networkName, transaction, gasDetails, sendWithPublicWallet) => {
75
75
  const { gasEstimate } = gasDetails;
76
76
  // eslint-disable-next-line no-param-reassign
77
- transaction.gasLimit = (0, dop_sharedmodel_1.calculateGasLimit)(gasEstimate);
78
- const evmGasType = (0, dop_sharedmodel_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
77
+ transaction.gasLimit = (0, dop_sharedmodel_v5_1.calculateGasLimit)(gasEstimate);
78
+ const evmGasType = (0, dop_sharedmodel_v5_1.getEVMGasTypeForTransaction)(networkName, sendWithPublicWallet);
79
79
  if (gasDetails.evmGasType !== evmGasType) {
80
80
  const transactionType = sendWithPublicWallet ? 'self-signed' : 'Relayer';
81
81
  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).`);
@@ -83,19 +83,19 @@ const setGasDetailsForTransaction = (networkName, transaction, gasDetails, sendW
83
83
  // eslint-disable-next-line no-param-reassign
84
84
  transaction.type = gasDetails.evmGasType;
85
85
  switch (gasDetails.evmGasType) {
86
- case dop_sharedmodel_1.EVMGasType.Type0: {
86
+ case dop_sharedmodel_v5_1.EVMGasType.Type0: {
87
87
  // eslint-disable-next-line no-param-reassign
88
88
  transaction.gasPrice = gasDetails.gasPrice;
89
89
  // eslint-disable-next-line no-param-reassign
90
90
  delete transaction.accessList;
91
91
  break;
92
92
  }
93
- case dop_sharedmodel_1.EVMGasType.Type1: {
93
+ case dop_sharedmodel_v5_1.EVMGasType.Type1: {
94
94
  // eslint-disable-next-line no-param-reassign
95
95
  transaction.gasPrice = gasDetails.gasPrice;
96
96
  break;
97
97
  }
98
- case dop_sharedmodel_1.EVMGasType.Type2: {
98
+ case dop_sharedmodel_v5_1.EVMGasType.Type2: {
99
99
  // eslint-disable-next-line no-param-reassign
100
100
  transaction.maxFeePerGas = gasDetails.maxFeePerGas;
101
101
  // eslint-disable-next-line no-param-reassign
@@ -1 +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';\nimport { getFallbackProviderForNetwork } from '../dop';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport {\n GAS_ESTIMATE_VARIANCE_DUMMY_TO_ACTUAL_TRANSACTION,\n RelayAdaptContract,\n} from 'dop-engine';\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\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\n return gasEstimate;\n } catch (err) {\n throw reportAndSanitizeError(getGasEstimate.name, err);\n }\n};\n\nconst estimateGas = (\n networkName: NetworkName,\n transaction: ContractTransaction,\n isCrossContractCall: boolean,\n): Promise<bigint> => {\n const provider = getFallbackProviderForNetwork(networkName);\n\n if (isCrossContractCall) {\n // Includes custom error handler for relay-adapt transactions.\n return RelayAdaptContract.estimateGasWithErrorHandler(\n provider,\n transaction,\n );\n }\n return provider.estimateGas(transaction);\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\n\n const response: DopTransactionGasEstimateResponse = {\n gasEstimate: gasEstimateWithDummyProofVariance,\n relayerFeeCommitment,\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).`,\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"]}
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\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\n return gasEstimate;\n } catch (err) {\n throw reportAndSanitizeError(getGasEstimate.name, err);\n }\n};\n\nconst estimateGas = (\n networkName: NetworkName,\n transaction: ContractTransaction,\n isCrossContractCall: boolean,\n): Promise<bigint> => {\n const provider = getFallbackProviderForNetwork(networkName);\n\n if (isCrossContractCall) {\n // Includes custom error handler for relay-adapt transactions.\n return RelayAdaptContract.estimateGasWithErrorHandler(\n provider,\n transaction,\n );\n }\n return provider.estimateGas(transaction);\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\n\n const response: DopTransactionGasEstimateResponse = {\n gasEstimate: gasEstimateWithDummyProofVariance,\n relayerFeeCommitment,\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).`,\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"]}
@@ -1,5 +1,5 @@
1
- import { TransactionStruct } from 'dop-engine';
2
- import { NetworkName, TransactionGasDetails, DopERC20Amount, DopTransactionGasEstimateResponse, FeeTokenDetails, DopERC20AmountRecipient } from 'dop-sharedmodel';
1
+ import { TransactionStruct } from 'dop-engine-v5';
2
+ import { NetworkName, TransactionGasDetails, DopERC20Amount, DopTransactionGasEstimateResponse, FeeTokenDetails, DopERC20AmountRecipient } from 'dop-sharedmodel-v5';
3
3
  import { ContractTransaction } from 'ethers';
4
4
  export declare const calculateRelayerFeeERC20Amount: (feeTokenDetails: FeeTokenDetails, gasDetails: TransactionGasDetails) => DopERC20Amount;
5
5
  export declare const gasEstimateResponseDummyProofIterativeRelayerFee: (generateDummyTransactionStructsWithRelayerFee: (relayerFeeERC20Amount: Optional<DopERC20Amount>) => Promise<TransactionStruct[]>, generateTransaction: (serializedTransactions: TransactionStruct[]) => Promise<ContractTransaction>, networkName: NetworkName, dopWalletID: string, erc20AmountRecipients: DopERC20AmountRecipient[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean, isCrossContractCall: boolean) => Promise<DopTransactionGasEstimateResponse>;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.gasEstimateResponseDummyProofIterativeRelayerFee = exports.calculateRelayerFeeERC20Amount = void 0;
4
- const dop_sharedmodel_1 = require("dop-sharedmodel");
4
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
5
5
  const tx_generator_1 = require("./tx-generator");
6
6
  const tx_gas_details_1 = require("./tx-gas-details");
7
7
  const balance_update_1 = require("../dop/wallets/balance-update");
@@ -11,7 +11,7 @@ const MAX_ITERATIONS_RELAYER_FEE_REESTIMATION = 5;
11
11
  const calculateRelayerFeeERC20Amount = (feeTokenDetails, gasDetails) => {
12
12
  const tokenFeePerUnitGas = BigInt(feeTokenDetails.feePerUnitGas);
13
13
  const oneUnitGas = 10n ** 18n;
14
- const maximumGas = (0, dop_sharedmodel_1.calculateMaximumGas)(gasDetails);
14
+ const maximumGas = (0, dop_sharedmodel_v5_1.calculateMaximumGas)(gasDetails);
15
15
  const tokenFee = (tokenFeePerUnitGas * maximumGas) / oneUnitGas;
16
16
  return {
17
17
  tokenAddress: feeTokenDetails.tokenAddress,
@@ -1 +1 @@
1
- {"version":3,"file":"tx-gas-relayer-fee-estimator.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-gas-relayer-fee-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import { TransactionStruct } from 'dop-engine';\nimport {\n NetworkName,\n TransactionGasDetails,\n DopERC20Amount,\n DopTransactionGasEstimateResponse,\n FeeTokenDetails,\n calculateMaximumGas,\n DopERC20AmountRecipient,\n CommitmentSummary,\n} from 'dop-sharedmodel';\nimport {\n DUMMY_FROM_ADDRESS,\n createDummyRelayerFeeERC20Amount,\n} from './tx-generator';\nimport { getGasEstimate, gasEstimateResponse } from './tx-gas-details';\nimport { balanceForERC20Token } from '../dop/wallets/balance-update';\nimport { walletForID } from '../dop';\nimport { convertTransactionStructToCommitmentSummary } from '../dop/util/commitment';\nimport { ContractTransaction } from 'ethers';\n\nconst MAX_ITERATIONS_RELAYER_FEE_REESTIMATION = 5;\n\nexport const calculateRelayerFeeERC20Amount = (\n feeTokenDetails: FeeTokenDetails,\n gasDetails: TransactionGasDetails,\n): DopERC20Amount => {\n const tokenFeePerUnitGas = BigInt(feeTokenDetails.feePerUnitGas);\n const oneUnitGas = 10n ** 18n;\n const maximumGas = calculateMaximumGas(gasDetails);\n const tokenFee = (tokenFeePerUnitGas * maximumGas) / oneUnitGas;\n return {\n tokenAddress: feeTokenDetails.tokenAddress,\n amount: tokenFee,\n };\n};\n\nconst getRelayerFeeCommitment = (\n transactionStructs: TransactionStruct[],\n): CommitmentSummary => {\n const transactionIndex = 0;\n const relayerFeeCommitment = transactionStructs[transactionIndex];\n const relayerFeeCommitmentIndex = 0;\n return convertTransactionStructToCommitmentSummary(\n relayerFeeCommitment,\n relayerFeeCommitmentIndex,\n );\n};\n\nexport const gasEstimateResponseDummyProofIterativeRelayerFee = async (\n generateDummyTransactionStructsWithRelayerFee: (\n relayerFeeERC20Amount: Optional<DopERC20Amount>,\n ) => Promise<TransactionStruct[]>,\n generateTransaction: (\n serializedTransactions: TransactionStruct[],\n ) => Promise<ContractTransaction>,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n isCrossContractCall: boolean,\n): Promise<DopTransactionGasEstimateResponse> => {\n const wallet = walletForID(dopWalletID);\n\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const isGasEstimateWithDummyProof = true;\n\n const dummyRelayerFee = feeTokenDetails\n ? createDummyRelayerFeeERC20Amount(feeTokenDetails.tokenAddress)\n : undefined;\n\n let serializedTransactions =\n await generateDummyTransactionStructsWithRelayerFee(dummyRelayerFee);\n let transaction = await generateTransaction(serializedTransactions);\n\n let gasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n isCrossContractCall,\n );\nconsole.log(\"gasEstimateForUnprovenTransfer gasEstimate::\", gasEstimate)\n\n\n if (sendWithPublicWallet) {\n return gasEstimateResponse(\n gasEstimate,\n undefined, // relayerFeeCommitment\n isGasEstimateWithDummyProof,\n );\n }\n\n if (!feeTokenDetails) {\n throw new Error(\n 'Must have Relayer Fee details or sendWithPublicWallet field.',\n );\n }\n\n // Find any erc20Amount in transfer that matches token of relayer fee, if exists.\n const relayerFeeMatchingSendingERC20Amount = erc20AmountRecipients.find(\n erc20AmountRecipient =>\n erc20AmountRecipient.tokenAddress.toLowerCase() ===\n feeTokenDetails.tokenAddress.toLowerCase(),\n );\n\n // Get private balance of matching token.\n const balanceForRelayerFeeERC20 = await balanceForERC20Token(\n wallet,\n networkName,\n feeTokenDetails.tokenAddress,\n );\n\n let relayerFeeCommitment = getRelayerFeeCommitment(serializedTransactions);\n\n // Iteratively calculate new relayer fee and estimate new gas amount.\n // This change if the number of circuits changes because of the additional Relayer Fees.\n for (let i = 0; i < MAX_ITERATIONS_RELAYER_FEE_REESTIMATION; i += 1) {\n const updatedGasDetails: TransactionGasDetails = {\n ...originalGasDetails,\n gasEstimate,\n };\n const updatedRelayerFee: DopERC20Amount =\n calculateRelayerFeeERC20Amount(feeTokenDetails, updatedGasDetails);\n\n // If Relayer fee causes overflow with the token balance,\n // then use the MAX amount for Relayer Fee, which is BALANCE - SENDING AMOUNT.\n if (\n balanceForRelayerFeeERC20 > 0n &&\n relayerFeeMatchingSendingERC20Amount &&\n // eslint-disable-next-line no-await-in-loop\n (await relayerFeeWillOverflowBalance(\n balanceForRelayerFeeERC20,\n relayerFeeMatchingSendingERC20Amount,\n updatedRelayerFee,\n ))\n ) {\n updatedRelayerFee.amount =\n balanceForRelayerFeeERC20 - relayerFeeMatchingSendingERC20Amount.amount;\n }\n\n const newSerializedTransactions =\n // eslint-disable-next-line no-await-in-loop\n await generateDummyTransactionStructsWithRelayerFee(updatedRelayerFee);\n\n relayerFeeCommitment = getRelayerFeeCommitment(newSerializedTransactions);\n\n if (\n compareCircuitSizesTransactionStructs(\n newSerializedTransactions,\n serializedTransactions,\n )\n ) {\n // Same circuit sizes, no need to run further gas estimates.\n return gasEstimateResponse(\n gasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n }\n\n serializedTransactions = newSerializedTransactions;\n\n // eslint-disable-next-line no-await-in-loop\n transaction = await generateTransaction(serializedTransactions);\n\n // eslint-disable-next-line no-await-in-loop\n const newGasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n isCrossContractCall,\n );\n\n if (newGasEstimate === gasEstimate) {\n return gasEstimateResponse(\n newGasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n }\n gasEstimate = newGasEstimate;\n }\n\n return gasEstimateResponse(\n gasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n};\n\nconst compareCircuitSizesTransactionStructs = (\n serializedA: TransactionStruct[],\n serializedB: TransactionStruct[],\n) => {\n if (serializedA.length !== serializedB.length) {\n return false;\n }\n for (let i = 0; i < serializedA.length; i += 1) {\n if (\n serializedA[i].commitments.length !== serializedB[i].commitments.length\n ) {\n return false;\n }\n if (serializedA[i].nullifiers.length !== serializedB[i].nullifiers.length) {\n return false;\n }\n }\n return true;\n};\n\nconst relayerFeeWillOverflowBalance = async (\n tokenBalance: bigint,\n sendingERC20Amount: DopERC20Amount,\n relayerFeeERC20Amount: DopERC20Amount,\n) => {\n const sendingAmount = sendingERC20Amount.amount;\n const relayerFeeAmount = relayerFeeERC20Amount.amount;\n\n return sendingAmount + relayerFeeAmount > tokenBalance;\n};\n"]}
1
+ {"version":3,"file":"tx-gas-relayer-fee-estimator.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-gas-relayer-fee-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import { TransactionStruct } from 'dop-engine-v5';\nimport {\n NetworkName,\n TransactionGasDetails,\n DopERC20Amount,\n DopTransactionGasEstimateResponse,\n FeeTokenDetails,\n calculateMaximumGas,\n DopERC20AmountRecipient,\n CommitmentSummary,\n} from 'dop-sharedmodel-v5';\nimport {\n DUMMY_FROM_ADDRESS,\n createDummyRelayerFeeERC20Amount,\n} from './tx-generator';\nimport { getGasEstimate, gasEstimateResponse } from './tx-gas-details';\nimport { balanceForERC20Token } from '../dop/wallets/balance-update';\nimport { walletForID } from '../dop';\nimport { convertTransactionStructToCommitmentSummary } from '../dop/util/commitment';\nimport { ContractTransaction } from 'ethers';\n\nconst MAX_ITERATIONS_RELAYER_FEE_REESTIMATION = 5;\n\nexport const calculateRelayerFeeERC20Amount = (\n feeTokenDetails: FeeTokenDetails,\n gasDetails: TransactionGasDetails,\n): DopERC20Amount => {\n const tokenFeePerUnitGas = BigInt(feeTokenDetails.feePerUnitGas);\n const oneUnitGas = 10n ** 18n;\n const maximumGas = calculateMaximumGas(gasDetails);\n const tokenFee = (tokenFeePerUnitGas * maximumGas) / oneUnitGas;\n return {\n tokenAddress: feeTokenDetails.tokenAddress,\n amount: tokenFee,\n };\n};\n\nconst getRelayerFeeCommitment = (\n transactionStructs: TransactionStruct[],\n): CommitmentSummary => {\n const transactionIndex = 0;\n const relayerFeeCommitment = transactionStructs[transactionIndex];\n const relayerFeeCommitmentIndex = 0;\n return convertTransactionStructToCommitmentSummary(\n relayerFeeCommitment,\n relayerFeeCommitmentIndex,\n );\n};\n\nexport const gasEstimateResponseDummyProofIterativeRelayerFee = async (\n generateDummyTransactionStructsWithRelayerFee: (\n relayerFeeERC20Amount: Optional<DopERC20Amount>,\n ) => Promise<TransactionStruct[]>,\n generateTransaction: (\n serializedTransactions: TransactionStruct[],\n ) => Promise<ContractTransaction>,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n isCrossContractCall: boolean,\n): Promise<DopTransactionGasEstimateResponse> => {\n const wallet = walletForID(dopWalletID);\n\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const isGasEstimateWithDummyProof = true;\n\n const dummyRelayerFee = feeTokenDetails\n ? createDummyRelayerFeeERC20Amount(feeTokenDetails.tokenAddress)\n : undefined;\n\n let serializedTransactions =\n await generateDummyTransactionStructsWithRelayerFee(dummyRelayerFee);\n let transaction = await generateTransaction(serializedTransactions);\n\n let gasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n isCrossContractCall,\n );\nconsole.log(\"gasEstimateForUnprovenTransfer gasEstimate::\", gasEstimate)\n\n\n if (sendWithPublicWallet) {\n return gasEstimateResponse(\n gasEstimate,\n undefined, // relayerFeeCommitment\n isGasEstimateWithDummyProof,\n );\n }\n\n if (!feeTokenDetails) {\n throw new Error(\n 'Must have Relayer Fee details or sendWithPublicWallet field.',\n );\n }\n\n // Find any erc20Amount in transfer that matches token of relayer fee, if exists.\n const relayerFeeMatchingSendingERC20Amount = erc20AmountRecipients.find(\n erc20AmountRecipient =>\n erc20AmountRecipient.tokenAddress.toLowerCase() ===\n feeTokenDetails.tokenAddress.toLowerCase(),\n );\n\n // Get private balance of matching token.\n const balanceForRelayerFeeERC20 = await balanceForERC20Token(\n wallet,\n networkName,\n feeTokenDetails.tokenAddress,\n );\n\n let relayerFeeCommitment = getRelayerFeeCommitment(serializedTransactions);\n\n // Iteratively calculate new relayer fee and estimate new gas amount.\n // This change if the number of circuits changes because of the additional Relayer Fees.\n for (let i = 0; i < MAX_ITERATIONS_RELAYER_FEE_REESTIMATION; i += 1) {\n const updatedGasDetails: TransactionGasDetails = {\n ...originalGasDetails,\n gasEstimate,\n };\n const updatedRelayerFee: DopERC20Amount =\n calculateRelayerFeeERC20Amount(feeTokenDetails, updatedGasDetails);\n\n // If Relayer fee causes overflow with the token balance,\n // then use the MAX amount for Relayer Fee, which is BALANCE - SENDING AMOUNT.\n if (\n balanceForRelayerFeeERC20 > 0n &&\n relayerFeeMatchingSendingERC20Amount &&\n // eslint-disable-next-line no-await-in-loop\n (await relayerFeeWillOverflowBalance(\n balanceForRelayerFeeERC20,\n relayerFeeMatchingSendingERC20Amount,\n updatedRelayerFee,\n ))\n ) {\n updatedRelayerFee.amount =\n balanceForRelayerFeeERC20 - relayerFeeMatchingSendingERC20Amount.amount;\n }\n\n const newSerializedTransactions =\n // eslint-disable-next-line no-await-in-loop\n await generateDummyTransactionStructsWithRelayerFee(updatedRelayerFee);\n\n relayerFeeCommitment = getRelayerFeeCommitment(newSerializedTransactions);\n\n if (\n compareCircuitSizesTransactionStructs(\n newSerializedTransactions,\n serializedTransactions,\n )\n ) {\n // Same circuit sizes, no need to run further gas estimates.\n return gasEstimateResponse(\n gasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n }\n\n serializedTransactions = newSerializedTransactions;\n\n // eslint-disable-next-line no-await-in-loop\n transaction = await generateTransaction(serializedTransactions);\n\n // eslint-disable-next-line no-await-in-loop\n const newGasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n isCrossContractCall,\n );\n\n if (newGasEstimate === gasEstimate) {\n return gasEstimateResponse(\n newGasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n }\n gasEstimate = newGasEstimate;\n }\n\n return gasEstimateResponse(\n gasEstimate,\n relayerFeeCommitment,\n isGasEstimateWithDummyProof,\n );\n};\n\nconst compareCircuitSizesTransactionStructs = (\n serializedA: TransactionStruct[],\n serializedB: TransactionStruct[],\n) => {\n if (serializedA.length !== serializedB.length) {\n return false;\n }\n for (let i = 0; i < serializedA.length; i += 1) {\n if (\n serializedA[i].commitments.length !== serializedB[i].commitments.length\n ) {\n return false;\n }\n if (serializedA[i].nullifiers.length !== serializedB[i].nullifiers.length) {\n return false;\n }\n }\n return true;\n};\n\nconst relayerFeeWillOverflowBalance = async (\n tokenBalance: bigint,\n sendingERC20Amount: DopERC20Amount,\n relayerFeeERC20Amount: DopERC20Amount,\n) => {\n const sendingAmount = sendingERC20Amount.amount;\n const relayerFeeAmount = relayerFeeERC20Amount.amount;\n\n return sendingAmount + relayerFeeAmount > tokenBalance;\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { AdaptID, TransactionStruct, ProverProgressCallback } from 'dop-engine';
2
- import { DopERC20Amount, DopERC20AmountRecipient, NetworkName, ProofType, DopNFTAmountRecipient } from 'dop-sharedmodel';
1
+ import { AdaptID, TransactionStruct, ProverProgressCallback } from 'dop-engine-v5';
2
+ import { DopERC20Amount, DopERC20AmountRecipient, NetworkName, ProofType, DopNFTAmountRecipient } from 'dop-sharedmodel-v5';
3
3
  import { ContractTransaction } from 'ethers';
4
4
  export declare const DUMMY_FROM_ADDRESS = "0x000000000000000000000000000000000000dEaD";
5
5
  export declare const generateProofTransactions: (proofType: ProofType, networkName: NetworkName, dopWalletID: string, encryptionKey: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: DopERC20AmountRecipient[], nftAmountRecipients: DopNFTAmountRecipient[], relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, relayAdaptID: Optional<AdaptID>, useDummyProof: boolean, overallBatchMinGasPrice: Optional<bigint>, progressCallback: ProverProgressCallback) => Promise<TransactionStruct[]>;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateUnshieldBaseToken = exports.generateTransact = exports.generateDummyProofTransactions = exports.createDummyRelayerFeeERC20Amount = exports.nullifiersForTransactions = exports.generateProofTransactions = exports.DUMMY_FROM_ADDRESS = void 0;
4
- const dop_engine_1 = require("dop-engine");
5
- const dop_sharedmodel_1 = require("dop-sharedmodel");
4
+ const dop_engine_v5_1 = require("dop-engine-v5");
5
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
6
6
  const engine_1 = require("../dop/core/engine");
7
7
  const providers_1 = require("../dop/core/providers");
8
8
  const tx_notes_1 = require("./tx-notes");
@@ -77,13 +77,13 @@ const generateUnshieldBaseToken = async (txs, networkName, toWalletAddress, rela
77
77
  };
78
78
  exports.generateUnshieldBaseToken = generateUnshieldBaseToken;
79
79
  const transactionsFromERC20Amounts = async (proofType, erc20AmountRecipients, nftAmountRecipients, dopWallet, encryptionKey, showSenderAddressToRecipient, memoText, networkName, relayerFeeERC20AmountRecipient, sendWithPublicWallet, relayAdaptID, useDummyProof, overallBatchMinGasPrice, progressCallback) => {
80
- const network = dop_sharedmodel_1.NETWORK_CONFIG[networkName];
80
+ const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
81
81
  const { chain } = network;
82
82
  // Removes overallBatchMinGasPrice for L2 networks.
83
83
  const validatedOverallBatchMinGasPrice = (0, gas_price_1.shouldSetOverallBatchMinGasPriceForNetwork)(networkName)
84
84
  ? BigInt(overallBatchMinGasPrice ?? 0)
85
85
  : BigInt(0);
86
- const transactionBatch = new dop_engine_1.TransactionBatch(chain, validatedOverallBatchMinGasPrice);
86
+ const transactionBatch = new dop_engine_v5_1.TransactionBatch(chain, validatedOverallBatchMinGasPrice);
87
87
  // const transactionBatchNew = new TransactionBatch(
88
88
  // chain,
89
89
  // validatedOverallBatchMinGasPrice,
@@ -94,7 +94,7 @@ const transactionsFromERC20Amounts = async (proofType, erc20AmountRecipients, nf
94
94
  if (relayerFeeERC20AmountRecipient && !sendWithPublicWallet) {
95
95
  (0, dop_1.assertValidDopAddress)(relayerFeeERC20AmountRecipient.recipientAddress);
96
96
  // Add Relayer Fee - must be first transaction in the batch, and first output for the transaction.
97
- transactionBatch.addOutput((0, tx_notes_1.erc20NoteFromERC20AmountRecipient)(relayerFeeERC20AmountRecipient, dopWallet, dop_engine_1.OutputType.RelayerFee, false, // showSenderAddressToRecipient - never show sender for Relayer fees
97
+ transactionBatch.addOutput((0, tx_notes_1.erc20NoteFromERC20AmountRecipient)(relayerFeeERC20AmountRecipient, dopWallet, dop_engine_v5_1.OutputType.RelayerFee, false, // showSenderAddressToRecipient - never show sender for Relayer fees
98
98
  undefined));
99
99
  }
100
100
  erc20AmountRecipients.forEach((erc20AmountRecipient) => {
@@ -108,13 +108,13 @@ const transactionsFromERC20Amounts = async (proofType, erc20AmountRecipients, nf
108
108
  };
109
109
  const addTransactionOutputsERC20 = (proofType, transactionBatch, erc20AmountRecipient, dopWallet, showSenderAddressToRecipient, memoText) => {
110
110
  switch (proofType) {
111
- case dop_sharedmodel_1.ProofType.Transfer: {
111
+ case dop_sharedmodel_v5_1.ProofType.Transfer: {
112
112
  addTransactionOutputsTransferERC20(transactionBatch, erc20AmountRecipient, dopWallet, showSenderAddressToRecipient, memoText);
113
113
  break;
114
114
  }
115
- case dop_sharedmodel_1.ProofType.CrossContractCalls:
116
- case dop_sharedmodel_1.ProofType.UnshieldBaseToken:
117
- case dop_sharedmodel_1.ProofType.Unshield: {
115
+ case dop_sharedmodel_v5_1.ProofType.CrossContractCalls:
116
+ case dop_sharedmodel_v5_1.ProofType.UnshieldBaseToken:
117
+ case dop_sharedmodel_v5_1.ProofType.Unshield: {
118
118
  addTransactionOutputsUnshieldERC20(transactionBatch, erc20AmountRecipient, false);
119
119
  break;
120
120
  }
@@ -122,13 +122,13 @@ const addTransactionOutputsERC20 = (proofType, transactionBatch, erc20AmountReci
122
122
  };
123
123
  const addTransactionOutputsNFT = (proofType, transactionBatch, nftAmountRecipient, dopWallet, showSenderAddressToRecipient, memoText) => {
124
124
  switch (proofType) {
125
- case dop_sharedmodel_1.ProofType.Transfer: {
125
+ case dop_sharedmodel_v5_1.ProofType.Transfer: {
126
126
  addTransactionOutputsTransferNFT(transactionBatch, nftAmountRecipient, dopWallet, showSenderAddressToRecipient, memoText);
127
127
  break;
128
128
  }
129
- case dop_sharedmodel_1.ProofType.CrossContractCalls:
130
- case dop_sharedmodel_1.ProofType.UnshieldBaseToken:
131
- case dop_sharedmodel_1.ProofType.Unshield: {
129
+ case dop_sharedmodel_v5_1.ProofType.CrossContractCalls:
130
+ case dop_sharedmodel_v5_1.ProofType.UnshieldBaseToken:
131
+ case dop_sharedmodel_v5_1.ProofType.Unshield: {
132
132
  addTransactionOutputsUnshieldNFT(transactionBatch, nftAmountRecipient, false);
133
133
  break;
134
134
  }
@@ -136,13 +136,13 @@ const addTransactionOutputsNFT = (proofType, transactionBatch, nftAmountRecipien
136
136
  };
137
137
  const addTransactionOutputsTransferERC20 = (transactionBatch, erc20AmountRecipient, dopWallet, showSenderAddressToRecipient, memoText) => {
138
138
  (0, dop_1.assertValidDopAddress)(erc20AmountRecipient.recipientAddress);
139
- transactionBatch.addOutput((0, tx_notes_1.erc20NoteFromERC20AmountRecipient)(erc20AmountRecipient, dopWallet, dop_engine_1.OutputType.Transfer, showSenderAddressToRecipient, memoText));
139
+ transactionBatch.addOutput((0, tx_notes_1.erc20NoteFromERC20AmountRecipient)(erc20AmountRecipient, dopWallet, dop_engine_v5_1.OutputType.Transfer, showSenderAddressToRecipient, memoText));
140
140
  };
141
141
  const addTransactionOutputsUnshieldERC20 = (transactionBatch, erc20AmountRecipient, allowOverride) => {
142
142
  const { recipientAddress, amount } = erc20AmountRecipient;
143
143
  (0, dop_1.assertValidEthAddress)(recipientAddress);
144
144
  (0, blocked_address_1.assertNotBlockedAddress)(recipientAddress);
145
- const tokenData = (0, dop_engine_1.getTokenDataERC20)(erc20AmountRecipient.tokenAddress);
145
+ const tokenData = (0, dop_engine_v5_1.getTokenDataERC20)(erc20AmountRecipient.tokenAddress);
146
146
  transactionBatch.addUnshieldData({
147
147
  toAddress: recipientAddress,
148
148
  value: amount,
@@ -158,8 +158,8 @@ const addTransactionOutputsUnshieldNFT = (transactionBatch, nftAmountRecipient,
158
158
  const { recipientAddress, nftAddress, tokenSubID, nftTokenType, amount } = nftAmountRecipient;
159
159
  (0, dop_1.assertValidEthAddress)(recipientAddress);
160
160
  (0, blocked_address_1.assertNotBlockedAddress)(recipientAddress);
161
- const tokenData = (0, dop_engine_1.getTokenDataNFT)(nftAddress, nftTokenType, tokenSubID);
162
- const value = nftTokenType === dop_sharedmodel_1.NFTTokenType.ERC721 ? dop_engine_1.ERC721_NOTE_VALUE : amount;
161
+ const tokenData = (0, dop_engine_v5_1.getTokenDataNFT)(nftAddress, nftTokenType, tokenSubID);
162
+ const value = nftTokenType === dop_sharedmodel_v5_1.NFTTokenType.ERC721 ? dop_engine_v5_1.ERC721_NOTE_VALUE : amount;
163
163
  transactionBatch.addUnshieldData({
164
164
  toAddress: recipientAddress,
165
165
  value,
@@ -1 +1 @@
1
- {"version":3,"file":"tx-generator.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n TransactionBatch,\n AdaptID,\n OutputType,\n TransactionStruct,\n ProverProgressCallback,\n getTokenDataERC20,\n getTokenDataNFT,\n ERC721_NOTE_VALUE,\n NFTTokenData,\n} from 'dop-engine';\nimport {\n DopERC20Amount,\n DopERC20AmountRecipient,\n NetworkName,\n NETWORK_CONFIG,\n ProofType,\n DopNFTAmountRecipient,\n NFTTokenType,\n} from 'dop-sharedmodel';\nimport { fullWalletForID, walletForID } from '../dop/core/engine';\nimport {\n getDopSmartWalletContractForNetwork,\n getRelayAdaptContractForNetwork,\n} from '../dop/core/providers';\nimport {\n erc20NoteFromERC20AmountRecipient,\n nftNoteFromNFTAmountRecipient,\n} from './tx-notes';\nimport { getProver } from '../dop/core/prover';\nimport { assertValidEthAddress, assertValidDopAddress } from '../dop';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { ContractTransaction } from 'ethers';\n\nconst DUMMY_AMOUNT = 0n;\nexport const DUMMY_FROM_ADDRESS = '0x000000000000000000000000000000000000dEaD';\n\nexport const generateProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n relayAdaptID: Optional<AdaptID>,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const dopWallet = fullWalletForID(dopWalletID);\n\n const txs: TransactionStruct[] = await transactionsFromERC20Amounts(\n proofType,\n erc20AmountRecipients,\n nftAmountRecipients,\n dopWallet,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n networkName,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n useDummyProof,\n overallBatchMinGasPrice,\n progressCallback,\n );\n return txs;\n};\n\nexport const nullifiersForTransactions = (\n transactions: TransactionStruct[],\n): string[] => {\n return transactions\n .map(transaction => transaction.nullifiers)\n .flat() as string[];\n};\n\nexport const createDummyRelayerFeeERC20Amount = (feeTokenAddress: string) => {\n const relayerFeeERC20Amount: DopERC20Amount = {\n tokenAddress: feeTokenAddress,\n amount: DUMMY_AMOUNT,\n };\n return relayerFeeERC20Amount;\n};\n\nexport const generateDummyProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayerFeeERC20Amount: Optional<DopERC20Amount>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): Promise<TransactionStruct[]> => {\n if (!relayerFeeERC20Amount && !sendWithPublicWallet) {\n throw new Error('Must send with relayer or public wallet.');\n }\n\n const dopWallet = walletForID(dopWalletID);\n\n // Use self-wallet as dummy relayer address.\n const relayerDopAddress = dopWallet.getAddress(undefined);\n\n const relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient> =\n relayerFeeERC20Amount\n ? {\n ...relayerFeeERC20Amount,\n recipientAddress: relayerDopAddress,\n }\n : undefined;\n\n return generateProofTransactions(\n proofType,\n networkName,\n dopWalletID,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n undefined, // relayAdaptID\n true, // useDummyProof\n overallBatchMinGasPrice,\n () => {}, // progressCallback (not necessary for dummy txs)\n );\n};\n\nexport const generateTransact = async (\n txs: TransactionStruct[],\n networkName: NetworkName,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n const dopSmartWalletContract =\n getDopSmartWalletContractForNetwork(networkName);\n\n const transaction = await dopSmartWalletContract.transact(txs);\n if (useDummyProof) {\n return {\n ...transaction,\n from: DUMMY_FROM_ADDRESS,\n };\n }\n return transaction;\n};\n\nexport const generateUnshieldBaseToken = async (\n txs: TransactionStruct[],\n networkName: NetworkName,\n toWalletAddress: string,\n relayAdaptParamsRandom: string,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n assertValidEthAddress(toWalletAddress);\n assertNotBlockedAddress(toWalletAddress);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const transaction = await relayAdaptContract.populateUnshieldBaseToken(\n txs,\n toWalletAddress,\n relayAdaptParamsRandom,\n );\n if (useDummyProof) {\n return {\n ...transaction,\n from: DUMMY_FROM_ADDRESS,\n };\n }\n return transaction;\n};\n\nconst transactionsFromERC20Amounts = async (\n proofType: ProofType,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n dopWallet: DopWallet,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n networkName: NetworkName,\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n relayAdaptID: Optional<AdaptID>,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n\n // Removes overallBatchMinGasPrice for L2 networks.\n const validatedOverallBatchMinGasPrice =\n shouldSetOverallBatchMinGasPriceForNetwork(networkName)\n ? BigInt(overallBatchMinGasPrice ?? 0)\n : BigInt(0);\n\n const transactionBatch = new TransactionBatch(\n chain,\n validatedOverallBatchMinGasPrice,\n );\n // const transactionBatchNew = new TransactionBatch(\n // chain,\n // validatedOverallBatchMinGasPrice,\n // );\n if (relayAdaptID) {\n transactionBatch.setAdaptID(relayAdaptID);\n }\n\n if (relayerFeeERC20AmountRecipient && !sendWithPublicWallet) {\n assertValidDopAddress(relayerFeeERC20AmountRecipient.recipientAddress);\n\n // Add Relayer Fee - must be first transaction in the batch, and first output for the transaction.\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n relayerFeeERC20AmountRecipient,\n dopWallet,\n OutputType.RelayerFee,\n false, // showSenderAddressToRecipient - never show sender for Relayer fees\n undefined, // memoText\n ),\n );\n }\n\n erc20AmountRecipients.forEach(\n (erc20AmountRecipient: DopERC20AmountRecipient) => {\n addTransactionOutputsERC20(\n proofType,\n transactionBatch,\n erc20AmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n nftAmountRecipients.forEach((nftAmountRecipient: DopNFTAmountRecipient) => {\n addTransactionOutputsNFT(\n proofType,\n transactionBatch,\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n });\n \n const txBatches = await generateAllProofs(\n transactionBatch,\n dopWallet,\n encryptionKey,\n useDummyProof,\n progressCallback,\n );\n return txBatches;\n};\n\nconst addTransactionOutputsERC20 = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferERC20(\n transactionBatch,\n erc20AmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n break;\n }\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n case ProofType.Unshield: {\n addTransactionOutputsUnshieldERC20(\n transactionBatch,\n erc20AmountRecipient,\n false, // allowOverride\n );\n break;\n }\n }\n};\n\nconst addTransactionOutputsNFT = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferNFT(\n transactionBatch,\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n break;\n }\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n case ProofType.Unshield: {\n addTransactionOutputsUnshieldNFT(\n transactionBatch,\n nftAmountRecipient,\n false, // allowOverride\n );\n break;\n }\n }\n};\n\nconst addTransactionOutputsTransferERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidDopAddress(erc20AmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, amount } = erc20AmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n assertNotBlockedAddress(recipientAddress);\n\n const tokenData = getTokenDataERC20(erc20AmountRecipient.tokenAddress);\n\n transactionBatch.addUnshieldData({\n toAddress: recipientAddress,\n value: amount,\n tokenData,\n allowOverride,\n });\n};\n\nconst addTransactionOutputsTransferNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidDopAddress(nftAmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n nftNoteFromNFTAmountRecipient(\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, nftAddress, tokenSubID, nftTokenType, amount } =\n nftAmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n assertNotBlockedAddress(recipientAddress);\n\n const tokenData: NFTTokenData = getTokenDataNFT(\n nftAddress,\n nftTokenType as 1 | 2,\n tokenSubID,\n );\n\n const value: bigint =\n nftTokenType === NFTTokenType.ERC721 ? ERC721_NOTE_VALUE : amount;\n\n transactionBatch.addUnshieldData({\n toAddress: recipientAddress,\n value,\n tokenData,\n allowOverride,\n });\n};\n\nconst generateAllProofs = (\n transactionBatch: TransactionBatch,\n dopWallet: DopWallet,\n encryptionKey: string,\n useDummyProof: boolean,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const prover = getProver();\n return useDummyProof\n ? transactionBatch.generateDummyTransactions(\n prover,\n dopWallet,\n encryptionKey,\n )\n : transactionBatch.generateTransactions(\n prover,\n dopWallet,\n encryptionKey,\n progressCallback,\n );\n};\n"]}
1
+ {"version":3,"file":"tx-generator.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n TransactionBatch,\n AdaptID,\n OutputType,\n TransactionStruct,\n ProverProgressCallback,\n getTokenDataERC20,\n getTokenDataNFT,\n ERC721_NOTE_VALUE,\n NFTTokenData,\n} from 'dop-engine-v5';\nimport {\n DopERC20Amount,\n DopERC20AmountRecipient,\n NetworkName,\n NETWORK_CONFIG,\n ProofType,\n DopNFTAmountRecipient,\n NFTTokenType,\n} from 'dop-sharedmodel-v5';\nimport { fullWalletForID, walletForID } from '../dop/core/engine';\nimport {\n getDopSmartWalletContractForNetwork,\n getRelayAdaptContractForNetwork,\n} from '../dop/core/providers';\nimport {\n erc20NoteFromERC20AmountRecipient,\n nftNoteFromNFTAmountRecipient,\n} from './tx-notes';\nimport { getProver } from '../dop/core/prover';\nimport { assertValidEthAddress, assertValidDopAddress } from '../dop';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { ContractTransaction } from 'ethers';\n\nconst DUMMY_AMOUNT = 0n;\nexport const DUMMY_FROM_ADDRESS = '0x000000000000000000000000000000000000dEaD';\n\nexport const generateProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n relayAdaptID: Optional<AdaptID>,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const dopWallet = fullWalletForID(dopWalletID);\n\n const txs: TransactionStruct[] = await transactionsFromERC20Amounts(\n proofType,\n erc20AmountRecipients,\n nftAmountRecipients,\n dopWallet,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n networkName,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n useDummyProof,\n overallBatchMinGasPrice,\n progressCallback,\n );\n return txs;\n};\n\nexport const nullifiersForTransactions = (\n transactions: TransactionStruct[],\n): string[] => {\n return transactions\n .map(transaction => transaction.nullifiers)\n .flat() as string[];\n};\n\nexport const createDummyRelayerFeeERC20Amount = (feeTokenAddress: string) => {\n const relayerFeeERC20Amount: DopERC20Amount = {\n tokenAddress: feeTokenAddress,\n amount: DUMMY_AMOUNT,\n };\n return relayerFeeERC20Amount;\n};\n\nexport const generateDummyProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayerFeeERC20Amount: Optional<DopERC20Amount>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): Promise<TransactionStruct[]> => {\n if (!relayerFeeERC20Amount && !sendWithPublicWallet) {\n throw new Error('Must send with relayer or public wallet.');\n }\n\n const dopWallet = walletForID(dopWalletID);\n\n // Use self-wallet as dummy relayer address.\n const relayerDopAddress = dopWallet.getAddress(undefined);\n\n const relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient> =\n relayerFeeERC20Amount\n ? {\n ...relayerFeeERC20Amount,\n recipientAddress: relayerDopAddress,\n }\n : undefined;\n\n return generateProofTransactions(\n proofType,\n networkName,\n dopWalletID,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n undefined, // relayAdaptID\n true, // useDummyProof\n overallBatchMinGasPrice,\n () => {}, // progressCallback (not necessary for dummy txs)\n );\n};\n\nexport const generateTransact = async (\n txs: TransactionStruct[],\n networkName: NetworkName,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n const dopSmartWalletContract =\n getDopSmartWalletContractForNetwork(networkName);\n\n const transaction = await dopSmartWalletContract.transact(txs);\n if (useDummyProof) {\n return {\n ...transaction,\n from: DUMMY_FROM_ADDRESS,\n };\n }\n return transaction;\n};\n\nexport const generateUnshieldBaseToken = async (\n txs: TransactionStruct[],\n networkName: NetworkName,\n toWalletAddress: string,\n relayAdaptParamsRandom: string,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n assertValidEthAddress(toWalletAddress);\n assertNotBlockedAddress(toWalletAddress);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const transaction = await relayAdaptContract.populateUnshieldBaseToken(\n txs,\n toWalletAddress,\n relayAdaptParamsRandom,\n );\n if (useDummyProof) {\n return {\n ...transaction,\n from: DUMMY_FROM_ADDRESS,\n };\n }\n return transaction;\n};\n\nconst transactionsFromERC20Amounts = async (\n proofType: ProofType,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n dopWallet: DopWallet,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n networkName: NetworkName,\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n relayAdaptID: Optional<AdaptID>,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n\n // Removes overallBatchMinGasPrice for L2 networks.\n const validatedOverallBatchMinGasPrice =\n shouldSetOverallBatchMinGasPriceForNetwork(networkName)\n ? BigInt(overallBatchMinGasPrice ?? 0)\n : BigInt(0);\n\n const transactionBatch = new TransactionBatch(\n chain,\n validatedOverallBatchMinGasPrice,\n );\n // const transactionBatchNew = new TransactionBatch(\n // chain,\n // validatedOverallBatchMinGasPrice,\n // );\n if (relayAdaptID) {\n transactionBatch.setAdaptID(relayAdaptID);\n }\n\n if (relayerFeeERC20AmountRecipient && !sendWithPublicWallet) {\n assertValidDopAddress(relayerFeeERC20AmountRecipient.recipientAddress);\n\n // Add Relayer Fee - must be first transaction in the batch, and first output for the transaction.\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n relayerFeeERC20AmountRecipient,\n dopWallet,\n OutputType.RelayerFee,\n false, // showSenderAddressToRecipient - never show sender for Relayer fees\n undefined, // memoText\n ),\n );\n }\n\n erc20AmountRecipients.forEach(\n (erc20AmountRecipient: DopERC20AmountRecipient) => {\n addTransactionOutputsERC20(\n proofType,\n transactionBatch,\n erc20AmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n nftAmountRecipients.forEach((nftAmountRecipient: DopNFTAmountRecipient) => {\n addTransactionOutputsNFT(\n proofType,\n transactionBatch,\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n });\n \n const txBatches = await generateAllProofs(\n transactionBatch,\n dopWallet,\n encryptionKey,\n useDummyProof,\n progressCallback,\n );\n return txBatches;\n};\n\nconst addTransactionOutputsERC20 = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferERC20(\n transactionBatch,\n erc20AmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n break;\n }\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n case ProofType.Unshield: {\n addTransactionOutputsUnshieldERC20(\n transactionBatch,\n erc20AmountRecipient,\n false, // allowOverride\n );\n break;\n }\n }\n};\n\nconst addTransactionOutputsNFT = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferNFT(\n transactionBatch,\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n break;\n }\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n case ProofType.Unshield: {\n addTransactionOutputsUnshieldNFT(\n transactionBatch,\n nftAmountRecipient,\n false, // allowOverride\n );\n break;\n }\n }\n};\n\nconst addTransactionOutputsTransferERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidDopAddress(erc20AmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: DopERC20AmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, amount } = erc20AmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n assertNotBlockedAddress(recipientAddress);\n\n const tokenData = getTokenDataERC20(erc20AmountRecipient.tokenAddress);\n\n transactionBatch.addUnshieldData({\n toAddress: recipientAddress,\n value: amount,\n tokenData,\n allowOverride,\n });\n};\n\nconst addTransactionOutputsTransferNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n dopWallet: DopWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidDopAddress(nftAmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n nftNoteFromNFTAmountRecipient(\n nftAmountRecipient,\n dopWallet,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: DopNFTAmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, nftAddress, tokenSubID, nftTokenType, amount } =\n nftAmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n assertNotBlockedAddress(recipientAddress);\n\n const tokenData: NFTTokenData = getTokenDataNFT(\n nftAddress,\n nftTokenType as 1 | 2,\n tokenSubID,\n );\n\n const value: bigint =\n nftTokenType === NFTTokenType.ERC721 ? ERC721_NOTE_VALUE : amount;\n\n transactionBatch.addUnshieldData({\n toAddress: recipientAddress,\n value,\n tokenData,\n allowOverride,\n });\n};\n\nconst generateAllProofs = (\n transactionBatch: TransactionBatch,\n dopWallet: DopWallet,\n encryptionKey: string,\n useDummyProof: boolean,\n progressCallback: ProverProgressCallback,\n): Promise<TransactionStruct[]> => {\n const prover = getProver();\n return useDummyProof\n ? transactionBatch.generateDummyTransactions(\n prover,\n dopWallet,\n encryptionKey,\n )\n : transactionBatch.generateTransactions(\n prover,\n dopWallet,\n encryptionKey,\n progressCallback,\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { OutputType, TransactNote, DopWallet } from 'dop-engine';
2
- import { DopNFTAmountRecipient, DopERC20Amount, DopERC20AmountRecipient, DopNFTAmount, DopERC20Recipient } from 'dop-sharedmodel';
1
+ import { OutputType, TransactNote, DopWallet } from 'dop-engine-v5';
2
+ import { DopNFTAmountRecipient, DopERC20Amount, DopERC20AmountRecipient, DopNFTAmount, DopERC20Recipient } from 'dop-sharedmodel-v5';
3
3
  export declare const erc20NoteFromERC20AmountRecipient: (erc20AmountRecipient: DopERC20AmountRecipient, dopWallet: DopWallet, outputType: OutputType, showSenderAddressToRecipient: boolean, memoText: Optional<string>) => TransactNote;
4
4
  export declare const nftNoteFromNFTAmountRecipient: (nftAmountRecipient: DopNFTAmountRecipient, dopWallet: DopWallet, showSenderAddressToRecipient: boolean, memoText: Optional<string>) => TransactNote;
5
5
  export declare const compareERC20AmountRecipients: (a: Optional<DopERC20AmountRecipient>, b: Optional<DopERC20AmountRecipient>) => boolean;