@matrix-privacy/wallet 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/services/matrix/core/__tests__/providers.test.js +2 -2
  2. package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -1
  3. package/dist/services/matrix/core/load-provider.js +4 -1
  4. package/dist/services/matrix/core/load-provider.js.map +1 -1
  5. package/dist/services/matrix/core/merkletree.js +2 -2
  6. package/dist/services/matrix/core/merkletree.js.map +1 -1
  7. package/dist/services/matrix/core/shields.js +1 -1
  8. package/dist/services/matrix/core/shields.js.map +1 -1
  9. package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +1 -1
  10. package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -1
  11. package/dist/services/matrix/wallets/__tests__/balances-live.test.js +2 -2
  12. package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -1
  13. package/dist/services/matrix/wallets/__tests__/balances-update.test.js +1 -1
  14. package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -1
  15. package/dist/services/matrix/wallets/balance-update.js +2 -2
  16. package/dist/services/matrix/wallets/balance-update.js.map +1 -1
  17. package/dist/services/matrix/wallets/wallets.js +3 -0
  18. package/dist/services/matrix/wallets/wallets.js.map +1 -1
  19. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +1 -1
  20. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -1
  21. package/dist/services/transactions/__tests__/tx-unshield.test.js +2 -2
  22. package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -1
  23. package/dist/services/transactions/tx-cross-contract-calls.js +4 -4
  24. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
  25. package/dist/services/transactions/tx-generator.js +3 -3
  26. package/dist/services/transactions/tx-generator.js.map +1 -1
  27. package/dist/services/transactions/tx-shield-base-token.js +1 -1
  28. package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
  29. package/dist/services/transactions/tx-shield.js +1 -1
  30. package/dist/services/transactions/tx-shield.js.map +1 -1
  31. package/dist/services/transactions/tx-unshield.js +2 -2
  32. package/dist/services/transactions/tx-unshield.js.map +1 -1
  33. package/dist/tests/local-e2e.js +2 -2
  34. package/dist/tests/local-e2e.js.map +1 -1
  35. package/dist/tests/setup.test.js +1 -1
  36. package/dist/tests/setup.test.js.map +1 -1
  37. package/package.json +2 -2
@@ -34,7 +34,7 @@ describe('providers', () => {
34
34
  .undefined;
35
35
  expect((0, merkletree_1.getUTXOMerkletreeForNetwork)(shared_models_1.NetworkName.Hardhat))
36
36
  .to.not.be.undefined;
37
- const { chain } = shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat];
37
+ const { chain } = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat);
38
38
  expect(engine_1.MatrixContracts.getShieldApprovalContract(chain)).to.not.be.undefined;
39
39
  // Check that new wallet has merkletree.
40
40
  const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, MOCK_MNEMONIC_PROVIDERS_ONLY, undefined);
@@ -42,7 +42,7 @@ describe('providers', () => {
42
42
  throw new Error('Expected matrixWalletInfo.');
43
43
  }
44
44
  const wallet = (0, wallets_1.walletForID)(matrixWalletInfo.id);
45
- expect(wallet.getUTXOMerkletree(shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat].chain)).to.not.be.undefined;
45
+ expect(wallet.getUTXOMerkletree((0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat).chain)).to.not.be.undefined;
46
46
  }).timeout(15000);
