@matrix-privacy/wallet 0.0.1
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/.eslintrc.js +73 -0
- package/.prettierrc.js +21 -0
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/__tests__/index.test.d.ts +1 -0
- package/dist/__tests__/index.test.js +13 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js +172 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -0
- package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
- package/dist/services/artifacts/artifact-downloader.js +142 -0
- package/dist/services/artifacts/artifact-downloader.js.map +1 -0
- package/dist/services/artifacts/artifact-hash.d.ts +3 -0
- package/dist/services/artifacts/artifact-hash.js +53 -0
- package/dist/services/artifacts/artifact-hash.js.map +1 -0
- package/dist/services/artifacts/artifact-store.d.ts +11 -0
- package/dist/services/artifacts/artifact-store.js +15 -0
- package/dist/services/artifacts/artifact-store.js.map +1 -0
- package/dist/services/artifacts/artifact-util.d.ts +7 -0
- package/dist/services/artifacts/artifact-util.js +64 -0
- package/dist/services/artifacts/artifact-util.js.map +1 -0
- package/dist/services/artifacts/index.d.ts +2 -0
- package/dist/services/artifacts/index.js +19 -0
- package/dist/services/artifacts/index.js.map +1 -0
- package/dist/services/artifacts/json/artifact-v2-hashes.json +467 -0
- package/dist/services/ethers/__tests__/ethers-util.test.d.ts +1 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js +19 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js.map +1 -0
- package/dist/services/ethers/ethers-util.d.ts +1 -0
- package/dist/services/ethers/ethers-util.js +9 -0
- package/dist/services/ethers/ethers-util.js.map +1 -0
- package/dist/services/ethers/index.d.ts +1 -0
- package/dist/services/ethers/index.js +18 -0
- package/dist/services/ethers/index.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.js +30 -0
- package/dist/services/matrix/core/__tests__/engine.test.js.map +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.js +54 -0
- package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -0
- package/dist/services/matrix/core/artifacts.d.ts +10 -0
- package/dist/services/matrix/core/artifacts.js +70 -0
- package/dist/services/matrix/core/artifacts.js.map +1 -0
- package/dist/services/matrix/core/engine.d.ts +4 -0
- package/dist/services/matrix/core/engine.js +21 -0
- package/dist/services/matrix/core/engine.js.map +1 -0
- package/dist/services/matrix/core/index.d.ts +8 -0
- package/dist/services/matrix/core/index.js +25 -0
- package/dist/services/matrix/core/index.js.map +1 -0
- package/dist/services/matrix/core/init.d.ts +21 -0
- package/dist/services/matrix/core/init.js +79 -0
- package/dist/services/matrix/core/init.js.map +1 -0
- package/dist/services/matrix/core/load-provider.d.ts +9 -0
- package/dist/services/matrix/core/load-provider.js +100 -0
- package/dist/services/matrix/core/load-provider.js.map +1 -0
- package/dist/services/matrix/core/merkletree.d.ts +5 -0
- package/dist/services/matrix/core/merkletree.js +40 -0
- package/dist/services/matrix/core/merkletree.js.map +1 -0
- package/dist/services/matrix/core/prover.d.ts +3 -0
- package/dist/services/matrix/core/prover.js +14 -0
- package/dist/services/matrix/core/prover.js.map +1 -0
- package/dist/services/matrix/core/providers.d.ts +9 -0
- package/dist/services/matrix/core/providers.js +31 -0
- package/dist/services/matrix/core/providers.js.map +1 -0
- package/dist/services/matrix/core/shields.d.ts +11 -0
- package/dist/services/matrix/core/shields.js +24 -0
- package/dist/services/matrix/core/shields.js.map +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.d.ts +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js +249 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js.map +1 -0
- package/dist/services/matrix/history/transaction-history.d.ts +4 -0
- package/dist/services/matrix/history/transaction-history.js +182 -0
- package/dist/services/matrix/history/transaction-history.js.map +1 -0
- package/dist/services/matrix/index.d.ts +4 -0
- package/dist/services/matrix/index.js +21 -0
- package/dist/services/matrix/index.js.map +1 -0
- package/dist/services/matrix/process/extract-transaction-data.d.ts +3 -0
- package/dist/services/matrix/process/extract-transaction-data.js +19 -0
- package/dist/services/matrix/process/extract-transaction-data.js.map +1 -0
- package/dist/services/matrix/process/index.d.ts +1 -0
- package/dist/services/matrix/process/index.js +18 -0
- package/dist/services/matrix/process/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +56 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.d.ts +8 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js +103 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js +19861 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.d.ts +1352 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js +4 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.d.ts +1680 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js +348 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js +99 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/graph-query.d.ts +5 -0
- package/dist/services/matrix/quick-sync/graph-query.js +26 -0
- package/dist/services/matrix/quick-sync/graph-query.js.map +1 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.d.ts +2 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js +9 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js.map +1 -0
- package/dist/services/matrix/quick-sync/shared-formatters.d.ts +8 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js +36 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js.map +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js +23 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js.map +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js +62 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js.map +1 -0
- package/dist/services/matrix/util/bytes.d.ts +5 -0
- package/dist/services/matrix/util/bytes.js +22 -0
- package/dist/services/matrix/util/bytes.js.map +1 -0
- package/dist/services/matrix/util/crypto.d.ts +14 -0
- package/dist/services/matrix/util/crypto.js +80 -0
- package/dist/services/matrix/util/crypto.js.map +1 -0
- package/dist/services/matrix/util/graph-util.d.ts +3 -0
- package/dist/services/matrix/util/graph-util.js +13 -0
- package/dist/services/matrix/util/graph-util.js.map +1 -0
- package/dist/services/matrix/util/index.d.ts +2 -0
- package/dist/services/matrix/util/index.js +19 -0
- package/dist/services/matrix/util/index.js.map +1 -0
- package/dist/services/matrix/util/runtime.d.ts +2 -0
- package/dist/services/matrix/util/runtime.js +8 -0
- package/dist/services/matrix/util/runtime.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js +48 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js +85 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js +59 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js +80 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js.map +1 -0
- package/dist/services/matrix/wallets/balance-update.d.ts +10 -0
- package/dist/services/matrix/wallets/balance-update.js +126 -0
- package/dist/services/matrix/wallets/balance-update.js.map +1 -0
- package/dist/services/matrix/wallets/balances.d.ts +3 -0
- package/dist/services/matrix/wallets/balances.js +32 -0
- package/dist/services/matrix/wallets/balances.js.map +1 -0
- package/dist/services/matrix/wallets/index.d.ts +4 -0
- package/dist/services/matrix/wallets/index.js +21 -0
- package/dist/services/matrix/wallets/index.js.map +1 -0
- package/dist/services/matrix/wallets/wallets.d.ts +22 -0
- package/dist/services/matrix/wallets/wallets.js +252 -0
- package/dist/services/matrix/wallets/wallets.js.map +1 -0
- package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +216 -0
- package/dist/services/transactions/__tests__/proof-cache.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js +114 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +376 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js +109 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js +193 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js +99 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js +146 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js +263 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js +759 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -0
- package/dist/services/transactions/index.d.ts +13 -0
- package/dist/services/transactions/index.js +30 -0
- package/dist/services/transactions/index.js.map +1 -0
- package/dist/services/transactions/proof-cache.d.ts +27 -0
- package/dist/services/transactions/proof-cache.js +130 -0
- package/dist/services/transactions/proof-cache.js.map +1 -0
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +12 -0
- package/dist/services/transactions/tx-cross-contract-calls.js +210 -0
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +5 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js +110 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -0
- package/dist/services/transactions/tx-gas-details.d.ts +5 -0
- package/dist/services/transactions/tx-gas-details.js +101 -0
- package/dist/services/transactions/tx-gas-details.js.map +1 -0
- package/dist/services/transactions/tx-generator.d.ts +13 -0
- package/dist/services/transactions/tx-generator.js +168 -0
- package/dist/services/transactions/tx-generator.js.map +1 -0
- package/dist/services/transactions/tx-notes.d.ts +11 -0
- package/dist/services/transactions/tx-notes.js +153 -0
- package/dist/services/transactions/tx-notes.js.map +1 -0
- package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
- package/dist/services/transactions/tx-nullifiers.js +17 -0
- package/dist/services/transactions/tx-nullifiers.js.map +1 -0
- package/dist/services/transactions/tx-proof-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-proof-transfer.js +39 -0
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
- package/dist/services/transactions/tx-proof-unshield.d.ts +5 -0
- package/dist/services/transactions/tx-proof-unshield.js +132 -0
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
- package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
- package/dist/services/transactions/tx-shield-base-token.js +55 -0
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
- package/dist/services/transactions/tx-shield.d.ts +6 -0
- package/dist/services/transactions/tx-shield.js +77 -0
- package/dist/services/transactions/tx-shield.js.map +1 -0
- package/dist/services/transactions/tx-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-transfer.js +39 -0
- package/dist/services/transactions/tx-transfer.js.map +1 -0
- package/dist/services/transactions/tx-unshield.d.ts +11 -0
- package/dist/services/transactions/tx-unshield.js +224 -0
- package/dist/services/transactions/tx-unshield.js.map +1 -0
- package/dist/tests/local-e2e.d.ts +13 -0
- package/dist/tests/local-e2e.js +487 -0
- package/dist/tests/local-e2e.js.map +1 -0
- package/dist/tests/mocks.test.d.ts +40 -0
- package/dist/tests/mocks.test.js +171 -0
- package/dist/tests/mocks.test.js.map +1 -0
- package/dist/tests/setup.test.d.ts +7 -0
- package/dist/tests/setup.test.js +88 -0
- package/dist/tests/setup.test.js.map +1 -0
- package/dist/tests/stubs/engine-stubs.test.d.ts +7 -0
- package/dist/tests/stubs/engine-stubs.test.js +72 -0
- package/dist/tests/stubs/engine-stubs.test.js.map +1 -0
- package/dist/utils/__tests__/blocked-address.test.d.ts +1 -0
- package/dist/utils/__tests__/blocked-address.test.js +23 -0
- package/dist/utils/__tests__/blocked-address.test.js.map +1 -0
- package/dist/utils/__tests__/logger.test.d.ts +1 -0
- package/dist/utils/__tests__/logger.test.js +28 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/__tests__/utils.test.d.ts +1 -0
- package/dist/utils/__tests__/utils.test.js +21 -0
- package/dist/utils/__tests__/utils.test.js.map +1 -0
- package/dist/utils/blocked-address.d.ts +2 -0
- package/dist/utils/blocked-address.js +17 -0
- package/dist/utils/blocked-address.js.map +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +20 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/gas-price.d.ts +6 -0
- package/dist/utils/gas-price.js +19 -0
- package/dist/utils/gas-price.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/utils.d.ts +4 -0
- package/dist/utils/utils.js +54 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +94 -0
- package/postinstall.js +52 -0
- package/react-native-shims.js +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-unshield.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-unshield.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon, { SinonStub, SinonSpy } from 'sinon';\nimport {\n MatrixContracts,\n MatrixWallet,\n RelayAdaptV3Contract,\n TransactionBatch,\n TransactionStructV3,\n getTokenDataERC20,\n getTokenDataNFT,\n} from '@matrix-privacy/engine';\nimport {\n MatrixERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n EVMGasType,\n MatrixERC20AmountRecipient,\n TransactionGasDetails,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n MOCK_BOUND_PARAMS_V3,\n MOCK_COMMITMENTS,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_FEE_TOKEN_DETAILS,\n MOCK_MNEMONIC,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD,\n MOCK_NULLIFIERS,\n MOCK_MATRIX_WALLET_ADDRESS,\n MOCK_TOKEN_ADDRESS,\n MOCK_TOKEN_ADDRESS_2,\n MOCK_TOKEN_AMOUNTS,\n MOCK_TOKEN_FEE,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n} from '../../../tests/mocks.test';\nimport {\n populateProvedUnshield,\n gasEstimateForUnprovenUnshield,\n populateProvedUnshieldBaseToken,\n gasEstimateForUnprovenUnshieldBaseToken,\n populateProvedUnshieldToOrigin,\n gasEstimateForUnprovenUnshieldToOrigin,\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin,\n} from '../tx-unshield';\nimport {\n generateUnshieldBaseTokenProof,\n generateUnshieldProof,\n generateUnshieldToOriginProof,\n} from '../tx-proof-unshield';\nimport * as txGasDetailsModule from '../tx-gas-details';\nimport * as matrixModule from '../../matrix';\nimport {\n createMatrixWallet,\n fullWalletForID,\n} from '../../matrix/wallets/wallets';\nimport { setFallbackProviderForNetwork, fallbackProviderMap } from '../../matrix/core/providers';\nimport { setCachedProvedTransaction } from '../proof-cache';\nimport { ContractTransaction, FallbackProvider } from 'ethers';\nimport {\n MOCK_SHIELD_TXID_FOR_BALANCES,\n MOCK_TOKEN_BALANCE,\n createEngineWalletBalancesStub,\n restoreEngineStubs,\n} from '../../../tests/stubs/engine-stubs.test';\n\n\nlet gasEstimateStub: SinonStub;\nlet railProveStub: SinonStub;\nlet railDummyProveStub: SinonStub;\nlet railTransactStub: SinonStub;\nlet relayAdaptPopulateUnshieldBaseToken: SinonStub;\nlet addUnshieldDataSpy: SinonSpy;\nlet erc20NoteSpy: SinonSpy;\n\nlet matrixWallet: MatrixWallet;\nlet broadcasterFeeERC20AmountRecipient: MatrixERC20AmountRecipient;\n\nconst hardhatRelayAdaptContract =\n NETWORK_CONFIG[NetworkName.Hardhat].relayAdaptContract;\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst mockERC20TokenData0 = getTokenDataERC20(\n MOCK_TOKEN_AMOUNTS[0].tokenAddress,\n);\nconst mockERC20TokenData1 = getTokenDataERC20(\n MOCK_TOKEN_AMOUNTS[1].tokenAddress,\n);\nconst mockNFTTokenData0 = getTokenDataNFT(\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[0].nftAddress,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[0].nftTokenType as 1 | 2,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[0].tokenSubID,\n);\nconst mockNFTTokenData1 = getTokenDataNFT(\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[1].nftAddress,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[1].nftTokenType as 1 | 2,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD[1].tokenSubID,\n);\n\nconst MOCK_TOKEN_AMOUNTS_DIFFERENT: MatrixERC20Amount[] = [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: BigInt(0x0100),\n },\n {\n tokenAddress: MOCK_TOKEN_ADDRESS_2,\n amount: BigInt(0x0300),\n },\n];\n\nconst overallBatchMinGasPrice = BigInt('0x1000');\n\nconst gasDetails: TransactionGasDetails = {\n evmGasType: EVMGasType.Type1,\n gasEstimate: 1000n,\n gasPrice: overallBatchMinGasPrice,\n};\nconst gasDetailsType2: TransactionGasDetails = {\n evmGasType: EVMGasType.Type2,\n gasEstimate: 1000n,\n maxFeePerGas: overallBatchMinGasPrice,\n maxPriorityFeePerGas: overallBatchMinGasPrice,\n};\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID: MatrixERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_MATRIX_WALLET_ADDRESS,\n }));\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS: MatrixERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n }));\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT: MatrixERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS_DIFFERENT.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n }));\n\nconst stubGasEstimateSuccess = () => {\n gasEstimateStub = Sinon.stub(txGasDetailsModule, 'getGasEstimate').resolves(\n BigInt('200'),\n );\n};\n\nconst stubGasEstimateFailure = () => {\n gasEstimateStub = Sinon.stub(txGasDetailsModule, 'getGasEstimate').rejects(\n new Error('test rejection - gas estimate'),\n );\n};\n\nconst spyOnSetUnshield = () => {\n addUnshieldDataSpy = Sinon.spy(TransactionBatch.prototype, 'addUnshieldData');\n};\n\ndescribe('tx-unshield', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const matrixWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(matrixWalletInfo)) {\n throw new Error('Expected matrixWalletInfo');\n }\n matrixWallet = fullWalletForID(matrixWalletInfo.id);\n\n const broadcasterWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(broadcasterWalletInfo)) {\n throw new Error('Expected broadcasterWalletInfo');\n }\n const broadcasterMatrixAddress = broadcasterWalletInfo.matrixAddress;\n\n broadcasterFeeERC20AmountRecipient = {\n ...MOCK_TOKEN_FEE,\n recipientAddress: broadcasterMatrixAddress,\n };\n\n railProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateTransactions',\n ).resolves({\n provedTransactions: [\n {\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV3)[],\n });\n railDummyProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateDummyTransactions',\n ).resolves([\n {\n commitments: MOCK_COMMITMENTS,\n boundParams: MOCK_BOUND_PARAMS_V3,\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV3)[]);\n railTransactStub = Sinon.stub(\n MatrixContracts,\n 'generateTransact',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n relayAdaptPopulateUnshieldBaseToken = Sinon.stub(\n RelayAdaptV3Contract.prototype,\n 'populateUnshieldBaseToken',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n\n // For Unshield To Origin\n await createEngineWalletBalancesStub(\n matrixWallet.addressKeys,\n MOCK_TOKEN_ADDRESS,\n 0,\n );\n });\n afterEach(() => {\n gasEstimateStub?.restore();\n addUnshieldDataSpy?.restore();\n erc20NoteSpy?.restore();\n });\n after(async () => {\n railProveStub.restore();\n railDummyProveStub.restore();\n railTransactStub.restore();\n relayAdaptPopulateUnshieldBaseToken.restore();\n restoreEngineStubs();\n await closeTestEngine();\n });\n\n // UNSHIELD - GAS ESTIMATE\n\n it('Should get gas estimates for valid Unshield', async () => {\n stubGasEstimateSuccess();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 1 - token 1\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - token 2\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 2 - token 1\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 2 - token 2\n ]);\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(30_000);\n\n it('Should get gas estimates for valid Unshield To Origin', async () => {\n stubGasEstimateSuccess();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenUnshieldToOrigin(\n MOCK_SHIELD_TXID_FOR_BALANCES, // originalShieldTxid\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: MOCK_TOKEN_BALANCE,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n },\n ],\n [], // nftAmountRecipients\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData0,\n value: MOCK_TOKEN_BALANCE,\n allowOverride: false,\n },\n ],\n ]);\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(30_000);\n\n it('Should error on gas estimates for invalid Unshield', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('Invalid wallet address.');\n });\n\n it('Should error on unshield gas estimate for ethers rejections', async () => {\n stubGasEstimateFailure();\n await expect(\n gasEstimateForUnprovenUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('test rejection - gas estimate');\n });\n\n // UNSHIELD BASE TOKEN - GAS ESTIMATE\n\n it('Should get gas estimates for valid Unshield base token', async () => {\n stubGasEstimateSuccess();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ],\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ],\n ]);\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(30_000);\n\n it('Should get gas estimates for valid Unshield base token: public wallet', async () => {\n stubGasEstimateSuccess();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n true, // sendWithPublicWallet\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ],\n ]);\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(30_000);\n\n it('Should error on gas estimates for invalid Unshield base token', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_MATRIX_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('Invalid wallet address.');\n });\n\n it('Should error on unshield base token gas estimate for ethers rejections', async () => {\n stubGasEstimateFailure();\n await expect(\n gasEstimateForUnprovenUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[0],\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('test rejection - gas estimate');\n });\n\n // UNSHIELD - PROVE AND SEND\n\n it('Should populate tx for valid Unshield', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnSetUnshield();\n await generateUnshieldProof(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 1 - erc20 token 1\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - erc20 token 2\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockNFTTokenData0,\n value: BigInt(1),\n allowOverride: false,\n },\n ], // run 1 - NFT token 1\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockNFTTokenData1,\n value: BigInt(2),\n allowOverride: false,\n },\n ], // run 1 - NFT token 2\n ]);\n const populateResponse = await populateProvedUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n );\n expect(populateResponse.nullifiers).to.deep.equal([\n '0x0000000000000000000000000000000000000000000000000000000000000001',\n '0x0000000000000000000000000000000000000000000000000000000000000002',\n ]);\n\n const { transaction } = populateResponse;\n\n expect(transaction.nonce).to.equal(undefined);\n expect(transaction.gasPrice?.toString()).to.equal('4096');\n expect(transaction.gasLimit).to.equal(1200n);\n expect(transaction.value?.toString()).to.equal(undefined);\n expect(transaction.data).to.equal('0x0123');\n expect(transaction.to).to.equal(undefined);\n expect(transaction.chainId).to.equal(undefined);\n expect(transaction.type).to.equal(1);\n });\n\n it('Should populate tx for valid Unshield To Origin', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnSetUnshield();\n await generateUnshieldToOriginProof(\n MOCK_SHIELD_TXID_FOR_BALANCES, // originalShieldTxid\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: MOCK_TOKEN_BALANCE,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n },\n ],\n [],\n () => {}, // progressCallback\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: MOCK_ETH_WALLET_ADDRESS,\n tokenData: mockERC20TokenData0,\n value: MOCK_TOKEN_BALANCE,\n allowOverride: false,\n },\n ], // run 1 - erc20 token 1\n ]);\n const populateResponse = await populateProvedUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: MOCK_TOKEN_BALANCE,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n },\n ],\n [],\n gasDetailsType2,\n );\n expect(populateResponse.nullifiers).to.deep.equal([\n '0x0000000000000000000000000000000000000000000000000000000000000001',\n '0x0000000000000000000000000000000000000000000000000000000000000002',\n ]);\n\n const { transaction } = populateResponse;\n\n expect(transaction.nonce).to.equal(undefined);\n expect(transaction.gasLimit).to.equal(1200n);\n expect(transaction.value?.toString()).to.equal(undefined);\n expect(transaction.data).to.equal('0x0123');\n expect(transaction.to).to.equal(undefined);\n expect(transaction.chainId).to.equal(undefined);\n expect(transaction.type).to.equal(2);\n });\n\n it('Should error on populate tx for invalid Unshield', async () => {\n stubGasEstimateSuccess();\n await expect(\n populateProvedUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT,\n MOCK_NFT_AMOUNT_RECIPIENTS_UNSHIELD,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate unshield tx for unproved transaction', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n await expect(\n populateProvedUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate unshield tx when params changed (invalid cached proof)', async () => {\n stubGasEstimateSuccess();\n await generateUnshieldProof(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n await expect(\n populateProvedUnshield(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT,\n [], // nftAmountRecipients\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n // UNSHIELD BASE TOKEN - PROVE AND SEND\n\n it('Should populate tx for valid Unshield Base Token', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnSetUnshield();\n await generateUnshieldBaseTokenProof(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[0],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n expect(addUnshieldDataSpy.called).to.be.true;\n expect(addUnshieldDataSpy.args).to.deep.equal([\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // Dummy prove.\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // Actual prove\n ]);\n const populateResponse = await populateProvedUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS[0],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n );\n\n const { transaction } = populateResponse;\n\n expect(transaction.nonce).to.equal(undefined);\n expect(transaction.gasPrice?.toString()).to.equal('4096');\n expect(transaction.gasLimit).to.equal(1200n);\n expect(transaction.value?.toString()).to.equal(undefined);\n expect(transaction.data).to.equal('0x0123');\n expect(transaction.to).to.equal(undefined);\n expect(transaction.chainId).to.equal(undefined);\n expect(transaction.type).to.equal(1);\n }).timeout(60_000);\n\n it('Should error on populate tx for invalid Unshield Base Token', async () => {\n stubGasEstimateSuccess();\n await expect(\n populateProvedUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT[1],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate Unshield Base Token tx for unproved transaction', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n await expect(\n populateProvedUnshieldBaseToken(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_TOKEN_AMOUNTS[0],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate Unshield Base Token tx when params changed (invalid cached proof)', async () => {\n stubGasEstimateSuccess();\n await generateUnshieldBaseTokenProof(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS[1],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n await expect(\n populateProvedUnshieldBaseToken(\n NetworkName.Hardhat,\n MOCK_ETH_WALLET_ADDRESS,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT[1],\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n describe('Token unshield owner', () => {\n let originalProvider: FallbackProvider | undefined;\n let hadOriginalProvider: boolean;\n\n const MOCK_USER_ADDRESS = '0x1234567890123456789012345678901234567890';\n const MOCK_RELAYER_ADDRESS = '0x9876543210987654321098765432109876543210';\n const MOCK_MATRIX_PROXY_ADDRESS = NETWORK_CONFIG[NetworkName.Hardhat].accumulatorContract;\n const MOCK_SHIELD_TXID = '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890';\n const ERC20_TRANSFER_EVENT_SIGNATURE = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';\n\n beforeEach(() => {\n // Save original provider if it exists\n try {\n originalProvider = matrixModule.getFallbackProviderForNetwork(NetworkName.Hardhat);\n hadOriginalProvider = true;\n } catch {\n originalProvider = undefined;\n hadOriginalProvider = false;\n }\n });\n\n afterEach(() => {\n // Restore original provider or clear it\n if (hadOriginalProvider && originalProvider) {\n setFallbackProviderForNetwork(NetworkName.Hardhat, originalProvider);\n } else if (!hadOriginalProvider) {\n // Clear the mock provider we set\n delete fallbackProviderMap[NetworkName.Hardhat];\n }\n });\n\n const createMockTransferLog = (\n fromAddress: string,\n toAddress: string,\n tokenAddress: string = MOCK_TOKEN_ADDRESS,\n ) => {\n const paddedFrom = fromAddress.toLowerCase().replace('0x', '').padStart(64, '0');\n const paddedTo = toAddress.toLowerCase().replace('0x', '').padStart(64, '0');\n\n return {\n address: tokenAddress,\n topics: [\n ERC20_TRANSFER_EVENT_SIGNATURE,\n `0x${paddedFrom}`,\n `0x${paddedTo}`,\n ],\n data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000',\n blockNumber: 12345,\n transactionHash: MOCK_SHIELD_TXID,\n transactionIndex: 0,\n blockHash: '0xblockhash',\n logIndex: 0,\n removed: false,\n index: 0,\n };\n };\n\n const createMockReceipt = (logs: any[]) => {\n return {\n to: MOCK_MATRIX_PROXY_ADDRESS,\n from: MOCK_RELAYER_ADDRESS,\n contractAddress: null,\n transactionIndex: 0,\n gasUsed: BigInt(100000),\n logsBloom: '0x',\n blockHash: '0xblockhash',\n transactionHash: MOCK_SHIELD_TXID,\n logs,\n blockNumber: 12345,\n confirmations: 10,\n cumulativeGasUsed: BigInt(100000),\n effectiveGasPrice: BigInt(1000000000),\n status: 1,\n type: 2,\n byzantium: true,\n hash: MOCK_SHIELD_TXID,\n index: 0,\n };\n };\n\n const createMockTransaction = (fromAddress: string) => {\n return {\n hash: MOCK_SHIELD_TXID,\n from: fromAddress,\n to: MOCK_MATRIX_PROXY_ADDRESS,\n nonce: 1,\n gasLimit: BigInt(200000),\n data: '0x',\n value: BigInt(0),\n chainId: BigInt(137),\n blockNumber: 12345,\n blockHash: '0xblockhash',\n index: 0,\n type: 2,\n accessList: [],\n };\n };\n\n it('Should reject when getTransaction fails', async function () {\n this.timeout(60_000);\n\n const mockProvider = {\n getTransaction: async () => {\n throw new Error('RPC error: Transaction lookup failed');\n },\n getTransactionReceipt: async () => createMockReceipt([]),\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n await expect(\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n ),\n ).to.be.rejectedWith('RPC error: Transaction lookup failed');\n });\n\n it('Should reject when getTransactionReceipt fails', async function () {\n this.timeout(60_000);\n\n const mockProvider = {\n getTransaction: async () => createMockTransaction(MOCK_USER_ADDRESS),\n getTransactionReceipt: async () => {\n throw new Error('RPC error: Receipt lookup failed');\n },\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n await expect(\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n ),\n ).to.be.rejectedWith('RPC error: Receipt lookup failed');\n });\n\n it('Should reject when both getTransaction and getTransactionReceipt fail', async function () {\n this.timeout(60_000);\n\n const mockProvider = {\n getTransaction: async () => {\n // Simulate slower failure\n await new Promise(resolve => setTimeout(resolve, 100));\n throw new Error('RPC error: Transaction lookup failed');\n },\n getTransactionReceipt: async () => {\n // Simulate faster failure\n throw new Error('RPC error: Receipt lookup failed');\n },\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n // Promise.all() should reject with whichever error occurs first\n // In this case, receipt fails faster\n await expect(\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n ),\n ).to.be.rejectedWith(/RPC error/);\n });\n\n it('Should timeout when getTransaction hangs indefinitely', async function () {\n this.timeout(10_000);\n\n const mockProvider = {\n getTransaction: async () => {\n // Simulate a hanging promise that never resolves\n return new Promise(() => {});\n },\n getTransactionReceipt: async () => createMockReceipt([]),\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n // Create a timeout wrapper to test hanging behavior\n const timeoutPromise = new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Test timeout: getTransaction hung')), 2000)\n );\n\n const callPromise = getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n await expect(\n Promise.race([callPromise, timeoutPromise])\n ).to.be.rejectedWith('Test timeout: getTransaction hung');\n });\n\n it('Should timeout when getTransactionReceipt hangs indefinitely', async function () {\n this.timeout(10_000);\n\n const mockProvider = {\n getTransaction: async () => createMockTransaction(MOCK_USER_ADDRESS),\n getTransactionReceipt: async () => {\n // Simulate a hanging promise that never resolves\n return new Promise(() => {});\n },\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n // Create a timeout wrapper to test hanging behavior\n const timeoutPromise = new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Test timeout: getTransactionReceipt hung')), 2000)\n );\n\n const callPromise = getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n await expect(\n Promise.race([callPromise, timeoutPromise])\n ).to.be.rejectedWith('Test timeout: getTransactionReceipt hung');\n });\n\n it('Should extract true token owner from Transfer events in EIP-7702 gasless transaction', async function () {\n this.timeout(60_000);\n\n const transferLog = createMockTransferLog(\n MOCK_USER_ADDRESS,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const mockReceipt = createMockReceipt([transferLog]);\n const mockTransaction = createMockTransaction(MOCK_RELAYER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n expect(result.erc20AmountRecipients[0].recipientAddress).to.equal(\n MOCK_USER_ADDRESS,\n 'Should extract token owner from Transfer event, not tx.from (relayer)',\n );\n }\n });\n\n it('Should handle standard transactions where tx.from equals token owner', async function () {\n this.timeout(60_000);\n\n const transferLog = createMockTransferLog(\n MOCK_USER_ADDRESS,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const mockReceipt = createMockReceipt([transferLog]);\n const mockTransaction = createMockTransaction(MOCK_USER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n expect(result.erc20AmountRecipients[0].recipientAddress).to.equal(\n MOCK_USER_ADDRESS,\n );\n }\n });\n\n it('Should ignore Transfer events not directed to Matrix contract', async function () {\n this.timeout(60_000);\n\n const irrelevantTransferLog = createMockTransferLog(\n MOCK_USER_ADDRESS,\n MOCK_ETH_WALLET_ADDRESS,\n );\n\n const relevantTransferLog = createMockTransferLog(\n MOCK_USER_ADDRESS,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const mockReceipt = createMockReceipt([\n irrelevantTransferLog,\n relevantTransferLog,\n ]);\n const mockTransaction = createMockTransaction(MOCK_RELAYER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n expect(result.erc20AmountRecipients[0].recipientAddress).to.equal(\n MOCK_USER_ADDRESS,\n );\n }\n });\n\n it('Should fallback to tx.from when no Transfer events found', async function () {\n this.timeout(60_000);\n\n const mockReceipt = createMockReceipt([]);\n const mockTransaction = createMockTransaction(MOCK_USER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n expect(result.erc20AmountRecipients[0].recipientAddress).to.equal(\n MOCK_USER_ADDRESS,\n 'Should fallback to tx.from when no Transfer events',\n );\n }\n });\n\n it('Should handle malformed log topics gracefully', async function () {\n this.timeout(60_000);\n\n const malformedLog = {\n address: MOCK_TOKEN_ADDRESS,\n topics: [ERC20_TRANSFER_EVENT_SIGNATURE],\n data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000',\n blockNumber: 12345,\n transactionHash: MOCK_SHIELD_TXID,\n transactionIndex: 0,\n blockHash: '0xblockhash',\n logIndex: 0,\n removed: false,\n index: 0,\n };\n\n const validLog = createMockTransferLog(\n MOCK_USER_ADDRESS,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const mockReceipt = createMockReceipt([malformedLog, validLog]);\n const mockTransaction = createMockTransaction(MOCK_RELAYER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n expect(result.erc20AmountRecipients[0].recipientAddress).to.equal(\n MOCK_USER_ADDRESS,\n 'Should skip malformed log and process valid one',\n );\n }\n });\n\n it('Should throw error when transaction is not found', async function () {\n this.timeout(60_000);\n\n const mockProvider = {\n getTransaction: async () => null,\n getTransactionReceipt: async () => createMockReceipt([]),\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n await expect(\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n ),\n ).to.be.rejectedWith('Could not find shield transaction from RPC');\n });\n\n it('Should throw error when receipt is not found', async function () {\n this.timeout(60_000);\n\n const mockProvider = {\n getTransaction: async () => createMockTransaction(MOCK_USER_ADDRESS),\n getTransactionReceipt: async () => null,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n await expect(\n getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n ),\n ).to.be.rejectedWith('Could not find shield transaction receipt from RPC');\n });\n\n it('Should handle multiple token owners by using first one', async function () {\n this.timeout(60_000);\n\n const user1Address = '0x1111111111111111111111111111111111111111';\n const user2Address = '0x2222222222222222222222222222222222222222';\n\n const transferLog1 = createMockTransferLog(\n user1Address,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const transferLog2 = createMockTransferLog(\n user2Address,\n MOCK_MATRIX_PROXY_ADDRESS,\n );\n\n const mockReceipt = createMockReceipt([transferLog1, transferLog2]);\n const mockTransaction = createMockTransaction(MOCK_RELAYER_ADDRESS);\n\n const mockProvider = {\n getTransaction: async () => mockTransaction,\n getTransactionReceipt: async () => mockReceipt,\n } as any;\n\n setFallbackProviderForNetwork(NetworkName.Hardhat, mockProvider);\n\n const result = await getERC20AndNFTAmountRecipientsForUnshieldToOrigin(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_SHIELD_TXID,\n );\n\n expect(result.erc20AmountRecipients).to.be.an('array');\n if (result.erc20AmountRecipients.length > 0) {\n const recipientAddr = result.erc20AmountRecipients[0].recipientAddress.toLowerCase();\n const isValidOwner =\n recipientAddr === user1Address.toLowerCase() ||\n recipientAddr === user2Address.toLowerCase();\n expect(isValidOwner).to.be.true;\n }\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './proof-cache';
|
|
2
|
+
export * from './tx-cross-contract-calls';
|
|
3
|
+
export * from './tx-shield-base-token';
|
|
4
|
+
export * from './tx-shield';
|
|
5
|
+
export * from './tx-notes';
|
|
6
|
+
export * from './tx-gas-details';
|
|
7
|
+
export * from './tx-gas-broadcaster-fee-estimator';
|
|
8
|
+
export * from './tx-generator';
|
|
9
|
+
export * from './tx-proof-transfer';
|
|
10
|
+
export * from './tx-proof-unshield';
|
|
11
|
+
export * from './tx-nullifiers';
|
|
12
|
+
export * from './tx-transfer';
|
|
13
|
+
export * from './tx-unshield';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./proof-cache"), exports);
|
|
18
|
+
__exportStar(require("./tx-cross-contract-calls"), exports);
|
|
19
|
+
__exportStar(require("./tx-shield-base-token"), exports);
|
|
20
|
+
__exportStar(require("./tx-shield"), exports);
|
|
21
|
+
__exportStar(require("./tx-notes"), exports);
|
|
22
|
+
__exportStar(require("./tx-gas-details"), exports);
|
|
23
|
+
__exportStar(require("./tx-gas-broadcaster-fee-estimator"), exports);
|
|
24
|
+
__exportStar(require("./tx-generator"), exports);
|
|
25
|
+
__exportStar(require("./tx-proof-transfer"), exports);
|
|
26
|
+
__exportStar(require("./tx-proof-unshield"), exports);
|
|
27
|
+
__exportStar(require("./tx-nullifiers"), exports);
|
|
28
|
+
__exportStar(require("./tx-transfer"), exports);
|
|
29
|
+
__exportStar(require("./tx-unshield"), exports);
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/transactions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,4DAA0C;AAC1C,yDAAuC;AACvC,8CAA4B;AAC5B,6CAA2B;AAC3B,mDAAiC;AACjC,qEAAmD;AACnD,iDAA+B;AAC/B,sDAAoC;AACpC,sDAAoC;AACpC,kDAAgC;AAChC,gDAA8B;AAC9B,gDAA8B","sourcesContent":["export * from './proof-cache';\nexport * from './tx-cross-contract-calls';\nexport * from './tx-shield-base-token';\nexport * from './tx-shield';\nexport * from './tx-notes';\nexport * from './tx-gas-details';\nexport * from './tx-gas-broadcaster-fee-estimator';\nexport * from './tx-generator';\nexport * from './tx-proof-transfer';\nexport * from './tx-proof-unshield';\nexport * from './tx-nullifiers';\nexport * from './tx-transfer';\nexport * from './tx-unshield';\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NetworkName, ProofType, MatrixNFTAmountRecipient, MatrixERC20Amount, MatrixERC20AmountRecipient, MatrixNFTAmount, TransactionGasDetails, MatrixERC20Recipient } from '@matrix-privacy/shared-models';
|
|
2
|
+
import { ContractTransaction } from 'ethers';
|
|
3
|
+
export type ProvedTransaction = {
|
|
4
|
+
proofType: ProofType;
|
|
5
|
+
transaction: ContractTransaction;
|
|
6
|
+
matrixWalletID: string;
|
|
7
|
+
showSenderAddressToRecipient: boolean;
|
|
8
|
+
memoText: Optional<string>;
|
|
9
|
+
erc20AmountRecipients: MatrixERC20AmountRecipient[];
|
|
10
|
+
nftAmountRecipients: MatrixNFTAmountRecipient[];
|
|
11
|
+
relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>;
|
|
12
|
+
relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>;
|
|
13
|
+
relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>;
|
|
14
|
+
relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>;
|
|
15
|
+
crossContractCalls: Optional<ContractTransaction[]>;
|
|
16
|
+
broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>;
|
|
17
|
+
sendWithPublicWallet: boolean;
|
|
18
|
+
overallBatchMinGasPrice: Optional<bigint>;
|
|
19
|
+
nullifiers: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare const populateProvedTransaction: (networkName: NetworkName, proofType: ProofType, matrixWalletID: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>, relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>, relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>, relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>, crossContractCalls: Optional<ContractTransaction[]>, broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<{
|
|
22
|
+
transaction: ContractTransaction;
|
|
23
|
+
nullifiers: string[];
|
|
24
|
+
}>;
|
|
25
|
+
export declare const setCachedProvedTransaction: (tx?: ProvedTransaction) => void;
|
|
26
|
+
export declare const getCachedProvedTransaction: () => ProvedTransaction;
|
|
27
|
+
export declare const validateCachedProvedTransaction: (networkName: NetworkName, proofType: ProofType, matrixWalletID: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>, relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>, relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>, relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>, crossContractCalls: Optional<ContractTransaction[]>, broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>) => void;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCachedProvedTransaction = exports.getCachedProvedTransaction = exports.setCachedProvedTransaction = exports.populateProvedTransaction = void 0;
|
|
4
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
5
|
+
const gas_price_1 = require("../../utils/gas-price");
|
|
6
|
+
const utils_1 = require("../../utils/utils");
|
|
7
|
+
const tx_gas_details_1 = require("./tx-gas-details");
|
|
8
|
+
const tx_notes_1 = require("./tx-notes");
|
|
9
|
+
let cachedProvedTransaction;
|
|
10
|
+
const populateProvedTransaction = async (networkName, proofType, matrixWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
|
|
11
|
+
try {
|
|
12
|
+
(0, exports.validateCachedProvedTransaction)(networkName, proofType, matrixWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice);
|
|
13
|
+
}
|
|
14
|
+
catch (cause) {
|
|
15
|
+
if (!(cause instanceof Error)) {
|
|
16
|
+
throw new Error('Non-error thrown from populateProvedTransaction', {
|
|
17
|
+
cause,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`Invalid proof for this transaction`, { cause });
|
|
21
|
+
}
|
|
22
|
+
const { transaction, nullifiers } = (0, exports.getCachedProvedTransaction)();
|
|
23
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(networkName, transaction, gasDetails, sendWithPublicWallet);
|
|
24
|
+
return { transaction, nullifiers };
|
|
25
|
+
};
|
|
26
|
+
exports.populateProvedTransaction = populateProvedTransaction;
|
|
27
|
+
const setCachedProvedTransaction = (tx) => {
|
|
28
|
+
if ((0, shared_models_1.isDefined)(tx?.transaction?.from)) {
|
|
29
|
+
throw new Error(`Cannot cache a transaction with a 'from' address.`);
|
|
30
|
+
}
|
|
31
|
+
cachedProvedTransaction = tx;
|
|
32
|
+
};
|
|
33
|
+
exports.setCachedProvedTransaction = setCachedProvedTransaction;
|
|
34
|
+
const getCachedProvedTransaction = () => {
|
|
35
|
+
return cachedProvedTransaction;
|
|
36
|
+
};
|
|
37
|
+
exports.getCachedProvedTransaction = getCachedProvedTransaction;
|
|
38
|
+
const shouldValidateERC20AmountRecipients = (proofType) => {
|
|
39
|
+
switch (proofType) {
|
|
40
|
+
case shared_models_1.ProofType.CrossContractCalls:
|
|
41
|
+
// Skip validation for erc20AmountRecipients, which is not used
|
|
42
|
+
// in this transaction type.
|
|
43
|
+
return false;
|
|
44
|
+
case shared_models_1.ProofType.Transfer:
|
|
45
|
+
case shared_models_1.ProofType.Unshield:
|
|
46
|
+
case shared_models_1.ProofType.UnshieldBaseToken:
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const shouldValidateRelayAdaptAmounts = (proofType) => {
|
|
51
|
+
switch (proofType) {
|
|
52
|
+
case shared_models_1.ProofType.CrossContractCalls:
|
|
53
|
+
case shared_models_1.ProofType.UnshieldBaseToken:
|
|
54
|
+
// Only validate for Cross Contract and Unshield Base Token proofs.
|
|
55
|
+
return true;
|
|
56
|
+
case shared_models_1.ProofType.Transfer:
|
|
57
|
+
case shared_models_1.ProofType.Unshield:
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const shouldValidateCrossContractCalls = (proofType) => {
|
|
62
|
+
switch (proofType) {
|
|
63
|
+
case shared_models_1.ProofType.CrossContractCalls:
|
|
64
|
+
// Only validate for Cross Contract proofs.
|
|
65
|
+
return true;
|
|
66
|
+
case shared_models_1.ProofType.Transfer:
|
|
67
|
+
case shared_models_1.ProofType.Unshield:
|
|
68
|
+
case shared_models_1.ProofType.UnshieldBaseToken:
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const validateCachedProvedTransaction = (networkName, proofType, matrixWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice) => {
|
|
73
|
+
if (!cachedProvedTransaction) {
|
|
74
|
+
throw new Error('No proof found.');
|
|
75
|
+
}
|
|
76
|
+
else if (cachedProvedTransaction.proofType !== proofType) {
|
|
77
|
+
throw new Error('Mismatch: proofType.');
|
|
78
|
+
}
|
|
79
|
+
else if (cachedProvedTransaction.matrixWalletID !== matrixWalletID) {
|
|
80
|
+
throw new Error('Mismatch: matrixWalletID.');
|
|
81
|
+
}
|
|
82
|
+
else if (proofType === shared_models_1.ProofType.Transfer &&
|
|
83
|
+
cachedProvedTransaction.showSenderAddressToRecipient !==
|
|
84
|
+
showSenderAddressToRecipient) {
|
|
85
|
+
throw new Error('Mismatch: showSenderAddressToRecipient.');
|
|
86
|
+
}
|
|
87
|
+
else if (proofType === shared_models_1.ProofType.Transfer &&
|
|
88
|
+
cachedProvedTransaction.memoText !== memoText) {
|
|
89
|
+
throw new Error('Mismatch: memoText.');
|
|
90
|
+
}
|
|
91
|
+
else if (shouldValidateERC20AmountRecipients(proofType) &&
|
|
92
|
+
!(0, tx_notes_1.compareERC20AmountRecipientArrays)(erc20AmountRecipients, cachedProvedTransaction.erc20AmountRecipients)) {
|
|
93
|
+
throw new Error('Mismatch: erc20AmountRecipients.');
|
|
94
|
+
}
|
|
95
|
+
else if (!(0, tx_notes_1.compareNFTAmountRecipientArrays)(nftAmountRecipients, cachedProvedTransaction.nftAmountRecipients)) {
|
|
96
|
+
throw new Error('Mismatch: nftAmountRecipients.');
|
|
97
|
+
}
|
|
98
|
+
else if (shouldValidateRelayAdaptAmounts(proofType) &&
|
|
99
|
+
!(0, tx_notes_1.compareERC20AmountArrays)(relayAdaptUnshieldERC20Amounts, cachedProvedTransaction.relayAdaptUnshieldERC20Amounts)) {
|
|
100
|
+
throw new Error('Mismatch: relayAdaptUnshieldERC20Amounts.');
|
|
101
|
+
}
|
|
102
|
+
else if (shouldValidateRelayAdaptAmounts(proofType) &&
|
|
103
|
+
!(0, tx_notes_1.compareNFTAmountArrays)(relayAdaptUnshieldNFTAmounts, cachedProvedTransaction.relayAdaptUnshieldNFTAmounts)) {
|
|
104
|
+
throw new Error('Mismatch: relayAdaptUnshieldNFTAmounts.');
|
|
105
|
+
}
|
|
106
|
+
else if (shouldValidateRelayAdaptAmounts(proofType) &&
|
|
107
|
+
!(0, tx_notes_1.compareERC20RecipientArrays)(relayAdaptShieldERC20Recipients, cachedProvedTransaction.relayAdaptShieldERC20Recipients)) {
|
|
108
|
+
throw new Error('Mismatch: relayAdaptShieldERC20Recipients.');
|
|
109
|
+
}
|
|
110
|
+
else if (shouldValidateRelayAdaptAmounts(proofType) &&
|
|
111
|
+
!(0, tx_notes_1.compareNFTAmountArrays)(relayAdaptShieldNFTRecipients, cachedProvedTransaction.relayAdaptShieldNFTRecipients)) {
|
|
112
|
+
throw new Error('Mismatch: relayAdaptShieldNFTRecipients.');
|
|
113
|
+
}
|
|
114
|
+
else if (shouldValidateCrossContractCalls(proofType) &&
|
|
115
|
+
!(0, utils_1.compareContractTransactionArrays)(crossContractCalls, cachedProvedTransaction.crossContractCalls)) {
|
|
116
|
+
throw new Error('Mismatch: crossContractCalls.');
|
|
117
|
+
}
|
|
118
|
+
else if (!(0, tx_notes_1.compareERC20AmountRecipients)(cachedProvedTransaction.broadcasterFeeERC20AmountRecipient, broadcasterFeeERC20AmountRecipient)) {
|
|
119
|
+
throw new Error('Mismatch: broadcasterFeeERC20AmountRecipient.');
|
|
120
|
+
}
|
|
121
|
+
else if (sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet) {
|
|
122
|
+
throw new Error('Mismatch: sendWithPublicWallet.');
|
|
123
|
+
}
|
|
124
|
+
else if ((0, gas_price_1.shouldSetOverallBatchMinGasPriceForNetwork)(cachedProvedTransaction.sendWithPublicWallet, networkName) &&
|
|
125
|
+
overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice) {
|
|
126
|
+
throw new Error('Mismatch: overallBatchMinGasPrice.');
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
exports.validateCachedProvedTransaction = validateCachedProvedTransaction;
|
|
130
|
+
//# sourceMappingURL=proof-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-cache.js","sourceRoot":"","sources":["../../../src/services/transactions/proof-cache.ts"],"names":[],"mappings":";;;AAAA,iEAUuC;AACvC,qDAAmF;AACnF,6CAAqE;AACrE,qDAA+D;AAC/D,yCAOoB;AAsBpB,IAAI,uBAAoD,CAAC;AAElD,MAAM,yBAAyB,GAAG,KAAK,EAC5C,WAAwB,EACxB,SAAoB,EACpB,cAAsB,EACtB,4BAAqC,EACrC,QAA0B,EAC1B,qBAAmD,EACnD,mBAA+C,EAC/C,8BAA6D,EAC7D,4BAAyD,EACzD,+BAAiE,EACjE,6BAA0D,EAC1D,kBAAmD,EACnD,kCAAwE,EACxE,oBAA6B,EAC7B,uBAAyC,EACzC,UAAiC,EAIhC,EAAE;IACH,IAAI;QACF,IAAA,uCAA+B,EAC7B,WAAW,EACX,SAAS,EACT,cAAc,EACd,4BAA4B,EAC5B,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,8BAA8B,EAC9B,4BAA4B,EAC5B,+BAA+B,EAC/B,6BAA6B,EAC7B,kBAAkB,EAClB,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;KACH;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,iDAAiD,EAAE;gBACjE,KAAK;aACN,CAAC,CAAC;SACJ;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;KAClE;IAED,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,IAAA,kCAA0B,GAAE,CAAC;IAE/B,IAAA,4CAA2B,EACzB,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,CACrB,CAAC;IAEF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC,CAAC;AA3DW,QAAA,yBAAyB,6BA2DpC;AAEK,MAAM,0BAA0B,GAAG,CAAC,EAAsB,EAAE,EAAE;IACnE,IAAI,IAAA,yBAAS,EAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;KACtE;IACD,uBAAuB,GAAG,EAAE,CAAC;AAC/B,CAAC,CAAC;AALW,QAAA,0BAA0B,8BAKrC;AAEK,MAAM,0BAA0B,GAAG,GAAsB,EAAE;IAChE,OAAO,uBAA4C,CAAC;AACtD,CAAC,CAAC;AAFW,QAAA,0BAA0B,8BAErC;AAEF,MAAM,mCAAmC,GAAG,CAAC,SAAoB,EAAE,EAAE;IACnE,QAAQ,SAAS,EAAE;QACjB,KAAK,yBAAS,CAAC,kBAAkB;YAC/B,+DAA+D;YAC/D,4BAA4B;YAC5B,OAAO,KAAK,CAAC;QACf,KAAK,yBAAS,CAAC,QAAQ,CAAC;QACxB,KAAK,yBAAS,CAAC,QAAQ,CAAC;QACxB,KAAK,yBAAS,CAAC,iBAAiB;YAC9B,OAAO,IAAI,CAAC;KACf;AACH,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CAAC,SAAoB,EAAE,EAAE;IAC/D,QAAQ,SAAS,EAAE;QACjB,KAAK,yBAAS,CAAC,kBAAkB,CAAC;QAClC,KAAK,yBAAS,CAAC,iBAAiB;YAC9B,mEAAmE;YACnE,OAAO,IAAI,CAAC;QACd,KAAK,yBAAS,CAAC,QAAQ,CAAC;QACxB,KAAK,yBAAS,CAAC,QAAQ;YACrB,OAAO,KAAK,CAAC;KAChB;AACH,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CAAC,SAAoB,EAAE,EAAE;IAChE,QAAQ,SAAS,EAAE;QACjB,KAAK,yBAAS,CAAC,kBAAkB;YAC/B,2CAA2C;YAC3C,OAAO,IAAI,CAAC;QACd,KAAK,yBAAS,CAAC,QAAQ,CAAC;QACxB,KAAK,yBAAS,CAAC,QAAQ,CAAC;QACxB,KAAK,yBAAS,CAAC,iBAAiB;YAC9B,OAAO,KAAK,CAAC;KAChB;AACH,CAAC,CAAC;AAEK,MAAM,+BAA+B,GAAG,CAC7C,WAAwB,EACxB,SAAoB,EACpB,cAAsB,EACtB,4BAAqC,EACrC,QAA0B,EAC1B,qBAAmD,EACnD,mBAA+C,EAC/C,8BAA6D,EAC7D,4BAAyD,EACzD,+BAAiE,EACjE,6BAA0D,EAC1D,kBAAmD,EACnD,kCAAwE,EACxE,oBAA6B,EAC7B,uBAAyC,EACnC,EAAE;IACR,IAAI,CAAC,uBAAuB,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;KACpC;SAAM,IAAI,uBAAuB,CAAC,SAAS,KAAK,SAAS,EAAE;QAC1D,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;SAAM,IAAI,uBAAuB,CAAC,cAAc,KAAK,cAAc,EAAE;QACpE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;SAAM,IACL,SAAS,KAAK,yBAAS,CAAC,QAAQ;QAChC,uBAAuB,CAAC,4BAA4B;YAClD,4BAA4B,EAC9B;QACA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;SAAM,IACL,SAAS,KAAK,yBAAS,CAAC,QAAQ;QAChC,uBAAuB,CAAC,QAAQ,KAAK,QAAQ,EAC7C;QACA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;KACxC;SAAM,IACL,mCAAmC,CAAC,SAAS,CAAC;QAC9C,CAAC,IAAA,4CAAiC,EAChC,qBAAqB,EACrB,uBAAuB,CAAC,qBAAqB,CAC9C,EACD;QACA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;SAAM,IACL,CAAC,IAAA,0CAA+B,EAC9B,mBAAmB,EACnB,uBAAuB,CAAC,mBAAmB,CAC5C,EACD;QACA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;SAAM,IACL,+BAA+B,CAAC,SAAS,CAAC;QAC1C,CAAC,IAAA,mCAAwB,EACvB,8BAA8B,EAC9B,uBAAuB,CAAC,8BAA8B,CACvD,EACD;QACA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;SAAM,IACL,+BAA+B,CAAC,SAAS,CAAC;QAC1C,CAAC,IAAA,iCAAsB,EACrB,4BAA4B,EAC5B,uBAAuB,CAAC,4BAA4B,CACrD,EACD;QACA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;SAAM,IACL,+BAA+B,CAAC,SAAS,CAAC;QAC1C,CAAC,IAAA,sCAA2B,EAC1B,+BAA+B,EAC/B,uBAAuB,CAAC,+BAA+B,CACxD,EACD;QACA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;SAAM,IACL,+BAA+B,CAAC,SAAS,CAAC;QAC1C,CAAC,IAAA,iCAAsB,EACrB,6BAA6B,EAC7B,uBAAuB,CAAC,6BAA6B,CACtD,EACD;QACA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;SAAM,IACL,gCAAgC,CAAC,SAAS,CAAC;QAC3C,CAAC,IAAA,wCAAgC,EAC/B,kBAAkB,EAClB,uBAAuB,CAAC,kBAAkB,CAC3C,EACD;QACA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;SAAM,IACL,CAAC,IAAA,uCAA4B,EAC3B,uBAAuB,CAAC,kCAAkC,EAC1D,kCAAkC,CACnC,EACD;QACA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;KAClE;SAAM,IACL,oBAAoB,KAAK,uBAAuB,CAAC,oBAAoB,EACrE;QACA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACpD;SAAM,IACL,IAAA,sDAA0C,EACxC,uBAAuB,CAAC,oBAAoB,EAC5C,WAAW,CACZ;QACD,uBAAuB,KAAK,uBAAuB,CAAC,uBAAuB,EAC3E;QACA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;AACH,CAAC,CAAC;AA7GW,QAAA,+BAA+B,mCA6G1C","sourcesContent":["import {\n NetworkName,\n ProofType,\n MatrixNFTAmountRecipient,\n MatrixERC20Amount,\n MatrixERC20AmountRecipient,\n MatrixNFTAmount,\n TransactionGasDetails,\n isDefined,\n MatrixERC20Recipient,\n} from '@matrix-privacy/shared-models';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { compareContractTransactionArrays } from '../../utils/utils';\nimport { setGasDetailsForTransaction } from './tx-gas-details';\nimport {\n compareERC20AmountRecipients,\n compareERC20AmountRecipientArrays,\n compareERC20AmountArrays,\n compareNFTAmountRecipientArrays,\n compareNFTAmountArrays,\n compareERC20RecipientArrays,\n} from './tx-notes';\nimport { ContractTransaction } from 'ethers';\n\nexport type ProvedTransaction = {\n proofType: ProofType;\n transaction: ContractTransaction;\n matrixWalletID: string;\n showSenderAddressToRecipient: boolean;\n memoText: Optional<string>;\n erc20AmountRecipients: MatrixERC20AmountRecipient[];\n nftAmountRecipients: MatrixNFTAmountRecipient[];\n relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>;\n relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>;\n relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>;\n relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>;\n crossContractCalls: Optional<ContractTransaction[]>;\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>;\n sendWithPublicWallet: boolean;\n overallBatchMinGasPrice: Optional<bigint>;\n nullifiers: string[];\n};\n\nlet cachedProvedTransaction: Optional<ProvedTransaction>;\n\nexport const populateProvedTransaction = async (\n networkName: NetworkName,\n proofType: ProofType,\n matrixWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>,\n relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>,\n relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>,\n relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<{\n transaction: ContractTransaction;\n nullifiers: string[];\n}> => {\n try {\n validateCachedProvedTransaction(\n networkName,\n proofType,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from populateProvedTransaction', {\n cause,\n });\n }\n throw new Error(`Invalid proof for this transaction`, { cause });\n }\n\n const { transaction, nullifiers } =\n getCachedProvedTransaction();\n\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n\n return { transaction, nullifiers };\n};\n\nexport const setCachedProvedTransaction = (tx?: ProvedTransaction) => {\n if (isDefined(tx?.transaction?.from)) {\n throw new Error(`Cannot cache a transaction with a 'from' address.`);\n }\n cachedProvedTransaction = tx;\n};\n\nexport const getCachedProvedTransaction = (): ProvedTransaction => {\n return cachedProvedTransaction as ProvedTransaction;\n};\n\nconst shouldValidateERC20AmountRecipients = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Skip validation for erc20AmountRecipients, which is not used\n // in this transaction type.\n return false;\n case ProofType.Transfer:\n case ProofType.Unshield:\n case ProofType.UnshieldBaseToken:\n return true;\n }\n};\n\nconst shouldValidateRelayAdaptAmounts = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n // Only validate for Cross Contract and Unshield Base Token proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Unshield:\n return false;\n }\n};\n\nconst shouldValidateCrossContractCalls = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Only validate for Cross Contract proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Unshield:\n case ProofType.UnshieldBaseToken:\n return false;\n }\n};\n\nexport const validateCachedProvedTransaction = (\n networkName: NetworkName,\n proofType: ProofType,\n matrixWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n relayAdaptUnshieldERC20Amounts: Optional<MatrixERC20Amount[]>,\n relayAdaptUnshieldNFTAmounts: Optional<MatrixNFTAmount[]>,\n relayAdaptShieldERC20Recipients: Optional<MatrixERC20Recipient[]>,\n relayAdaptShieldNFTRecipients: Optional<MatrixNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): void => {\n if (!cachedProvedTransaction) {\n throw new Error('No proof found.');\n } else if (cachedProvedTransaction.proofType !== proofType) {\n throw new Error('Mismatch: proofType.');\n } else if (cachedProvedTransaction.matrixWalletID !== matrixWalletID) {\n throw new Error('Mismatch: matrixWalletID.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.showSenderAddressToRecipient !==\n showSenderAddressToRecipient\n ) {\n throw new Error('Mismatch: showSenderAddressToRecipient.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.memoText !== memoText\n ) {\n throw new Error('Mismatch: memoText.');\n } else if (\n shouldValidateERC20AmountRecipients(proofType) &&\n !compareERC20AmountRecipientArrays(\n erc20AmountRecipients,\n cachedProvedTransaction.erc20AmountRecipients,\n )\n ) {\n throw new Error('Mismatch: erc20AmountRecipients.');\n } else if (\n !compareNFTAmountRecipientArrays(\n nftAmountRecipients,\n cachedProvedTransaction.nftAmountRecipients,\n )\n ) {\n throw new Error('Mismatch: nftAmountRecipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20AmountArrays(\n relayAdaptUnshieldERC20Amounts,\n cachedProvedTransaction.relayAdaptUnshieldERC20Amounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptUnshieldERC20Amounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptUnshieldNFTAmounts,\n cachedProvedTransaction.relayAdaptUnshieldNFTAmounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptUnshieldNFTAmounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20RecipientArrays(\n relayAdaptShieldERC20Recipients,\n cachedProvedTransaction.relayAdaptShieldERC20Recipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptShieldERC20Recipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptShieldNFTRecipients,\n cachedProvedTransaction.relayAdaptShieldNFTRecipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptShieldNFTRecipients.');\n } else if (\n shouldValidateCrossContractCalls(proofType) &&\n !compareContractTransactionArrays(\n crossContractCalls,\n cachedProvedTransaction.crossContractCalls,\n )\n ) {\n throw new Error('Mismatch: crossContractCalls.');\n } else if (\n !compareERC20AmountRecipients(\n cachedProvedTransaction.broadcasterFeeERC20AmountRecipient,\n broadcasterFeeERC20AmountRecipient,\n )\n ) {\n throw new Error('Mismatch: broadcasterFeeERC20AmountRecipient.');\n } else if (\n sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet\n ) {\n throw new Error('Mismatch: sendWithPublicWallet.');\n } else if (\n shouldSetOverallBatchMinGasPriceForNetwork(\n cachedProvedTransaction.sendWithPublicWallet,\n networkName,\n ) &&\n overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice\n ) {\n throw new Error('Mismatch: overallBatchMinGasPrice.');\n }\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MatrixPopulateTransactionResponse, MatrixTransactionGasEstimateResponse, MatrixERC20Amount, NetworkName, TransactionReceiptLog, FeeTokenDetails, MatrixERC20AmountRecipient, MatrixNFTAmountRecipient, MatrixNFTAmount, TransactionGasDetails, MatrixERC20Recipient } from '@matrix-privacy/shared-models';
|
|
2
|
+
import { GenerateTransactionsProgressCallback } from './tx-generator';
|
|
3
|
+
import { NFTTokenData } from '@matrix-privacy/engine';
|
|
4
|
+
import { ContractTransaction } from 'ethers';
|
|
5
|
+
export declare const createRelayAdaptUnshieldERC20AmountRecipients: (networkName: NetworkName, unshieldERC20Amounts: MatrixERC20Amount[]) => MatrixERC20AmountRecipient[];
|
|
6
|
+
export declare const createRelayAdaptUnshieldNFTAmountRecipients: (networkName: NetworkName, unshieldNFTAmounts: MatrixNFTAmount[]) => MatrixNFTAmountRecipient[];
|
|
7
|
+
export declare const createNFTTokenDataFromMatrixNFTAmount: (nftAmount: MatrixNFTAmount) => NFTTokenData;
|
|
8
|
+
export declare const populateProvedCrossContractCalls: (networkName: NetworkName, matrixWalletID: string, relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[], relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[], relayAdaptShieldERC20Recipients: MatrixERC20Recipient[], relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[], crossContractCalls: ContractTransaction[], broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
9
|
+
export declare const gasEstimateForUnprovenCrossContractCalls: (networkName: NetworkName, matrixWalletID: string, encryptionKey: string, relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[], relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[], relayAdaptShieldERC20Recipients: MatrixERC20Recipient[], relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[], crossContractCalls: ContractTransaction[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean, minGasLimit: Optional<bigint>) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
10
|
+
export declare const generateCrossContractCallsProof: (networkName: NetworkName, matrixWalletID: string, encryptionKey: string, relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[], relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[], relayAdaptShieldERC20Recipients: MatrixERC20Recipient[], relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[], crossContractCalls: ContractTransaction[], broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, minGasLimit: Optional<bigint>, progressCallback: GenerateTransactionsProgressCallback) => Promise<void>;
|
|
11
|
+
export declare const getRelayAdaptTransactionError: (networkName: NetworkName, receiptLogs: TransactionReceiptLog[]) => Optional<string>;
|
|
12
|
+
export declare const parseRelayAdaptReturnValue: (networkName: NetworkName, data: string) => Optional<string>;
|