@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-proof-unshield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-proof-unshield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n GenerateTransactionsProgressCallback,\n generateDummyProofTransactions,\n generateProofTransactions,\n generateTransact,\n generateUnshieldBaseToken,\n nullifiersForTransactions,\n} from './tx-generator';\nimport { assertValidEthAddress } from '../matrix/wallets/wallets';\nimport { setCachedProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n MatrixContracts,\n} from '@matrix-privacy/engine';\nimport { createRelayAdaptUnshieldERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\n\nexport const generateUnshieldProof = async (\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n const transaction = await generateTransact(\n provedTransactions,\n networkName,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n setCachedProvedTransaction({\n proofType: ProofType.Unshield,\n matrixWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts: undefined,\n relayAdaptUnshieldNFTAmounts: undefined,\n relayAdaptShieldERC20Recipients: undefined,\n relayAdaptShieldNFTRecipients: undefined,\n crossContractCalls: undefined,\n broadcasterFeeERC20AmountRecipient,\n transaction,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateUnshieldProof.name, err);\n }\n};\n\nexport const generateUnshieldToOriginProof = async (\n originalShieldTxid: string,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n false, // useDummyProof\n undefined, // overallBatchMinGasPrice\n progressCallback,\n originalShieldTxid,\n );\n const transaction = await generateTransact(\n provedTransactions,\n networkName,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n setCachedProvedTransaction({\n proofType: ProofType.Unshield,\n matrixWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts: undefined,\n relayAdaptUnshieldNFTAmounts: undefined,\n relayAdaptShieldERC20Recipients: undefined,\n relayAdaptShieldNFTRecipients: undefined,\n crossContractCalls: undefined,\n broadcasterFeeERC20AmountRecipient: undefined,\n transaction,\n sendWithPublicWallet: true,\n overallBatchMinGasPrice: undefined,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateUnshieldProof.name, err);\n }\n};\n\nexport const generateUnshieldBaseTokenProof = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n assertValidEthAddress(publicWalletAddress);\n\n setCachedProvedTransaction(undefined);\n\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n\n const relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const showSenderAddressToRecipient = false;\n const memoText: Optional<string> = undefined;\n\n // Create transactions with proof.\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.UnshieldBaseToken,\n networkName,\n matrixWalletID,\n encryptionKey,\n showSenderAddressToRecipient,\n memoText,\n relayAdaptUnshieldERC20AmountRecipients,\n [], // nftAmountRecipients\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n\n const transaction = await generateUnshieldBaseToken(\n provedTransactions,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n false, // useDummyProof\n sendWithPublicWallet,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n setCachedProvedTransaction({\n proofType: ProofType.UnshieldBaseToken,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts: undefined,\n relayAdaptShieldERC20Recipients: undefined,\n relayAdaptShieldNFTRecipients: undefined,\n crossContractCalls: undefined,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n transaction,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateUnshieldBaseTokenProof.name, err);\n }\n};\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MatrixPopulateTransactionResponse, MatrixTransactionGasEstimateResponse, MatrixERC20Amount, NetworkName, TransactionGasDetails } from '@matrix-privacy/shared-models';
|
|
2
|
+
export declare const populateShieldBaseToken: (networkName: NetworkName, matrixAddress: string, shieldPrivateKey: string, wrappedERC20Amount: MatrixERC20Amount, gasDetails?: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
3
|
+
export declare const gasEstimateForShieldBaseToken: (networkName: NetworkName, matrixAddress: string, shieldPrivateKey: string, wrappedERC20Amount: MatrixERC20Amount, fromWalletAddress: string) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gasEstimateForShieldBaseToken = exports.populateShieldBaseToken = void 0;
|
|
4
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
5
|
+
const tx_gas_details_1 = require("./tx-gas-details");
|
|
6
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
7
|
+
const error_1 = require("../../utils/error");
|
|
8
|
+
const wallets_1 = require("../matrix/wallets/wallets");
|
|
9
|
+
const generateShieldBaseTokenTransaction = async (networkName, matrixAddress, shieldPrivateKey, wrappedERC20Amount) => {
|
|
10
|
+
try {
|
|
11
|
+
const { masterPublicKey, viewingPublicKey } = engine_1.MatrixEngine.decodeAddress(matrixAddress);
|
|
12
|
+
const random = engine_1.ByteUtils.randomHex(16);
|
|
13
|
+
const { amount, tokenAddress } = wrappedERC20Amount;
|
|
14
|
+
const shield = new engine_1.ShieldNoteERC20(masterPublicKey, random, amount, tokenAddress);
|
|
15
|
+
const shieldRequest = await shield.serialize(engine_1.ByteUtils.hexToBytes(shieldPrivateKey), viewingPublicKey);
|
|
16
|
+
const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
|
|
17
|
+
const transaction = await engine_1.MatrixContracts.getRelayAdaptContract(chain).populateShieldBaseToken(shieldRequest);
|
|
18
|
+
return transaction;
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw (0, error_1.reportAndSanitizeError)(generateShieldBaseTokenTransaction.name, err);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const populateShieldBaseToken = async (networkName, matrixAddress, shieldPrivateKey, wrappedERC20Amount, gasDetails) => {
|
|
25
|
+
try {
|
|
26
|
+
(0, wallets_1.assertValidMatrixAddress)(matrixAddress);
|
|
27
|
+
const transaction = await generateShieldBaseTokenTransaction(networkName, matrixAddress, shieldPrivateKey, wrappedERC20Amount);
|
|
28
|
+
if (gasDetails) {
|
|
29
|
+
const sendWithPublicWallet = true;
|
|
30
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(networkName, transaction, gasDetails, sendWithPublicWallet);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
transaction,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateShieldBaseToken.name, err);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.populateShieldBaseToken = populateShieldBaseToken;
|
|
41
|
+
const gasEstimateForShieldBaseToken = async (networkName, matrixAddress, shieldPrivateKey, wrappedERC20Amount, fromWalletAddress) => {
|
|
42
|
+
try {
|
|
43
|
+
(0, wallets_1.assertValidMatrixAddress)(matrixAddress);
|
|
44
|
+
const transaction = await generateShieldBaseTokenTransaction(networkName, matrixAddress, shieldPrivateKey, wrappedERC20Amount);
|
|
45
|
+
const sendWithPublicWallet = true;
|
|
46
|
+
const isGasEstimateWithDummyProof = false;
|
|
47
|
+
return (0, tx_gas_details_1.gasEstimateResponse)(await (0, tx_gas_details_1.getGasEstimate)(networkName, transaction, fromWalletAddress, sendWithPublicWallet, false), undefined, // broadcasterFeeCommitment
|
|
48
|
+
isGasEstimateWithDummyProof);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForShieldBaseToken.name, err);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.gasEstimateForShieldBaseToken = gasEstimateForShieldBaseToken;
|
|
55
|
+
//# sourceMappingURL=tx-shield-base-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-shield-base-token.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield-base-token.ts"],"names":[],"mappings":";;;AAAA,iEAOuC;AACvC,qDAI0B;AAC1B,mDAKgC;AAChC,6CAA2D;AAE3D,uDAAqE;AAErE,MAAM,kCAAkC,GAAG,KAAK,EAC9C,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACP,EAAE;IAChC,IAAI;QACF,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GACzC,qBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,kBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;QAEpD,MAAM,MAAM,GAAG,IAAI,wBAAe,CAChC,eAAe,EACf,MAAM,EACN,MAAM,EACN,YAAY,CACb,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAC1C,kBAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACtC,gBAAgB,CACjB,CAAC;QAEF,MAAM,EAAE,KAAK,EAAE,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,WAAW,GACf,MAAM,wBAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,uBAAuB,CACxE,aAAa,CACd,CAAC;QAEJ,OAAO,WAAW,CAAC;KACpB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AAEK,MAAM,uBAAuB,GAAG,KAAK,EAC1C,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACrC,UAAkC,EACU,EAAE;IAC9C,IAAI;QACF,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,MAAM,kCAAkC,CAC1D,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,MAAM,oBAAoB,GAAG,IAAI,CAAC;YAClC,IAAA,4CAA2B,EACzB,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,CACrB,CAAC;SACH;QAED,OAAO;YACL,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,+BAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACjE;AACH,CAAC,CAAC;AAjCW,QAAA,uBAAuB,2BAiClC;AAEK,MAAM,6BAA6B,GAAG,KAAK,EAChD,WAAwB,EACxB,aAAqB,EACrB,gBAAwB,EACxB,kBAAqC,EACrC,iBAAyB,EACsB,EAAE;IACjD,IAAI;QACF,IAAA,kCAAwB,EAAC,aAAa,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,MAAM,kCAAkC,CAC1D,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;QAEF,MAAM,oBAAoB,GAAG,IAAI,CAAC;QAClC,MAAM,2BAA2B,GAAG,KAAK,CAAC;QAC1C,OAAO,IAAA,oCAAmB,EACxB,MAAM,IAAA,+BAAc,EAClB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,CACN,EACD,SAAS,EAAE,2BAA2B;QACtC,2BAA2B,CAC5B,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,qCAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACvE;AACH,CAAC,CAAC;AAjCW,QAAA,6BAA6B,iCAiCxC","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n TransactionGasDetails,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n gasEstimateResponse,\n getGasEstimate,\n setGasDetailsForTransaction,\n} from './tx-gas-details';\nimport {\n ShieldNoteERC20,\n MatrixEngine,\n ByteUtils,\n MatrixContracts,\n} from '@matrix-privacy/engine';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { assertValidMatrixAddress } from '../matrix/wallets/wallets';\n\nconst generateShieldBaseTokenTransaction = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n): Promise<ContractTransaction> => {\n try {\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n const random = ByteUtils.randomHex(16);\n\n const { amount, tokenAddress } = wrappedERC20Amount;\n\n const shield = new ShieldNoteERC20(\n masterPublicKey,\n random,\n amount,\n tokenAddress,\n );\n\n const shieldRequest = await shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n\n const { chain } = NETWORK_CONFIG[networkName];\n const transaction =\n await MatrixContracts.getRelayAdaptContract(chain).populateShieldBaseToken(\n shieldRequest,\n );\n\n return transaction;\n } catch (err) {\n throw reportAndSanitizeError(generateShieldBaseTokenTransaction.name, err);\n }\n};\n\nexport const populateShieldBaseToken = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n gasDetails?: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n assertValidMatrixAddress(matrixAddress);\n\n const transaction = await generateShieldBaseTokenTransaction(\n networkName,\n matrixAddress,\n shieldPrivateKey,\n wrappedERC20Amount,\n );\n\n if (gasDetails) {\n const sendWithPublicWallet = true;\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n }\n\n return {\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateShieldBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForShieldBaseToken = async (\n networkName: NetworkName,\n matrixAddress: string,\n shieldPrivateKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n fromWalletAddress: string,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n assertValidMatrixAddress(matrixAddress);\n\n const transaction = await generateShieldBaseTokenTransaction(\n networkName,\n matrixAddress,\n shieldPrivateKey,\n wrappedERC20Amount,\n );\n\n const sendWithPublicWallet = true;\n const isGasEstimateWithDummyProof = false;\n return gasEstimateResponse(\n await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n false, // isCrossContractCall\n ),\n undefined, // broadcasterFeeCommitment\n isGasEstimateWithDummyProof,\n );\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForShieldBaseToken.name, err);\n }\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MatrixPopulateTransactionResponse, MatrixTransactionGasEstimateResponse, NetworkName, MatrixERC20AmountRecipient, MatrixNFTAmountRecipient, TransactionGasDetails } from '@matrix-privacy/shared-models';
|
|
2
|
+
import { ContractTransaction } from 'ethers';
|
|
3
|
+
export declare const getShieldPrivateKeySignatureMessage: () => string;
|
|
4
|
+
export declare const generateShieldTransaction: (networkName: NetworkName, shieldPrivateKey: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[]) => Promise<ContractTransaction>;
|
|
5
|
+
export declare const populateShield: (networkName: NetworkName, shieldPrivateKey: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], gasDetails?: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
6
|
+
export declare const gasEstimateForShield: (networkName: NetworkName, shieldPrivateKey: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], fromWalletAddress: string) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gasEstimateForShield = exports.populateShield = exports.generateShieldTransaction = exports.getShieldPrivateKeySignatureMessage = void 0;
|
|
4
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
5
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
6
|
+
const tx_gas_details_1 = require("./tx-gas-details");
|
|
7
|
+
const tx_cross_contract_calls_1 = require("./tx-cross-contract-calls");
|
|
8
|
+
const error_1 = require("../../utils/error");
|
|
9
|
+
const wallets_1 = require("../matrix/wallets");
|
|
10
|
+
const getShieldPrivateKeySignatureMessage = () => {
|
|
11
|
+
return engine_1.ShieldNote.getShieldPrivateKeySignatureMessage();
|
|
12
|
+
};
|
|
13
|
+
exports.getShieldPrivateKeySignatureMessage = getShieldPrivateKeySignatureMessage;
|
|
14
|
+
const generateERC20ShieldRequests = async (erc20AmountRecipient, random, shieldPrivateKey) => {
|
|
15
|
+
const matrixAddress = erc20AmountRecipient.recipientAddress;
|
|
16
|
+
(0, wallets_1.assertValidMatrixAddress)(matrixAddress);
|
|
17
|
+
const { masterPublicKey, viewingPublicKey } = engine_1.MatrixEngine.decodeAddress(matrixAddress);
|
|
18
|
+
const shield = new engine_1.ShieldNoteERC20(masterPublicKey, random, erc20AmountRecipient.amount, erc20AmountRecipient.tokenAddress);
|
|
19
|
+
return shield.serialize(engine_1.ByteUtils.hexToBytes(shieldPrivateKey), viewingPublicKey);
|
|
20
|
+
};
|
|
21
|
+
const generateNFTShieldRequests = async (nftAmountRecipient, random, shieldPrivateKey) => {
|
|
22
|
+
const matrixAddress = nftAmountRecipient.recipientAddress;
|
|
23
|
+
(0, wallets_1.assertValidMatrixAddress)(matrixAddress);
|
|
24
|
+
const { masterPublicKey, viewingPublicKey } = engine_1.MatrixEngine.decodeAddress(matrixAddress);
|
|
25
|
+
const value = nftAmountRecipient.nftTokenType === shared_models_1.NFTTokenType.ERC721
|
|
26
|
+
? engine_1.ERC721_NOTE_VALUE
|
|
27
|
+
: nftAmountRecipient.amount;
|
|
28
|
+
const nftTokenData = (0, tx_cross_contract_calls_1.createNFTTokenDataFromMatrixNFTAmount)(nftAmountRecipient);
|
|
29
|
+
const shield = new engine_1.ShieldNoteNFT(masterPublicKey, random, value, nftTokenData);
|
|
30
|
+
return shield.serialize(engine_1.ByteUtils.hexToBytes(shieldPrivateKey), viewingPublicKey);
|
|
31
|
+
};
|
|
32
|
+
const generateShieldTransaction = async (networkName, shieldPrivateKey, erc20AmountRecipients, nftAmountRecipients) => {
|
|
33
|
+
try {
|
|
34
|
+
const random = engine_1.ByteUtils.randomHex(16);
|
|
35
|
+
const shieldInputs = await Promise.all([
|
|
36
|
+
...erc20AmountRecipients.map(erc20AmountRecipient => generateERC20ShieldRequests(erc20AmountRecipient, random, shieldPrivateKey)),
|
|
37
|
+
...nftAmountRecipients.map(nftAmountRecipient => generateNFTShieldRequests(nftAmountRecipient, random, shieldPrivateKey)),
|
|
38
|
+
]);
|
|
39
|
+
const chain = shared_models_1.NETWORK_CONFIG[networkName].chain;
|
|
40
|
+
const transaction = await engine_1.MatrixContracts.generateShield(chain, shieldInputs);
|
|
41
|
+
return transaction;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
throw (0, error_1.reportAndSanitizeError)(exports.generateShieldTransaction.name, err);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.generateShieldTransaction = generateShieldTransaction;
|
|
48
|
+
const populateShield = async (networkName, shieldPrivateKey, erc20AmountRecipients, nftAmountRecipients, gasDetails) => {
|
|
49
|
+
try {
|
|
50
|
+
const transaction = await (0, exports.generateShieldTransaction)(networkName, shieldPrivateKey, erc20AmountRecipients, nftAmountRecipients);
|
|
51
|
+
if (gasDetails) {
|
|
52
|
+
const sendWithPublicWallet = true;
|
|
53
|
+
(0, tx_gas_details_1.setGasDetailsForTransaction)(networkName, transaction, gasDetails, sendWithPublicWallet);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
transaction,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateShield.name, err);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.populateShield = populateShield;
|
|
64
|
+
const gasEstimateForShield = async (networkName, shieldPrivateKey, erc20AmountRecipients, nftAmountRecipients, fromWalletAddress) => {
|
|
65
|
+
try {
|
|
66
|
+
const transaction = await (0, exports.generateShieldTransaction)(networkName, shieldPrivateKey, erc20AmountRecipients, nftAmountRecipients);
|
|
67
|
+
const sendWithPublicWallet = true;
|
|
68
|
+
const isGasEstimateWithDummyProof = false;
|
|
69
|
+
return (0, tx_gas_details_1.gasEstimateResponse)(await (0, tx_gas_details_1.getGasEstimate)(networkName, transaction, fromWalletAddress, sendWithPublicWallet, false), undefined, // broadcasterFeeCommitment
|
|
70
|
+
isGasEstimateWithDummyProof);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForShield.name, err);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.gasEstimateForShield = gasEstimateForShield;
|
|
77
|
+
//# sourceMappingURL=tx-shield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-shield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-shield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n NetworkName,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n NFTTokenType,\n TransactionGasDetails,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n ShieldNote,\n MatrixEngine,\n ShieldRequestStruct,\n ByteUtils,\n ShieldNoteERC20,\n ShieldNoteNFT,\n ERC721_NOTE_VALUE,\n MatrixContracts,\n} from '@matrix-privacy/engine';\nimport {\n gasEstimateResponse,\n getGasEstimate,\n setGasDetailsForTransaction,\n} from './tx-gas-details';\nimport { createNFTTokenDataFromMatrixNFTAmount } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { assertValidMatrixAddress } from '../matrix/wallets';\n\nexport const getShieldPrivateKeySignatureMessage = () => {\n return ShieldNote.getShieldPrivateKeySignatureMessage();\n};\n\nconst generateERC20ShieldRequests = async (\n erc20AmountRecipient: MatrixERC20AmountRecipient,\n random: string,\n shieldPrivateKey: string,\n): Promise<ShieldRequestStruct> => {\n const matrixAddress = erc20AmountRecipient.recipientAddress;\n\n assertValidMatrixAddress(matrixAddress);\n\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n\n const shield = new ShieldNoteERC20(\n masterPublicKey,\n random,\n erc20AmountRecipient.amount,\n erc20AmountRecipient.tokenAddress,\n );\n return shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n};\n\nconst generateNFTShieldRequests = async (\n nftAmountRecipient: MatrixNFTAmountRecipient,\n random: string,\n shieldPrivateKey: string,\n): Promise<ShieldRequestStruct> => {\n const matrixAddress = nftAmountRecipient.recipientAddress;\n\n assertValidMatrixAddress(matrixAddress);\n\n const { masterPublicKey, viewingPublicKey } =\n MatrixEngine.decodeAddress(matrixAddress);\n\n const value =\n nftAmountRecipient.nftTokenType === NFTTokenType.ERC721\n ? ERC721_NOTE_VALUE\n : nftAmountRecipient.amount;\n\n const nftTokenData =\n createNFTTokenDataFromMatrixNFTAmount(nftAmountRecipient);\n\n const shield = new ShieldNoteNFT(\n masterPublicKey,\n random,\n value,\n nftTokenData,\n );\n return shield.serialize(\n ByteUtils.hexToBytes(shieldPrivateKey),\n viewingPublicKey,\n );\n};\n\nexport const generateShieldTransaction = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n): Promise<ContractTransaction> => {\n try {\n const random = ByteUtils.randomHex(16);\n\n const shieldInputs: ShieldRequestStruct[] = await Promise.all([\n ...erc20AmountRecipients.map(erc20AmountRecipient =>\n generateERC20ShieldRequests(\n erc20AmountRecipient,\n random,\n shieldPrivateKey,\n ),\n ),\n ...nftAmountRecipients.map(nftAmountRecipient =>\n generateNFTShieldRequests(nftAmountRecipient, random, shieldPrivateKey),\n ),\n ]);\n\n const chain = NETWORK_CONFIG[networkName].chain;\n const transaction = await MatrixContracts.generateShield(\n chain,\n shieldInputs,\n );\n return transaction;\n } catch (err) {\n throw reportAndSanitizeError(generateShieldTransaction.name, err);\n }\n};\n\nexport const populateShield = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n gasDetails?: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const transaction = await generateShieldTransaction(\n networkName,\n shieldPrivateKey,\n erc20AmountRecipients,\n nftAmountRecipients,\n );\n\n if (gasDetails) {\n const sendWithPublicWallet = true;\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n }\n\n return {\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateShield.name, err);\n }\n};\n\nexport const gasEstimateForShield = async (\n networkName: NetworkName,\n shieldPrivateKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n fromWalletAddress: string,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const transaction = await generateShieldTransaction(\n networkName,\n shieldPrivateKey,\n erc20AmountRecipients,\n nftAmountRecipients,\n );\n\n const sendWithPublicWallet = true;\n const isGasEstimateWithDummyProof = false;\n return gasEstimateResponse(\n await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n sendWithPublicWallet,\n false, // isCrossContractCall\n ),\n undefined, // broadcasterFeeCommitment\n isGasEstimateWithDummyProof,\n );\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForShield.name, err);\n }\n};\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MatrixPopulateTransactionResponse, MatrixTransactionGasEstimateResponse, NetworkName, FeeTokenDetails, MatrixERC20AmountRecipient, MatrixNFTAmountRecipient, TransactionGasDetails } from '@matrix-privacy/shared-models';
|
|
2
|
+
export declare const populateProvedTransfer: (networkName: NetworkName, matrixWalletID: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
3
|
+
export declare const gasEstimateForUnprovenTransfer: (networkName: NetworkName, matrixWalletID: string, encryptionKey: string, memoText: Optional<string>, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gasEstimateForUnprovenTransfer = exports.populateProvedTransfer = void 0;
|
|
4
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
5
|
+
const tx_generator_1 = require("./tx-generator");
|
|
6
|
+
const proof_cache_1 = require("./proof-cache");
|
|
7
|
+
const tx_gas_broadcaster_fee_estimator_1 = require("./tx-gas-broadcaster-fee-estimator");
|
|
8
|
+
const error_1 = require("../../utils/error");
|
|
9
|
+
const populateProvedTransfer = async (networkName, matrixWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
|
|
10
|
+
try {
|
|
11
|
+
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, shared_models_1.ProofType.Transfer, matrixWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, undefined, // relayAdaptUnshieldERC20AmountRecipients
|
|
12
|
+
undefined, // relayAdaptUnshieldNFTAmounts
|
|
13
|
+
undefined, // relayAdaptShieldERC20Recipients
|
|
14
|
+
undefined, // relayAdaptShieldNFTRecipients
|
|
15
|
+
undefined, // crossContractCalls
|
|
16
|
+
broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails);
|
|
17
|
+
return {
|
|
18
|
+
nullifiers,
|
|
19
|
+
transaction,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateProvedTransfer.name, err);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.populateProvedTransfer = populateProvedTransfer;
|
|
27
|
+
const gasEstimateForUnprovenTransfer = async (networkName, matrixWalletID, encryptionKey, memoText, erc20AmountRecipients, nftAmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet) => {
|
|
28
|
+
try {
|
|
29
|
+
const overallBatchMinGasPrice = 0n;
|
|
30
|
+
const response = await (0, tx_gas_broadcaster_fee_estimator_1.gasEstimateResponseDummyProofIterativeBroadcasterFee)((broadcasterFeeERC20Amount) => (0, tx_generator_1.generateDummyProofTransactions)(shared_models_1.ProofType.Transfer, networkName, matrixWalletID, encryptionKey, false, // showSenderAddressToRecipient - doesn't matter for gas estimate.
|
|
31
|
+
memoText, erc20AmountRecipients, nftAmountRecipients, broadcasterFeeERC20Amount, sendWithPublicWallet, overallBatchMinGasPrice), (txs) => (0, tx_generator_1.generateTransact)(txs, networkName, true), networkName, matrixWalletID, erc20AmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet, false);
|
|
32
|
+
return response;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenTransfer.name, err);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.gasEstimateForUnprovenTransfer = gasEstimateForUnprovenTransfer;
|
|
39
|
+
//# sourceMappingURL=tx-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-transfer.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-transfer.ts"],"names":[],"mappings":";;;AAAA,iEAUuC;AACvC,iDAGwB;AACxB,+CAA0D;AAI1D,yFAA0G;AAC1G,6CAA2D;AAEpD,MAAM,sBAAsB,GAAG,KAAK,EACzC,WAAwB,EACxB,cAAsB,EACtB,4BAAqC,EACrC,QAA0B,EAC1B,qBAAmD,EACnD,mBAA+C,EAC/C,kCAAwE,EACxE,oBAA6B,EAC7B,uBAAyC,EACzC,UAAiC,EACW,EAAE;IAC9C,IAAI;QACF,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,MAAM,IAAA,uCAAyB,EAC7B,WAAW,EACX,yBAAS,CAAC,QAAQ,EAClB,cAAc,EACd,4BAA4B,EAC5B,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EAAE,0CAA0C;QACrD,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,kCAAkC;QAC7C,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,qBAAqB;QAChC,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,OAAO;YACL,UAAU;YACV,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,8BAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAChE;AACH,CAAC,CAAC;AAvCW,QAAA,sBAAsB,0BAuCjC;AAEK,MAAM,8BAA8B,GAAG,KAAK,EACjD,WAAwB,EACxB,cAAsB,EACtB,aAAqB,EACrB,QAA0B,EAC1B,qBAAmD,EACnD,mBAA+C,EAC/C,kBAAyC,EACzC,eAA0C,EAC1C,oBAA6B,EACkB,EAAE;IACjD,IAAI;QACF,MAAM,uBAAuB,GAAG,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,IAAA,uFAAoD,EACzE,CAAC,yBAAsD,EAAE,EAAE,CACzD,IAAA,6CAA8B,EAC5B,yBAAS,CAAC,QAAQ,EAClB,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,EAAE,kEAAkE;QACzE,QAAQ,EACR,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,CACxB,EACH,CAAC,GAA0B,EAAE,EAAE,CAC7B,IAAA,+BAAgB,EACd,GAAG,EACH,WAAW,EACX,IAAI,CACL,EACH,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,KAAK,CACN,CAAC;QACF,OAAO,QAAQ,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,sCAA8B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACxE;AACH,CAAC,CAAC;AA/CW,QAAA,8BAA8B,kCA+CzC","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n TransactionGasDetails,\n} from '@matrix-privacy/shared-models';\nimport {\n generateDummyProofTransactions,\n generateTransact,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\n\nexport const populateProvedTransfer = async (\n networkName: NetworkName,\n matrixWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Transfer,\n matrixWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedTransfer.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenTransfer = async (\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n memoText: Optional<string>,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Transfer,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient - doesn't matter for gas estimate.\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) =>\n generateTransact(\n txs,\n networkName,\n true, // useDummyProof\n ),\n networkName,\n matrixWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenTransfer.name, err);\n }\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MatrixPopulateTransactionResponse, MatrixTransactionGasEstimateResponse, MatrixERC20Amount, NetworkName, FeeTokenDetails, MatrixERC20AmountRecipient, MatrixNFTAmountRecipient, TransactionGasDetails } from '@matrix-privacy/shared-models';
|
|
2
|
+
export declare const populateProvedUnshield: (networkName: NetworkName, matrixWalletID: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
3
|
+
export declare const populateProvedUnshieldBaseToken: (networkName: NetworkName, publicWalletAddress: string, matrixWalletID: string, wrappedERC20Amount: MatrixERC20Amount, broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
4
|
+
export declare const gasEstimateForUnprovenUnshield: (networkName: NetworkName, matrixWalletID: string, encryptionKey: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
5
|
+
export declare const gasEstimateForUnprovenUnshieldBaseToken: (networkName: NetworkName, publicWalletAddress: string, matrixWalletID: string, encryptionKey: string, wrappedERC20Amount: MatrixERC20Amount, originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
6
|
+
export declare const getERC20AndNFTAmountRecipientsForUnshieldToOrigin: (networkName: NetworkName, matrixWalletID: string, originalShieldTxid: string) => Promise<{
|
|
7
|
+
erc20AmountRecipients: MatrixERC20AmountRecipient[];
|
|
8
|
+
nftAmountRecipients: MatrixNFTAmountRecipient[];
|
|
9
|
+
}>;
|
|
10
|
+
export declare const populateProvedUnshieldToOrigin: (networkName: NetworkName, matrixWalletID: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[], gasDetails: TransactionGasDetails) => Promise<MatrixPopulateTransactionResponse>;
|
|
11
|
+
export declare const gasEstimateForUnprovenUnshieldToOrigin: (originalShieldTxid: string, networkName: NetworkName, matrixWalletID: string, encryptionKey: string, erc20AmountRecipients: MatrixERC20AmountRecipient[], nftAmountRecipients: MatrixNFTAmountRecipient[]) => Promise<MatrixTransactionGasEstimateResponse>;
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gasEstimateForUnprovenUnshieldToOrigin = exports.populateProvedUnshieldToOrigin = exports.getERC20AndNFTAmountRecipientsForUnshieldToOrigin = exports.gasEstimateForUnprovenUnshieldBaseToken = exports.gasEstimateForUnprovenUnshield = exports.populateProvedUnshieldBaseToken = exports.populateProvedUnshield = void 0;
|
|
4
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
5
|
+
const tx_generator_1 = require("./tx-generator");
|
|
6
|
+
const proof_cache_1 = require("./proof-cache");
|
|
7
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
8
|
+
const tx_gas_broadcaster_fee_estimator_1 = require("./tx-gas-broadcaster-fee-estimator");
|
|
9
|
+
const tx_cross_contract_calls_1 = require("./tx-cross-contract-calls");
|
|
10
|
+
const error_1 = require("../../utils/error");
|
|
11
|
+
const tx_gas_details_1 = require("./tx-gas-details");
|
|
12
|
+
const matrix_1 = require("../matrix");
|
|
13
|
+
const ERC20_TRANSFER_EVENT_SIGNATURE = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
14
|
+
const populateProvedUnshield = async (networkName, matrixWalletID, erc20AmountRecipients, nftAmountRecipients, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
|
|
15
|
+
try {
|
|
16
|
+
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, shared_models_1.ProofType.Unshield, matrixWalletID, false, // showSenderAddressToRecipient
|
|
17
|
+
undefined, // memoText
|
|
18
|
+
erc20AmountRecipients, nftAmountRecipients, undefined, // relayAdaptUnshieldERC20AmountRecipients
|
|
19
|
+
undefined, // relayAdaptUnshieldNFTAmounts
|
|
20
|
+
undefined, // relayAdaptShieldERC20Recipients
|
|
21
|
+
undefined, // relayAdaptShieldNFTRecipients
|
|
22
|
+
undefined, // crossContractCalls
|
|
23
|
+
broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails);
|
|
24
|
+
return {
|
|
25
|
+
nullifiers,
|
|
26
|
+
transaction,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateProvedUnshield.name, err);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.populateProvedUnshield = populateProvedUnshield;
|
|
34
|
+
const populateProvedUnshieldBaseToken = async (networkName, publicWalletAddress, matrixWalletID, wrappedERC20Amount, broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
|
|
35
|
+
try {
|
|
36
|
+
const erc20AmountRecipients = [
|
|
37
|
+
{
|
|
38
|
+
...wrappedERC20Amount,
|
|
39
|
+
recipientAddress: publicWalletAddress,
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
const relayAdaptUnshieldERC20Amounts = [
|
|
43
|
+
wrappedERC20Amount,
|
|
44
|
+
];
|
|
45
|
+
// Empty NFT Recipients.
|
|
46
|
+
const nftAmountRecipients = [];
|
|
47
|
+
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, shared_models_1.ProofType.UnshieldBaseToken, matrixWalletID, false, // showSenderAddressToRecipient
|
|
48
|
+
undefined, // memoText
|
|
49
|
+
erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, undefined, // relayAdaptUnshieldNFTAmounts
|
|
50
|
+
undefined, // relayAdaptShieldERC20Recipients
|
|
51
|
+
undefined, // relayAdaptShieldNFTRecipients
|
|
52
|
+
undefined, // crossContractCalls
|
|
53
|
+
broadcasterFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails);
|
|
54
|
+
return {
|
|
55
|
+
nullifiers,
|
|
56
|
+
transaction,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateProvedUnshieldBaseToken.name, err);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.populateProvedUnshieldBaseToken = populateProvedUnshieldBaseToken;
|
|
64
|
+
const gasEstimateForUnprovenUnshield = async (networkName, matrixWalletID, encryptionKey, erc20AmountRecipients, nftAmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet) => {
|
|
65
|
+
try {
|
|
66
|
+
const overallBatchMinGasPrice = 0n;
|
|
67
|
+
const response = await (0, tx_gas_broadcaster_fee_estimator_1.gasEstimateResponseDummyProofIterativeBroadcasterFee)((broadcasterFeeERC20Amount) => (0, tx_generator_1.generateDummyProofTransactions)(shared_models_1.ProofType.Unshield, networkName, matrixWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
68
|
+
undefined, // memoText
|
|
69
|
+
erc20AmountRecipients, nftAmountRecipients, broadcasterFeeERC20Amount, sendWithPublicWallet, overallBatchMinGasPrice), (txs) => (0, tx_generator_1.generateTransact)(txs, networkName, true), networkName, matrixWalletID, erc20AmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet, false);
|
|
70
|
+
return response;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenUnshield.name, err);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.gasEstimateForUnprovenUnshield = gasEstimateForUnprovenUnshield;
|
|
77
|
+
const gasEstimateForUnprovenUnshieldBaseToken = async (networkName, publicWalletAddress, matrixWalletID, encryptionKey, wrappedERC20Amount, originalGasDetails, feeTokenDetails, sendWithPublicWallet) => {
|
|
78
|
+
try {
|
|
79
|
+
const relayAdaptUnshieldERC20AmountRecipients = (0, tx_cross_contract_calls_1.createRelayAdaptUnshieldERC20AmountRecipients)(networkName, [
|
|
80
|
+
wrappedERC20Amount,
|
|
81
|
+
]);
|
|
82
|
+
// Empty NFT Recipients.
|
|
83
|
+
const nftAmountRecipients = [];
|
|
84
|
+
const overallBatchMinGasPrice = 0n;
|
|
85
|
+
const response = await (0, tx_gas_broadcaster_fee_estimator_1.gasEstimateResponseDummyProofIterativeBroadcasterFee)((broadcasterFeeERC20Amount) => (0, tx_generator_1.generateDummyProofTransactions)(shared_models_1.ProofType.UnshieldBaseToken, networkName, matrixWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
86
|
+
undefined, // memoText
|
|
87
|
+
relayAdaptUnshieldERC20AmountRecipients, nftAmountRecipients, broadcasterFeeERC20Amount, sendWithPublicWallet, overallBatchMinGasPrice), (txs) => {
|
|
88
|
+
const relayAdaptParamsRandom = engine_1.ByteUtils.randomHex(31);
|
|
89
|
+
return (0, tx_generator_1.generateUnshieldBaseToken)(txs, networkName, publicWalletAddress, relayAdaptParamsRandom, true, // useDummyProof (for gas estimation)
|
|
90
|
+
sendWithPublicWallet);
|
|
91
|
+
}, networkName, matrixWalletID, relayAdaptUnshieldERC20AmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet, false);
|
|
92
|
+
return response;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenUnshieldBaseToken.name, err);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
exports.gasEstimateForUnprovenUnshieldBaseToken = gasEstimateForUnprovenUnshieldBaseToken;
|
|
99
|
+
async function extractTokenOwnerFromTransferEvents(receipt, matrixContractAddress) {
|
|
100
|
+
const matrixAddressLower = matrixContractAddress.toLowerCase();
|
|
101
|
+
const potentialOwners = new Set();
|
|
102
|
+
for (const log of receipt.logs) {
|
|
103
|
+
try {
|
|
104
|
+
if (log.topics.length < 3) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (log.topics[0] !== ERC20_TRANSFER_EVENT_SIGNATURE) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// topics[0] = event signature hash
|
|
111
|
+
const toAddress = `0x${log.topics[2].slice(-40).toLowerCase()}`;
|
|
112
|
+
if (toAddress === matrixAddressLower) {
|
|
113
|
+
const fromAddress = `0x${log.topics[1].slice(-40)}`;
|
|
114
|
+
potentialOwners.add(fromAddress);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.warn('Error parsing log for token owner extraction:', error);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (potentialOwners.size === 1) {
|
|
123
|
+
const [owner] = Array.from(potentialOwners);
|
|
124
|
+
return owner;
|
|
125
|
+
}
|
|
126
|
+
// this handles cases where there are multiple deposits in one transaction
|
|
127
|
+
if (potentialOwners.size > 1) {
|
|
128
|
+
const [firstOwner] = Array.from(potentialOwners);
|
|
129
|
+
return firstOwner;
|
|
130
|
+
}
|
|
131
|
+
throw new Error('Could not find token owner: No Transfer event to contract detected in transaction');
|
|
132
|
+
}
|
|
133
|
+
async function getTokenOwnerWithFallback(receipt, transaction, contractAddress) {
|
|
134
|
+
try {
|
|
135
|
+
const tokenOwner = await extractTokenOwnerFromTransferEvents(receipt, contractAddress);
|
|
136
|
+
return tokenOwner;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
return transaction.from;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (networkName, matrixWalletID, originalShieldTxid) => {
|
|
143
|
+
const wallet = (0, matrix_1.walletForID)(matrixWalletID);
|
|
144
|
+
const chain = shared_models_1.NETWORK_CONFIG[networkName].chain;
|
|
145
|
+
const balances = await wallet.getTokenBalancesForUnshieldToOrigin(chain, originalShieldTxid);
|
|
146
|
+
const provider = (0, matrix_1.getFallbackProviderForNetwork)(networkName);
|
|
147
|
+
const [transaction, receipt] = await Promise.all([
|
|
148
|
+
provider.getTransaction(originalShieldTxid),
|
|
149
|
+
provider.getTransactionReceipt(originalShieldTxid),
|
|
150
|
+
]);
|
|
151
|
+
if (!transaction) {
|
|
152
|
+
throw new Error('Could not find shield transaction from RPC');
|
|
153
|
+
}
|
|
154
|
+
if (!receipt) {
|
|
155
|
+
throw new Error('Could not find shield transaction receipt from RPC');
|
|
156
|
+
}
|
|
157
|
+
const network = shared_models_1.NETWORK_CONFIG[networkName];
|
|
158
|
+
const contractAddress = network.accumulatorContract;
|
|
159
|
+
if (!contractAddress) {
|
|
160
|
+
throw new Error(`Could not find contract for network: ${networkName}`);
|
|
161
|
+
}
|
|
162
|
+
const recipientAddress = await getTokenOwnerWithFallback(receipt, transaction, contractAddress);
|
|
163
|
+
const erc20Amounts = (0, matrix_1.getSerializedERC20Balances)(balances);
|
|
164
|
+
const nftAmounts = (0, matrix_1.getSerializedNFTBalances)(balances);
|
|
165
|
+
const erc20AmountRecipients = erc20Amounts
|
|
166
|
+
.filter(({ amount }) => amount > 0n)
|
|
167
|
+
.map(erc20Amount => ({
|
|
168
|
+
...erc20Amount,
|
|
169
|
+
recipientAddress,
|
|
170
|
+
}));
|
|
171
|
+
const nftAmountRecipients = nftAmounts
|
|
172
|
+
.filter(({ amount }) => amount > 0n)
|
|
173
|
+
.map(nftAmount => ({
|
|
174
|
+
...nftAmount,
|
|
175
|
+
recipientAddress,
|
|
176
|
+
}));
|
|
177
|
+
return { erc20AmountRecipients, nftAmountRecipients };
|
|
178
|
+
};
|
|
179
|
+
exports.getERC20AndNFTAmountRecipientsForUnshieldToOrigin = getERC20AndNFTAmountRecipientsForUnshieldToOrigin;
|
|
180
|
+
const populateProvedUnshieldToOrigin = async (networkName, matrixWalletID, erc20AmountRecipients, nftAmountRecipients, gasDetails) => {
|
|
181
|
+
try {
|
|
182
|
+
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, shared_models_1.ProofType.Unshield, matrixWalletID, false, // showSenderAddressToRecipient
|
|
183
|
+
undefined, // memoText
|
|
184
|
+
erc20AmountRecipients, nftAmountRecipients, undefined, // relayAdaptUnshieldERC20AmountRecipients
|
|
185
|
+
undefined, // relayAdaptUnshieldNFTAmounts
|
|
186
|
+
undefined, // relayAdaptShieldERC20Recipients
|
|
187
|
+
undefined, // relayAdaptShieldNFTRecipients
|
|
188
|
+
undefined, // crossContractCalls
|
|
189
|
+
undefined, // broadcasterFeeERC20AmountRecipient
|
|
190
|
+
true, // sendWithPublicWallet
|
|
191
|
+
undefined, // overallBatchMinGasPrice
|
|
192
|
+
gasDetails);
|
|
193
|
+
return {
|
|
194
|
+
nullifiers,
|
|
195
|
+
transaction,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
throw (0, error_1.reportAndSanitizeError)(exports.populateProvedUnshieldToOrigin.name, err);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
exports.populateProvedUnshieldToOrigin = populateProvedUnshieldToOrigin;
|
|
203
|
+
const gasEstimateForUnprovenUnshieldToOrigin = async (originalShieldTxid, networkName, matrixWalletID, encryptionKey, erc20AmountRecipients, nftAmountRecipients) => {
|
|
204
|
+
try {
|
|
205
|
+
// Use dead address for private transaction gas estimate
|
|
206
|
+
const fromWalletAddress = tx_generator_1.DUMMY_FROM_ADDRESS;
|
|
207
|
+
const overallBatchMinGasPrice = 0n;
|
|
208
|
+
const serializedTransactions = await (0, tx_generator_1.generateDummyProofTransactions)(shared_models_1.ProofType.Unshield, networkName, matrixWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
209
|
+
undefined, // memoText
|
|
210
|
+
erc20AmountRecipients, nftAmountRecipients, undefined, // broadcasterFeeERC20Amount
|
|
211
|
+
true, // sendWithPublicWallet
|
|
212
|
+
overallBatchMinGasPrice, originalShieldTxid);
|
|
213
|
+
const transaction = await (0, tx_generator_1.generateTransact)(serializedTransactions, networkName, true);
|
|
214
|
+
const gasEstimate = await (0, tx_gas_details_1.getGasEstimate)(networkName, transaction, fromWalletAddress, true, // sendWithPublicWallet
|
|
215
|
+
false);
|
|
216
|
+
return (0, tx_gas_details_1.gasEstimateResponse)(gasEstimate, undefined, // broadcasterFeeCommitment
|
|
217
|
+
true);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenUnshieldToOrigin.name, err);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
exports.gasEstimateForUnprovenUnshieldToOrigin = gasEstimateForUnprovenUnshieldToOrigin;
|
|
224
|
+
//# sourceMappingURL=tx-unshield.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-unshield.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-unshield.ts"],"names":[],"mappings":";;;AAAA,iEAWuC;AACvC,iDAKwB;AACxB,+CAA0D;AAC1D,mDAGgC;AAChC,yFAA0G;AAC1G,uEAA0F;AAC1F,6CAA2D;AAC3D,qDAAuE;AACvE,sCAKmB;AAGnB,MAAM,8BAA8B,GAAG,oEAAoE,CAAC;AAErG,MAAM,sBAAsB,GAAG,KAAK,EACzC,WAAwB,EACxB,cAAsB,EACtB,qBAAmD,EACnD,mBAA+C,EAC/C,kCAAwE,EACxE,oBAA6B,EAC7B,uBAAyC,EACzC,UAAiC,EACW,EAAE;IAC9C,IAAI;QACF,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,MAAM,IAAA,uCAAyB,EAC7B,WAAW,EACX,yBAAS,CAAC,QAAQ,EAClB,cAAc,EACd,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EAAE,0CAA0C;QACrD,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,kCAAkC;QAC7C,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,qBAAqB;QAChC,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,OAAO;YACL,UAAU;YACV,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,8BAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAChE;AACH,CAAC,CAAC;AArCW,QAAA,sBAAsB,0BAqCjC;AAEK,MAAM,+BAA+B,GAAG,KAAK,EAClD,WAAwB,EACxB,mBAA2B,EAC3B,cAAsB,EACtB,kBAAqC,EACrC,kCAAwE,EACxE,oBAA6B,EAC7B,uBAAyC,EACzC,UAAiC,EACW,EAAE;IAC9C,IAAI;QACF,MAAM,qBAAqB,GAAiC;YAC1D;gBACE,GAAG,kBAAkB;gBACrB,gBAAgB,EAAE,mBAAmB;aACtC;SACF,CAAC;QACF,MAAM,8BAA8B,GAAwB;YAC1D,kBAAkB;SACnB,CAAC;QAEF,wBAAwB;QACxB,MAAM,mBAAmB,GAA+B,EAAE,CAAC;QAE3D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,MAAM,IAAA,uCAAyB,EAC7B,WAAW,EACX,yBAAS,CAAC,iBAAiB,EAC3B,cAAc,EACd,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,qBAAqB,EACrB,mBAAmB,EACnB,8BAA8B,EAC9B,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,kCAAkC;QAC7C,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,qBAAqB;QAChC,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,OAAO;YACL,UAAU;YACV,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uCAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AAlDW,QAAA,+BAA+B,mCAkD1C;AAEK,MAAM,8BAA8B,GAAG,KAAK,EACjD,WAAwB,EACxB,cAAsB,EACtB,aAAqB,EACrB,qBAAmD,EACnD,mBAA+C,EAC/C,kBAAyC,EACzC,eAA0C,EAC1C,oBAA6B,EACkB,EAAE;IACjD,IAAI;QACF,MAAM,uBAAuB,GAAG,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,IAAA,uFAAoD,EACzE,CAAC,yBAAsD,EAAE,EAAE,CACzD,IAAA,6CAA8B,EAC5B,yBAAS,CAAC,QAAQ,EAClB,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,CACxB,EACH,CAAC,GAA0B,EAAE,EAAE,CAC7B,IAAA,+BAAgB,EACd,GAAG,EACH,WAAW,EACX,IAAI,CACL,EACH,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,KAAK,CACN,CAAC;QACF,OAAO,QAAQ,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,sCAA8B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACxE;AACH,CAAC,CAAC;AA9CW,QAAA,8BAA8B,kCA8CzC;AAEK,MAAM,uCAAuC,GAAG,KAAK,EAC1D,WAAwB,EACxB,mBAA2B,EAC3B,cAAsB,EACtB,aAAqB,EACrB,kBAAqC,EACrC,kBAAyC,EACzC,eAA0C,EAC1C,oBAA6B,EACkB,EAAE;IACjD,IAAI;QACF,MAAM,uCAAuC,GAC3C,IAAA,uEAA6C,EAAC,WAAW,EAAE;YACzD,kBAAkB;SACnB,CAAC,CAAC;QAEL,wBAAwB;QACxB,MAAM,mBAAmB,GAA+B,EAAE,CAAC;QAE3D,MAAM,uBAAuB,GAAG,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,IAAA,uFAAoD,EACzE,CAAC,yBAAsD,EAAE,EAAE,CACzD,IAAA,6CAA8B,EAC5B,yBAAS,CAAC,iBAAiB,EAC3B,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,uCAAuC,EACvC,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,CACxB,EACH,CAAC,GAA0B,EAAE,EAAE;YAC7B,MAAM,sBAAsB,GAAG,kBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvD,OAAO,IAAA,wCAAyB,EAC9B,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,IAAI,EAAE,qCAAqC;YAC3C,oBAAoB,CACrB,CAAC;QACJ,CAAC,EACD,WAAW,EACX,cAAc,EACd,uCAAuC,EACvC,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,KAAK,CACN,CAAC;QACF,OAAO,QAAQ,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAC1B,+CAAuC,CAAC,IAAI,EAC5C,GAAG,CACJ,CAAC;KACH;AACH,CAAC,CAAC;AA9DW,QAAA,uCAAuC,2CA8DlD;AAEF,KAAK,UAAU,mCAAmC,CAChD,OAA2B,EAC3B,qBAA6B;IAE7B,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,WAAW,EAAE,CAAC;IAE/D,MAAM,eAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE/C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE;QAC9B,IAAI;YACF,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,SAAS;aACV;YAED,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,8BAA8B,EAAE;gBACpD,SAAS;aACV;YACD,mCAAmC;YACnC,MAAM,SAAS,GAAG,KAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAElE,IAAI,SAAS,KAAK,kBAAkB,EAAE;gBACpC,MAAM,WAAW,GAAG,KAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtD,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aAClC;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;YACrE,SAAS;SACV;KACF;IAED,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE;QAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;KACd;IACD,0EAA0E;IAC1E,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;QAC5B,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC;KACnB;IAED,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,OAA2B,EAC3B,WAAgC,EAChC,eAAuB;IAEvB,IAAI;QACF,MAAM,UAAU,GAAG,MAAM,mCAAmC,CAC1D,OAAO,EACP,eAAe,CAChB,CAAC;QACF,OAAO,UAAU,CAAC;KACnB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,WAAW,CAAC,IAAI,CAAC;KACzB;AACH,CAAC;AAEM,MAAM,iDAAiD,GAAG,KAAK,EACpE,WAAwB,EACxB,cAAsB,EACtB,kBAA0B,EAIzB,EAAE;IACH,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAC/D,KAAK,EACL,kBAAkB,CACnB,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,sCAA6B,EAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAC3C,QAAQ,CAAC,qBAAqB,CAAC,kBAAkB,CAAC;KACnD,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KAC/D;IAED,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;KACvE;IAED,MAAM,OAAO,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAEpD,IAAI,CAAC,eAAe,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,wCAAwC,WAAW,EAAE,CAAC,CAAC;KACxE;IAED,MAAM,gBAAgB,GAAG,MAAM,yBAAyB,CACtD,OAAO,EACP,WAAW,EACX,eAAe,CAChB,CAAC;IACF,MAAM,YAAY,GAAG,IAAA,mCAA0B,EAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAA,iCAAwB,EAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,qBAAqB,GAAiC,YAAY;SACrE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;SACnC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnB,GAAG,WAAW;QACd,gBAAgB;KACjB,CAAC,CAAC,CAAC;IACN,MAAM,mBAAmB,GAA+B,UAAU;SAC/D,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;SACnC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjB,GAAG,SAAS;QACZ,gBAAgB;KACjB,CAAC,CAAC,CAAC;IACN,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;AACxD,CAAC,CAAC;AA1DW,QAAA,iDAAiD,qDA0D5D;AAEK,MAAM,8BAA8B,GAAG,KAAK,EACjD,WAAwB,EACxB,cAAsB,EACtB,qBAAmD,EACnD,mBAA+C,EAC/C,UAAiC,EACW,EAAE;IAC9C,IAAI;QACF,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,MAAM,IAAA,uCAAyB,EAC7B,WAAW,EACX,yBAAS,CAAC,QAAQ,EAClB,cAAc,EACd,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EAAE,0CAA0C;QACrD,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,kCAAkC;QAC7C,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,qBAAqB;QAChC,SAAS,EAAE,qCAAqC;QAChD,IAAI,EAAE,uBAAuB;QAC7B,SAAS,EAAE,0BAA0B;QACrC,UAAU,CACX,CAAC;QACJ,OAAO;YACL,UAAU;YACV,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,sCAA8B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACxE;AACH,CAAC,CAAC;AAlCW,QAAA,8BAA8B,kCAkCzC;AAEK,MAAM,sCAAsC,GAAG,KAAK,EACzD,kBAA0B,EAC1B,WAAwB,EACxB,cAAsB,EACtB,aAAqB,EACrB,qBAAmD,EACnD,mBAA+C,EACA,EAAE;IACjD,IAAI;QACF,wDAAwD;QACxD,MAAM,iBAAiB,GAAG,iCAAkB,CAAC;QAE7C,MAAM,uBAAuB,GAAG,EAAE,CAAC;QAEnC,MAAM,sBAAsB,GAAG,MAAM,IAAA,6CAA8B,EACjE,yBAAS,CAAC,QAAQ,EAClB,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EAAE,4BAA4B;QACvC,IAAI,EAAE,uBAAuB;QAC7B,uBAAuB,EACvB,kBAAkB,CACnB,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAgB,EACxC,sBAAsB,EACtB,WAAW,EACX,IAAI,CACL,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAc,EACtC,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,IAAI,EAAE,uBAAuB;QAC7B,KAAK,CACN,CAAC;QAEF,OAAO,IAAA,oCAAmB,EACxB,WAAW,EACX,SAAS,EAAE,2BAA2B;QACtC,IAAI,CACL,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAC1B,8CAAsC,CAAC,IAAI,EAC3C,GAAG,CACJ,CAAC;KACH;AACH,CAAC,CAAC;AArDW,QAAA,sCAAsC,0CAqDjD","sourcesContent":["import {\n MatrixPopulateTransactionResponse,\n MatrixTransactionGasEstimateResponse,\n MatrixERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n MatrixERC20AmountRecipient,\n MatrixNFTAmountRecipient,\n TransactionGasDetails,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n DUMMY_FROM_ADDRESS,\n generateDummyProofTransactions,\n generateTransact,\n generateUnshieldBaseToken,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n TransactionStructV3,\n} from '@matrix-privacy/engine';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { createRelayAdaptUnshieldERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { gasEstimateResponse, getGasEstimate } from './tx-gas-details';\nimport {\n walletForID,\n getFallbackProviderForNetwork,\n getSerializedERC20Balances,\n getSerializedNFTBalances,\n} from '../matrix';\nimport { TransactionReceipt, TransactionResponse } from 'ethers';\n\nconst ERC20_TRANSFER_EVENT_SIGNATURE = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';\n\nexport const populateProvedUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshield.name, err);\n }\n};\n\nexport const populateProvedUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n wrappedERC20Amount: MatrixERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<MatrixERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n const relayAdaptUnshieldERC20Amounts: MatrixERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.UnshieldBaseToken,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshield = async (\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) =>\n generateTransact(\n txs,\n networkName,\n true, // useDummyProof\n ),\n networkName,\n matrixWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenUnshield.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldBaseToken = async (\n networkName: NetworkName,\n publicWalletAddress: string,\n matrixWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: MatrixERC20Amount,\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n const relayAdaptUnshieldERC20AmountRecipients: MatrixERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT Recipients.\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = [];\n\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<MatrixERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.UnshieldBaseToken,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: TransactionStructV3[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n return generateUnshieldBaseToken(\n txs,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n true, // useDummyProof (for gas estimation)\n sendWithPublicWallet,\n );\n },\n networkName,\n matrixWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldBaseToken.name,\n err,\n );\n }\n};\n\nasync function extractTokenOwnerFromTransferEvents(\n receipt: TransactionReceipt,\n matrixContractAddress: string\n): Promise<string> {\n const matrixAddressLower = matrixContractAddress.toLowerCase();\n\n const potentialOwners: Set<string> = new Set();\n\n for (const log of receipt.logs) {\n try {\n if (log.topics.length < 3) {\n continue;\n }\n\n if (log.topics[0] !== ERC20_TRANSFER_EVENT_SIGNATURE) {\n continue;\n }\n // topics[0] = event signature hash\n const toAddress = `0x${ log.topics[2].slice(-40).toLowerCase()}`;\n\n if (toAddress === matrixAddressLower) {\n const fromAddress = `0x${ log.topics[1].slice(-40)}`;\n potentialOwners.add(fromAddress);\n }\n } catch (error) {\n console.warn('Error parsing log for token owner extraction:', error);\n continue;\n }\n }\n\n if (potentialOwners.size === 1) {\n const [owner] = Array.from(potentialOwners);\n return owner;\n }\n // this handles cases where there are multiple deposits in one transaction\n if (potentialOwners.size > 1) {\n const [firstOwner] = Array.from(potentialOwners);\n return firstOwner;\n }\n\n throw new Error(\n 'Could not find token owner: No Transfer event to contract detected in transaction'\n );\n}\n\nasync function getTokenOwnerWithFallback(\n receipt: TransactionReceipt,\n transaction: TransactionResponse,\n contractAddress: string\n): Promise<string> {\n try {\n const tokenOwner = await extractTokenOwnerFromTransferEvents(\n receipt,\n contractAddress\n );\n return tokenOwner;\n } catch (error) {\n return transaction.from;\n }\n}\n\nexport const getERC20AndNFTAmountRecipientsForUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n originalShieldTxid: string,\n): Promise<{\n erc20AmountRecipients: MatrixERC20AmountRecipient[];\n nftAmountRecipients: MatrixNFTAmountRecipient[];\n}> => {\n const wallet = walletForID(matrixWalletID);\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const balances = await wallet.getTokenBalancesForUnshieldToOrigin(\n chain,\n originalShieldTxid,\n );\n\n const provider = getFallbackProviderForNetwork(networkName);\n\n const [transaction, receipt] = await Promise.all([\n provider.getTransaction(originalShieldTxid),\n provider.getTransactionReceipt(originalShieldTxid),\n ]);\n\n if (!transaction) {\n throw new Error('Could not find shield transaction from RPC');\n }\n\n if (!receipt) {\n throw new Error('Could not find shield transaction receipt from RPC');\n }\n\n const network = NETWORK_CONFIG[networkName];\n const contractAddress = network.accumulatorContract;\n\n if (!contractAddress) {\n throw new Error(`Could not find contract for network: ${networkName}`);\n }\n\n const recipientAddress = await getTokenOwnerWithFallback(\n receipt,\n transaction,\n contractAddress\n );\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getSerializedNFTBalances(balances);\n const erc20AmountRecipients: MatrixERC20AmountRecipient[] = erc20Amounts\n .filter(({ amount }) => amount > 0n)\n .map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\n const nftAmountRecipients: MatrixNFTAmountRecipient[] = nftAmounts\n .filter(({ amount }) => amount > 0n)\n .map(nftAmount => ({\n ...nftAmount,\n recipientAddress,\n }));\n return { erc20AmountRecipients, nftAmountRecipients };\n};\n\nexport const populateProvedUnshieldToOrigin = async (\n networkName: NetworkName,\n matrixWalletID: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n gasDetails: TransactionGasDetails,\n): Promise<MatrixPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n networkName,\n ProofType.Unshield,\n matrixWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptUnshieldERC20AmountRecipients\n undefined, // relayAdaptUnshieldNFTAmounts\n undefined, // relayAdaptShieldERC20Recipients\n undefined, // relayAdaptShieldNFTRecipients\n undefined, // crossContractCalls\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n undefined, // overallBatchMinGasPrice\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedUnshieldToOrigin.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenUnshieldToOrigin = async (\n originalShieldTxid: string,\n networkName: NetworkName,\n matrixWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: MatrixERC20AmountRecipient[],\n nftAmountRecipients: MatrixNFTAmountRecipient[],\n): Promise<MatrixTransactionGasEstimateResponse> => {\n try {\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const overallBatchMinGasPrice = 0n;\n\n const serializedTransactions = await generateDummyProofTransactions(\n ProofType.Unshield,\n networkName,\n matrixWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20Amount\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n originalShieldTxid, // originShieldTxidForSpendabilityOverride\n );\n const transaction = await generateTransact(\n serializedTransactions,\n networkName,\n true, // useDummyProof\n );\n\n const gasEstimate = await getGasEstimate(\n networkName,\n transaction,\n fromWalletAddress,\n true, // sendWithPublicWallet\n false, // isCrossContractCall\n );\n\n return gasEstimateResponse(\n gasEstimate,\n undefined, // broadcasterFeeCommitment\n true, // isGasEstimateWithDummyProof\n );\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenUnshieldToOrigin.name,\n err,\n );\n }\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local E2E test for Matrix wallet against a local Ganache/Hardhat node.
|
|
3
|
+
*
|
|
4
|
+
* Prerequisites:
|
|
5
|
+
* 1. Start local node: ./ganache.sh (or: npx hardhat node)
|
|
6
|
+
* 2. Deploy contracts: cd matrix-contracts && yarn hardhat deploy:full --network localhost
|
|
7
|
+
* 3. Fill in deployed addresses in wallet/local-deploy.json.example
|
|
8
|
+
* (also set "mnemonic" and "userPrivateKey" matching your local node)
|
|
9
|
+
*
|
|
10
|
+
* Run:
|
|
11
|
+
* cd wallet && npx ts-node -P tsconfig.test.json src/tests/local-e2e.ts
|
|
12
|
+
*/
|
|
13
|
+
export {};
|