47
47
  it('Should fail with invalid chain ID', async () => {
48
48
  await expect((0, load_provider_1.loadProvider)({ chainId: 55 }, shared_models_1.NetworkName.Hardhat, 10000)).rejectedWith('Invalid chain ID');
@@ -1 +1 @@
1
- {"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/core/__tests__/providers.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,iEAKuC;AACvC,6DAGsC;AACtC,6DAA+E;AAC/E,4CAA6D;AAC7D,oDAAgD;AAChD,mDAAwE;AACxE,8CAEuB;AACvB,mDAEgC;AAEhC,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,MAAM,4BAA4B,GAChC,2EAA2E,CAAC;AAE9E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,IAAA,4BAAe,GAAE,CAAC;QACxB,MAAM,IAAA,2BAAc,GAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAY,EACjC,uDAA0C,EAC1C,2BAAW,CAAC,OAAO,EACnB,KAAM,CACP,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5C,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,IAAA,yCAA6B,EAAC,2BAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;aACjE,SAAS,CAAC;QAEb,MAAM,CAAC,IAAA,wCAA2B,EAAC,2BAAW,CAAC,OAAO,CAAC,CAAC;aACrD,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAEvB,MAAM,EAAE,KAAK,EAAE,GAAG,8BAAc,CAAC,2BAAW,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CACJ,wBAAe,CAAC,yBAAyB,CACvC,KAAK,CACN,CACF,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAEtB,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,MAAM,IAAA,4BAAkB,EAC/C,mCAAsB,EACtB,4BAA4B,EAC5B,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,yBAAS,EAAC,gBAAgB,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC/C;QACD,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,CACJ,MAAM,CAAC,iBAAiB,CACtB,8BAAc,CAAC,2BAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAC1C,CACF,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;IACxB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,CACV,IAAA,4BAAY,EACV,EAAE,OAAO,EAAE,EAAE,EAAgC,EAC7C,2BAAW,CAAC,OAAO,EACnB,KAAK,CACN,CACF,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,CACV,IAAA,4BAAY,EACV,EAAE,OAAO,EAAE,KAAK,EAAgC,EAChD,2BAAW,CAAC,OAAO,EACnB,KAAK,CACN,CACF,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n NetworkName,\n FallbackProviderJsonConfig,\n isDefined,\n NETWORK_CONFIG,\n} from '@matrix-privacy/shared-models';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n} from '../../../../tests/mocks.test';\nimport { closeTestEngine, initTestEngine } from '../../../../tests/setup.test';\nimport { getFallbackProviderForNetwork } from '../providers';\nimport { loadProvider } from '../load-provider';\nimport { createMatrixWallet, walletForID } from '../../wallets/wallets';\nimport {\n getUTXOMerkletreeForNetwork,\n} from '../merkletree';\nimport {\n MatrixContracts,\n} from '@matrix-privacy/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_MNEMONIC_PROVIDERS_ONLY =\n 'pause crystal tornado alcohol genre cement fade large song like bag where';\n\ndescribe('providers', () => {\n before(async () => {\n await closeTestEngine();\n await initTestEngine();\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should load provider with json, pull fees, and check created objects', async () => {\n const response = await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.Hardhat,\n 10_000, // pollingInterval\n );\n expect(response.feesSerialized).to.deep.equal({\n shieldFee: '25',\n unshieldFee: '25',\n });\n\n expect(getFallbackProviderForNetwork(NetworkName.Hardhat)).to.not.be\n .undefined;\n\n expect(getUTXOMerkletreeForNetwork(NetworkName.Hardhat))\n .to.not.be.undefined;\n\n const { chain } = NETWORK_CONFIG[NetworkName.Hardhat];\n expect(\n MatrixContracts.getShieldApprovalContract(\n chain,\n ),\n ).to.not.be.undefined;\n\n // Check that new wallet has merkletree.\n const matrixWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_PROVIDERS_ONLY,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(matrixWalletInfo)) {\n throw new Error('Expected matrixWalletInfo.');\n }\n const wallet = walletForID(matrixWalletInfo.id);\n expect(\n wallet.getUTXOMerkletree(\n NETWORK_CONFIG[NetworkName.Hardhat].chain,\n ),\n ).to.not.be.undefined;\n }).timeout(15_000);\n\n it('Should fail with invalid chain ID', async () => {\n await expect(\n loadProvider(\n { chainId: 55 } as FallbackProviderJsonConfig,\n NetworkName.Hardhat,\n 10000, // pollingInterval\n ),\n ).rejectedWith('Invalid chain ID');\n });\n\n it('Should fail with invalid json', async () => {\n await expect(\n loadProvider(\n { chainId: 31337 } as FallbackProviderJsonConfig,\n NetworkName.Hardhat,\n 10000, // pollingInterval\n ),\n ).rejectedWith('Invalid fallback provider config');\n });\n});\n"]}
1
+ {"version":3,"file":"providers.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/core/__tests__/providers.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n NetworkName,\n FallbackProviderJsonConfig,\n isDefined,\n getNetworkConfig,\n} from '@matrix-privacy/shared-models';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n} from '../../../../tests/mocks.test';\nimport { closeTestEngine, initTestEngine } from '../../../../tests/setup.test';\nimport { getFallbackProviderForNetwork } from '../providers';\nimport { loadProvider } from '../load-provider';\nimport { createMatrixWallet, walletForID } from '../../wallets/wallets';\nimport {\n getUTXOMerkletreeForNetwork,\n} from '../merkletree';\nimport {\n MatrixContracts,\n} from '@matrix-privacy/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_MNEMONIC_PROVIDERS_ONLY =\n 'pause crystal tornado alcohol genre cement fade large song like bag where';\n\ndescribe('providers', () => {\n before(async () => {\n await closeTestEngine();\n await initTestEngine();\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should load provider with json, pull fees, and check created objects', async () => {\n const response = await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.Hardhat,\n 10_000, // pollingInterval\n );\n expect(response.feesSerialized).to.deep.equal({\n shieldFee: '25',\n unshieldFee: '25',\n });\n\n expect(getFallbackProviderForNetwork(NetworkName.Hardhat)).to.not.be\n .undefined;\n\n expect(getUTXOMerkletreeForNetwork(NetworkName.Hardhat))\n .to.not.be.undefined;\n\n const { chain } = getNetworkConfig(NetworkName.Hardhat);\n expect(\n MatrixContracts.getShieldApprovalContract(\n chain,\n ),\n ).to.not.be.undefined;\n\n // Check that new wallet has merkletree.\n const matrixWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_PROVIDERS_ONLY,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(matrixWalletInfo)) {\n throw new Error('Expected matrixWalletInfo.');\n }\n const wallet = walletForID(matrixWalletInfo.id);\n expect(\n wallet.getUTXOMerkletree(\n getNetworkConfig(NetworkName.Hardhat).chain,\n ),\n ).to.not.be.undefined;\n }).timeout(15_000);\n\n it('Should fail with invalid chain ID', async () => {\n await expect(\n loadProvider(\n { chainId: 55 } as FallbackProviderJsonConfig,\n NetworkName.Hardhat,\n 10000, // pollingInterval\n ),\n ).rejectedWith('Invalid chain ID');\n });\n\n it('Should fail with invalid json', async () => {\n await expect(\n loadProvider(\n { chainId: 31337 } as FallbackProviderJsonConfig,\n NetworkName.Hardhat,\n 10000, // pollingInterval\n ),\n ).rejectedWith('Invalid fallback provider config');\n });\n});\n"]}
@@ -34,6 +34,9 @@ const loadProviderForNetwork = async (chain, networkName, fallbackProviderJsonCo
34
34
  const fallbackProvider = await createFallbackProviderForNetwork(networkName, fallbackProviderJsonConfig);
35
35
  const pollingProvider = await createPollingProviderForNetwork(networkName, fallbackProvider, pollingInterval);
36
36
  const network = shared_models_1.NETWORK_CONFIG[networkName];
37
+ if (!network) {
38
+ throw new Error(`No network config for ${networkName}`);
39
+ }
37
40
  const { relayAdaptContract, accumulatorContract, verifierContract, tokenVaultContract, deploymentBlock: networkDeploymentBlock, publicName, } = network;
38
41
  if (!relayAdaptContract) {
39
42
  throw new Error(`Could not find Relay Adapt contract for network: ${publicName}`);
@@ -51,7 +54,7 @@ const loadProviderForNetwork = async (chain, networkName, fallbackProviderJsonCo
51
54
  const loadProvider = async (fallbackProviderJsonConfig, networkName, pollingInterval = 15000) => {
52
55
  try {
53
56
  delete providers_1.fallbackProviderMap[networkName];
54
- const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
57
+ const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
55
58
  if (fallbackProviderJsonConfig.chainId !== chain.id) {
56
59
  throw new Error('Invalid chain ID');
57
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"load-provider.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/load-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Chain,\n FallbackProviderJsonConfig,\n LoadProviderResponse,\n NETWORK_CONFIG,\n NetworkName,\n createFallbackProviderFromJsonConfig,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport { sendMessage } from '../../../utils';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine } from './engine';\nimport {\n PollingJsonRpcProvider,\n MatrixContracts,\n createPollingJsonRpcProviderForListeners,\n} from '@matrix-privacy/engine';\nimport type { FallbackProvider } from 'ethers';\nimport {\n fallbackProviderMap,\n pollingProviderMap,\n setFallbackProviderForNetwork,\n setPollingProviderForNetwork,\n} from './providers';\n\nconst createFallbackProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n): Promise<FallbackProvider> => {\n const existingProvider = fallbackProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const fallbackProvider = createFallbackProviderFromJsonConfig(\n fallbackProviderJsonConfig,\n );\n setFallbackProviderForNetwork(networkName, fallbackProvider);\n return fallbackProvider;\n};\n\nconst createPollingProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProvider: FallbackProvider,\n pollingInterval: number,\n): Promise<PollingJsonRpcProvider> => {\n const existingProvider = pollingProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const network = NETWORK_CONFIG[networkName];\n if (!isDefined(network)) {\n throw new Error('No network found');\n }\n const pollingProvider = await createPollingJsonRpcProviderForListeners(\n fallbackProvider,\n network.chain.id,\n pollingInterval,\n );\n setPollingProviderForNetwork(networkName, pollingProvider);\n return pollingProvider;\n};\n\nconst loadProviderForNetwork = async (\n chain: Chain,\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n pollingInterval: number,\n) => {\n sendMessage(`Load provider for network: ${networkName}`);\n\n const fallbackProvider = await createFallbackProviderForNetwork(\n networkName,\n fallbackProviderJsonConfig,\n );\n const pollingProvider = await createPollingProviderForNetwork(\n networkName,\n fallbackProvider,\n pollingInterval\n );\n\n const network = NETWORK_CONFIG[networkName];\n const {\n relayAdaptContract,\n accumulatorContract,\n verifierContract,\n tokenVaultContract,\n deploymentBlock: networkDeploymentBlock,\n publicName,\n } = network;\n if (!relayAdaptContract) {\n throw new Error(\n `Could not find Relay Adapt contract for network: ${publicName}`,\n );\n }\n\n const engine = getEngine();\n\n const deploymentBlock = networkDeploymentBlock ?? 0;\n\n // This function will set up the contracts for this chain.\n // Throws if provider does not respond.\n await engine.loadNetwork(\n chain,\n accumulatorContract,\n verifierContract,\n tokenVaultContract,\n relayAdaptContract,\n fallbackProvider,\n pollingProvider,\n deploymentBlock,\n );\n};\n\n/**\n * Note: The first provider listed in your fallback provider config is used as a polling provider\n * for new Matrix events (balance updates).\n */\nexport const loadProvider = async (\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n networkName: NetworkName,\n pollingInterval = 15000,\n): Promise<LoadProviderResponse> => {\n try {\n delete fallbackProviderMap[networkName];\n\n const { chain } = NETWORK_CONFIG[networkName];\n if (fallbackProviderJsonConfig.chainId !== chain.id) {\n throw new Error('Invalid chain ID');\n }\n\n await loadProviderForNetwork(\n chain,\n networkName,\n fallbackProviderJsonConfig,\n pollingInterval,\n );\n\n const { shield, unshield } = await MatrixContracts.fees(chain);\n\n // Note: Shield and Unshield fees are in basis points.\n const feesSerialized = {\n shieldFee: shield.toString(),\n unshieldFee: unshield.toString(),\n };\n return { feesSerialized };\n } catch (err) {\n throw reportAndSanitizeError(loadProvider.name, err);\n }\n};\n\nexport const unloadProvider = async (\n networkName: NetworkName,\n): Promise<void> => {\n await fallbackProviderMap[networkName]?.destroy();\n pollingProviderMap[networkName]?.destroy();\n delete fallbackProviderMap[networkName];\n delete pollingProviderMap[networkName];\n};\n\nexport const pauseAllPollingProviders = (\n excludeNetworkName?: NetworkName,\n): void => {\n Object.keys(pollingProviderMap).forEach(networkName => {\n if (networkName === excludeNetworkName) {\n return;\n }\n const pollingProvider = pollingProviderMap[networkName];\n if (isDefined(pollingProvider) && !pollingProvider.paused) {\n pollingProvider.pause();\n }\n });\n};\n\nexport const resumeIsolatedPollingProviderForNetwork = (\n networkName: NetworkName,\n): void => {\n pauseAllPollingProviders(\n networkName, // excludeNetworkName\n );\n const pollingProviderForNetwork = pollingProviderMap[networkName];\n if (\n isDefined(pollingProviderForNetwork) &&\n pollingProviderForNetwork.paused\n ) {\n pollingProviderForNetwork.resume();\n }\n};\n"]}
1
+ {"version":3,"file":"load-provider.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/load-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Chain,\n FallbackProviderJsonConfig,\n LoadProviderResponse,\n NETWORK_CONFIG,\n getNetworkConfig,\n NetworkName,\n createFallbackProviderFromJsonConfig,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport { sendMessage } from '../../../utils';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine } from './engine';\nimport {\n PollingJsonRpcProvider,\n MatrixContracts,\n createPollingJsonRpcProviderForListeners,\n} from '@matrix-privacy/engine';\nimport type { FallbackProvider } from 'ethers';\nimport {\n fallbackProviderMap,\n pollingProviderMap,\n setFallbackProviderForNetwork,\n setPollingProviderForNetwork,\n} from './providers';\n\nconst createFallbackProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n): Promise<FallbackProvider> => {\n const existingProvider = fallbackProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const fallbackProvider = createFallbackProviderFromJsonConfig(\n fallbackProviderJsonConfig,\n );\n setFallbackProviderForNetwork(networkName, fallbackProvider);\n return fallbackProvider;\n};\n\nconst createPollingProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProvider: FallbackProvider,\n pollingInterval: number,\n): Promise<PollingJsonRpcProvider> => {\n const existingProvider = pollingProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const network = NETWORK_CONFIG[networkName];\n if (!isDefined(network)) {\n throw new Error('No network found');\n }\n const pollingProvider = await createPollingJsonRpcProviderForListeners(\n fallbackProvider,\n network.chain.id,\n pollingInterval,\n );\n setPollingProviderForNetwork(networkName, pollingProvider);\n return pollingProvider;\n};\n\nconst loadProviderForNetwork = async (\n chain: Chain,\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n pollingInterval: number,\n) => {\n sendMessage(`Load provider for network: ${networkName}`);\n\n const fallbackProvider = await createFallbackProviderForNetwork(\n networkName,\n fallbackProviderJsonConfig,\n );\n const pollingProvider = await createPollingProviderForNetwork(\n networkName,\n fallbackProvider,\n pollingInterval\n );\n\n const network = NETWORK_CONFIG[networkName];\n if (!network) {\n throw new Error(`No network config for ${networkName}`);\n }\n const {\n relayAdaptContract,\n accumulatorContract,\n verifierContract,\n tokenVaultContract,\n deploymentBlock: networkDeploymentBlock,\n publicName,\n } = network;\n if (!relayAdaptContract) {\n throw new Error(\n `Could not find Relay Adapt contract for network: ${publicName}`,\n );\n }\n\n const engine = getEngine();\n\n const deploymentBlock = networkDeploymentBlock ?? 0;\n\n // This function will set up the contracts for this chain.\n // Throws if provider does not respond.\n await engine.loadNetwork(\n chain,\n accumulatorContract,\n verifierContract,\n tokenVaultContract,\n relayAdaptContract,\n fallbackProvider,\n pollingProvider,\n deploymentBlock,\n );\n};\n\n/**\n * Note: The first provider listed in your fallback provider config is used as a polling provider\n * for new Matrix events (balance updates).\n */\nexport const loadProvider = async (\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n networkName: NetworkName,\n pollingInterval = 15000,\n): Promise<LoadProviderResponse> => {\n try {\n delete fallbackProviderMap[networkName];\n\n const { chain } = getNetworkConfig(networkName);\n if (fallbackProviderJsonConfig.chainId !== chain.id) {\n throw new Error('Invalid chain ID');\n }\n\n await loadProviderForNetwork(\n chain,\n networkName,\n fallbackProviderJsonConfig,\n pollingInterval,\n );\n\n const { shield, unshield } = await MatrixContracts.fees(chain);\n\n // Note: Shield and Unshield fees are in basis points.\n const feesSerialized = {\n shieldFee: shield.toString(),\n unshieldFee: unshield.toString(),\n };\n return { feesSerialized };\n } catch (err) {\n throw reportAndSanitizeError(loadProvider.name, err);\n }\n};\n\nexport const unloadProvider = async (\n networkName: NetworkName,\n): Promise<void> => {\n await fallbackProviderMap[networkName]?.destroy();\n pollingProviderMap[networkName]?.destroy();\n delete fallbackProviderMap[networkName];\n delete pollingProviderMap[networkName];\n};\n\nexport const pauseAllPollingProviders = (\n excludeNetworkName?: NetworkName,\n): void => {\n Object.keys(pollingProviderMap).forEach(networkName => {\n if (networkName === excludeNetworkName) {\n return;\n }\n const pollingProvider = pollingProviderMap[networkName];\n if (isDefined(pollingProvider) && !pollingProvider.paused) {\n pollingProvider.pause();\n }\n });\n};\n\nexport const resumeIsolatedPollingProviderForNetwork = (\n networkName: NetworkName,\n): void => {\n pauseAllPollingProviders(\n networkName, // excludeNetworkName\n );\n const pollingProviderForNetwork = pollingProviderMap[networkName];\n if (\n isDefined(pollingProviderForNetwork) &&\n pollingProviderForNetwork.paused\n ) {\n pollingProviderForNetwork.resume();\n }\n};\n"]}
@@ -6,7 +6,7 @@ const engine_1 = require("@matrix-privacy/engine");
6
6
  const engine_2 = require("./engine");
7
7
  const wallets_1 = require("../wallets/wallets");
8
8
  const getUTXOMerkletreeForNetwork = (networkName) => {
9
- const network = shared_models_1.NETWORK_CONFIG[networkName];
9
+ const network = (0, shared_models_1.getNetworkConfig)(networkName);
10
10
  const { chain } = network;
11
11
  const utxoMerkletree = (0, engine_2.getEngine)().getUTXOMerkletree(chain);
12
12
  if (!(0, shared_models_1.isDefined)(utxoMerkletree)) {
@@ -17,7 +17,7 @@ const getUTXOMerkletreeForNetwork = (networkName) => {
17
17
  exports.getUTXOMerkletreeForNetwork = getUTXOMerkletreeForNetwork;
18
18
  const getSpendableUTXOsForToken = async (networkName, walletID, tokenData) => {
19
19
  const wallet = (0, wallets_1.walletForID)(walletID);
20
- const chain = shared_models_1.NETWORK_CONFIG[networkName].chain;
20
+ const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
21
21
  const onlySpendable = true;
22
22
  const balances = await wallet.getTokenBalances(chain, onlySpendable);
23
23
  const tokenHash = (0, engine_1.getTokenDataHash)(tokenData);
@@ -1 +1 @@
1
- {"version":3,"file":"merkletree.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/merkletree.ts"],"names":[],"mappings":";;;AAAA,iEAIuC;AACvC,mDAKgC;AAChC,qCAAqC;AACrC,gDAAiD;AAE1C,MAAM,2BAA2B,GAAG,CACzC,WAAwB,EACxB,EAAE;IACF,MAAM,OAAO,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAA,kBAAS,GAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAA,yBAAS,EAAC,cAAc,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,CAAC,UAAU,EAAE,CAC9D,CAAC;KACH;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAZW,QAAA,2BAA2B,+BAYtC;AAEK,MAAM,yBAAyB,GAAG,KAAK,EAC5C,WAAwB,EACxB,QAAgB,EAChB,SAAoB,EACM,EAAE;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,KAAK,EACL,aAAa,CACd,CAAC;IACF,MAAM,SAAS,GAAG,IAAA,yBAAgB,EAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AACpC,CAAC,CAAC;AAdW,QAAA,yBAAyB,6BAcpC;AAEK,MAAM,uBAAuB,GAAG,KAAK,EAC1C,WAAwB,EACxB,QAAgB,EAChB,YAA0B,EAC1B,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAyB,EAC3C,WAAW,EACX,QAAQ,EACR,YAAY,CACb,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,IAAA,mCAA2B,EAAC,WAAW,CAAC,CAAC;IAChE,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AApBW,QAAA,uBAAuB,2BAoBlC","sourcesContent":["import {\n NETWORK_CONFIG,\n NetworkName,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport {\n NFTTokenData,\n TXO,\n TokenData,\n getTokenDataHash,\n} from '@matrix-privacy/engine';\nimport { getEngine } from './engine';\nimport { walletForID } from '../wallets/wallets';\n\nexport const getUTXOMerkletreeForNetwork = (\n networkName: NetworkName,\n) => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n const utxoMerkletree = getEngine().getUTXOMerkletree(chain);\n if (!isDefined(utxoMerkletree)) {\n throw new Error(\n `MerkleTree not yet loaded for network ${network.publicName}`,\n );\n }\n return utxoMerkletree;\n};\n\nexport const getSpendableUTXOsForToken = async (\n networkName: NetworkName,\n walletID: string,\n tokenData: TokenData,\n): Promise<Optional<TXO[]>> => {\n const wallet = walletForID(walletID);\n const chain = NETWORK_CONFIG[networkName].chain;\n const onlySpendable = true;\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const tokenHash = getTokenDataHash(tokenData);\n return balances[tokenHash]?.utxos;\n};\n\nexport const getMerkleProofForERC721 = async (\n networkName: NetworkName,\n walletID: string,\n nftTokenData: NFTTokenData,\n) => {\n const utxos = await getSpendableUTXOsForToken(\n networkName,\n walletID,\n nftTokenData,\n );\n if (!utxos || !utxos.length) {\n throw new Error('No spendable UTXOs found for NFT');\n }\n if (utxos.length !== 1) {\n throw new Error('Expected 1 UTXO for NFT');\n }\n\n const { tree, position } = utxos[0];\n const utxoMerkletree = getUTXOMerkletreeForNetwork(networkName);\n return utxoMerkletree.getMerkleProof(tree, position);\n};\n"]}
1
+ {"version":3,"file":"merkletree.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/merkletree.ts"],"names":[],"mappings":";;;AAAA,iEAIuC;AACvC,mDAKgC;AAChC,qCAAqC;AACrC,gDAAiD;AAE1C,MAAM,2BAA2B,GAAG,CACzC,WAAwB,EACxB,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,cAAc,GAAG,IAAA,kBAAS,GAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAA,yBAAS,EAAC,cAAc,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,CAAC,UAAU,EAAE,CAC9D,CAAC;KACH;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAZW,QAAA,2BAA2B,+BAYtC;AAEK,MAAM,yBAAyB,GAAG,KAAK,EAC5C,WAAwB,EACxB,QAAgB,EAChB,SAAoB,EACM,EAAE;IAC5B,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,KAAK,EACL,aAAa,CACd,CAAC;IACF,MAAM,SAAS,GAAG,IAAA,yBAAgB,EAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC;AACpC,CAAC,CAAC;AAdW,QAAA,yBAAyB,6BAcpC;AAEK,MAAM,uBAAuB,GAAG,KAAK,EAC1C,WAAwB,EACxB,QAAgB,EAChB,YAA0B,EAC1B,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAyB,EAC3C,WAAW,EACX,QAAQ,EACR,YAAY,CACb,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;KACrD;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,IAAA,mCAA2B,EAAC,WAAW,CAAC,CAAC;IAChE,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AApBW,QAAA,uBAAuB,2BAoBlC","sourcesContent":["import {\n getNetworkConfig,\n NetworkName,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport {\n NFTTokenData,\n TXO,\n TokenData,\n getTokenDataHash,\n} from '@matrix-privacy/engine';\nimport { getEngine } from './engine';\nimport { walletForID } from '../wallets/wallets';\n\nexport const getUTXOMerkletreeForNetwork = (\n networkName: NetworkName,\n) => {\n const network = getNetworkConfig(networkName);\n const { chain } = network;\n const utxoMerkletree = getEngine().getUTXOMerkletree(chain);\n if (!isDefined(utxoMerkletree)) {\n throw new Error(\n `MerkleTree not yet loaded for network ${network.publicName}`,\n );\n }\n return utxoMerkletree;\n};\n\nexport const getSpendableUTXOsForToken = async (\n networkName: NetworkName,\n walletID: string,\n tokenData: TokenData,\n): Promise<Optional<TXO[]>> => {\n const wallet = walletForID(walletID);\n const chain = getNetworkConfig(networkName).chain;\n const onlySpendable = true;\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const tokenHash = getTokenDataHash(tokenData);\n return balances[tokenHash]?.utxos;\n};\n\nexport const getMerkleProofForERC721 = async (\n networkName: NetworkName,\n walletID: string,\n nftTokenData: NFTTokenData,\n) => {\n const utxos = await getSpendableUTXOsForToken(\n networkName,\n walletID,\n nftTokenData,\n );\n if (!utxos || !utxos.length) {\n throw new Error('No spendable UTXOs found for NFT');\n }\n if (utxos.length !== 1) {\n throw new Error('Expected 1 UTXO for NFT');\n }\n\n const { tree, position } = utxos[0];\n const utxoMerkletree = getUTXOMerkletreeForNetwork(networkName);\n return utxoMerkletree.getMerkleProof(tree, position);\n};\n"]}
@@ -5,7 +5,7 @@ const shared_models_1 = require("@matrix-privacy/shared-models");
5
5
  const engine_1 = require("./engine");
6
6
  const getAllShields = async (networkName, startingBlock) => {
7
7
  const engine = (0, engine_1.getEngine)();
8
- const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
8
+ const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
9
9
  const shieldCommitments = await engine.getAllShieldCommitments(chain, startingBlock);
10
10
  return shieldCommitments.map(commitment => {
11
11
  const shieldData = {
@@ -1 +1 @@
1
- {"version":3,"file":"shields.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/shields.ts"],"names":[],"mappings":";;;AAAA,iEAGuC;AACvC,qCAAqC;AAY9B,MAAM,aAAa,GAAG,KAAK,EAChC,WAAwB,EACxB,aAAqB,EACE,EAAE;IACzB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAC5D,KAAK,EACL,aAAa,CACd,CAAC;IAEF,OAAO,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACxC,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE;YAC5B,cAAc,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE;YACtC,GAAG,EAAE,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAvBW,QAAA,aAAa,iBAuBxB","sourcesContent":["import {\n NETWORK_CONFIG,\n NetworkName,\n} from '@matrix-privacy/shared-models';\nimport { getEngine } from './engine';\n\nexport type ShieldData = {\n txid: string;\n commitmentHash: string;\n npk: string;\n timestamp: Optional<number>;\n blockNumber: number;\n utxoTree: number;\n utxoIndex: number;\n};\n\nexport const getAllShields = async (\n networkName: NetworkName,\n startingBlock: number,\n): Promise<ShieldData[]> => {\n const engine = getEngine();\n const { chain } = NETWORK_CONFIG[networkName];\n const shieldCommitments = await engine.getAllShieldCommitments(\n chain,\n startingBlock,\n );\n\n return shieldCommitments.map(commitment => {\n const shieldData: ShieldData = {\n txid: `0x${commitment.txid}`,\n commitmentHash: `0x${commitment.hash}`,\n npk: `0x${commitment.preImage.npk}`,\n utxoTree: commitment.utxoTree,\n utxoIndex: commitment.utxoIndex,\n timestamp: commitment.timestamp,\n blockNumber: commitment.blockNumber,\n };\n return shieldData;\n });\n};\n"]}
1
+ {"version":3,"file":"shields.js","sourceRoot":"","sources":["../../../../src/services/matrix/core/shields.ts"],"names":[],"mappings":";;;AAAA,iEAGuC;AACvC,qCAAqC;AAY9B,MAAM,aAAa,GAAG,KAAK,EAChC,WAAwB,EACxB,aAAqB,EACE,EAAE;IACzB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAC5D,KAAK,EACL,aAAa,CACd,CAAC;IAEF,OAAO,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACxC,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE;YAC5B,cAAc,EAAE,KAAK,UAAU,CAAC,IAAI,EAAE;YACtC,GAAG,EAAE,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAvBW,QAAA,aAAa,iBAuBxB","sourcesContent":["import {\n getNetworkConfig,\n NetworkName,\n} from '@matrix-privacy/shared-models';\nimport { getEngine } from './engine';\n\nexport type ShieldData = {\n txid: string;\n commitmentHash: string;\n npk: string;\n timestamp: Optional<number>;\n blockNumber: number;\n utxoTree: number;\n utxoIndex: number;\n};\n\nexport const getAllShields = async (\n networkName: NetworkName,\n startingBlock: number,\n): Promise<ShieldData[]> => {\n const engine = getEngine();\n const { chain } = getNetworkConfig(networkName);\n const shieldCommitments = await engine.getAllShieldCommitments(\n chain,\n startingBlock,\n );\n\n return shieldCommitments.map(commitment => {\n const shieldData: ShieldData = {\n txid: `0x${commitment.txid}`,\n commitmentHash: `0x${commitment.hash}`,\n npk: `0x${commitment.preImage.npk}`,\n utxoTree: commitment.utxoTree,\n utxoIndex: commitment.utxoIndex,\n timestamp: commitment.timestamp,\n blockNumber: commitment.blockNumber,\n };\n return shieldData;\n });\n};\n"]}
@@ -9,7 +9,7 @@ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
9
9
  const quick_sync_events_1 = require("../../quick-sync-events");
10
10
  chai_1.default.use(chai_as_promised_1.default);
11
11
  const { expect } = chai_1.default;
12
- const HARDHAT_CHAIN = shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat].chain;
12
+ const HARDHAT_CHAIN = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat).chain;
13
13
  const EXPECTED_COMMITMENT_GROUP_EVENTS = 1;
14
14
  const EXPECTED_NULLIFIER_EVENTS = 1;
15
15
  const EXPECTED_UNSHIELD_EVENTS = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"quick-sync-events-graph-v3.test.js","sourceRoot":"","sources":["../../../../../../src/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.ts"],"names":[],"mappings":";;;;;AACA,iEAA4E;AAC5E,gDAAwB;AACxB,wEAA8C;AAC9C,+DAA+D;AAE/D,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,MAAM,aAAa,GACjB,8BAAc,CAAC,2BAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AAC5C,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAC3C,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAE7C,MAAM,gCAAgC,GAAG,CACvC,gBAAmC,EACnC,WAAoB,EACpB,EAAE;IACF,IAAI,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACpD,IAAI,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;QACpC,IACE,KAAK,CAAC,UAAU,KAAK,cAAc;YACnC,KAAK,CAAC,aAAa,KAAK,iBAAiB,EACzC;YACA,IAAI,WAAW,EAAE;gBACf,MAAM,IAAI,KAAK,CACb,6BAA6B,cAAc,mBAAmB,iBAAiB,EAAE,CAClF,CAAC;aACH;iBAAM;gBACL,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CACT,6BAA6B,cAAc,mBAAmB,iBAAiB,EAAE,CAClF,CAAC;gBACF,iBAAiB,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;aACpE;SACF;aAAM;YACL,iBAAiB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;SAC/C;QAED,kFAAkF;QAClF,IAAI,iBAAiB,IAAI,KAAK,EAAE;YAC9B,0BAA0B;YAC1B,cAAc,IAAI,CAAC,CAAC;YACpB,iBAAiB,GAAG,CAAC,CAAC;SACvB;KACF;AACH,CAAC,CAAC;AAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAoB,EACzC,aAAa,EACb,CAAC,CACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACrD,gCAAgC,CACjC,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpD,yBAAyB,CAC1B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACnD,wBAAwB,CACzB,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAC7D,kCAAkC,CACnC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC;QACzB,gCAAgC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC","sourcesContent":["import { Chain, CommitmentEvent } from '@matrix-privacy/engine';\nimport { NetworkName, NETWORK_CONFIG } from '@matrix-privacy/shared-models';\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { quickSyncEventsGraph } from '../../quick-sync-events';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst HARDHAT_CHAIN: Chain =\n NETWORK_CONFIG[NetworkName.Hardhat].chain;\nconst EXPECTED_COMMITMENT_GROUP_EVENTS = 1;\nconst EXPECTED_NULLIFIER_EVENTS = 1;\nconst EXPECTED_UNSHIELD_EVENTS = 1;\nconst EXPECTED_MATRIX_TRANSACTION_EVENTS = 1;\n\nconst assertContiguousCommitmentEvents = (\n commitmentEvents: CommitmentEvent[],\n shouldThrow: boolean,\n) => {\n let nextTreeNumber = commitmentEvents[0].treeNumber;\n let nextStartPosition = commitmentEvents[0].startPosition;\n for (const event of commitmentEvents) {\n if (\n event.treeNumber !== nextTreeNumber ||\n event.startPosition !== nextStartPosition\n ) {\n if (shouldThrow) {\n throw new Error(\n `Could not find treeNumber ${nextTreeNumber}, startPosition ${nextStartPosition}`,\n );\n } else {\n // eslint-disable-next-line no-console\n console.log(\n `Could not find treeNumber ${nextTreeNumber}, startPosition ${nextStartPosition}`,\n );\n nextStartPosition = event.startPosition + event.commitments.length;\n }\n } else {\n nextStartPosition += event.commitments.length;\n }\n\n // TODO: This logic may need an update if the tree is less than 65536 commitments.\n if (nextStartPosition >= 65536) {\n // Roll over to next tree.\n nextTreeNumber += 1;\n nextStartPosition = 0;\n }\n }\n};\n\ndescribe('quick-sync-events-graph-v3', () => {\n it('[V3] Should make sure Graph V3 query has no data gaps in commitments - Hardhat', async () => {\n const eventLog = await quickSyncEventsGraph(\n HARDHAT_CHAIN,\n 0,\n );\n expect(eventLog).to.be.an('object');\n expect(eventLog.commitmentEvents).to.be.an('array');\n expect(eventLog.commitmentEvents.length).to.be.at.least(\n EXPECTED_COMMITMENT_GROUP_EVENTS,\n );\n expect(eventLog.nullifierEvents.length).to.be.at.least(\n EXPECTED_NULLIFIER_EVENTS,\n );\n expect(eventLog.unshieldEvents.length).to.be.at.least(\n EXPECTED_UNSHIELD_EVENTS,\n );\n expect(eventLog.matrixTransactionEvents?.length).to.be.at.least(\n EXPECTED_MATRIX_TRANSACTION_EVENTS,\n );\n\n const shouldThrow = true;\n assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);\n }).timeout(45_000);\n});\n"]}
1
+ {"version":3,"file":"quick-sync-events-graph-v3.test.js","sourceRoot":"","sources":["../../../../../../src/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.ts"],"names":[],"mappings":";;;;;AACA,iEAA8E;AAC9E,gDAAwB;AACxB,wEAA8C;AAC9C,+DAA+D;AAE/D,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,MAAM,aAAa,GACjB,IAAA,gCAAgB,EAAC,2BAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AAC9C,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAC3C,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAE7C,MAAM,gCAAgC,GAAG,CACvC,gBAAmC,EACnC,WAAoB,EACpB,EAAE;IACF,IAAI,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACpD,IAAI,iBAAiB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;QACpC,IACE,KAAK,CAAC,UAAU,KAAK,cAAc;YACnC,KAAK,CAAC,aAAa,KAAK,iBAAiB,EACzC;YACA,IAAI,WAAW,EAAE;gBACf,MAAM,IAAI,KAAK,CACb,6BAA6B,cAAc,mBAAmB,iBAAiB,EAAE,CAClF,CAAC;aACH;iBAAM;gBACL,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CACT,6BAA6B,cAAc,mBAAmB,iBAAiB,EAAE,CAClF,CAAC;gBACF,iBAAiB,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;aACpE;SACF;aAAM;YACL,iBAAiB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;SAC/C;QAED,kFAAkF;QAClF,IAAI,iBAAiB,IAAI,KAAK,EAAE;YAC9B,0BAA0B;YAC1B,cAAc,IAAI,CAAC,CAAC;YACpB,iBAAiB,GAAG,CAAC,CAAC;SACvB;KACF;AACH,CAAC,CAAC;AAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAoB,EACzC,aAAa,EACb,CAAC,CACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACrD,gCAAgC,CACjC,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpD,yBAAyB,CAC1B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACnD,wBAAwB,CACzB,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAC7D,kCAAkC,CACnC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC;QACzB,gCAAgC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC","sourcesContent":["import { Chain, CommitmentEvent } from '@matrix-privacy/engine';\nimport { NetworkName, getNetworkConfig } from '@matrix-privacy/shared-models';\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { quickSyncEventsGraph } from '../../quick-sync-events';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst HARDHAT_CHAIN: Chain =\n getNetworkConfig(NetworkName.Hardhat).chain;\nconst EXPECTED_COMMITMENT_GROUP_EVENTS = 1;\nconst EXPECTED_NULLIFIER_EVENTS = 1;\nconst EXPECTED_UNSHIELD_EVENTS = 1;\nconst EXPECTED_MATRIX_TRANSACTION_EVENTS = 1;\n\nconst assertContiguousCommitmentEvents = (\n commitmentEvents: CommitmentEvent[],\n shouldThrow: boolean,\n) => {\n let nextTreeNumber = commitmentEvents[0].treeNumber;\n let nextStartPosition = commitmentEvents[0].startPosition;\n for (const event of commitmentEvents) {\n if (\n event.treeNumber !== nextTreeNumber ||\n event.startPosition !== nextStartPosition\n ) {\n if (shouldThrow) {\n throw new Error(\n `Could not find treeNumber ${nextTreeNumber}, startPosition ${nextStartPosition}`,\n );\n } else {\n // eslint-disable-next-line no-console\n console.log(\n `Could not find treeNumber ${nextTreeNumber}, startPosition ${nextStartPosition}`,\n );\n nextStartPosition = event.startPosition + event.commitments.length;\n }\n } else {\n nextStartPosition += event.commitments.length;\n }\n\n // TODO: This logic may need an update if the tree is less than 65536 commitments.\n if (nextStartPosition >= 65536) {\n // Roll over to next tree.\n nextTreeNumber += 1;\n nextStartPosition = 0;\n }\n }\n};\n\ndescribe('quick-sync-events-graph-v3', () => {\n it('[V3] Should make sure Graph V3 query has no data gaps in commitments - Hardhat', async () => {\n const eventLog = await quickSyncEventsGraph(\n HARDHAT_CHAIN,\n 0,\n );\n expect(eventLog).to.be.an('object');\n expect(eventLog.commitmentEvents).to.be.an('array');\n expect(eventLog.commitmentEvents.length).to.be.at.least(\n EXPECTED_COMMITMENT_GROUP_EVENTS,\n );\n expect(eventLog.nullifierEvents.length).to.be.at.least(\n EXPECTED_NULLIFIER_EVENTS,\n );\n expect(eventLog.unshieldEvents.length).to.be.at.least(\n EXPECTED_UNSHIELD_EVENTS,\n );\n expect(eventLog.matrixTransactionEvents?.length).to.be.at.least(\n EXPECTED_MATRIX_TRANSACTION_EVENTS,\n );\n\n const shouldThrow = true;\n assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);\n }).timeout(45_000);\n});\n"]}
@@ -16,7 +16,7 @@ chai_1.default.use(chai_as_promised_1.default);
16
16
  const { expect } = chai_1.default;
17
17
  let matrixWalletID;
18
18
  const networkName = shared_models_1.NetworkName.Hardhat;
19
- const chain = shared_models_1.NETWORK_CONFIG[networkName].chain;
19
+ const chain = (0, shared_models_1.getNetworkConfig)(networkName).chain;
20
20
  describe('balances-live', () => {
21
21
  before(async function run() {
22
22
  this.timeout(360000);
@@ -27,7 +27,7 @@ describe('balances-live', () => {
27
27
  }
28
28
  matrixWalletID = matrixWalletInfo.id;
29
29
  await (0, load_provider_1.loadProvider)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA, networkName, 10000);
30
- const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
30
+ const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
31
31
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
32
32
  (0, engine_1.getEngine)().scanContractHistory(chain, undefined);
33
33
  await (0, setup_test_1.pollUntilUTXOMerkletreeScanned)();
@@ -1 +1 @@
1
- {"version":3,"file":"balances-live.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/balances-live.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,6DAIsC;AACtC,6DAIsC;AACtC,wCAAiE;AACjE,0CAAkE;AAClE,iEAKuC;AACvC,4DAAwD;AACxD,8CAA8C;AAE9C,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,IAAI,cAAsB,CAAC;AAE3B,MAAM,WAAW,GAAG,2BAAW,CAAC,OAAO,CAAC;AACxC,MAAM,KAAK,GAAU,8BAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AAEvD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,CAAC,KAAK,UAAU,GAAG;QACvB,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC;QACtB,MAAM,IAAA,2BAAc,GAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,MAAM,IAAA,4BAAkB,EAC/C,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,yBAAS,EAAC,gBAAgB,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QACD,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC;QAErC,MAAM,IAAA,4BAAY,EAChB,uDAA0C,EAC1C,WAAW,EACX,KAAM,CACP,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,8BAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,mEAAmE;QACnE,IAAA,kBAAS,GAAE,CAAC,mBAAmB,CAC7B,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,IAAA,2CAA8B,GAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,IAAA,8CAAmC,EAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,KAAK,EACL,KAAK,CACN,CAAC;QAEF,2FAA2F;QAC3F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAC3D,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n MOCK_MNEMONIC,\n} from '../../../../tests/mocks.test';\nimport {\n closeTestEngine,\n initTestEngine,\n pollUntilUTXOMerkletreeScanned,\n} from '../../../../tests/setup.test';\nimport { createMatrixWallet, fullWalletForID } from '../wallets';\nimport { rescanFullUTXOMerkletreesAndWallets } from '../balances';\nimport {\n Chain,\n NETWORK_CONFIG,\n NetworkName,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport { loadProvider } from '../../core/load-provider';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet matrixWalletID: string;\n\nconst networkName = NetworkName.Hardhat;\nconst chain: Chain = NETWORK_CONFIG[networkName].chain;\n\ndescribe('balances-live', () => {\n before(async function run() {\n this.timeout(360_000);\n await initTestEngine();\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 matrixWalletID = matrixWalletInfo.id;\n\n await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n networkName,\n 10_000, // pollingInterval\n );\n const { chain } = NETWORK_CONFIG[networkName];\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n await pollUntilUTXOMerkletreeScanned();\n });\n\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should run live balance fetch and transaction history scan', async () => {\n await rescanFullUTXOMerkletreesAndWallets(chain, [matrixWalletID]);\n\n const wallet = fullWalletForID(matrixWalletID);\n const balances = await wallet.getTokenBalances(\n chain,\n false, // onlySpendable\n );\n\n // Note: matrixWallet above needs to perform transactions on above network to have balances\n expect(Object.keys(balances).length).to.be.greaterThanOrEqual(1);\n\n const transactionHistory = await wallet.getTransactionHistory(\n chain,\n undefined,\n );\n expect(transactionHistory.length).to.be.greaterThanOrEqual(2);\n }).timeout(90_000);\n});\n"]}
1
+ {"version":3,"file":"balances-live.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/balances-live.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,6DAIsC;AACtC,6DAIsC;AACtC,wCAAiE;AACjE,0CAAkE;AAClE,iEAKuC;AACvC,4DAAwD;AACxD,8CAA8C;AAE9C,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,IAAI,cAAsB,CAAC;AAE3B,MAAM,WAAW,GAAG,2BAAW,CAAC,OAAO,CAAC;AACxC,MAAM,KAAK,GAAU,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC,KAAK,CAAC;AAEzD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,CAAC,KAAK,UAAU,GAAG;QACvB,IAAI,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC;QACtB,MAAM,IAAA,2BAAc,GAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,MAAM,IAAA,4BAAkB,EAC/C,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,yBAAS,EAAC,gBAAgB,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QACD,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC;QAErC,MAAM,IAAA,4BAAY,EAChB,uDAA0C,EAC1C,WAAW,EACX,KAAM,CACP,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gCAAgB,EAAC,WAAW,CAAC,CAAC;QAChD,mEAAmE;QACnE,IAAA,kBAAS,GAAE,CAAC,mBAAmB,CAC7B,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,IAAA,2CAA8B,GAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,IAAA,8CAAmC,EAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,KAAK,EACL,KAAK,CACN,CAAC;QAEF,2FAA2F;QAC3F,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAC3D,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n MOCK_MNEMONIC,\n} from '../../../../tests/mocks.test';\nimport {\n closeTestEngine,\n initTestEngine,\n pollUntilUTXOMerkletreeScanned,\n} from '../../../../tests/setup.test';\nimport { createMatrixWallet, fullWalletForID } from '../wallets';\nimport { rescanFullUTXOMerkletreesAndWallets } from '../balances';\nimport {\n Chain,\n getNetworkConfig,\n NetworkName,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport { loadProvider } from '../../core/load-provider';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet matrixWalletID: string;\n\nconst networkName = NetworkName.Hardhat;\nconst chain: Chain = getNetworkConfig(networkName).chain;\n\ndescribe('balances-live', () => {\n before(async function run() {\n this.timeout(360_000);\n await initTestEngine();\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 matrixWalletID = matrixWalletInfo.id;\n\n await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n networkName,\n 10_000, // pollingInterval\n );\n const { chain } = getNetworkConfig(networkName);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n await pollUntilUTXOMerkletreeScanned();\n });\n\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should run live balance fetch and transaction history scan', async () => {\n await rescanFullUTXOMerkletreesAndWallets(chain, [matrixWalletID]);\n\n const wallet = fullWalletForID(matrixWalletID);\n const balances = await wallet.getTokenBalances(\n chain,\n false, // onlySpendable\n );\n\n // Note: matrixWallet above needs to perform transactions on above network to have balances\n expect(Object.keys(balances).length).to.be.greaterThanOrEqual(1);\n\n const transactionHistory = await wallet.getTransactionHistory(\n chain,\n undefined,\n );\n expect(transactionHistory.length).to.be.greaterThanOrEqual(2);\n }).timeout(90_000);\n});\n"]}
@@ -30,7 +30,7 @@ describe('balances-update', () => {
30
30
  throw new Error('Expected matrixWalletInfo');
31
31
  }
32
32
  await (0, load_provider_1.loadProvider)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA, shared_models_1.NetworkName.Hardhat, 10000);
33
- const { chain } = shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat];
33
+ const { chain } = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat);
34
34
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
35
35
  (0, engine_2.getEngine)().scanContractHistory(chain, undefined);
36
36
  wallet = (0, wallets_1.fullWalletForID)(matrixWalletInfo.id);
@@ -1 +1 @@
1
- {"version":3,"file":"balances-update.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/balances-update.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n MatrixWallet,\n TokenBalances,\n Chain,\n ChainType,\n getTokenDataERC20,\n} from '@matrix-privacy/engine';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n NETWORK_CONFIG,\n NetworkName,\n MatrixBalancesEvent,\n MatrixWalletBalanceBucket,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport {\n onBalancesUpdate,\n setOnBalanceUpdateCallback,\n} from '../balance-update';\nimport { createMatrixWallet, fullWalletForID } from '../wallets';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n MOCK_MNEMONIC,\n} from '../../../../tests/mocks.test';\nimport { closeTestEngine, initTestEngine } from '../../../../tests/setup.test';\nimport { loadProvider } from '../../core/load-provider';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_TOKEN_ADDRESS = '0x012536';\n\nlet wallet: MatrixWallet;\n\nlet walletBalanceStub: SinonStub;\nlet walletBalancesByBucketStub: SinonStub;\nlet walletTokenBalanceStub: SinonStub;\n\ndescribe('balances-update', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\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 await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.Hardhat,\n 10_000, // pollingInterval\n );\n const { chain } = NETWORK_CONFIG[NetworkName.Hardhat];\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n wallet = fullWalletForID(matrixWalletInfo.id);\n const tokenAddress = MOCK_TOKEN_ADDRESS.replace('0x', '');\n const tokenData = getTokenDataERC20(tokenAddress);\n const balances: TokenBalances = {\n [tokenAddress]: {\n balance: BigInt(10),\n utxos: [],\n tokenData,\n },\n };\n walletBalanceStub = Sinon.stub(\n MatrixWallet,\n 'getTokenBalancesByTxidVersion',\n ).resolves(balances);\n walletBalancesByBucketStub = Sinon.stub(\n MatrixWallet.prototype,\n 'getTokenBalances',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n ).resolves({ Spendable: balances } as any);\n walletTokenBalanceStub = Sinon.stub(\n MatrixWallet.prototype,\n 'getTokenBalances',\n ).resolves(balances);\n });\n\n afterEach(() => {\n walletBalanceStub.resetHistory();\n walletBalancesByBucketStub.resetHistory();\n walletTokenBalanceStub.resetHistory();\n });\n after(async () => {\n walletBalanceStub.restore();\n walletBalancesByBucketStub.restore();\n walletTokenBalanceStub.restore();\n await closeTestEngine();\n });\n\n it('Should not pull balances without callback', async () => {\n setOnBalanceUpdateCallback(undefined);\n const chain: Chain = { type: ChainType.EVM, id: 1 };\n await expect(onBalancesUpdate(wallet, chain)).to.be.fulfilled;\n expect(walletBalanceStub.notCalled).to.be.true;\n expect(walletBalancesByBucketStub.notCalled).to.be.true;\n });\n\n it('Should parse wallet balances response', async () => {\n let formattedBalances!: MatrixBalancesEvent;\n const callback = (balancesFormatted: MatrixBalancesEvent) => {\n formattedBalances = balancesFormatted;\n };\n setOnBalanceUpdateCallback(callback);\n const chain: Chain = { type: ChainType.EVM, id: 80001 };\n await expect(onBalancesUpdate(wallet, chain)).to.be.fulfilled;\n expect(formattedBalances.balanceBucket).to.deep.equal(\n MatrixWalletBalanceBucket.Spendable,\n );\n expect(formattedBalances.chain).to.deep.equal(chain);\n expect(formattedBalances.erc20Amounts.length).to.equal(1);\n expect(formattedBalances.erc20Amounts[0]).to.deep.equal({\n tokenAddress: '0x0000000000000000000000000000000000012536',\n amount: 10n,\n });\n });\n});\n"]}
1
+ {"version":3,"file":"balances-update.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/balances-update.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n MatrixWallet,\n TokenBalances,\n Chain,\n ChainType,\n getTokenDataERC20,\n} from '@matrix-privacy/engine';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n getNetworkConfig,\n NetworkName,\n MatrixBalancesEvent,\n MatrixWalletBalanceBucket,\n isDefined,\n} from '@matrix-privacy/shared-models';\nimport {\n onBalancesUpdate,\n setOnBalanceUpdateCallback,\n} from '../balance-update';\nimport { createMatrixWallet, fullWalletForID } from '../wallets';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n MOCK_MNEMONIC,\n} from '../../../../tests/mocks.test';\nimport { closeTestEngine, initTestEngine } from '../../../../tests/setup.test';\nimport { loadProvider } from '../../core/load-provider';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_TOKEN_ADDRESS = '0x012536';\n\nlet wallet: MatrixWallet;\n\nlet walletBalanceStub: SinonStub;\nlet walletBalancesByBucketStub: SinonStub;\nlet walletTokenBalanceStub: SinonStub;\n\ndescribe('balances-update', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\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 await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.Hardhat,\n 10_000, // pollingInterval\n );\n const { chain } = getNetworkConfig(NetworkName.Hardhat);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n wallet = fullWalletForID(matrixWalletInfo.id);\n const tokenAddress = MOCK_TOKEN_ADDRESS.replace('0x', '');\n const tokenData = getTokenDataERC20(tokenAddress);\n const balances: TokenBalances = {\n [tokenAddress]: {\n balance: BigInt(10),\n utxos: [],\n tokenData,\n },\n };\n walletBalanceStub = Sinon.stub(\n MatrixWallet,\n 'getTokenBalancesByTxidVersion',\n ).resolves(balances);\n walletBalancesByBucketStub = Sinon.stub(\n MatrixWallet.prototype,\n 'getTokenBalances',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n ).resolves({ Spendable: balances } as any);\n walletTokenBalanceStub = Sinon.stub(\n MatrixWallet.prototype,\n 'getTokenBalances',\n ).resolves(balances);\n });\n\n afterEach(() => {\n walletBalanceStub.resetHistory();\n walletBalancesByBucketStub.resetHistory();\n walletTokenBalanceStub.resetHistory();\n });\n after(async () => {\n walletBalanceStub.restore();\n walletBalancesByBucketStub.restore();\n walletTokenBalanceStub.restore();\n await closeTestEngine();\n });\n\n it('Should not pull balances without callback', async () => {\n setOnBalanceUpdateCallback(undefined);\n const chain: Chain = { type: ChainType.EVM, id: 1 };\n await expect(onBalancesUpdate(wallet, chain)).to.be.fulfilled;\n expect(walletBalanceStub.notCalled).to.be.true;\n expect(walletBalancesByBucketStub.notCalled).to.be.true;\n });\n\n it('Should parse wallet balances response', async () => {\n let formattedBalances!: MatrixBalancesEvent;\n const callback = (balancesFormatted: MatrixBalancesEvent) => {\n formattedBalances = balancesFormatted;\n };\n setOnBalanceUpdateCallback(callback);\n const chain: Chain = { type: ChainType.EVM, id: 80001 };\n await expect(onBalancesUpdate(wallet, chain)).to.be.fulfilled;\n expect(formattedBalances.balanceBucket).to.deep.equal(\n MatrixWalletBalanceBucket.Spendable,\n );\n expect(formattedBalances.chain).to.deep.equal(chain);\n expect(formattedBalances.erc20Amounts.length).to.equal(1);\n expect(formattedBalances.erc20Amounts[0]).to.deep.equal({\n tokenAddress: '0x0000000000000000000000000000000000012536',\n amount: 10n,\n });\n });\n});\n"]}
@@ -100,7 +100,7 @@ const getAllBalancesAsSpendable = async (wallet, chain) => {
100
100
  onBalanceUpdateCallback(balancesEvent);
101
101
  };
102
102
  const balanceForERC20Token = async (wallet, networkName, tokenAddress, onlySpendable) => {
103
- const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
103
+ const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
104
104
  const balances = await wallet.getTokenBalances(chain, onlySpendable);
105
105
  const tokenBalances = (0, exports.getSerializedERC20Balances)(balances);
106
106
  const matchingTokenBalance = tokenBalances.find(tokenBalance => tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase());
@@ -111,7 +111,7 @@ const balanceForERC20Token = async (wallet, networkName, tokenAddress, onlySpend
111
111
  };
112
112
  exports.balanceForERC20Token = balanceForERC20Token;
113
113
  const balanceForNFT = async (wallet, networkName, nftTokenData, onlySpendable) => {
114
- const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
114
+ const { chain } = (0, shared_models_1.getNetworkConfig)(networkName);
115
115
  const balances = await wallet.getTokenBalances(chain, onlySpendable);
116
116
  const nftBalances = (0, exports.getSerializedNFTBalances)(balances);
117
117
  const matchingNFTBalance = nftBalances.find(nftBalance => nftBalance.nftAddress.toLowerCase() ===
@@ -1 +1 @@
1
- {"version":3,"file":"balance-update.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/balance-update.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Chain,\n AbstractWallet,\n TokenType,\n TokenBalances,\n NFTTokenData,\n getTokenDataHash,\n getTokenDataNFT,\n getTokenDataERC20,\n} from '@matrix-privacy/engine';\nimport {\n MatrixBalancesEvent,\n MatrixNFTAmount,\n MatrixERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n NFTTokenType,\n MatrixWalletBalanceBucket,\n isDefined,\n networkForChain,\n} from '@matrix-privacy/shared-models';\nimport { sendErrorMessage, sendMessage } from '../../../utils/logger';\nimport { parseMatrixTokenAddress } from '../util/bytes';\n\nexport type BalancesUpdatedCallback = (\n balancesEvent: MatrixBalancesEvent,\n) => void;\n\nlet onBalanceUpdateCallback: Optional<BalancesUpdatedCallback>;\n\nexport const setOnBalanceUpdateCallback = (\n callback?: BalancesUpdatedCallback,\n) => {\n onBalanceUpdateCallback = callback;\n};\n\nexport const getSerializedERC20Balances = (\n balances: TokenBalances,\n): MatrixERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return balances[tokenHash].tokenData.tokenType === TokenType.ERC20;\n })\n .map(matrixBalanceAddress => {\n const erc20Balance: MatrixERC20Amount = {\n tokenAddress: parseMatrixTokenAddress(\n balances[matrixBalanceAddress].tokenData.tokenAddress,\n ).toLowerCase(),\n amount: balances[matrixBalanceAddress].balance,\n };\n return erc20Balance;\n });\n};\n\nexport const getSerializedNFTBalances = (\n balances: TokenBalances,\n): MatrixNFTAmount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return [TokenType.ERC721, TokenType.ERC1155].includes(\n balances[tokenHash].tokenData.tokenType,\n );\n })\n .map(matrixBalanceAddress => {\n const balanceForToken = balances[matrixBalanceAddress];\n const tokenData = balanceForToken.tokenData;\n const nftBalance: MatrixNFTAmount = {\n nftAddress: parseMatrixTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase(),\n tokenSubID: tokenData.tokenSubID,\n nftTokenType: tokenData.tokenType as 1 | 2,\n amount: balanceForToken.balance,\n };\n return nftBalance;\n });\n};\n\nconst getNFTBalances = (balances: TokenBalances): MatrixNFTAmount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return (\n [TokenType.ERC721, TokenType.ERC1155].includes(\n balances[tokenHash].tokenData.tokenType,\n ) && balances[tokenHash].balance > BigInt(0)\n );\n })\n .map(tokenHash => {\n const tokenData = balances[tokenHash].tokenData;\n\n const nftBalance: MatrixNFTAmount = {\n nftAddress: parseMatrixTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase(),\n nftTokenType: tokenData.tokenType as 1 | 2,\n tokenSubID: tokenData.tokenSubID,\n amount: balances[tokenHash].balance,\n };\n return nftBalance;\n });\n};\n\nexport const onBalancesUpdate = async (\n wallet: AbstractWallet,\n chain: Chain,\n): Promise<void> => {\n try {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n sendMessage(\n `Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`,\n );\n\n await getAllBalancesAsSpendable(wallet, chain);\n } catch (err) {\n if (!(err instanceof Error)) {\n return;\n }\n sendMessage(\n `Error getting balances for chain ${chain.type}:${chain.id}: ${err.message}`,\n );\n sendErrorMessage(err);\n }\n};\n\nconst getAllBalancesAsSpendable = async (\n wallet: AbstractWallet,\n chain: Chain,\n) => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = await wallet.getTokenBalances(\n chain,\n false, // onlySpendable\n );\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: MatrixBalancesEvent = {\n chain,\n erc20Amounts,\n nftAmounts,\n matrixWalletID: wallet.id,\n balanceBucket: MatrixWalletBalanceBucket.Spendable,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n tokenAddress: string,\n onlySpendable: boolean,\n): Promise<bigint> => {\n const { chain } = NETWORK_CONFIG[networkName];\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const tokenBalances = getSerializedERC20Balances(balances);\n\n const matchingTokenBalance: Optional<MatrixERC20Amount> = tokenBalances.find(\n tokenBalance =>\n tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase(),\n );\n if (!matchingTokenBalance) {\n return 0n;\n }\n return matchingTokenBalance.amount;\n};\n\nexport const balanceForNFT = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n nftTokenData: NFTTokenData,\n onlySpendable: boolean,\n): Promise<bigint> => {\n const { chain } = NETWORK_CONFIG[networkName];\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const nftBalances = getSerializedNFTBalances(balances);\n\n const matchingNFTBalance: Optional<MatrixNFTAmount> = nftBalances.find(\n nftBalance =>\n nftBalance.nftAddress.toLowerCase() ===\n nftTokenData.tokenAddress.toLowerCase() &&\n BigInt(nftBalance.tokenSubID) === BigInt(nftTokenData.tokenSubID),\n );\n if (!matchingNFTBalance) {\n return 0n;\n }\n return matchingNFTBalance.amount;\n};\n\nexport {\n getTokenDataHash,\n getTokenDataNFT,\n getTokenDataERC20,\n TokenType,\n NFTTokenType,\n NFTTokenData,\n};\n"]}
1
+ {"version":3,"file":"balance-update.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/balance-update.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Chain,\n AbstractWallet,\n TokenType,\n TokenBalances,\n NFTTokenData,\n getTokenDataHash,\n getTokenDataNFT,\n getTokenDataERC20,\n} from '@matrix-privacy/engine';\nimport {\n MatrixBalancesEvent,\n MatrixNFTAmount,\n MatrixERC20Amount,\n NetworkName,\n getNetworkConfig,\n NFTTokenType,\n MatrixWalletBalanceBucket,\n isDefined,\n networkForChain,\n} from '@matrix-privacy/shared-models';\nimport { sendErrorMessage, sendMessage } from '../../../utils/logger';\nimport { parseMatrixTokenAddress } from '../util/bytes';\n\nexport type BalancesUpdatedCallback = (\n balancesEvent: MatrixBalancesEvent,\n) => void;\n\nlet onBalanceUpdateCallback: Optional<BalancesUpdatedCallback>;\n\nexport const setOnBalanceUpdateCallback = (\n callback?: BalancesUpdatedCallback,\n) => {\n onBalanceUpdateCallback = callback;\n};\n\nexport const getSerializedERC20Balances = (\n balances: TokenBalances,\n): MatrixERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return balances[tokenHash].tokenData.tokenType === TokenType.ERC20;\n })\n .map(matrixBalanceAddress => {\n const erc20Balance: MatrixERC20Amount = {\n tokenAddress: parseMatrixTokenAddress(\n balances[matrixBalanceAddress].tokenData.tokenAddress,\n ).toLowerCase(),\n amount: balances[matrixBalanceAddress].balance,\n };\n return erc20Balance;\n });\n};\n\nexport const getSerializedNFTBalances = (\n balances: TokenBalances,\n): MatrixNFTAmount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return [TokenType.ERC721, TokenType.ERC1155].includes(\n balances[tokenHash].tokenData.tokenType,\n );\n })\n .map(matrixBalanceAddress => {\n const balanceForToken = balances[matrixBalanceAddress];\n const tokenData = balanceForToken.tokenData;\n const nftBalance: MatrixNFTAmount = {\n nftAddress: parseMatrixTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase(),\n tokenSubID: tokenData.tokenSubID,\n nftTokenType: tokenData.tokenType as 1 | 2,\n amount: balanceForToken.balance,\n };\n return nftBalance;\n });\n};\n\nconst getNFTBalances = (balances: TokenBalances): MatrixNFTAmount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return (\n [TokenType.ERC721, TokenType.ERC1155].includes(\n balances[tokenHash].tokenData.tokenType,\n ) && balances[tokenHash].balance > BigInt(0)\n );\n })\n .map(tokenHash => {\n const tokenData = balances[tokenHash].tokenData;\n\n const nftBalance: MatrixNFTAmount = {\n nftAddress: parseMatrixTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase(),\n nftTokenType: tokenData.tokenType as 1 | 2,\n tokenSubID: tokenData.tokenSubID,\n amount: balances[tokenHash].balance,\n };\n return nftBalance;\n });\n};\n\nexport const onBalancesUpdate = async (\n wallet: AbstractWallet,\n chain: Chain,\n): Promise<void> => {\n try {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n sendMessage(\n `Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`,\n );\n\n await getAllBalancesAsSpendable(wallet, chain);\n } catch (err) {\n if (!(err instanceof Error)) {\n return;\n }\n sendMessage(\n `Error getting balances for chain ${chain.type}:${chain.id}: ${err.message}`,\n );\n sendErrorMessage(err);\n }\n};\n\nconst getAllBalancesAsSpendable = async (\n wallet: AbstractWallet,\n chain: Chain,\n) => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = await wallet.getTokenBalances(\n chain,\n false, // onlySpendable\n );\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: MatrixBalancesEvent = {\n chain,\n erc20Amounts,\n nftAmounts,\n matrixWalletID: wallet.id,\n balanceBucket: MatrixWalletBalanceBucket.Spendable,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n tokenAddress: string,\n onlySpendable: boolean,\n): Promise<bigint> => {\n const { chain } = getNetworkConfig(networkName);\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const tokenBalances = getSerializedERC20Balances(balances);\n\n const matchingTokenBalance: Optional<MatrixERC20Amount> = tokenBalances.find(\n tokenBalance =>\n tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase(),\n );\n if (!matchingTokenBalance) {\n return 0n;\n }\n return matchingTokenBalance.amount;\n};\n\nexport const balanceForNFT = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n nftTokenData: NFTTokenData,\n onlySpendable: boolean,\n): Promise<bigint> => {\n const { chain } = getNetworkConfig(networkName);\n const balances = await wallet.getTokenBalances(\n chain,\n onlySpendable,\n );\n const nftBalances = getSerializedNFTBalances(balances);\n\n const matchingNFTBalance: Optional<MatrixNFTAmount> = nftBalances.find(\n nftBalance =>\n nftBalance.nftAddress.toLowerCase() ===\n nftTokenData.tokenAddress.toLowerCase() &&\n BigInt(nftBalance.tokenSubID) === BigInt(nftTokenData.tokenSubID),\n );\n if (!matchingNFTBalance) {\n return 0n;\n }\n return matchingNFTBalance.amount;\n};\n\nexport {\n getTokenDataHash,\n getTokenDataNFT,\n getTokenDataERC20,\n TokenType,\n NFTTokenType,\n NFTTokenData,\n};\n"]}
@@ -239,6 +239,9 @@ const formatCreationBlockNumbers = (creationBlockNumbers) => {
239
239
  const networksNames = Object.keys(creationBlockNumbers);
240
240
  for (const networkName of networksNames) {
241
241
  const network = shared_models_1.NETWORK_CONFIG[networkName];
242
+ if (!network) {
243
+ continue;
244
+ }
242
245
  const blockNumber = creationBlockNumbers[networkName];
243
246
  if (!(0, shared_models_1.isDefined)(blockNumber)) {
244
247
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixWallet,\n EngineEvent,\n AbstractWallet,\n WalletData,\n AddressData,\n MatrixEngine,\n ByteUtils,\n ViewOnlyWallet,\n} from '@matrix-privacy/engine';\nimport {\n MatrixWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from '@matrix-privacy/shared-models';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\nimport { getEngine } from '../core/engine';\n\nexport const awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain: returnedChain }: { chain: Chain }) =>\n returnedChain.type === chain.type && returnedChain.id === chain.id\n ? resolve(returnedChain)\n : reject(),\n ),\n );\n};\n\nexport const awaitMultipleWalletScans = async (\n walletID: string,\n chain: Chain,\n numScans: number,\n) => {\n let i = 0;\n while (i < numScans) {\n // eslint-disable-next-line no-await-in-loop\n await awaitWalletScan(walletID, chain);\n i += 1;\n }\n return Promise.resolve();\n};\n\nexport const walletForID = (id: string): AbstractWallet => {\n const engine = getEngine();\n const wallet = engine.wallets[id];\n if (!isDefined(wallet)) {\n throw new Error('No Matrix wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): MatrixWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof MatrixWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): MatrixWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof ViewOnlyWallet)) {\n throw new Error('Can only load View-Only wallet.');\n }\n return wallet as MatrixWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain }: { chain: Chain }) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): MatrixWalletInfo => {\n const matrixAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n matrixAddress,\n };\n};\n\nconst getExistingWallet = (\n matrixWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(matrixWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n matrixWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<MatrixWalletInfo> => {\n const existingWallet = getExistingWallet(matrixWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n matrixWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, matrixWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n matrixWalletDerivationIndex?: number,\n): Promise<MatrixWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n matrixWalletDerivationIndex ?? 0,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<MatrixWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nexport const createMatrixWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n matrixWalletDerivationIndex?: number,\n): Promise<MatrixWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n matrixWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createMatrixWallet.name, err);\n }\n};\n\nexport const createViewOnlyMatrixWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<MatrixWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyMatrixWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n matrixWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<MatrixWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n matrixWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load Matrix wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (matrixWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(matrixWalletID);\n } catch (err) {\n throw new Error('Could not unload Matrix wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n matrixWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(matrixWalletID);\n } catch (err) {\n throw new Error('Could not delete Matrix wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n matrixWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await MatrixWallet.getEncryptedData(\n db,\n encryptionKey,\n matrixWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getMatrixWalletAddressData = (address: string): AddressData => {\n assertValidMatrixAddress(address);\n return MatrixEngine.decodeAddress(address);\n};\n\nexport const getMatrixWalletPrivateViewingKey = (\n matrixWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(matrixWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n matrixWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(matrixWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidMatrixAddress = (address: string): void => {\n if (!validateMatrixAddress(address)) {\n throw new Error('Invalid Matrix address.');\n }\n};\n\nexport const validateMatrixAddress = (address: string): boolean => {\n try {\n return MatrixEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getMatrixAddress = (\n matrixWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(matrixWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getMatrixAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n matrixWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(matrixWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to @matrix-privacy/engine's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MatrixWallet,\n EngineEvent,\n AbstractWallet,\n WalletData,\n AddressData,\n MatrixEngine,\n ByteUtils,\n ViewOnlyWallet,\n} from '@matrix-privacy/engine';\nimport {\n MatrixWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from '@matrix-privacy/shared-models';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\nimport { getEngine } from '../core/engine';\n\nexport const awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain: returnedChain }: { chain: Chain }) =>\n returnedChain.type === chain.type && returnedChain.id === chain.id\n ? resolve(returnedChain)\n : reject(),\n ),\n );\n};\n\nexport const awaitMultipleWalletScans = async (\n walletID: string,\n chain: Chain,\n numScans: number,\n) => {\n let i = 0;\n while (i < numScans) {\n // eslint-disable-next-line no-await-in-loop\n await awaitWalletScan(walletID, chain);\n i += 1;\n }\n return Promise.resolve();\n};\n\nexport const walletForID = (id: string): AbstractWallet => {\n const engine = getEngine();\n const wallet = engine.wallets[id];\n if (!isDefined(wallet)) {\n throw new Error('No Matrix wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): MatrixWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof MatrixWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): MatrixWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof ViewOnlyWallet)) {\n throw new Error('Can only load View-Only wallet.');\n }\n return wallet as MatrixWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain }: { chain: Chain }) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): MatrixWalletInfo => {\n const matrixAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n matrixAddress,\n };\n};\n\nconst getExistingWallet = (\n matrixWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(matrixWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n matrixWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<MatrixWalletInfo> => {\n const existingWallet = getExistingWallet(matrixWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n matrixWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, matrixWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n matrixWalletDerivationIndex?: number,\n): Promise<MatrixWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n matrixWalletDerivationIndex ?? 0,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<MatrixWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nexport const createMatrixWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n matrixWalletDerivationIndex?: number,\n): Promise<MatrixWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n matrixWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createMatrixWallet.name, err);\n }\n};\n\nexport const createViewOnlyMatrixWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<MatrixWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyMatrixWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n matrixWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<MatrixWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n matrixWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load Matrix wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (matrixWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(matrixWalletID);\n } catch (err) {\n throw new Error('Could not unload Matrix wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n matrixWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(matrixWalletID);\n } catch (err) {\n throw new Error('Could not delete Matrix wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n matrixWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await MatrixWallet.getEncryptedData(\n db,\n encryptionKey,\n matrixWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getMatrixWalletAddressData = (address: string): AddressData => {\n assertValidMatrixAddress(address);\n return MatrixEngine.decodeAddress(address);\n};\n\nexport const getMatrixWalletPrivateViewingKey = (\n matrixWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(matrixWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n matrixWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(matrixWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidMatrixAddress = (address: string): void => {\n if (!validateMatrixAddress(address)) {\n throw new Error('Invalid Matrix address.');\n }\n};\n\nexport const validateMatrixAddress = (address: string): boolean => {\n try {\n return MatrixEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getMatrixAddress = (\n matrixWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(matrixWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getMatrixAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n matrixWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(matrixWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to @matrix-privacy/engine's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n if (!network) {\n continue;\n }\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
@@ -24,7 +24,7 @@ let addUnshieldDataSpy;
24
24
  let erc20NoteSpy;
25
25
  let matrixWallet;
26
26
  let broadcasterFeeERC20AmountRecipient;
27
- const hardhatRelayAdaptContract = shared_models_1.NETWORK_CONFIG[shared_models_1.NetworkName.Hardhat].relayAdaptContract;
27
+ const hardhatRelayAdaptContract = (0, shared_models_1.getNetworkConfig)(shared_models_1.NetworkName.Hardhat).relayAdaptContract;
28
28
  chai_1.default.use(chai_as_promised_1.default);
29
29
  const { expect } = chai_1.default;
30
30
  const mockERC20TokenData0 = (0, engine_1.getTokenDataERC20)(mocks_test_1.MOCK_TOKEN_AMOUNTS[0].tokenAddress);