@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":"proof-cache.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/proof-cache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n ProofType,\n MatrixNFTAmountRecipient,\n MatrixERC20Amount,\n MatrixERC20AmountRecipient,\n NetworkName,\n MatrixNFTAmount,\n MatrixERC20Recipient,\n} from '@matrix-privacy/shared-models';\nimport {\n MOCK_NFT_AMOUNTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n MOCK_MATRIX_WALLET_ADDRESS,\n MOCK_TOKEN_AMOUNTS,\n MOCK_TOKEN_FEE,\n} from '../../../tests/mocks.test';\nimport {\n setCachedProvedTransaction,\n validateCachedProvedTransaction,\n} from '../proof-cache';\nimport { ContractTransaction } from 'ethers';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst networkName = NetworkName.Hardhat;\nconst matrixWalletID = '123';\nconst showSenderAddressToRecipient = true;\nconst memoText = 'Some memo';\nconst recipientAddress = '0x12345';\nconst erc20AmountRecipients: MatrixERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\nconst nftAmountRecipients: MatrixNFTAmountRecipient[] =\n MOCK_NFT_AMOUNT_RECIPIENTS;\nconst broadcasterFeeERC20AmountRecipient: MatrixERC20AmountRecipient = {\n ...MOCK_TOKEN_FEE,\n recipientAddress: MOCK_MATRIX_WALLET_ADDRESS,\n};\nconst crossContractCalls: ContractTransaction[] = [\n { to: '0x4567', data: '0x' },\n];\nconst relayAdaptShieldERC20Recipients: MatrixERC20Recipient[] = [\n { tokenAddress: '0x123', recipientAddress: MOCK_MATRIX_WALLET_ADDRESS },\n];\nconst relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[] = [MOCK_TOKEN_FEE];\nconst relayAdaptUnshieldNFTAmounts: MatrixNFTAmount[] = MOCK_NFT_AMOUNTS;\nconst relayAdaptShieldNFTRecipients: MatrixNFTAmountRecipient[] =\n MOCK_NFT_AMOUNT_RECIPIENTS;\n\nconst nullifiers = ['0x1234'];\n\nconst sendWithPublicWallet = false;\nconst overallBatchMinGasPrice = BigInt('0x1000');\n\nconst setCached = (proofType: ProofType) => {\n setCachedProvedTransaction({\n proofType,\n transaction: {} as ContractTransaction,\n showSenderAddressToRecipient,\n memoText,\n matrixWalletID,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet: false,\n overallBatchMinGasPrice,\n nullifiers,\n });\n};\n\ndescribe('proof-cache', () => {\n it('Should validate cached transaction correctly', () => {\n setCachedProvedTransaction(undefined);\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\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 ).to.throw('No proof found.');\n\n setCached(ProofType.CrossContractCalls);\n\n // Same same\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\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 ).to.not.throw();\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.Unshield,\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 ).to.throw('Mismatch: proofType.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.Transfer,\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 ).to.throw('Mismatch: proofType.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n '987',\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 ).to.throw('Mismatch: matrixWalletID.');\n\n // Set new for Transfer proof type\n setCached(ProofType.Transfer);\n\n // Requires ProofType.Transfer\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.Transfer,\n matrixWalletID,\n false, // 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 ).to.throw('Mismatch: showSenderAddressToRecipient.');\n\n // Requires ProofType.Transfer\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.Transfer,\n matrixWalletID,\n showSenderAddressToRecipient,\n 'different memo',\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: memoText.');\n\n // Requires ProofType.Transfer\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.Transfer,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n [\n {\n tokenAddress: '0x765',\n amount: 100n,\n recipientAddress: '0x123',\n },\n ],\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: erc20AmountRecipients.');\n\n setCached(ProofType.CrossContractCalls);\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n [MOCK_NFT_AMOUNT_RECIPIENTS[0]],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: nftAmountRecipients.');\n\n // Note: requires ProofType.CrossContractCalls\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n [\n {\n tokenAddress: '0x765',\n amount: 100n,\n },\n ],\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: relayAdaptUnshieldERC20Amounts.');\n\n // Note: requires ProofType.CrossContractCalls\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n [MOCK_NFT_AMOUNTS[0]],\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: relayAdaptUnshieldNFTAmounts.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n [\n {\n tokenAddress: 'test',\n recipientAddress: MOCK_MATRIX_WALLET_ADDRESS,\n },\n ],\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: relayAdaptShieldERC20Recipients.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n [],\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: relayAdaptShieldERC20Recipients.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n [MOCK_NFT_AMOUNTS[0]],\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: relayAdaptShieldNFTRecipients.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n [{ to: 'test', data: '0x' }],\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: crossContractCalls.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n {\n tokenAddress: '0x765',\n amount: 100n,\n recipientAddress: '0x1233',\n },\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: broadcasterFeeERC20AmountRecipient.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n ),\n ).to.throw('Mismatch: sendWithPublicWallet.');\n\n expect(() =>\n validateCachedProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\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 BigInt('0x2000'),\n ),\n ).to.throw('Mismatch: overallBatchMinGasPrice.');\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = __importDefault(require("chai"));
|
|
7
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
8
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
9
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
10
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
11
|
+
const setup_test_1 = require("../../../tests/setup.test");
|
|
12
|
+
const mocks_test_1 = require("../../../tests/mocks.test");
|
|
13
|
+
const wallets_1 = require("../../matrix/wallets/wallets");
|
|
14
|
+
const proof_cache_1 = require("../proof-cache");
|
|
15
|
+
const tx_cross_contract_calls_1 = require("../tx-cross-contract-calls");
|
|
16
|
+
const formatted_relay_adapt_error_logs_json_1 = __importDefault(require("./json/formatted-relay-adapt-error-logs.json"));
|
|
17
|
+
const ethers_1 = require("ethers");
|
|
18
|
+
let gasEstimateStub;
|
|
19
|
+
let railProveStub;
|
|
20
|
+
let railDummyProveStub;
|
|
21
|
+
let relayAdaptPopulateCrossContractCalls;
|
|
22
|
+
let relayAdaptGasEstimateStub;
|
|
23
|
+
let addUnshieldDataSpy;
|
|
24
|
+
let erc20NoteSpy;
|
|
25
|
+
let matrixWallet;
|
|
26
|
+
let broadcasterFeeERC20AmountRecipient;
|
|
27
|
+
const hardhatRelayAdaptContract = shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat].relayAdaptContract;
|
|
28
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
29
|
+
const { expect } = chai_1.default;
|
|
30
|
+
const mockERC20TokenData0 = (0, engine_1.getTokenDataERC20)(mocks_test_1.MOCK_TOKEN_AMOUNTS[0].tokenAddress);
|
|
31
|
+
const mockERC20TokenData1 = (0, engine_1.getTokenDataERC20)(mocks_test_1.MOCK_TOKEN_AMOUNTS[1].tokenAddress);
|
|
32
|
+
const mockNFTTokenData0 = (0, tx_cross_contract_calls_1.createNFTTokenDataFromMatrixNFTAmount)(mocks_test_1.MOCK_NFT_AMOUNTS[0]);
|
|
33
|
+
const mockNFTTokenData1 = (0, tx_cross_contract_calls_1.createNFTTokenDataFromMatrixNFTAmount)(mocks_test_1.MOCK_NFT_AMOUNTS[1]);
|
|
34
|
+
const mockCrossContractCalls = [
|
|
35
|
+
{
|
|
36
|
+
to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
|
|
37
|
+
data: '0x0789',
|
|
38
|
+
value: BigInt('0x01'),
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
|
|
42
|
+
data: '0x9789',
|
|
43
|
+
value: BigInt('0x02'),
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
const MOCK_TOKEN_AMOUNTS_DIFFERENT = [
|
|
47
|
+
{
|
|
48
|
+
tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS,
|
|
49
|
+
amount: 100n,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS_2,
|
|
53
|
+
amount: 300n,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
const overallBatchMinGasPrice = BigInt('0x1000');
|
|
57
|
+
const minGasLimit = engine_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;
|
|
58
|
+
const gasDetails = {
|
|
59
|
+
evmGasType: shared_models_1.EVMGasType.Type1,
|
|
60
|
+
gasEstimate: 2000n,
|
|
61
|
+
gasPrice: overallBatchMinGasPrice,
|
|
62
|
+
};
|
|
63
|
+
const stubRelayAdaptGasEstimate = () => {
|
|
64
|
+
relayAdaptGasEstimateStub = sinon_1.default.stub(engine_1.RelayAdaptV3Contract, 'estimateGasWithErrorHandler').resolves(BigInt('200'));
|
|
65
|
+
};
|
|
66
|
+
const stubGasEstimateSuccess = () => {
|
|
67
|
+
gasEstimateStub = sinon_1.default.stub(ethers_1.FallbackProvider.prototype, 'estimateGas').resolves(BigInt('200'));
|
|
68
|
+
};
|
|
69
|
+
const stubRelayAdaptGasEstimateFailure = () => {
|
|
70
|
+
relayAdaptGasEstimateStub = sinon_1.default.stub(engine_1.RelayAdaptV3Contract, 'estimateGasWithErrorHandler').rejects(new Error('RelayAdapt multicall failed at index UNKNOWN.'));
|
|
71
|
+
};
|
|
72
|
+
const spyOnSetUnshield = () => {
|
|
73
|
+
addUnshieldDataSpy = sinon_1.default.spy(engine_1.TransactionBatch.prototype, 'addUnshieldData');
|
|
74
|
+
};
|
|
75
|
+
describe('tx-cross-contract-calls', () => {
|
|
76
|
+
before(async function run() {
|
|
77
|
+
this.timeout(60000);
|
|
78
|
+
await (0, setup_test_1.initTestEngine)();
|
|
79
|
+
await (0, setup_test_1.initTestEngineNetworks)();
|
|
80
|
+
const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
|
|
81
|
+
if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
|
|
82
|
+
throw new Error('Expected matrixWalletInfo');
|
|
83
|
+
}
|
|
84
|
+
matrixWallet = (0, wallets_1.fullWalletForID)(matrixWalletInfo.id);
|
|
85
|
+
const broadcasterWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
|
|
86
|
+
if (!(0, shared_models_1.isDefined)(broadcasterWalletInfo)) {
|
|
87
|
+
throw new Error('Expected broadcasterWalletInfo');
|
|
88
|
+
}
|
|
89
|
+
const broadcasterMatrixAddress = broadcasterWalletInfo.matrixAddress;
|
|
90
|
+
broadcasterFeeERC20AmountRecipient = {
|
|
91
|
+
...mocks_test_1.MOCK_TOKEN_FEE,
|
|
92
|
+
recipientAddress: broadcasterMatrixAddress,
|
|
93
|
+
};
|
|
94
|
+
railProveStub = sinon_1.default.stub(engine_1.TransactionBatch.prototype, 'generateTransactions').resolves({
|
|
95
|
+
provedTransactions: [
|
|
96
|
+
{
|
|
97
|
+
nullifiers: mocks_test_1.MOCK_NULLIFIERS,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
railDummyProveStub = sinon_1.default.stub(engine_1.TransactionBatch.prototype, 'generateDummyTransactions').resolves([
|
|
102
|
+
{
|
|
103
|
+
commitments: mocks_test_1.MOCK_COMMITMENTS,
|
|
104
|
+
boundParams: mocks_test_1.MOCK_BOUND_PARAMS_V3,
|
|
105
|
+
nullifiers: mocks_test_1.MOCK_NULLIFIERS,
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
relayAdaptPopulateCrossContractCalls = sinon_1.default.stub(engine_1.RelayAdaptV3Contract.prototype, 'populateCrossContractCalls').resolves({ data: '0x0123' });
|
|
109
|
+
});
|
|
110
|
+
afterEach(() => {
|
|
111
|
+
gasEstimateStub?.restore();
|
|
112
|
+
addUnshieldDataSpy?.restore();
|
|
113
|
+
erc20NoteSpy?.restore();
|
|
114
|
+
relayAdaptGasEstimateStub?.restore();
|
|
115
|
+
});
|
|
116
|
+
after(async () => {
|
|
117
|
+
railProveStub.restore();
|
|
118
|
+
railDummyProveStub.restore();
|
|
119
|
+
relayAdaptPopulateCrossContractCalls.restore();
|
|
120
|
+
await (0, setup_test_1.closeTestEngine)();
|
|
121
|
+
});
|
|
122
|
+
// GAS ESTIMATE
|
|
123
|
+
it('Should get gas estimates for valid cross contract calls', async () => {
|
|
124
|
+
stubRelayAdaptGasEstimate();
|
|
125
|
+
spyOnSetUnshield();
|
|
126
|
+
const rsp = await (0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
|
|
127
|
+
minGasLimit);
|
|
128
|
+
expect(addUnshieldDataSpy.called).to.be.true;
|
|
129
|
+
expect(addUnshieldDataSpy.args).to.deep.equal([
|
|
130
|
+
[
|
|
131
|
+
{
|
|
132
|
+
toAddress: hardhatRelayAdaptContract,
|
|
133
|
+
tokenData: mockERC20TokenData0,
|
|
134
|
+
value: BigInt('0x0100'),
|
|
135
|
+
allowOverride: false,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
{
|
|
140
|
+
toAddress: hardhatRelayAdaptContract,
|
|
141
|
+
tokenData: mockERC20TokenData1,
|
|
142
|
+
value: BigInt('0x0200'),
|
|
143
|
+
allowOverride: false,
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
{
|
|
148
|
+
toAddress: hardhatRelayAdaptContract,
|
|
149
|
+
tokenData: mockNFTTokenData0,
|
|
150
|
+
value: BigInt('1'),
|
|
151
|
+
allowOverride: false,
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
{
|
|
156
|
+
toAddress: hardhatRelayAdaptContract,
|
|
157
|
+
tokenData: mockNFTTokenData1,
|
|
158
|
+
value: BigInt('2'),
|
|
159
|
+
allowOverride: false,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
{
|
|
164
|
+
toAddress: hardhatRelayAdaptContract,
|
|
165
|
+
tokenData: mockERC20TokenData0,
|
|
166
|
+
value: BigInt('0x0100'),
|
|
167
|
+
allowOverride: false,
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
{
|
|
172
|
+
toAddress: hardhatRelayAdaptContract,
|
|
173
|
+
tokenData: mockERC20TokenData1,
|
|
174
|
+
value: BigInt('0x0200'),
|
|
175
|
+
allowOverride: false,
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
{
|
|
180
|
+
toAddress: hardhatRelayAdaptContract,
|
|
181
|
+
tokenData: mockNFTTokenData0,
|
|
182
|
+
value: BigInt('1'),
|
|
183
|
+
allowOverride: false,
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
{
|
|
188
|
+
toAddress: hardhatRelayAdaptContract,
|
|
189
|
+
tokenData: mockNFTTokenData1,
|
|
190
|
+
value: BigInt('2'),
|
|
191
|
+
allowOverride: false,
|
|
192
|
+
},
|
|
193
|
+
], // run 2 - nft 1
|
|
194
|
+
]);
|
|
195
|
+
// Add 9000 for the dummy tx variance
|
|
196
|
+
// expect(rsp.gasEstimate).to.equal(9000n + 280n);
|
|
197
|
+
expect(rsp.gasEstimate).to.equal(3200000n); // Cross Contract Minimum
|
|
198
|
+
}).timeout(10000);
|
|
199
|
+
it('Should get gas estimates for valid cross contract calls, public wallet', async () => {
|
|
200
|
+
stubRelayAdaptGasEstimate();
|
|
201
|
+
spyOnSetUnshield();
|
|
202
|
+
const rsp = await (0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, true, // sendWithPublicWallet
|
|
203
|
+
minGasLimit);
|
|
204
|
+
expect(addUnshieldDataSpy.called).to.be.true;
|
|
205
|
+
expect(addUnshieldDataSpy.args).to.deep.equal([
|
|
206
|
+
[
|
|
207
|
+
{
|
|
208
|
+
toAddress: hardhatRelayAdaptContract,
|
|
209
|
+
tokenData: mockERC20TokenData0,
|
|
210
|
+
value: BigInt('0x0100'),
|
|
211
|
+
allowOverride: false,
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
[
|
|
215
|
+
{
|
|
216
|
+
toAddress: hardhatRelayAdaptContract,
|
|
217
|
+
tokenData: mockERC20TokenData1,
|
|
218
|
+
value: BigInt('0x0200'),
|
|
219
|
+
allowOverride: false,
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
[
|
|
223
|
+
{
|
|
224
|
+
toAddress: hardhatRelayAdaptContract,
|
|
225
|
+
tokenData: mockNFTTokenData0,
|
|
226
|
+
value: BigInt('1'),
|
|
227
|
+
allowOverride: false,
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
[
|
|
231
|
+
{
|
|
232
|
+
toAddress: hardhatRelayAdaptContract,
|
|
233
|
+
tokenData: mockNFTTokenData1,
|
|
234
|
+
value: BigInt('2'),
|
|
235
|
+
allowOverride: false,
|
|
236
|
+
},
|
|
237
|
+
], // run 1 - nft 1
|
|
238
|
+
]);
|
|
239
|
+
// Add 9000 for the dummy tx variance
|
|
240
|
+
// expect(rsp.gasEstimate).to.equal(9000n + 280n);
|
|
241
|
+
expect(rsp.gasEstimate).to.equal(3200000n); // Cross Contract Minimum
|
|
242
|
+
}).timeout(10000);
|
|
243
|
+
it('Should error on gas estimates for invalid cross contract calls', async () => {
|
|
244
|
+
stubGasEstimateSuccess();
|
|
245
|
+
await expect((0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, [{ data: 'abc' }], // Invalid
|
|
246
|
+
mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
|
|
247
|
+
minGasLimit)).rejectedWith(`Cross-contract calls require to and data fields.`);
|
|
248
|
+
});
|
|
249
|
+
it('Should error on cross contract calls gas estimate for ethers rejections', async () => {
|
|
250
|
+
stubRelayAdaptGasEstimateFailure();
|
|
251
|
+
await expect((0, tx_cross_contract_calls_1.gasEstimateForUnprovenCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false, // sendWithPublicWallet
|
|
252
|
+
minGasLimit)).rejectedWith('RelayAdapt multicall failed at index UNKNOWN.');
|
|
253
|
+
});
|
|
254
|
+
// PROVE AND SEND
|
|
255
|
+
it('Should populate tx for valid cross contract calls', async () => {
|
|
256
|
+
stubGasEstimateSuccess();
|
|
257
|
+
(0, proof_cache_1.setCachedProvedTransaction)(undefined);
|
|
258
|
+
spyOnSetUnshield();
|
|
259
|
+
await (0, tx_cross_contract_calls_1.generateCrossContractCallsProof)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
260
|
+
overallBatchMinGasPrice, minGasLimit, () => { });
|
|
261
|
+
expect(addUnshieldDataSpy.called).to.be.true;
|
|
262
|
+
expect(addUnshieldDataSpy.args).to.deep.equal([
|
|
263
|
+
[
|
|
264
|
+
{
|
|
265
|
+
toAddress: hardhatRelayAdaptContract,
|
|
266
|
+
tokenData: mockERC20TokenData0,
|
|
267
|
+
value: BigInt('0x0100'),
|
|
268
|
+
allowOverride: false,
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
[
|
|
272
|
+
{
|
|
273
|
+
toAddress: hardhatRelayAdaptContract,
|
|
274
|
+
tokenData: mockERC20TokenData1,
|
|
275
|
+
value: BigInt('0x0200'),
|
|
276
|
+
allowOverride: false,
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
[
|
|
280
|
+
{
|
|
281
|
+
toAddress: hardhatRelayAdaptContract,
|
|
282
|
+
tokenData: mockNFTTokenData0,
|
|
283
|
+
value: BigInt('1'),
|
|
284
|
+
allowOverride: false,
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
[
|
|
288
|
+
{
|
|
289
|
+
toAddress: hardhatRelayAdaptContract,
|
|
290
|
+
tokenData: mockNFTTokenData1,
|
|
291
|
+
value: BigInt('2'),
|
|
292
|
+
allowOverride: false,
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
[
|
|
296
|
+
{
|
|
297
|
+
toAddress: hardhatRelayAdaptContract,
|
|
298
|
+
tokenData: mockERC20TokenData0,
|
|
299
|
+
value: BigInt('0x0100'),
|
|
300
|
+
allowOverride: false,
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
[
|
|
304
|
+
{
|
|
305
|
+
toAddress: hardhatRelayAdaptContract,
|
|
306
|
+
tokenData: mockERC20TokenData1,
|
|
307
|
+
value: BigInt('0x0200'),
|
|
308
|
+
allowOverride: false,
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
[
|
|
312
|
+
{
|
|
313
|
+
toAddress: hardhatRelayAdaptContract,
|
|
314
|
+
tokenData: mockNFTTokenData0,
|
|
315
|
+
value: BigInt('1'),
|
|
316
|
+
allowOverride: false,
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
[
|
|
320
|
+
{
|
|
321
|
+
toAddress: hardhatRelayAdaptContract,
|
|
322
|
+
tokenData: mockNFTTokenData1,
|
|
323
|
+
value: BigInt('2'),
|
|
324
|
+
allowOverride: false,
|
|
325
|
+
},
|
|
326
|
+
], // actual proof - nft 1
|
|
327
|
+
]);
|
|
328
|
+
const populateResponse = await (0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
329
|
+
overallBatchMinGasPrice, gasDetails);
|
|
330
|
+
expect(populateResponse.nullifiers).to.deep.equal([
|
|
331
|
+
'0x0000000000000000000000000000000000000000000000000000000000000001',
|
|
332
|
+
'0x0000000000000000000000000000000000000000000000000000000000000002',
|
|
333
|
+
]);
|
|
334
|
+
const { transaction } = populateResponse;
|
|
335
|
+
expect(transaction.nonce).to.equal(undefined);
|
|
336
|
+
expect(transaction.gasPrice?.toString()).to.equal('4096');
|
|
337
|
+
expect(transaction.gasLimit).to.equal(2400n);
|
|
338
|
+
expect(transaction.value?.toString()).to.equal(undefined);
|
|
339
|
+
expect(transaction.data).to.equal('0x0123');
|
|
340
|
+
expect(transaction.to).to.equal(undefined);
|
|
341
|
+
expect(transaction.chainId).to.equal(undefined);
|
|
342
|
+
expect(transaction.type).to.equal(1);
|
|
343
|
+
});
|
|
344
|
+
it('Should error on populate tx for invalid cross contract calls', async () => {
|
|
345
|
+
stubGasEstimateSuccess();
|
|
346
|
+
await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, MOCK_TOKEN_AMOUNTS_DIFFERENT, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, [{ data: '123' }], // Invalid
|
|
347
|
+
broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
348
|
+
overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
|
|
349
|
+
});
|
|
350
|
+
it('Should error on populate cross contract calls tx for unproved transaction', async () => {
|
|
351
|
+
stubGasEstimateSuccess();
|
|
352
|
+
(0, proof_cache_1.setCachedProvedTransaction)(undefined);
|
|
353
|
+
await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
354
|
+
overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
|
|
355
|
+
});
|
|
356
|
+
it('Should error on populate cross contract calls tx when params changed (invalid cached proof)', async () => {
|
|
357
|
+
stubGasEstimateSuccess();
|
|
358
|
+
await (0, tx_cross_contract_calls_1.generateCrossContractCallsProof)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_TOKEN_AMOUNTS, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
359
|
+
overallBatchMinGasPrice, minGasLimit, () => { });
|
|
360
|
+
await expect((0, tx_cross_contract_calls_1.populateProvedCrossContractCalls)(shared_models_1.NetworkName.Hardhat, matrixWallet.id, MOCK_TOKEN_AMOUNTS_DIFFERENT, mocks_test_1.MOCK_NFT_AMOUNTS, mocks_test_1.MOCK_ERC20_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mockCrossContractCalls, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
|
|
361
|
+
overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
|
|
362
|
+
});
|
|
363
|
+
it('Should decode and parse relay adapt error logs (from failed Sushi V2 LP removal)', () => {
|
|
364
|
+
const transactionError = (0, tx_cross_contract_calls_1.getRelayAdaptTransactionError)(shared_models_1.NetworkName.Hardhat, formatted_relay_adapt_error_logs_json_1.default);
|
|
365
|
+
expect(transactionError).to.equal('ds-math-sub-underflow');
|
|
366
|
+
});
|
|
367
|
+
it('Should parse relay adapt log revert data', () => {
|
|
368
|
+
const transactionError = (0, tx_cross_contract_calls_1.parseRelayAdaptReturnValue)(shared_models_1.NetworkName.Hardhat, `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001564732d6d6174682d7375622d756e646572666c6f77000000000000000000000000000000000000000000000000000000000000000000000000000000`);
|
|
369
|
+
expect(transactionError).to.equal('ds-math-sub-underflow');
|
|
370
|
+
});
|
|
371
|
+
it('Should parse relay adapt revert data from matrix cookbook', () => {
|
|
372
|
+
const transactionError = (0, tx_cross_contract_calls_1.parseRelayAdaptReturnValue)(shared_models_1.NetworkName.Hardhat, `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002d52656c617941646170743a205265667573696e6720746f2063616c6c205261696c67756e20636f6e747261637400000000000000000000000000000000000000`);
|
|
373
|
+
expect(transactionError).to.equal('RelayAdapt: Refusing to call Matrix contract');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
//# sourceMappingURL=tx-cross-contract-calls.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-cross-contract-calls.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-cross-contract-calls.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 MatrixWallet,\n TransactionBatch,\n getTokenDataERC20,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n TransactionStructV3,\n RelayAdaptV3Contract,\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_ERC20_RECIPIENTS,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_FEE_TOKEN_DETAILS,\n MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n MOCK_MNEMONIC,\n MOCK_NFT_AMOUNTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n MOCK_NULLIFIERS,\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 createMatrixWallet,\n fullWalletForID,\n} from '../../matrix/wallets/wallets';\nimport { setCachedProvedTransaction } from '../proof-cache';\nimport {\n createNFTTokenDataFromMatrixNFTAmount,\n gasEstimateForUnprovenCrossContractCalls,\n generateCrossContractCallsProof,\n getRelayAdaptTransactionError,\n parseRelayAdaptReturnValue,\n populateProvedCrossContractCalls,\n} from '../tx-cross-contract-calls';\nimport FormattedRelayAdaptErrorLogs from './json/formatted-relay-adapt-error-logs.json';\nimport { ContractTransaction, FallbackProvider } from 'ethers';\n\nlet gasEstimateStub: SinonStub;\nlet railProveStub: SinonStub;\nlet railDummyProveStub: SinonStub;\nlet relayAdaptPopulateCrossContractCalls: SinonStub;\nlet relayAdaptGasEstimateStub: 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 = createNFTTokenDataFromMatrixNFTAmount(\n MOCK_NFT_AMOUNTS[0],\n);\nconst mockNFTTokenData1 = createNFTTokenDataFromMatrixNFTAmount(\n MOCK_NFT_AMOUNTS[1],\n);\n\nconst mockCrossContractCalls: ContractTransaction[] = [\n {\n to: MOCK_ETH_WALLET_ADDRESS,\n data: '0x0789',\n value: BigInt('0x01'),\n },\n {\n to: MOCK_ETH_WALLET_ADDRESS,\n data: '0x9789',\n value: BigInt('0x02'),\n },\n];\n\nconst MOCK_TOKEN_AMOUNTS_DIFFERENT: MatrixERC20Amount[] = [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: 100n,\n },\n {\n tokenAddress: MOCK_TOKEN_ADDRESS_2,\n amount: 300n,\n },\n];\n\nconst overallBatchMinGasPrice = BigInt('0x1000');\n\nconst minGasLimit = MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\nconst gasDetails: TransactionGasDetails = {\n evmGasType: EVMGasType.Type1,\n gasEstimate: 2000n,\n gasPrice: overallBatchMinGasPrice,\n};\n\nconst stubRelayAdaptGasEstimate = () => {\n relayAdaptGasEstimateStub = Sinon.stub(\n RelayAdaptV3Contract,\n 'estimateGasWithErrorHandler',\n ).resolves(BigInt('200'));\n};\n\nconst stubGasEstimateSuccess = () => {\n gasEstimateStub = Sinon.stub(\n FallbackProvider.prototype,\n 'estimateGas',\n ).resolves(BigInt('200'));\n};\n\nconst stubRelayAdaptGasEstimateFailure = () => {\n relayAdaptGasEstimateStub = Sinon.stub(\n RelayAdaptV3Contract,\n 'estimateGasWithErrorHandler',\n ).rejects(new Error('RelayAdapt multicall failed at index UNKNOWN.'));\n};\n\nconst spyOnSetUnshield = () => {\n addUnshieldDataSpy = Sinon.spy(TransactionBatch.prototype, 'addUnshieldData');\n};\n\ndescribe('tx-cross-contract-calls', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n\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 relayAdaptPopulateCrossContractCalls = Sinon.stub(\n RelayAdaptV3Contract.prototype,\n 'populateCrossContractCalls',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n });\n afterEach(() => {\n gasEstimateStub?.restore();\n addUnshieldDataSpy?.restore();\n erc20NoteSpy?.restore();\n relayAdaptGasEstimateStub?.restore();\n });\n after(async () => {\n railProveStub.restore();\n railDummyProveStub.restore();\n relayAdaptPopulateCrossContractCalls.restore();\n await closeTestEngine();\n });\n\n // GAS ESTIMATE\n\n it('Should get gas estimates for valid cross contract calls', async () => {\n stubRelayAdaptGasEstimate();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\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 ], // run 1 - erc20 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - erc20 2\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 1 - nft 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 1 - nft 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // run 2 - erc20 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 2 - erc20 2\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 2 - nft 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 2 - nft 1\n ]);\n // Add 9000 for the dummy tx variance\n // expect(rsp.gasEstimate).to.equal(9000n + 280n);\n expect(rsp.gasEstimate).to.equal(3_200_000n); // Cross Contract Minimum\n }).timeout(10_000);\n\n it('Should get gas estimates for valid cross contract calls, public wallet', async () => {\n stubRelayAdaptGasEstimate();\n spyOnSetUnshield();\n const rsp = await gasEstimateForUnprovenCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n true, // sendWithPublicWallet\n minGasLimit,\n );\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 ], // run 1 - erc20 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // run 1 - erc20 2\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // run 1 - nft 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // run 1 - nft 1\n ]);\n // Add 9000 for the dummy tx variance\n // expect(rsp.gasEstimate).to.equal(9000n + 280n);\n expect(rsp.gasEstimate).to.equal(3_200_000n); // Cross Contract Minimum\n }).timeout(10_000);\n\n it('Should error on gas estimates for invalid cross contract calls', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n [{ data: 'abc' } as ContractTransaction], // Invalid\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\n ),\n ).rejectedWith(`Cross-contract calls require to and data fields.`);\n });\n\n it('Should error on cross contract calls gas estimate for ethers rejections', async () => {\n stubRelayAdaptGasEstimateFailure();\n await expect(\n gasEstimateForUnprovenCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n minGasLimit,\n ),\n ).rejectedWith('RelayAdapt multicall failed at index UNKNOWN.');\n });\n\n // PROVE AND SEND\n\n it('Should populate tx for valid cross contract calls', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnSetUnshield();\n await generateCrossContractCallsProof(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n minGasLimit,\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 proof - erc20 token 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // dummy proof - erc20 token 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // dummy proof - nft 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // actual proof - nft 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData0,\n value: BigInt('0x0100'),\n allowOverride: false,\n },\n ], // actual proof - erc20 token 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockERC20TokenData1,\n value: BigInt('0x0200'),\n allowOverride: false,\n },\n ], // actual proof - erc20 token 1\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData0,\n value: BigInt('1'),\n allowOverride: false,\n },\n ], // actual proof - nft 0\n [\n {\n toAddress: hardhatRelayAdaptContract,\n tokenData: mockNFTTokenData1,\n value: BigInt('2'),\n allowOverride: false,\n },\n ], // actual proof - nft 1\n ]);\n const populateResponse = await populateProvedCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails, // 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(2400n);\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 error on populate tx for invalid cross contract calls', async () => {\n stubGasEstimateSuccess();\n await expect(\n populateProvedCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n [{ data: '123' } as ContractTransaction], // Invalid\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 cross contract calls tx for unproved transaction', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n await expect(\n populateProvedCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\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 cross contract calls tx when params changed (invalid cached proof)', async () => {\n stubGasEstimateSuccess();\n await generateCrossContractCallsProof(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_TOKEN_AMOUNTS,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n minGasLimit,\n () => {}, // progressCallback\n );\n await expect(\n populateProvedCrossContractCalls(\n NetworkName.Hardhat,\n matrixWallet.id,\n MOCK_TOKEN_AMOUNTS_DIFFERENT,\n MOCK_NFT_AMOUNTS,\n MOCK_ERC20_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n mockCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should decode and parse relay adapt error logs (from failed Sushi V2 LP removal)', () => {\n const transactionError = getRelayAdaptTransactionError(\n NetworkName.Hardhat,\n FormattedRelayAdaptErrorLogs,\n );\n expect(transactionError).to.equal('ds-math-sub-underflow');\n });\n\n it('Should parse relay adapt log revert data', () => {\n const transactionError = parseRelayAdaptReturnValue(\n NetworkName.Hardhat,\n `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006408c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001564732d6d6174682d7375622d756e646572666c6f77000000000000000000000000000000000000000000000000000000000000000000000000000000`,\n );\n expect(transactionError).to.equal('ds-math-sub-underflow');\n });\n\n it('Should parse relay adapt revert data from matrix cookbook', () => {\n const transactionError = parseRelayAdaptReturnValue(\n NetworkName.Hardhat,\n `0x5c0dee5d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002d52656c617941646170743a205265667573696e6720746f2063616c6c205261696c67756e20636f6e747261637400000000000000000000000000000000000000`,\n );\n expect(transactionError).to.equal(\n 'RelayAdapt: Refusing to call Matrix contract',\n );\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = __importDefault(require("chai"));
|
|
7
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
8
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
9
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
10
|
+
const mocks_test_1 = require("../../../tests/mocks.test");
|
|
11
|
+
const tx_gas_details_1 = require("../tx-gas-details");
|
|
12
|
+
const matrix_1 = require("../../matrix");
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
14
|
+
let gasEstimateStub;
|
|
15
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
16
|
+
const { expect } = chai_1.default;
|
|
17
|
+
const stubGasEstimateSuccess = () => {
|
|
18
|
+
gasEstimateStub = sinon_1.default.stub(ethers_1.FallbackProvider.prototype, 'estimateGas').resolves(BigInt('200'));
|
|
19
|
+
};
|
|
20
|
+
describe('tx-gas', () => {
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
gasEstimateStub?.restore();
|
|
23
|
+
});
|
|
24
|
+
it('Should format gas estimate response', async () => {
|
|
25
|
+
const transaction = {};
|
|
26
|
+
const fallbackProvider = (0, shared_models_1.createFallbackProviderFromJsonConfig)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA);
|
|
27
|
+
(0, matrix_1.setFallbackProviderForNetwork)(shared_models_1.NetworkName.Hardhat, fallbackProvider);
|
|
28
|
+
const gasEstimate = await (0, tx_gas_details_1.getGasEstimate)(shared_models_1.NetworkName.Hardhat, transaction, mocks_test_1.MOCK_ETH_WALLET_ADDRESS, true, // sendWithPublicWallet
|
|
29
|
+
false);
|
|
30
|
+
const isGasEstimateWithDummyProof = false;
|
|
31
|
+
const rsp = (0, tx_gas_details_1.gasEstimateResponse)(gasEstimate, undefined, // broadcasterFeeCommitment
|
|
32
|
+
isGasEstimateWithDummyProof);
|
|
33
|
+
const expectedGas = 53000n; // This field may vary
|
|
34
|
+
const variance = 0.05; // 5%
|
|
35
|
+
const lowerBound = Number(expectedGas) * (1 - variance);
|
|
36
|
+
const upperBound = Number(expectedGas) * (1 + variance);
|
|
37
|
+
expect(Number(rsp.gasEstimate)).to.be.within(lowerBound, upperBound);
|
|
38
|
+
}).timeout(6000);
|
|
39
|
+
it('Should pull gas estimate for basic transaction - self-signed', async () => {
|
|
40
|
+
stubGasEstimateSuccess();
|
|
41
|
+
const fallbackProvider = (0, shared_models_1.createFallbackProviderFromJsonConfig)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA);
|
|
42
|
+
(0, matrix_1.setFallbackProviderForNetwork)(shared_models_1.NetworkName.Hardhat, fallbackProvider);
|
|
43
|
+
const tx = {
|
|
44
|
+
chainId: 31337n,
|
|
45
|
+
to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
|
|
46
|
+
value: BigInt('100'),
|
|
47
|
+
data: '0x',
|
|
48
|
+
};
|
|
49
|
+
const gasEstimate = await (0, tx_gas_details_1.getGasEstimate)(shared_models_1.NetworkName.Hardhat, tx, mocks_test_1.MOCK_ETH_WALLET_ADDRESS, true, // sendWithPublicWallet
|
|
50
|
+
false);
|
|
51
|
+
const isGasEstimateWithDummyProof = true;
|
|
52
|
+
const rsp = (0, tx_gas_details_1.gasEstimateResponse)(gasEstimate, undefined, // broadcasterFeeCommitment
|
|
53
|
+
isGasEstimateWithDummyProof);
|
|
54
|
+
expect(rsp.gasEstimate).to.not.be.undefined;
|
|
55
|
+
}).timeout(60000);
|
|
56
|
+
it('Should pull gas estimate for basic transaction - broadcaster', async () => {
|
|
57
|
+
stubGasEstimateSuccess();
|
|
58
|
+
const fallbackProvider = (0, shared_models_1.createFallbackProviderFromJsonConfig)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA);
|
|
59
|
+
(0, matrix_1.setFallbackProviderForNetwork)(shared_models_1.NetworkName.Hardhat, fallbackProvider);
|
|
60
|
+
const tx = {
|
|
61
|
+
chainId: 31337n,
|
|
62
|
+
to: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
|
|
63
|
+
value: BigInt('100'),
|
|
64
|
+
data: '0x',
|
|
65
|
+
};
|
|
66
|
+
const gasEstimate = await (0, tx_gas_details_1.getGasEstimate)(shared_models_1.NetworkName.Hardhat, tx, mocks_test_1.MOCK_ETH_WALLET_ADDRESS, false, // sendWithPublicWallet
|
|
67
|
+
false);
|
|
68
|
+
const isGasEstimateWithDummyProof = true;
|
|
69
|
+
const rsp = (0, tx_gas_details_1.gasEstimateResponse)(gasEstimate, undefined, // broadcasterFeeCommitment
|
|
70
|
+
isGasEstimateWithDummyProof);
|
|
71
|
+
expect(rsp.gasEstimate).to.not.be.undefined;
|
|
72
|
+
}).timeout(60000);
|
|
73
|
+
it('Should set gas details for populated tx', () => {
|
|
74
|
+
const transaction = {};
|
|
75
|
+
const gasDetailsType0 = {
|
|
76
|
+
evmGasType: shared_models_1.EVMGasType.Type0,
|
|
77
|
+
gasEstimate: 100000n,
|
|
78
|
+
gasPrice: 500n,
|
|
79
|
+
};
|
|
80
|
+
const gasDetailsType1 = {
|
|
81
|
+
evmGasType: shared_models_1.EVMGasType.Type1,
|
|
82
|
+
gasEstimate: 100000n,
|
|
83
|
+
gasPrice: 500n,
|
|
84
|
+
};
|
|
85
|
+
const gasDetailsType2 = {
|
|
86
|
+
evmGasType: shared_models_1.EVMGasType.Type2,
|
|
87
|
+
gasEstimate: 120000n,
|
|
88
|
+
maxFeePerGas: 10000n,
|
|
89
|
+
maxPriorityFeePerGas: 500n,
|
|
90
|
+
};
|
|
91
|
+
// Hardhat - self-sign
|
|
92
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(shared_models_1.NetworkName.Hardhat, transaction, gasDetailsType2, true);
|
|
93
|
+
expect(transaction.type).to.equal(2);
|
|
94
|
+
expect(transaction.gasLimit).to.equal(144000n);
|
|
95
|
+
expect(transaction.gasPrice).to.be.undefined;
|
|
96
|
+
expect(transaction.maxFeePerGas).to.equal(10000n);
|
|
97
|
+
expect(transaction.maxPriorityFeePerGas).to.equal(500n);
|
|
98
|
+
// Hardhat - Broadcaster
|
|
99
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(shared_models_1.NetworkName.Hardhat, transaction, gasDetailsType1, false);
|
|
100
|
+
// Hardhat - self-sign - type0
|
|
101
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(shared_models_1.NetworkName.Hardhat, transaction, gasDetailsType0, true);
|
|
102
|
+
// Hardhat - Broadcaster - type0
|
|
103
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(shared_models_1.NetworkName.Hardhat, transaction, gasDetailsType0, false);
|
|
104
|
+
expect(transaction.type).to.equal(0);
|
|
105
|
+
expect(transaction.gasLimit).to.equal(120000n);
|
|
106
|
+
expect(transaction.gasPrice).to.equal(500n);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=tx-gas-details.test.js.map
|