@matrix-privacy/wallet 0.0.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/matrix/core/__tests__/providers.test.js +2 -2
- package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -1
- package/dist/services/matrix/core/load-provider.js +4 -1
- package/dist/services/matrix/core/load-provider.js.map +1 -1
- package/dist/services/matrix/core/merkletree.js +2 -2
- package/dist/services/matrix/core/merkletree.js.map +1 -1
- package/dist/services/matrix/core/shields.js +1 -1
- package/dist/services/matrix/core/shields.js.map +1 -1
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +1 -1
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -1
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js +2 -2
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -1
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js +1 -1
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -1
- package/dist/services/matrix/wallets/balance-update.js +2 -2
- package/dist/services/matrix/wallets/balance-update.js.map +1 -1
- package/dist/services/matrix/wallets/wallets.js +3 -0
- package/dist/services/matrix/wallets/wallets.js.map +1 -1
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +1 -1
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -1
- package/dist/services/transactions/__tests__/tx-unshield.test.js +2 -2
- package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -1
- package/dist/services/transactions/tx-cross-contract-calls.js +4 -4
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
- package/dist/services/transactions/tx-generator.js +3 -3
- package/dist/services/transactions/tx-generator.js.map +1 -1
- package/dist/services/transactions/tx-shield-base-token.js +1 -1
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
- package/dist/services/transactions/tx-shield.js +1 -1
- package/dist/services/transactions/tx-shield.js.map +1 -1
- package/dist/services/transactions/tx-unshield.js +2 -2
- package/dist/services/transactions/tx-unshield.js.map +1 -1
- package/dist/tests/local-e2e.js +2 -2
- package/dist/tests/local-e2e.js.map +1 -1
- package/dist/tests/setup.test.js +1 -1
- package/dist/tests/setup.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n MatrixNFTAmount,\n TransactionGasDetails,\n isDefined,\n MatrixERC20Recipient,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n GenerateTransactionsProgressCallback,\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 NFTTokenData,\n ByteUtils,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n RelayAdaptShieldNFTRecipient,\n TransactionStructV3,\n MatrixContracts,\n RelayAdaptV3Contract,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { isDecimalStr } from '../../utils';\nimport { bigIntStringToHex } from '../matrix/quick-sync/shared-formatters';\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: ByteUtils.hexlify(transactionRequest.data, true),\n };\n return transaction;\n });\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from createValidCrossContractCalls', {\n cause,\n });\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, cause);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: MatrixERC20Amount[],\n): MatrixERC20AmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n MatrixContracts.getRelayAdaptContract(chain);\n const unshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: MatrixNFTAmount[],\n): MatrixNFTAmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n MatrixContracts.getRelayAdaptContract(chain);\n const unshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nexport const createNFTTokenDataFromMatrixNFTAmount = (\n nftAmount: MatrixNFTAmount,\n): NFTTokenData => {\n const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n ? bigIntStringToHex(nftAmount.tokenSubID)\n : nftAmount.tokenSubID;\n\n return {\n tokenAddress: ByteUtils.formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: ByteUtils.formatToByteLength(\n tokenSubIDHex,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: MatrixNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromMatrixNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n matrixWalletID: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 matrixWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = ByteUtils.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_V2;\n\n const relayAdaptContract = MatrixContracts.getRelayAdaptContract(chain);\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: TransactionStructV3[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n\n const transaction =\n await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isBroadcasterTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n matrixWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\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 matrixWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\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 matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = ByteUtils.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_V2;\n\n const { chain } = NETWORK_CONFIG[networkName];\n\n const isBroadcasterTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n const relayAdaptContract = MatrixContracts.getRelayAdaptContract(chain);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n\n // Create real transactions with relay adapt params.\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n const transaction =\n await relayAdaptContract.populateCrossContractCalls(\n provedTransactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 networkName: NetworkName,\n receiptLogs: TransactionReceiptLog[],\n): Optional<string> => {\n try {\n const relayAdaptError = RelayAdaptV3Contract.getRelayAdaptCallError(\n receiptLogs,\n );\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 = (\n networkName: NetworkName,\n data: string,\n): Optional<string> => {\n try {\n const relayAdaptErrorParsed = RelayAdaptV3Contract.parseRelayAdaptReturnValue(\n data,\n );\n if (isDefined(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 MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n MatrixNFTAmount,\n TransactionGasDetails,\n isDefined,\n MatrixERC20Recipient,\n getNetworkConfig,\n} from '@matrix-privacy/shared-models';\nimport {\n GenerateTransactionsProgressCallback,\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 NFTTokenData,\n ByteUtils,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n RelayAdaptShieldNFTRecipient,\n TransactionStructV3,\n MatrixContracts,\n RelayAdaptV3Contract,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { isDecimalStr } from '../../utils';\nimport { bigIntStringToHex } from '../matrix/quick-sync/shared-formatters';\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: ByteUtils.hexlify(transactionRequest.data, true),\n };\n return transaction;\n });\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from createValidCrossContractCalls', {\n cause,\n });\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, cause);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: MatrixERC20Amount[],\n): MatrixERC20AmountRecipient[] => {\n const chain = getNetworkConfig(networkName).chain;\n const relayAdaptContract =\n MatrixContracts.getRelayAdaptContract(chain);\n const unshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: MatrixNFTAmount[],\n): MatrixNFTAmountRecipient[] => {\n const chain = getNetworkConfig(networkName).chain;\n const relayAdaptContract =\n MatrixContracts.getRelayAdaptContract(chain);\n const unshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nexport const createNFTTokenDataFromMatrixNFTAmount = (\n nftAmount: MatrixNFTAmount,\n): NFTTokenData => {\n const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n ? bigIntStringToHex(nftAmount.tokenSubID)\n : nftAmount.tokenSubID;\n\n return {\n tokenAddress: ByteUtils.formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: ByteUtils.formatToByteLength(\n tokenSubIDHex,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: MatrixNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromMatrixNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n matrixWalletID: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 matrixWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const chain = getNetworkConfig(networkName).chain;\n\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = ByteUtils.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_V2;\n\n const relayAdaptContract = MatrixContracts.getRelayAdaptContract(chain);\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: TransactionStructV3[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n\n const transaction =\n await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isBroadcasterTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n matrixWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\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 matrixWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[],\n relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[],\n relayAdaptShieldERC20Recipients: MatrixERC20Recipient[],\n relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: MatrixNFTAmountRecipient[] =\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 matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = ByteUtils.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_V2;\n\n const { chain } = getNetworkConfig(networkName);\n\n const isBroadcasterTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n const relayAdaptContract = MatrixContracts.getRelayAdaptContract(chain);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n\n // Create real transactions with relay adapt params.\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n const transaction =\n await relayAdaptContract.populateCrossContractCalls(\n provedTransactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 networkName: NetworkName,\n receiptLogs: TransactionReceiptLog[],\n): Optional<string> => {\n try {\n const relayAdaptError = RelayAdaptV3Contract.getRelayAdaptCallError(\n receiptLogs,\n );\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 = (\n networkName: NetworkName,\n data: string,\n): Optional<string> => {\n try {\n const relayAdaptErrorParsed = RelayAdaptV3Contract.parseRelayAdaptReturnValue(\n data,\n );\n if (isDefined(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"]}
|
|
@@ -48,7 +48,7 @@ const generateDummyProofTransactions = async (proofType, networkName, matrixWall
|
|
|
48
48
|
};
|
|
49
49
|
exports.generateDummyProofTransactions = generateDummyProofTransactions;
|
|
50
50
|
const generateTransact = async (txs, networkName, useDummyProof = false) => {
|
|
51
|
-
const chain = shared_models_1.
|
|
51
|
+
const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
|
|
52
52
|
const transaction = await engine_1.MatrixContracts.generateTransact(chain, txs);
|
|
53
53
|
if (useDummyProof) {
|
|
54
54
|
return {
|
|
@@ -63,7 +63,7 @@ const generateUnshieldBaseToken = async (txs, networkName, toWalletAddress, rela
|
|
|
63
63
|
// eslint-disable-next-line default-param-last, @typescript-eslint/no-inferrable-types
|
|
64
64
|
useDummyProof = false, sendWithPublicWallet) => {
|
|
65
65
|
(0, wallets_1.assertValidEthAddress)(toWalletAddress);
|
|
66
|
-
const chain = shared_models_1.
|
|
66
|
+
const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
|
|
67
67
|
const transaction = await engine_1.MatrixContracts.getRelayAdaptContract(chain).populateUnshieldBaseToken(txs, toWalletAddress, relayAdaptParamsRandom);
|
|
68
68
|
if (useDummyProof) {
|
|
69
69
|
return {
|
|
@@ -75,7 +75,7 @@ useDummyProof = false, sendWithPublicWallet) => {
|
|
|
75
75
|
};
|
|
76
76
|
exports.generateUnshieldBaseToken = generateUnshieldBaseToken;
|
|
77
77
|
const transactionsFromERC20Amounts = async (proofType, erc20AmountRecipients, nftAmountRecipients, matrixWallet, encryptionKey, showSenderAddressToRecipient, memoText, networkName, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, useDummyProof, overallBatchMinGasPrice, progressCallback, originShieldTxidForSpendabilityOverride) => {
|
|
78
|
-
const network = shared_models_1.
|
|
78
|
+
const network = (0, shared_models_1.getNetworkConfig)(networkName);
|
|
79
79
|
const { chain } = network;
|
|
80
80
|
// Removes overallBatchMinGasPrice for L2 networks and non-Broadcaster transactions.
|
|
81
81
|
const validatedOverallBatchMinGasPrice = (0, gas_price_1.shouldSetOverallBatchMinGasPriceForNetwork)(sendWithPublicWallet, networkName)
|
|
@@ -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 MatrixWallet,\n TransactionBatch,\n OutputType,\n getTokenDataERC20,\n getTokenDataNFT,\n ERC721_NOTE_VALUE,\n NFTTokenData,\n MatrixContracts,\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport {\n MatrixERC20Amount,\n MatrixERC20AmountRecipient,\n NetworkName,\n NETWORK_CONFIG,\n ProofType,\n MatrixNFTAmountRecipient,\n NFTTokenType,\n} from '@matrix-privacy/shared-models';\nimport {\n erc20NoteFromERC20AmountRecipient,\n nftNoteFromNFTAmountRecipient,\n} from './tx-notes';\nimport { getProver } from '../matrix/core/prover';\nimport {\n assertValidEthAddress,\n assertValidMatrixAddress,\n fullWalletForID,\n walletForID,\n} from '../matrix/wallets/wallets';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { ContractTransaction } from 'ethers';\n\nconst DUMMY_AMOUNT = 0n;\nexport const DUMMY_FROM_ADDRESS = '0x000000000000000000000000000000000000dEaD';\n\nexport type GenerateTransactionsProgressCallback = (\n progress: number,\n status: string,\n) => void;\n\nexport const generateProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const matrixWallet = fullWalletForID(matrixWalletID);\n\n const txs = await transactionsFromERC20Amounts(\n proofType,\n erc20AmountRecipients,\n nftAmountRecipients,\n matrixWallet,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n networkName,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n useDummyProof,\n overallBatchMinGasPrice,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\n );\n return txs;\n};\n\nexport const nullifiersForTransactions = (\n transactions: TransactionStructV3[],\n): string[] => {\n return transactions\n .map(transaction => transaction.nullifiers)\n .flat() as string[];\n};\n\nexport const createDummyBroadcasterFeeERC20Amount = (feeTokenAddress: string) => {\n const broadcasterFeeERC20Amount: MatrixERC20Amount = {\n tokenAddress: feeTokenAddress,\n amount: DUMMY_AMOUNT,\n };\n return broadcasterFeeERC20Amount;\n};\n\nexport const generateDummyProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<TransactionStructV3[]> => {\n if (!broadcasterFeeERC20Amount && !sendWithPublicWallet) {\n throw new Error('Must send with broadcaster or public wallet.');\n }\n\n const matrixWallet = walletForID(matrixWalletID);\n\n // Use self-wallet as dummy broadcaster address.\n const broadcasterMatrixAddress = matrixWallet.getAddress(undefined);\n\n const broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient> =\n broadcasterFeeERC20Amount\n ? {\n ...broadcasterFeeERC20Amount,\n recipientAddress: broadcasterMatrixAddress,\n }\n : undefined;\n\n return (\n await generateProofTransactions(\n proofType,\n networkName,\n matrixWalletID,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n true, // useDummyProof\n overallBatchMinGasPrice,\n () => {}, // progressCallback (not necessary for dummy txs)\n originShieldTxidForSpendabilityOverride,\n )\n ).provedTransactions;\n};\n\nexport const generateTransact = async (\n txs: TransactionStructV3[],\n networkName: NetworkName,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const transaction = await MatrixContracts.generateTransact(\n chain,\n txs,\n );\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: TransactionStructV3[],\n networkName: NetworkName,\n toWalletAddress: string,\n relayAdaptParamsRandom: string,\n // eslint-disable-next-line default-param-last, @typescript-eslint/no-inferrable-types\n useDummyProof : boolean = false,\n sendWithPublicWallet: boolean,\n): Promise<ContractTransaction> => {\n assertValidEthAddress(toWalletAddress);\n\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const transaction =\n await MatrixContracts.getRelayAdaptContract(chain).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: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n matrixWallet: MatrixWallet,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n networkName: NetworkName,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n\n // Removes overallBatchMinGasPrice for L2 networks and non-Broadcaster transactions.\n const validatedOverallBatchMinGasPrice =\n shouldSetOverallBatchMinGasPriceForNetwork(\n sendWithPublicWallet,\n networkName,\n )\n ? BigInt(overallBatchMinGasPrice ?? 0)\n : BigInt(0);\n\n const transactionBatch = new TransactionBatch(\n chain,\n validatedOverallBatchMinGasPrice,\n );\n\n if (broadcasterFeeERC20AmountRecipient && !sendWithPublicWallet) {\n assertValidMatrixAddress(broadcasterFeeERC20AmountRecipient.recipientAddress);\n\n // Add Broadcaster Fee - must be first transaction in the batch, and first output for the transaction.\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n broadcasterFeeERC20AmountRecipient,\n matrixWallet,\n OutputType.RelayerFee,\n false, // showSenderAddressToRecipient - never show sender for Broadcaster fees\n undefined, // memoText\n ),\n );\n }\n\n erc20AmountRecipients.forEach(\n (erc20AmountRecipient: MatrixERC20AmountRecipient) => {\n addTransactionOutputsERC20(\n proofType,\n transactionBatch,\n erc20AmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n nftAmountRecipients.forEach(\n (nftAmountRecipient: MatrixNFTAmountRecipient) => {\n addTransactionOutputsNFT(\n proofType,\n transactionBatch,\n nftAmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n const txBatches = await generateAllProofs(\n transactionBatch,\n matrixWallet,\n encryptionKey,\n useDummyProof,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\n );\n return txBatches;\n};\n\nconst addTransactionOutputsERC20 = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferERC20(\n transactionBatch,\n erc20AmountRecipient,\n matrixWallet,\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: MatrixNFTAmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferNFT(\n transactionBatch,\n nftAmountRecipient,\n matrixWallet,\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: MatrixERC20AmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidMatrixAddress(erc20AmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n matrixWallet,\n OutputType.Transfer,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, amount } = erc20AmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n\n const tokenData = getTokenDataERC20(erc20AmountRecipient.tokenAddress);\n\n transactionBatch.addUnshieldData({\n toAddress: erc20AmountRecipient.recipientAddress,\n value: amount,\n tokenData,\n allowOverride,\n });\n};\n\nconst addTransactionOutputsTransferNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: MatrixNFTAmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidMatrixAddress(nftAmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n nftNoteFromNFTAmountRecipient(\n nftAmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: MatrixNFTAmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, nftAddress, tokenSubID, nftTokenType, amount } =\n nftAmountRecipient;\n\n assertValidEthAddress(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 = async (\n transactionBatch: TransactionBatch,\n matrixWallet: MatrixWallet,\n encryptionKey: string,\n useDummyProof: boolean,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const prover = getProver();\n if (useDummyProof) {\n return {\n provedTransactions: await transactionBatch.generateDummyTransactions(\n prover,\n matrixWallet,\n encryptionKey,\n originShieldTxidForSpendabilityOverride,\n ),\n };\n }\n return transactionBatch.generateTransactions(\n prover,\n matrixWallet,\n encryptionKey,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\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 MatrixWallet,\n TransactionBatch,\n OutputType,\n getTokenDataERC20,\n getTokenDataNFT,\n ERC721_NOTE_VALUE,\n NFTTokenData,\n MatrixContracts,\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport {\n MatrixERC20Amount,\n MatrixERC20AmountRecipient,\n NetworkName,\n getNetworkConfig,\n ProofType,\n MatrixNFTAmountRecipient,\n NFTTokenType,\n} from '@matrix-privacy/shared-models';\nimport {\n erc20NoteFromERC20AmountRecipient,\n nftNoteFromNFTAmountRecipient,\n} from './tx-notes';\nimport { getProver } from '../matrix/core/prover';\nimport {\n assertValidEthAddress,\n assertValidMatrixAddress,\n fullWalletForID,\n walletForID,\n} from '../matrix/wallets/wallets';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { ContractTransaction } from 'ethers';\n\nconst DUMMY_AMOUNT = 0n;\nexport const DUMMY_FROM_ADDRESS = '0x000000000000000000000000000000000000dEaD';\n\nexport type GenerateTransactionsProgressCallback = (\n progress: number,\n status: string,\n) => void;\n\nexport const generateProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const matrixWallet = fullWalletForID(matrixWalletID);\n\n const txs = await transactionsFromERC20Amounts(\n proofType,\n erc20AmountRecipients,\n nftAmountRecipients,\n matrixWallet,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n networkName,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n useDummyProof,\n overallBatchMinGasPrice,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\n );\n return txs;\n};\n\nexport const nullifiersForTransactions = (\n transactions: TransactionStructV3[],\n): string[] => {\n return transactions\n .map(transaction => transaction.nullifiers)\n .flat() as string[];\n};\n\nexport const createDummyBroadcasterFeeERC20Amount = (feeTokenAddress: string) => {\n const broadcasterFeeERC20Amount: MatrixERC20Amount = {\n tokenAddress: feeTokenAddress,\n amount: DUMMY_AMOUNT,\n };\n return broadcasterFeeERC20Amount;\n};\n\nexport const generateDummyProofTransactions = async (\n proofType: ProofType,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<TransactionStructV3[]> => {\n if (!broadcasterFeeERC20Amount && !sendWithPublicWallet) {\n throw new Error('Must send with broadcaster or public wallet.');\n }\n\n const matrixWallet = walletForID(matrixWalletID);\n\n // Use self-wallet as dummy broadcaster address.\n const broadcasterMatrixAddress = matrixWallet.getAddress(undefined);\n\n const broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient> =\n broadcasterFeeERC20Amount\n ? {\n ...broadcasterFeeERC20Amount,\n recipientAddress: broadcasterMatrixAddress,\n }\n : undefined;\n\n return (\n await generateProofTransactions(\n proofType,\n networkName,\n matrixWalletID,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n true, // useDummyProof\n overallBatchMinGasPrice,\n () => {}, // progressCallback (not necessary for dummy txs)\n originShieldTxidForSpendabilityOverride,\n )\n ).provedTransactions;\n};\n\nexport const generateTransact = async (\n txs: TransactionStructV3[],\n networkName: NetworkName,\n useDummyProof = false,\n): Promise<ContractTransaction> => {\n const chain = getNetworkConfig(networkName).chain;\n const transaction = await MatrixContracts.generateTransact(\n chain,\n txs,\n );\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: TransactionStructV3[],\n networkName: NetworkName,\n toWalletAddress: string,\n relayAdaptParamsRandom: string,\n // eslint-disable-next-line default-param-last, @typescript-eslint/no-inferrable-types\n useDummyProof : boolean = false,\n sendWithPublicWallet: boolean,\n): Promise<ContractTransaction> => {\n assertValidEthAddress(toWalletAddress);\n\n const chain = getNetworkConfig(networkName).chain;\n\n const transaction =\n await MatrixContracts.getRelayAdaptContract(chain).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: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n matrixWallet: MatrixWallet,\n encryptionKey: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n networkName: NetworkName,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n useDummyProof: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const network = getNetworkConfig(networkName);\n const { chain } = network;\n\n // Removes overallBatchMinGasPrice for L2 networks and non-Broadcaster transactions.\n const validatedOverallBatchMinGasPrice =\n shouldSetOverallBatchMinGasPriceForNetwork(\n sendWithPublicWallet,\n networkName,\n )\n ? BigInt(overallBatchMinGasPrice ?? 0)\n : BigInt(0);\n\n const transactionBatch = new TransactionBatch(\n chain,\n validatedOverallBatchMinGasPrice,\n );\n\n if (broadcasterFeeERC20AmountRecipient && !sendWithPublicWallet) {\n assertValidMatrixAddress(broadcasterFeeERC20AmountRecipient.recipientAddress);\n\n // Add Broadcaster Fee - must be first transaction in the batch, and first output for the transaction.\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n broadcasterFeeERC20AmountRecipient,\n matrixWallet,\n OutputType.RelayerFee,\n false, // showSenderAddressToRecipient - never show sender for Broadcaster fees\n undefined, // memoText\n ),\n );\n }\n\n erc20AmountRecipients.forEach(\n (erc20AmountRecipient: MatrixERC20AmountRecipient) => {\n addTransactionOutputsERC20(\n proofType,\n transactionBatch,\n erc20AmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n nftAmountRecipients.forEach(\n (nftAmountRecipient: MatrixNFTAmountRecipient) => {\n addTransactionOutputsNFT(\n proofType,\n transactionBatch,\n nftAmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n );\n },\n );\n\n const txBatches = await generateAllProofs(\n transactionBatch,\n matrixWallet,\n encryptionKey,\n useDummyProof,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\n );\n return txBatches;\n};\n\nconst addTransactionOutputsERC20 = (\n proofType: ProofType,\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferERC20(\n transactionBatch,\n erc20AmountRecipient,\n matrixWallet,\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: MatrixNFTAmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n switch (proofType) {\n case ProofType.Transfer: {\n addTransactionOutputsTransferNFT(\n transactionBatch,\n nftAmountRecipient,\n matrixWallet,\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: MatrixERC20AmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidMatrixAddress(erc20AmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n matrixWallet,\n OutputType.Transfer,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldERC20 = (\n transactionBatch: TransactionBatch,\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, amount } = erc20AmountRecipient;\n\n assertValidEthAddress(recipientAddress);\n\n const tokenData = getTokenDataERC20(erc20AmountRecipient.tokenAddress);\n\n transactionBatch.addUnshieldData({\n toAddress: erc20AmountRecipient.recipientAddress,\n value: amount,\n tokenData,\n allowOverride,\n });\n};\n\nconst addTransactionOutputsTransferNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: MatrixNFTAmountRecipient,\n matrixWallet: MatrixWallet,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n) => {\n assertValidMatrixAddress(nftAmountRecipient.recipientAddress);\n\n transactionBatch.addOutput(\n nftNoteFromNFTAmountRecipient(\n nftAmountRecipient,\n matrixWallet,\n showSenderAddressToRecipient,\n memoText,\n ),\n );\n};\n\nconst addTransactionOutputsUnshieldNFT = (\n transactionBatch: TransactionBatch,\n nftAmountRecipient: MatrixNFTAmountRecipient,\n allowOverride?: boolean,\n) => {\n const { recipientAddress, nftAddress, tokenSubID, nftTokenType, amount } =\n nftAmountRecipient;\n\n assertValidEthAddress(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 = async (\n transactionBatch: TransactionBatch,\n matrixWallet: MatrixWallet,\n encryptionKey: string,\n useDummyProof: boolean,\n progressCallback: GenerateTransactionsProgressCallback,\n originShieldTxidForSpendabilityOverride?: string,\n): Promise<{\n provedTransactions: TransactionStructV3[];\n}> => {\n const prover = getProver();\n if (useDummyProof) {\n return {\n provedTransactions: await transactionBatch.generateDummyTransactions(\n prover,\n matrixWallet,\n encryptionKey,\n originShieldTxidForSpendabilityOverride,\n ),\n };\n }\n return transactionBatch.generateTransactions(\n prover,\n matrixWallet,\n encryptionKey,\n progressCallback,\n originShieldTxidForSpendabilityOverride,\n );\n};\n"]}
|
|
@@ -13,7 +13,7 @@ const generateShieldBaseTokenTransaction = async (networkName, matrixAddress, sh
|
|
|
13
13
|
const { amount, tokenAddress } = wrappedERC20Amount;
|
|
14
14
|
const shield = new engine_1.ShieldNoteERC20(masterPublicKey, random, amount, tokenAddress);
|
|
15
15
|
const shieldRequest = await shield.serialize(engine_1.ByteUtils.hexToBytes(shieldPrivateKey), viewingPublicKey);
|
|
16
|
-
const { chain } = shared_models_1.
|
|
16
|
+
const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
|
|
17
17
|
const transaction = await engine_1.MatrixContracts.getRelayAdaptContract(chain).populateShieldBaseToken(shieldRequest);
|
|
18
18
|
return transaction;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-shield-base-token.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield-base-token.ts"],"names":[],"mappings":";;;AAAA,iEAOuC;AACvC,qDAI0B;AAC1B,mDAKgC;AAChC,6CAA2D;AAE3D,uDAAqE;AAErE,MAAM,kCAAkC,GAAG,KAAK,EAC9C,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACP,EAAE;IAChC,IAAI;QACF,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GACzC,qBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,kBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;QAEpD,MAAM,MAAM,GAAG,IAAI,wBAAe,CAChC,eAAe,EACf,MAAM,EACN,MAAM,EACN,YAAY,CACb,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAC1C,kBAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"tx-shield-base-token.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield-base-token.ts"],"names":[],"mappings":";;;AAAA,iEAOuC;AACvC,qDAI0B;AAC1B,mDAKgC;AAChC,6CAA2D;AAE3D,uDAAqE;AAErE,MAAM,kCAAkC,GAAG,KAAK,EAC9C,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACP,EAAE;IAChC,IAAI;QACF,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GACzC,qBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,kBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;QAEpD,MAAM,MAAM,GAAG,IAAI,wBAAe,CAChC,eAAe,EACf,MAAM,EACN,MAAM,EACN,YAAY,CACb,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAC1C,kBAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC;QAChD,MAAM,WAAW,GACf,MAAM,wBAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,uBAAuB,CACxE,aAAa,CACd,CAAC;QAEJ,OAAO,WAAW,CAAC;KACpB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AAEK,MAAM,uBAAuB,GAAG,KAAK,EAC1C,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACrC,UAAkC,EACU,EAAE;IAC9C,IAAI;QACF,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,MAAM,kCAAkC,CAC1D,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,MAAM,oBAAoB,GAAG,IAAI,CAAC;YAClC,IAAA,4CAA2B,EACzB,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,CACrB,CAAC;SACH;QAED,OAAO;YACL,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,+BAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACjE;AACH,CAAC,CAAC;AAjCW,QAAA,uBAAuB,2BAiClC;AAEK,MAAM,6BAA6B,GAAG,KAAK,EAChD,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACrC,iBAAyB,EACsB,EAAE;IACjD,IAAI;QACF,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,MAAM,kCAAkC,CAC1D,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;QAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC;QAClC,MAAM,2BAA2B,GAAG,KAAK,CAAC;QAC1C,OAAO,IAAA,oCAAmB,EACxB,MAAM,IAAA,+BAAc,EAClB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,CACN,EACD,SAAS,EAAE,2BAA2B;QACtC,2BAA2B,CAC5B,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,qCAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACvE;AACH,CAAC,CAAC;AAjCW,QAAA,6BAA6B,iCAiCxC","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n TransactionGasDetails,\n getNetworkConfig,\n} from '@matrix-privacy/shared-models';\nimport {\n gasEstimateResponse,\n getGasEstimate,\n setGasDetailsForTransaction,\n} from './tx-gas-details';\nimport {\n ShieldNoteERC20,\n MatrixEngine,\n ByteUtils,\n MatrixContracts,\n} from '@matrix-privacy/engine';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { assertValidMatrixAddress } from '../matrix/wallets/wallets';\n\nconst generateShieldBaseTokenTransaction = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n): Promise<ContractTransaction> => {\n try {\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n const random = ByteUtils.randomHex(16);\n\n const { amount, tokenAddress } = wrappedERC20Amount;\n\n const shield = new ShieldNoteERC20(\n masterPublicKey,\n random,\n amount,\n tokenAddress,\n );\n\n const shieldRequest = await shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n\n const { chain } = getNetworkConfig(networkName);\n const transaction =\n await MatrixContracts.getRelayAdaptContract(chain).populateShieldBaseToken(\n shieldRequest,\n );\n\n return transaction;\n } catch (err) {\n throw reportAndSanitizeError(generateShieldBaseTokenTransaction.name, err);\n }\n};\n\nexport const populateShieldBaseToken = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n gasDetails?: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n assertValidMatrixAddress(matrixAddress);\n\n const transaction = await generateShieldBaseTokenTransaction(\n networkName,\n matrixAddress,\n shieldPrivateKey,\n wrappedERC20Amount,\n );\n\n if (gasDetails) {\n const sendWithPublicWallet = true;\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n }\n\n return {\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateShieldBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForShieldBaseToken = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n fromWalletAddress: string,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n assertValidMatrixAddress(matrixAddress);\n\n const transaction = await generateShieldBaseTokenTransaction(\n networkName,\n matrixAddress,\n shieldPrivateKey,\n wrappedERC20Amount,\n );\n\n const sendWithPublicWallet = true;\n const isGasEstimateWithDummyProof = false;\n return gasEstimateResponse(\n await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n false, // isCrossContractCall\n ),\n undefined, // broadcasterFeeCommitment\n isGasEstimateWithDummyProof,\n );\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForShieldBaseToken.name, err);\n }\n};\n"]}
|
|
@@ -36,7 +36,7 @@ const generateShieldTransaction = async (networkName, shieldPrivateKey, erc20Amo
|
|
|
36
36
|
...erc20AmountRecipients.map(erc20AmountRecipient => generateERC20ShieldRequests(erc20AmountRecipient, random, shieldPrivateKey)),
|
|
37
37
|
...nftAmountRecipients.map(nftAmountRecipient => generateNFTShieldRequests(nftAmountRecipient, random, shieldPrivateKey)),
|
|
38
38
|
]);
|
|
39
|
-
const chain = shared_models_1.
|
|
39
|
+
const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
|
|
40
40
|
const transaction = await engine_1.MatrixContracts.generateShield(chain, shieldInputs);
|
|
41
41
|
return transaction;
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-shield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield.ts"],"names":[],"mappings":";;;AAAA,iEASuC;AACvC,mDASgC;AAChC,qDAI0B;AAC1B,uEAAkF;AAClF,6CAA2D;AAE3D,+CAA6D;AAEtD,MAAM,mCAAmC,GAAG,GAAG,EAAE;IACtD,OAAO,mBAAU,CAAC,mCAAmC,EAAE,CAAC;AAC1D,CAAC,CAAC;AAFW,QAAA,mCAAmC,uCAE9C;AAEF,MAAM,2BAA2B,GAAG,KAAK,EACvC,oBAAgD,EAChD,MAAc,EACd,gBAAwB,EACM,EAAE;IAChC,MAAM,aAAa,GAAG,oBAAoB,CAAC,gBAAgB,CAAC;IAE5D,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;IAExC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GACzC,qBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,IAAI,wBAAe,CAChC,eAAe,EACf,MAAM,EACN,oBAAoB,CAAC,MAAM,EAC3B,oBAAoB,CAAC,YAAY,CAClC,CAAC;IACF,OAAO,MAAM,CAAC,SAAS,CACrB,kBAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,KAAK,EACrC,kBAA4C,EAC5C,MAAc,EACd,gBAAwB,EACM,EAAE;IAChC,MAAM,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,CAAC;IAE1D,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;IAExC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GACzC,qBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAE5C,MAAM,KAAK,GACT,kBAAkB,CAAC,YAAY,KAAK,4BAAY,CAAC,MAAM;QACrD,CAAC,CAAC,0BAAiB;QACnB,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAEhC,MAAM,YAAY,GAChB,IAAA,+DAAqC,EAAC,kBAAkB,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,IAAI,sBAAa,CAC9B,eAAe,EACf,MAAM,EACN,KAAK,EACL,YAAY,CACb,CAAC;IACF,OAAO,MAAM,CAAC,SAAS,CACrB,kBAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,yBAAyB,GAAG,KAAK,EAC5C,WAAwB,EACxB,gBAAwB,EACxB,qBAAmD,EACnD,mBAA+C,EACjB,EAAE;IAChC,IAAI;QACF,MAAM,MAAM,GAAG,kBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,YAAY,GAA0B,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,GAAG,qBAAqB,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAClD,2BAA2B,CACzB,oBAAoB,EACpB,MAAM,EACN,gBAAgB,CACjB,CACF;YACD,GAAG,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAC9C,yBAAyB,CAAC,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CACxE;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"tx-shield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n NetworkName,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n NFTTokenType,\n TransactionGasDetails,\n getNetworkConfig,\n} from '@matrix-privacy/shared-models';\nimport {\n ShieldNote,\n MatrixEngine,\n ShieldRequestStruct,\n ByteUtils,\n ShieldNoteERC20,\n ShieldNoteNFT,\n ERC721_NOTE_VALUE,\n MatrixContracts,\n} from '@matrix-privacy/engine';\nimport {\n gasEstimateResponse,\n getGasEstimate,\n setGasDetailsForTransaction,\n} from './tx-gas-details';\nimport { createNFTTokenDataFromMatrixNFTAmount } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { assertValidMatrixAddress } from '../matrix/wallets';\n\nexport const getShieldPrivateKeySignatureMessage = () => {\n return ShieldNote.getShieldPrivateKeySignatureMessage();\n};\n\nconst generateERC20ShieldRequests = async (\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n random: string,\n shieldPrivateKey: string,\n): Promise<ShieldRequestStruct> => {\n const matrixAddress = erc20AmountRecipient.recipientAddress;\n\n assertValidMatrixAddress(matrixAddress);\n\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n\n const shield = new ShieldNoteERC20(\n masterPublicKey,\n random,\n erc20AmountRecipient.amount,\n erc20AmountRecipient.tokenAddress,\n );\n return shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n};\n\nconst generateNFTShieldRequests = async (\n nftAmountRecipient: MatrixNFTAmountRecipient,\n random: string,\n shieldPrivateKey: string,\n): Promise<ShieldRequestStruct> => {\n const matrixAddress = nftAmountRecipient.recipientAddress;\n\n assertValidMatrixAddress(matrixAddress);\n\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n\n const value =\n nftAmountRecipient.nftTokenType === NFTTokenType.ERC721\n ? ERC721_NOTE_VALUE\n : nftAmountRecipient.amount;\n\n const nftTokenData =\n createNFTTokenDataFromMatrixNFTAmount(nftAmountRecipient);\n\n const shield = new ShieldNoteNFT(\n masterPublicKey,\n random,\n value,\n nftTokenData,\n );\n return shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n};\n\nexport const generateShieldTransaction = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n): Promise<ContractTransaction> => {\n try {\n const random = ByteUtils.randomHex(16);\n\n const shieldInputs: ShieldRequestStruct[] = await Promise.all([\n ...erc20AmountRecipients.map(erc20AmountRecipient =>\n generateERC20ShieldRequests(\n erc20AmountRecipient,\n random,\n shieldPrivateKey,\n ),\n ),\n ...nftAmountRecipients.map(nftAmountRecipient =>\n generateNFTShieldRequests(nftAmountRecipient, random, shieldPrivateKey),\n ),\n ]);\n\n const chain = getNetworkConfig(networkName).chain;\n const transaction = await MatrixContracts.generateShield(\n chain,\n shieldInputs,\n );\n return transaction;\n } catch (err) {\n throw reportAndSanitizeError(generateShieldTransaction.name, err);\n }\n};\n\nexport const populateShield = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n gasDetails?: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const transaction = await generateShieldTransaction(\n networkName,\n shieldPrivateKey,\n erc20AmountRecipients,\n nftAmountRecipients,\n );\n\n if (gasDetails) {\n const sendWithPublicWallet = true;\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n }\n\n return {\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateShield.name, err);\n }\n};\n\nexport const gasEstimateForShield = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n fromWalletAddress: string,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const transaction = await generateShieldTransaction(\n networkName,\n shieldPrivateKey,\n erc20AmountRecipients,\n nftAmountRecipients,\n );\n\n const sendWithPublicWallet = true;\n const isGasEstimateWithDummyProof = false;\n return gasEstimateResponse(\n await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n false, // isCrossContractCall\n ),\n undefined, // broadcasterFeeCommitment\n isGasEstimateWithDummyProof,\n );\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForShield.name, err);\n }\n};\n"]}
|
|
@@ -141,7 +141,7 @@ async function getTokenOwnerWithFallback(receipt, transaction, contractAddress)
|
|
|
141
141
|
}
|
|
142
142
|
const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (networkName, matrixWalletID, originalShieldTxid) => {
|
|
143
143
|
const wallet = (0, matrix_1.walletForID)(matrixWalletID);
|
|
144
|
-
const chain = shared_models_1.
|
|
144
|
+
const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
|
|
145
145
|
const balances = await wallet.getTokenBalancesForUnshieldToOrigin(chain, originalShieldTxid);
|
|
146
146
|
const provider = (0, matrix_1.getFallbackProviderForNetwork)(networkName);
|
|
147
147
|
const [transaction, receipt] = await Promise.all([
|
|
@@ -154,7 +154,7 @@ const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (networkName, ma
|
|
|
154
154
|
if (!receipt) {
|
|
155
155
|
throw new Error('Could not find shield transaction receipt from RPC');
|
|
156
156
|
}
|
|
157
|
-
const network = shared_models_1.
|
|
157
|
+
const network = (0, shared_models_1.getNetworkConfig)(networkName);
|
|
158
158
|
const contractAddress = network.accumulatorContract;
|
|
159
159
|
if (!contractAddress) {
|
|
160
160
|
throw new Error(`Could not find contract for network: ${networkName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-unshield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-unshield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n TransactionGasDetails,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n DUMMY_FROM_ADDRESS,\n generateDummyProofTransactions,\n generateTransact,\n generateUnshieldBaseToken,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { createRelayAdaptUnshieldERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { gasEstimateResponse, getGasEstimate } from './tx-gas-details';\nimport {\n walletForID,\n getFallbackProviderForNetwork,\n getSerializedERC20Balances,\n getSerializedNFTBalances,\n} from '../matrix';\nimport { TransactionReceipt, TransactionResponse } from 'ethers';\n\nconst ERC20_TRANSFER_EVENT_SIGNATURE = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';\n\nexport const populateProvedUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshield.name, err);\n }\n};\n\nexport const populateProvedUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n wrappedERC20Amount: MatrixERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n const relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.UnshieldBaseToken,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) =>\n generateTransact(\n txs,\n networkName,\n true, // useDummyProof\n ),\n networkName,\n matrixWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenUnshield.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.UnshieldBaseToken,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n return generateUnshieldBaseToken(\n txs,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n true, // useDummyProof (for gas estimation)\n sendWithPublicWallet,\n );\n },\n networkName,\n matrixWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldBaseToken.name,\n err,\n );\n }\n};\n\nasync function extractTokenOwnerFromTransferEvents(\n receipt: TransactionReceipt,\n matrixContractAddress: string\n): Promise<string> {\n const matrixAddressLower = matrixContractAddress.toLowerCase();\n\n const potentialOwners: Set<string> = new Set();\n\n for (const log of receipt.logs) {\n try {\n if (log.topics.length < 3) {\n continue;\n }\n\n if (log.topics[0] !== ERC20_TRANSFER_EVENT_SIGNATURE) {\n continue;\n }\n // topics[0] = event signature hash\n const toAddress = `0x${ log.topics[2].slice(-40).toLowerCase()}`;\n\n if (toAddress === matrixAddressLower) {\n const fromAddress = `0x${ log.topics[1].slice(-40)}`;\n potentialOwners.add(fromAddress);\n }\n } catch (error) {\n console.warn('Error parsing log for token owner extraction:', error);\n continue;\n }\n }\n\n if (potentialOwners.size === 1) {\n const [owner] = Array.from(potentialOwners);\n return owner;\n }\n // this handles cases where there are multiple deposits in one transaction\n if (potentialOwners.size > 1) {\n const [firstOwner] = Array.from(potentialOwners);\n return firstOwner;\n }\n\n throw new Error(\n 'Could not find token owner: No Transfer event to contract detected in transaction'\n );\n}\n\nasync function getTokenOwnerWithFallback(\n receipt: TransactionReceipt,\n transaction: TransactionResponse,\n contractAddress: string\n): Promise<string> {\n try {\n const tokenOwner = await extractTokenOwnerFromTransferEvents(\n receipt,\n contractAddress\n );\n return tokenOwner;\n } catch (error) {\n return transaction.from;\n }\n}\n\nexport const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n originalShieldTxid: string,\n): Promise<{\n erc20AmountRecipients: MatrixERC20AmountRecipient[];\n nftAmountRecipients: MatrixNFTAmountRecipient[];\n}> => {\n const wallet = walletForID(matrixWalletID);\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const balances = await wallet.getTokenBalancesForUnshieldToOrigin(\n chain,\n originalShieldTxid,\n );\n\n const provider = getFallbackProviderForNetwork(networkName);\n\n const [transaction, receipt] = await Promise.all([\n provider.getTransaction(originalShieldTxid),\n provider.getTransactionReceipt(originalShieldTxid),\n ]);\n\n if (!transaction) {\n throw new Error('Could not find shield transaction from RPC');\n }\n\n if (!receipt) {\n throw new Error('Could not find shield transaction receipt from RPC');\n }\n\n const network = NETWORK_CONFIG[networkName];\n const contractAddress = network.accumulatorContract;\n\n if (!contractAddress) {\n throw new Error(`Could not find contract for network: ${networkName}`);\n }\n\n const recipientAddress = await getTokenOwnerWithFallback(\n receipt,\n transaction,\n contractAddress\n );\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getSerializedNFTBalances(balances);\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = erc20Amounts\n .filter(({ amount }) => amount > 0n)\n .map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = nftAmounts\n .filter(({ amount }) => amount > 0n)\n .map(nftAmount => ({\n ...nftAmount,\n recipientAddress,\n }));\n return { erc20AmountRecipients, nftAmountRecipients };\n};\n\nexport const populateProvedUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n undefined, // overallBatchMinGasPrice\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldToOrigin.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldToOrigin = async (\n originalShieldTxid: string,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const overallBatchMinGasPrice = 0n;\n\n const serializedTransactions = await generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20Amount\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n originalShieldTxid, // originShieldTxidForSpendabilityOverride\n );\n const transaction = await generateTransact(\n serializedTransactions,\n networkName,\n true, // useDummyProof\n );\n\n const gasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n true, // sendWithPublicWallet\n false, // isCrossContractCall\n );\n\n return gasEstimateResponse(\n gasEstimate,\n undefined, // broadcasterFeeCommitment\n true, // isGasEstimateWithDummyProof\n );\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldToOrigin.name,\n err,\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"tx-unshield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-unshield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n TransactionGasDetails,\n getNetworkConfig,\n} from '@matrix-privacy/shared-models';\nimport {\n DUMMY_FROM_ADDRESS,\n generateDummyProofTransactions,\n generateTransact,\n generateUnshieldBaseToken,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { createRelayAdaptUnshieldERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { gasEstimateResponse, getGasEstimate } from './tx-gas-details';\nimport {\n walletForID,\n getFallbackProviderForNetwork,\n getSerializedERC20Balances,\n getSerializedNFTBalances,\n} from '../matrix';\nimport { TransactionReceipt, TransactionResponse } from 'ethers';\n\nconst ERC20_TRANSFER_EVENT_SIGNATURE = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';\n\nexport const populateProvedUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshield.name, err);\n }\n};\n\nexport const populateProvedUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n wrappedERC20Amount: MatrixERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n const relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.UnshieldBaseToken,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) =>\n generateTransact(\n txs,\n networkName,\n true, // useDummyProof\n ),\n networkName,\n matrixWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenUnshield.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.UnshieldBaseToken,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n return generateUnshieldBaseToken(\n txs,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n true, // useDummyProof (for gas estimation)\n sendWithPublicWallet,\n );\n },\n networkName,\n matrixWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldBaseToken.name,\n err,\n );\n }\n};\n\nasync function extractTokenOwnerFromTransferEvents(\n receipt: TransactionReceipt,\n matrixContractAddress: string\n): Promise<string> {\n const matrixAddressLower = matrixContractAddress.toLowerCase();\n\n const potentialOwners: Set<string> = new Set();\n\n for (const log of receipt.logs) {\n try {\n if (log.topics.length < 3) {\n continue;\n }\n\n if (log.topics[0] !== ERC20_TRANSFER_EVENT_SIGNATURE) {\n continue;\n }\n // topics[0] = event signature hash\n const toAddress = `0x${ log.topics[2].slice(-40).toLowerCase()}`;\n\n if (toAddress === matrixAddressLower) {\n const fromAddress = `0x${ log.topics[1].slice(-40)}`;\n potentialOwners.add(fromAddress);\n }\n } catch (error) {\n console.warn('Error parsing log for token owner extraction:', error);\n continue;\n }\n }\n\n if (potentialOwners.size === 1) {\n const [owner] = Array.from(potentialOwners);\n return owner;\n }\n // this handles cases where there are multiple deposits in one transaction\n if (potentialOwners.size > 1) {\n const [firstOwner] = Array.from(potentialOwners);\n return firstOwner;\n }\n\n throw new Error(\n 'Could not find token owner: No Transfer event to contract detected in transaction'\n );\n}\n\nasync function getTokenOwnerWithFallback(\n receipt: TransactionReceipt,\n transaction: TransactionResponse,\n contractAddress: string\n): Promise<string> {\n try {\n const tokenOwner = await extractTokenOwnerFromTransferEvents(\n receipt,\n contractAddress\n );\n return tokenOwner;\n } catch (error) {\n return transaction.from;\n }\n}\n\nexport const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n originalShieldTxid: string,\n): Promise<{\n erc20AmountRecipients: MatrixERC20AmountRecipient[];\n nftAmountRecipients: MatrixNFTAmountRecipient[];\n}> => {\n const wallet = walletForID(matrixWalletID);\n const chain = getNetworkConfig(networkName).chain;\n\n const balances = await wallet.getTokenBalancesForUnshieldToOrigin(\n chain,\n originalShieldTxid,\n );\n\n const provider = getFallbackProviderForNetwork(networkName);\n\n const [transaction, receipt] = await Promise.all([\n provider.getTransaction(originalShieldTxid),\n provider.getTransactionReceipt(originalShieldTxid),\n ]);\n\n if (!transaction) {\n throw new Error('Could not find shield transaction from RPC');\n }\n\n if (!receipt) {\n throw new Error('Could not find shield transaction receipt from RPC');\n }\n\n const network = getNetworkConfig(networkName);\n const contractAddress = network.accumulatorContract;\n\n if (!contractAddress) {\n throw new Error(`Could not find contract for network: ${networkName}`);\n }\n\n const recipientAddress = await getTokenOwnerWithFallback(\n receipt,\n transaction,\n contractAddress\n );\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getSerializedNFTBalances(balances);\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = erc20Amounts\n .filter(({ amount }) => amount > 0n)\n .map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = nftAmounts\n .filter(({ amount }) => amount > 0n)\n .map(nftAmount => ({\n ...nftAmount,\n recipientAddress,\n }));\n return { erc20AmountRecipients, nftAmountRecipients };\n};\n\nexport const populateProvedUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n undefined, // overallBatchMinGasPrice\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldToOrigin.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldToOrigin = async (\n originalShieldTxid: string,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const overallBatchMinGasPrice = 0n;\n\n const serializedTransactions = await generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20Amount\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n originalShieldTxid, // originShieldTxidForSpendabilityOverride\n );\n const transaction = await generateTransact(\n serializedTransactions,\n networkName,\n true, // useDummyProof\n );\n\n const gasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n true, // sendWithPublicWallet\n false, // isCrossContractCall\n );\n\n return gasEstimateResponse(\n gasEstimate,\n undefined, // broadcasterFeeCommitment\n true, // isGasEstimateWithDummyProof\n );\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldToOrigin.name,\n err,\n );\n }\n};\n"]}
|
package/dist/tests/local-e2e.js
CHANGED
|
@@ -146,7 +146,7 @@ async function main() {
|
|
|
146
146
|
ok('Config loaded');
|
|
147
147
|
// ── Step 1: Patch NETWORK_CONFIG ────────────────────────────
|
|
148
148
|
step(1, 'Patch NETWORK_CONFIG with deployed addresses');
|
|
149
|
-
const networkConfig = shared_models_1.
|
|
149
|
+
const networkConfig = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat);
|
|
150
150
|
networkConfig.chain.id = config.chainId;
|
|
151
151
|
networkConfig.matrixContract = config.matrixProxy;
|
|
152
152
|
networkConfig.accumulatorContract = config.accumulatorProxy;
|
|
@@ -236,7 +236,7 @@ async function main() {
|
|
|
236
236
|
(0, balance_update_1.setOnBalanceUpdateCallback)(() => {
|
|
237
237
|
balanceUpdated = true;
|
|
238
238
|
});
|
|
239
|
-
const { chain } = shared_models_1.
|
|
239
|
+
const { chain } = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat);
|
|
240
240
|
(0, core_1.getEngine)().scanContractHistory(chain, undefined);
|
|
241
241
|
// Wait for initial scan (should be fast on empty chain)
|
|
242
242
|
const scanTimeout = setTimeout(() => {
|