@matrix-privacy/wallet 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +73 -0
- package/.prettierrc.js +21 -0
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/__tests__/index.test.d.ts +1 -0
- package/dist/__tests__/index.test.js +13 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js +172 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -0
- package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
- package/dist/services/artifacts/artifact-downloader.js +142 -0
- package/dist/services/artifacts/artifact-downloader.js.map +1 -0
- package/dist/services/artifacts/artifact-hash.d.ts +3 -0
- package/dist/services/artifacts/artifact-hash.js +53 -0
- package/dist/services/artifacts/artifact-hash.js.map +1 -0
- package/dist/services/artifacts/artifact-store.d.ts +11 -0
- package/dist/services/artifacts/artifact-store.js +15 -0
- package/dist/services/artifacts/artifact-store.js.map +1 -0
- package/dist/services/artifacts/artifact-util.d.ts +7 -0
- package/dist/services/artifacts/artifact-util.js +64 -0
- package/dist/services/artifacts/artifact-util.js.map +1 -0
- package/dist/services/artifacts/index.d.ts +2 -0
- package/dist/services/artifacts/index.js +19 -0
- package/dist/services/artifacts/index.js.map +1 -0
- package/dist/services/artifacts/json/artifact-v2-hashes.json +467 -0
- package/dist/services/ethers/__tests__/ethers-util.test.d.ts +1 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js +19 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js.map +1 -0
- package/dist/services/ethers/ethers-util.d.ts +1 -0
- package/dist/services/ethers/ethers-util.js +9 -0
- package/dist/services/ethers/ethers-util.js.map +1 -0
- package/dist/services/ethers/index.d.ts +1 -0
- package/dist/services/ethers/index.js +18 -0
- package/dist/services/ethers/index.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.js +30 -0
- package/dist/services/matrix/core/__tests__/engine.test.js.map +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.js +54 -0
- package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -0
- package/dist/services/matrix/core/artifacts.d.ts +10 -0
- package/dist/services/matrix/core/artifacts.js +70 -0
- package/dist/services/matrix/core/artifacts.js.map +1 -0
- package/dist/services/matrix/core/engine.d.ts +4 -0
- package/dist/services/matrix/core/engine.js +21 -0
- package/dist/services/matrix/core/engine.js.map +1 -0
- package/dist/services/matrix/core/index.d.ts +8 -0
- package/dist/services/matrix/core/index.js +25 -0
- package/dist/services/matrix/core/index.js.map +1 -0
- package/dist/services/matrix/core/init.d.ts +21 -0
- package/dist/services/matrix/core/init.js +79 -0
- package/dist/services/matrix/core/init.js.map +1 -0
- package/dist/services/matrix/core/load-provider.d.ts +9 -0
- package/dist/services/matrix/core/load-provider.js +100 -0
- package/dist/services/matrix/core/load-provider.js.map +1 -0
- package/dist/services/matrix/core/merkletree.d.ts +5 -0
- package/dist/services/matrix/core/merkletree.js +40 -0
- package/dist/services/matrix/core/merkletree.js.map +1 -0
- package/dist/services/matrix/core/prover.d.ts +3 -0
- package/dist/services/matrix/core/prover.js +14 -0
- package/dist/services/matrix/core/prover.js.map +1 -0
- package/dist/services/matrix/core/providers.d.ts +9 -0
- package/dist/services/matrix/core/providers.js +31 -0
- package/dist/services/matrix/core/providers.js.map +1 -0
- package/dist/services/matrix/core/shields.d.ts +11 -0
- package/dist/services/matrix/core/shields.js +24 -0
- package/dist/services/matrix/core/shields.js.map +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.d.ts +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js +249 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js.map +1 -0
- package/dist/services/matrix/history/transaction-history.d.ts +4 -0
- package/dist/services/matrix/history/transaction-history.js +182 -0
- package/dist/services/matrix/history/transaction-history.js.map +1 -0
- package/dist/services/matrix/index.d.ts +4 -0
- package/dist/services/matrix/index.js +21 -0
- package/dist/services/matrix/index.js.map +1 -0
- package/dist/services/matrix/process/extract-transaction-data.d.ts +3 -0
- package/dist/services/matrix/process/extract-transaction-data.js +19 -0
- package/dist/services/matrix/process/extract-transaction-data.js.map +1 -0
- package/dist/services/matrix/process/index.d.ts +1 -0
- package/dist/services/matrix/process/index.js +18 -0
- package/dist/services/matrix/process/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +56 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.d.ts +8 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js +103 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js +19861 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.d.ts +1352 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js +4 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.d.ts +1680 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js +348 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js +99 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/graph-query.d.ts +5 -0
- package/dist/services/matrix/quick-sync/graph-query.js +26 -0
- package/dist/services/matrix/quick-sync/graph-query.js.map +1 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.d.ts +2 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js +9 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js.map +1 -0
- package/dist/services/matrix/quick-sync/shared-formatters.d.ts +8 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js +36 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js.map +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js +23 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js.map +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js +62 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js.map +1 -0
- package/dist/services/matrix/util/bytes.d.ts +5 -0
- package/dist/services/matrix/util/bytes.js +22 -0
- package/dist/services/matrix/util/bytes.js.map +1 -0
- package/dist/services/matrix/util/crypto.d.ts +14 -0
- package/dist/services/matrix/util/crypto.js +80 -0
- package/dist/services/matrix/util/crypto.js.map +1 -0
- package/dist/services/matrix/util/graph-util.d.ts +3 -0
- package/dist/services/matrix/util/graph-util.js +13 -0
- package/dist/services/matrix/util/graph-util.js.map +1 -0
- package/dist/services/matrix/util/index.d.ts +2 -0
- package/dist/services/matrix/util/index.js +19 -0
- package/dist/services/matrix/util/index.js.map +1 -0
- package/dist/services/matrix/util/runtime.d.ts +2 -0
- package/dist/services/matrix/util/runtime.js +8 -0
- package/dist/services/matrix/util/runtime.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js +48 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js +85 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js +59 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js +80 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js.map +1 -0
- package/dist/services/matrix/wallets/balance-update.d.ts +10 -0
- package/dist/services/matrix/wallets/balance-update.js +126 -0
- package/dist/services/matrix/wallets/balance-update.js.map +1 -0
- package/dist/services/matrix/wallets/balances.d.ts +3 -0
- package/dist/services/matrix/wallets/balances.js +32 -0
- package/dist/services/matrix/wallets/balances.js.map +1 -0
- package/dist/services/matrix/wallets/index.d.ts +4 -0
- package/dist/services/matrix/wallets/index.js +21 -0
- package/dist/services/matrix/wallets/index.js.map +1 -0
- package/dist/services/matrix/wallets/wallets.d.ts +22 -0
- package/dist/services/matrix/wallets/wallets.js +252 -0
- package/dist/services/matrix/wallets/wallets.js.map +1 -0
- package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +216 -0
- package/dist/services/transactions/__tests__/proof-cache.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js +114 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +376 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js +109 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js +193 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js +99 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js +146 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js +263 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js +759 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -0
- package/dist/services/transactions/index.d.ts +13 -0
- package/dist/services/transactions/index.js +30 -0
- package/dist/services/transactions/index.js.map +1 -0
- package/dist/services/transactions/proof-cache.d.ts +27 -0
- package/dist/services/transactions/proof-cache.js +130 -0
- package/dist/services/transactions/proof-cache.js.map +1 -0
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +12 -0
- package/dist/services/transactions/tx-cross-contract-calls.js +210 -0
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +5 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js +110 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -0
- package/dist/services/transactions/tx-gas-details.d.ts +5 -0
- package/dist/services/transactions/tx-gas-details.js +101 -0
- package/dist/services/transactions/tx-gas-details.js.map +1 -0
- package/dist/services/transactions/tx-generator.d.ts +13 -0
- package/dist/services/transactions/tx-generator.js +168 -0
- package/dist/services/transactions/tx-generator.js.map +1 -0
- package/dist/services/transactions/tx-notes.d.ts +11 -0
- package/dist/services/transactions/tx-notes.js +153 -0
- package/dist/services/transactions/tx-notes.js.map +1 -0
- package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
- package/dist/services/transactions/tx-nullifiers.js +17 -0
- package/dist/services/transactions/tx-nullifiers.js.map +1 -0
- package/dist/services/transactions/tx-proof-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-proof-transfer.js +39 -0
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
- package/dist/services/transactions/tx-proof-unshield.d.ts +5 -0
- package/dist/services/transactions/tx-proof-unshield.js +132 -0
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
- package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
- package/dist/services/transactions/tx-shield-base-token.js +55 -0
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
- package/dist/services/transactions/tx-shield.d.ts +6 -0
- package/dist/services/transactions/tx-shield.js +77 -0
- package/dist/services/transactions/tx-shield.js.map +1 -0
- package/dist/services/transactions/tx-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-transfer.js +39 -0
- package/dist/services/transactions/tx-transfer.js.map +1 -0
- package/dist/services/transactions/tx-unshield.d.ts +11 -0
- package/dist/services/transactions/tx-unshield.js +224 -0
- package/dist/services/transactions/tx-unshield.js.map +1 -0
- package/dist/tests/local-e2e.d.ts +13 -0
- package/dist/tests/local-e2e.js +487 -0
- package/dist/tests/local-e2e.js.map +1 -0
- package/dist/tests/mocks.test.d.ts +40 -0
- package/dist/tests/mocks.test.js +171 -0
- package/dist/tests/mocks.test.js.map +1 -0
- package/dist/tests/setup.test.d.ts +7 -0
- package/dist/tests/setup.test.js +88 -0
- package/dist/tests/setup.test.js.map +1 -0
- package/dist/tests/stubs/engine-stubs.test.d.ts +7 -0
- package/dist/tests/stubs/engine-stubs.test.js +72 -0
- package/dist/tests/stubs/engine-stubs.test.js.map +1 -0
- package/dist/utils/__tests__/blocked-address.test.d.ts +1 -0
- package/dist/utils/__tests__/blocked-address.test.js +23 -0
- package/dist/utils/__tests__/blocked-address.test.js.map +1 -0
- package/dist/utils/__tests__/logger.test.d.ts +1 -0
- package/dist/utils/__tests__/logger.test.js +28 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/__tests__/utils.test.d.ts +1 -0
- package/dist/utils/__tests__/utils.test.js +21 -0
- package/dist/utils/__tests__/utils.test.js.map +1 -0
- package/dist/utils/blocked-address.d.ts +2 -0
- package/dist/utils/blocked-address.js +17 -0
- package/dist/utils/blocked-address.js.map +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +20 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/gas-price.d.ts +6 -0
- package/dist/utils/gas-price.js +19 -0
- package/dist/utils/gas-price.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/utils.d.ts +4 -0
- package/dist/utils/utils.js +54 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +94 -0
- package/postinstall.js +52 -0
- package/react-native-shims.js +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = __importDefault(require("chai"));
|
|
7
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
8
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
11
|
+
const balance_update_1 = require("../balance-update");
|
|
12
|
+
const wallets_1 = require("../wallets");
|
|
13
|
+
const mocks_test_1 = require("../../../../tests/mocks.test");
|
|
14
|
+
const setup_test_1 = require("../../../../tests/setup.test");
|
|
15
|
+
const load_provider_1 = require("../../core/load-provider");
|
|
16
|
+
const engine_2 = require("../../core/engine");
|
|
17
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
18
|
+
const { expect } = chai_1.default;
|
|
19
|
+
const MOCK_TOKEN_ADDRESS = '0x012536';
|
|
20
|
+
let wallet;
|
|
21
|
+
let walletBalanceStub;
|
|
22
|
+
let walletBalancesByBucketStub;
|
|
23
|
+
let walletTokenBalanceStub;
|
|
24
|
+
describe('balances-update', () => {
|
|
25
|
+
before(async function run() {
|
|
26
|
+
this.timeout(60000);
|
|
27
|
+
await (0, setup_test_1.initTestEngine)();
|
|
28
|
+
const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
|
|
29
|
+
if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
|
|
30
|
+
throw new Error('Expected matrixWalletInfo');
|
|
31
|
+
}
|
|
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];
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
35
|
+
(0, engine_2.getEngine)().scanContractHistory(chain, undefined);
|
|
36
|
+
wallet = (0, wallets_1.fullWalletForID)(matrixWalletInfo.id);
|
|
37
|
+
const tokenAddress = MOCK_TOKEN_ADDRESS.replace('0x', '');
|
|
38
|
+
const tokenData = (0, engine_1.getTokenDataERC20)(tokenAddress);
|
|
39
|
+
const balances = {
|
|
40
|
+
[tokenAddress]: {
|
|
41
|
+
balance: BigInt(10),
|
|
42
|
+
utxos: [],
|
|
43
|
+
tokenData,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
walletBalanceStub = sinon_1.default.stub(engine_1.MatrixWallet, 'getTokenBalancesByTxidVersion').resolves(balances);
|
|
47
|
+
walletBalancesByBucketStub = sinon_1.default.stub(engine_1.MatrixWallet.prototype, 'getTokenBalances').resolves({ Spendable: balances });
|
|
48
|
+
walletTokenBalanceStub = sinon_1.default.stub(engine_1.MatrixWallet.prototype, 'getTokenBalances').resolves(balances);
|
|
49
|
+
});
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
walletBalanceStub.resetHistory();
|
|
52
|
+
walletBalancesByBucketStub.resetHistory();
|
|
53
|
+
walletTokenBalanceStub.resetHistory();
|
|
54
|
+
});
|
|
55
|
+
after(async () => {
|
|
56
|
+
walletBalanceStub.restore();
|
|
57
|
+
walletBalancesByBucketStub.restore();
|
|
58
|
+
walletTokenBalanceStub.restore();
|
|
59
|
+
await (0, setup_test_1.closeTestEngine)();
|
|
60
|
+
});
|
|
61
|
+
it('Should not pull balances without callback', async () => {
|
|
62
|
+
(0, balance_update_1.setOnBalanceUpdateCallback)(undefined);
|
|
63
|
+
const chain = { type: engine_1.ChainType.EVM, id: 1 };
|
|
64
|
+
await expect((0, balance_update_1.onBalancesUpdate)(wallet, chain)).to.be.fulfilled;
|
|
65
|
+
expect(walletBalanceStub.notCalled).to.be.true;
|
|
66
|
+
expect(walletBalancesByBucketStub.notCalled).to.be.true;
|
|
67
|
+
});
|
|
68
|
+
it('Should parse wallet balances response', async () => {
|
|
69
|
+
let formattedBalances;
|
|
70
|
+
const callback = (balancesFormatted) => {
|
|
71
|
+
formattedBalances = balancesFormatted;
|
|
72
|
+
};
|
|
73
|
+
(0, balance_update_1.setOnBalanceUpdateCallback)(callback);
|
|
74
|
+
const chain = { type: engine_1.ChainType.EVM, id: 80001 };
|
|
75
|
+
await expect((0, balance_update_1.onBalancesUpdate)(wallet, chain)).to.be.fulfilled;
|
|
76
|
+
expect(formattedBalances.balanceBucket).to.deep.equal(shared_models_1.MatrixWalletBalanceBucket.Spendable);
|
|
77
|
+
expect(formattedBalances.chain).to.deep.equal(chain);
|
|
78
|
+
expect(formattedBalances.erc20Amounts.length).to.equal(1);
|
|
79
|
+
expect(formattedBalances.erc20Amounts[0]).to.deep.equal({
|
|
80
|
+
tokenAddress: '0x0000000000000000000000000000000000012536',
|
|
81
|
+
amount: 10n,
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=balances-update.test.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
7
|
+
const chai_1 = __importDefault(require("chai"));
|
|
8
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
const mocks_test_1 = require("../../../../tests/mocks.test");
|
|
11
|
+
const setup_test_1 = require("../../../../tests/setup.test");
|
|
12
|
+
const wallets_1 = require("../wallets");
|
|
13
|
+
const balances_1 = require("../balances");
|
|
14
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
15
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
16
|
+
const { expect } = chai_1.default;
|
|
17
|
+
let walletScanStub;
|
|
18
|
+
let walletFullScanStub;
|
|
19
|
+
let engineScanStub;
|
|
20
|
+
let engineFullScanStub;
|
|
21
|
+
describe('balances', () => {
|
|
22
|
+
before(async () => {
|
|
23
|
+
await (0, setup_test_1.initTestEngine)();
|
|
24
|
+
const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
|
|
25
|
+
if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
walletScanStub = sinon_1.default.stub(engine_1.MatrixWallet.prototype, 'decryptBalances').resolves();
|
|
29
|
+
engineScanStub = sinon_1.default.stub(engine_1.MatrixEngine.prototype, 'scanContractHistory').resolves();
|
|
30
|
+
walletFullScanStub = sinon_1.default.stub(engine_1.MatrixWallet.prototype, 'fullRedecryptBalances').resolves();
|
|
31
|
+
engineFullScanStub = sinon_1.default.stub(engine_1.MatrixEngine.prototype, 'fullRescanUTXOMerkletreesAndWallets').resolves();
|
|
32
|
+
});
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
walletScanStub.resetHistory();
|
|
35
|
+
engineScanStub.resetHistory();
|
|
36
|
+
walletFullScanStub.resetHistory();
|
|
37
|
+
engineFullScanStub.resetHistory();
|
|
38
|
+
});
|
|
39
|
+
after(async () => {
|
|
40
|
+
walletScanStub.restore();
|
|
41
|
+
engineScanStub.restore();
|
|
42
|
+
walletFullScanStub.restore();
|
|
43
|
+
engineFullScanStub.restore();
|
|
44
|
+
await (0, setup_test_1.closeTestEngine)();
|
|
45
|
+
});
|
|
46
|
+
it('Should scan for updates to merkletree and wallets', async () => {
|
|
47
|
+
const chain = { type: shared_models_1.ChainType.EVM, id: 1 };
|
|
48
|
+
const response = await (0, balances_1.refreshBalances)(chain, undefined);
|
|
49
|
+
expect(response).to.be.undefined;
|
|
50
|
+
expect(engineScanStub.calledOnce).to.be.true;
|
|
51
|
+
});
|
|
52
|
+
it('Should run full rescan of merkletree and wallets', async () => {
|
|
53
|
+
const chain = { type: shared_models_1.ChainType.EVM, id: 1 };
|
|
54
|
+
const response = await (0, balances_1.rescanFullUTXOMerkletreesAndWallets)(chain, undefined);
|
|
55
|
+
expect(response).to.be.undefined;
|
|
56
|
+
expect(engineFullScanStub.calledOnce).to.be.true;
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=balances.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balances.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/balances.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { MatrixEngine, MatrixWallet } from '@matrix-privacy/engine';\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n} from '../../../../tests/mocks.test';\nimport { closeTestEngine, initTestEngine } from '../../../../tests/setup.test';\nimport { createMatrixWallet } from '../wallets';\nimport {\n refreshBalances,\n rescanFullUTXOMerkletreesAndWallets,\n} from '../balances';\nimport { Chain, ChainType, isDefined } from '@matrix-privacy/shared-models';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet walletScanStub: SinonStub;\nlet walletFullScanStub: SinonStub;\nlet engineScanStub: SinonStub;\nlet engineFullScanStub: SinonStub;\n\ndescribe('balances', () => {\n before(async () => {\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 return;\n }\n walletScanStub = Sinon.stub(\n MatrixWallet.prototype,\n 'decryptBalances',\n ).resolves();\n\n engineScanStub = Sinon.stub(\n MatrixEngine.prototype,\n 'scanContractHistory',\n ).resolves();\n\n walletFullScanStub = Sinon.stub(\n MatrixWallet.prototype,\n 'fullRedecryptBalances',\n ).resolves();\n\n engineFullScanStub = Sinon.stub(\n MatrixEngine.prototype,\n 'fullRescanUTXOMerkletreesAndWallets',\n ).resolves();\n });\n afterEach(() => {\n walletScanStub.resetHistory();\n engineScanStub.resetHistory();\n walletFullScanStub.resetHistory();\n engineFullScanStub.resetHistory();\n });\n after(async () => {\n walletScanStub.restore();\n engineScanStub.restore();\n walletFullScanStub.restore();\n engineFullScanStub.restore();\n await closeTestEngine();\n });\n\n it('Should scan for updates to merkletree and wallets', async () => {\n const chain: Chain = { type: ChainType.EVM, id: 1 };\n const response = await refreshBalances(\n chain,\n undefined, // walletIdFilter\n );\n expect(response).to.be.undefined;\n expect(engineScanStub.calledOnce).to.be.true;\n });\n\n it('Should run full rescan of merkletree and wallets', async () => {\n const chain: Chain = { type: ChainType.EVM, id: 1 };\n const response = await rescanFullUTXOMerkletreesAndWallets(\n chain,\n undefined, // walletIdFilter\n );\n expect(response).to.be.undefined;\n expect(engineFullScanStub.calledOnce).to.be.true;\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = __importDefault(require("chai"));
|
|
7
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
8
|
+
const engine_1 = require("../../core/engine");
|
|
9
|
+
const wallets_1 = require("../wallets");
|
|
10
|
+
const mocks_test_1 = require("../../../../tests/mocks.test");
|
|
11
|
+
const setup_test_1 = require("../../../../tests/setup.test");
|
|
12
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
13
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
14
|
+
const { expect } = chai_1.default;
|
|
15
|
+
let wallet;
|
|
16
|
+
describe('wallets', () => {
|
|
17
|
+
before(async function run() {
|
|
18
|
+
this.timeout(60000);
|
|
19
|
+
await (0, setup_test_1.initTestEngine)();
|
|
20
|
+
await (0, setup_test_1.initTestEngineNetworks)();
|
|
21
|
+
const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC_2, { [shared_models_1.NetworkName.Hardhat]: 0 });
|
|
22
|
+
if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
|
|
23
|
+
throw new Error(`Could not create wallet`);
|
|
24
|
+
}
|
|
25
|
+
wallet = (0, wallets_1.fullWalletForID)(matrixWalletInfo.id);
|
|
26
|
+
});
|
|
27
|
+
after(async () => {
|
|
28
|
+
await (0, setup_test_1.closeTestEngine)();
|
|
29
|
+
});
|
|
30
|
+
it('Should create view only wallet', async () => {
|
|
31
|
+
const matrixWalletInfo = await (0, wallets_1.createViewOnlyMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, wallet.generateShareableViewingKey(), undefined);
|
|
32
|
+
if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
|
|
33
|
+
throw new Error('Could not create view-only wallet');
|
|
34
|
+
}
|
|
35
|
+
const viewOnlyWallet = (0, wallets_1.viewOnlyWalletForID)(matrixWalletInfo.id);
|
|
36
|
+
expect(viewOnlyWallet).to.not.be.undefined;
|
|
37
|
+
expect(matrixWalletInfo.matrixAddress).to.equal(wallet.getAddress());
|
|
38
|
+
}).timeout(60000);
|
|
39
|
+
it('Should get wallet address', () => {
|
|
40
|
+
const addressAny = (0, wallets_1.getMatrixAddress)(wallet.id);
|
|
41
|
+
expect(addressAny).to.equal('0zk1qykzjxctynyz4z43pukckpv43jyzhyvy0ehrd5wuc54l5enqf9qfrrv7j6fe3z53la7enqphqvxys9aqyp9xx0km95ehqslx8apmu8l7anc7emau4tvsultrkvd');
|
|
42
|
+
});
|
|
43
|
+
it('Should get wallet shareable viewing key', async () => {
|
|
44
|
+
const shareableKey = await (0, wallets_1.getWalletShareableViewingKey)(wallet.id);
|
|
45
|
+
expect(shareableKey).to.equal('82a57670726976d94032643030623234396632646337313236303565336263653364373665376631313931373933363436393365333931666566643963323764303161396262336433a473707562d94030633661376436386331663437303262613764666134613361353236323035303765386637366632393139326363666637653861366231303637393062316165');
|
|
46
|
+
});
|
|
47
|
+
it('Should get wallet mnemonic', async () => {
|
|
48
|
+
const mnemonic = await (0, wallets_1.getWalletMnemonic)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, wallet.id);
|
|
49
|
+
expect(mnemonic).to.equal(mocks_test_1.MOCK_MNEMONIC_2);
|
|
50
|
+
});
|
|
51
|
+
it('Should create and load wallet from valid mnemonic', async () => {
|
|
52
|
+
const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC_2, undefined);
|
|
53
|
+
expect(matrixWalletInfo.matrixAddress).to.be.a('string');
|
|
54
|
+
expect(matrixWalletInfo.id).to.equal(wallet.id);
|
|
55
|
+
const loadWalletInfo = await (0, wallets_1.loadWalletByID)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, matrixWalletInfo.id, false);
|
|
56
|
+
expect(loadWalletInfo.matrixAddress).to.be.a('string');
|
|
57
|
+
expect(loadWalletInfo.id).to.equal(wallet.id);
|
|
58
|
+
});
|
|
59
|
+
it('Should load wallet from db after Engine wallet unload', async () => {
|
|
60
|
+
expect(Object.keys((0, engine_1.getEngine)().wallets)).to.include(wallet.id);
|
|
61
|
+
(0, wallets_1.unloadWalletByID)(wallet.id);
|
|
62
|
+
expect(Object.keys((0, engine_1.getEngine)().wallets)).to.not.include(wallet.id);
|
|
63
|
+
const matrixWalletInfo = await (0, wallets_1.loadWalletByID)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, wallet.id, false);
|
|
64
|
+
expect(matrixWalletInfo.id).to.equal(wallet.id);
|
|
65
|
+
expect(matrixWalletInfo.matrixAddress).to.equal(wallet.getAddress(undefined));
|
|
66
|
+
});
|
|
67
|
+
it('Should error for unknown load wallet', async () => {
|
|
68
|
+
await expect((0, wallets_1.loadWalletByID)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, 'unknown', false)).rejectedWith('Could not load Matrix wallet');
|
|
69
|
+
});
|
|
70
|
+
it('Should validate Matrix addresses', async () => {
|
|
71
|
+
expect((0, wallets_1.validateMatrixAddress)('0x9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))
|
|
72
|
+
.to.be.false;
|
|
73
|
+
expect((0, wallets_1.validateMatrixAddress)('9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))
|
|
74
|
+
.to.be.false;
|
|
75
|
+
expect((0, wallets_1.validateMatrixAddress)('rgtestropsten1qyglk9smgj240x2xmj2laj7p5hexw0a30vvdqnv9gk020nsd7yzgwkgce9x')).to.be.false;
|
|
76
|
+
expect((0, wallets_1.validateMatrixAddress)('0zk1q8hxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kfrv7j6fe3z53llhxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kg0zpzts')).to.be.true;
|
|
77
|
+
expect((0, wallets_1.validateMatrixAddress)('0zk1qyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqunpd9kxwatwqyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhshkca')).to.be.true;
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=wallets.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallets.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/wallets/__tests__/wallets.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { getEngine } from '../../core/engine';\nimport {\n createMatrixWallet,\n createViewOnlyMatrixWallet,\n fullWalletForID,\n getMatrixAddress,\n getWalletMnemonic,\n getWalletShareableViewingKey,\n loadWalletByID,\n unloadWalletByID,\n validateMatrixAddress,\n viewOnlyWalletForID,\n} from '../wallets';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n} from '../../../../tests/mocks.test';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../../tests/setup.test';\nimport { MatrixWallet } from '@matrix-privacy/engine';\nimport { NetworkName, isDefined } from '@matrix-privacy/shared-models';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet wallet: MatrixWallet;\n\ndescribe('wallets', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const matrixWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n { [NetworkName.Hardhat]: 0 }, // creationBlockNumbers\n );\n if (!isDefined(matrixWalletInfo)) {\n throw new Error(`Could not create wallet`);\n }\n wallet = fullWalletForID(matrixWalletInfo.id);\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should create view only wallet', async () => {\n const matrixWalletInfo = await createViewOnlyMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.generateShareableViewingKey(),\n undefined, // creationBlockNumbers\n );\n if (!isDefined(matrixWalletInfo)) {\n throw new Error('Could not create view-only wallet');\n }\n const viewOnlyWallet = viewOnlyWalletForID(matrixWalletInfo.id);\n expect(viewOnlyWallet).to.not.be.undefined;\n expect(matrixWalletInfo.matrixAddress).to.equal(wallet.getAddress());\n }).timeout(60_000);\n\n it('Should get wallet address', () => {\n const addressAny = getMatrixAddress(wallet.id);\n expect(addressAny).to.equal(\n '0zk1qykzjxctynyz4z43pukckpv43jyzhyvy0ehrd5wuc54l5enqf9qfrrv7j6fe3z53la7enqphqvxys9aqyp9xx0km95ehqslx8apmu8l7anc7emau4tvsultrkvd',\n );\n });\n\n it('Should get wallet shareable viewing key', async () => {\n const shareableKey = await getWalletShareableViewingKey(wallet.id);\n expect(shareableKey).to.equal(\n '82a57670726976d94032643030623234396632646337313236303565336263653364373665376631313931373933363436393365333931666566643963323764303161396262336433a473707562d94030633661376436386331663437303262613764666134613361353236323035303765386637366632393139326363666637653861366231303637393062316165',\n );\n });\n\n it('Should get wallet mnemonic', async () => {\n const mnemonic = await getWalletMnemonic(MOCK_DB_ENCRYPTION_KEY, wallet.id);\n expect(mnemonic).to.equal(MOCK_MNEMONIC_2);\n });\n\n it('Should create and load wallet from valid mnemonic', async () => {\n const matrixWalletInfo = await createMatrixWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n undefined, // creationBlockNumbers\n );\n expect(matrixWalletInfo.matrixAddress).to.be.a('string');\n expect(matrixWalletInfo.id).to.equal(wallet.id);\n\n const loadWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n matrixWalletInfo.id,\n false, // isViewOnlyWallet\n );\n expect(loadWalletInfo.matrixAddress).to.be.a('string');\n expect(loadWalletInfo.id).to.equal(wallet.id);\n });\n\n it('Should load wallet from db after Engine wallet unload', async () => {\n expect(Object.keys(getEngine().wallets)).to.include(wallet.id);\n unloadWalletByID(wallet.id);\n expect(Object.keys(getEngine().wallets)).to.not.include(wallet.id);\n const matrixWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.id,\n false, // isViewOnlyWallet\n );\n expect(matrixWalletInfo.id).to.equal(wallet.id);\n expect(matrixWalletInfo.matrixAddress).to.equal(\n wallet.getAddress(undefined),\n );\n });\n\n it('Should error for unknown load wallet', async () => {\n await expect(\n loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n 'unknown',\n false, // isViewOnlyWallet\n ),\n ).rejectedWith('Could not load Matrix wallet');\n });\n\n it('Should validate Matrix addresses', async () => {\n expect(validateMatrixAddress('0x9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(validateMatrixAddress('9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(\n validateMatrixAddress(\n 'rgtestropsten1qyglk9smgj240x2xmj2laj7p5hexw0a30vvdqnv9gk020nsd7yzgwkgce9x',\n ),\n ).to.be.false;\n expect(\n validateMatrixAddress(\n '0zk1q8hxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kfrv7j6fe3z53llhxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kg0zpzts',\n ),\n ).to.be.true;\n expect(\n validateMatrixAddress(\n '0zk1qyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqunpd9kxwatwqyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhshkca',\n ),\n ).to.be.true;\n });\n});\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Chain, AbstractWallet, TokenType, TokenBalances, NFTTokenData, getTokenDataHash, getTokenDataNFT, getTokenDataERC20 } from '@matrix-privacy/engine';
|
|
2
|
+
import { MatrixBalancesEvent, MatrixNFTAmount, MatrixERC20Amount, NetworkName, NFTTokenType } from '@matrix-privacy/shared-models';
|
|
3
|
+
export type BalancesUpdatedCallback = (balancesEvent: MatrixBalancesEvent) => void;
|
|
4
|
+
export declare const setOnBalanceUpdateCallback: (callback?: BalancesUpdatedCallback) => void;
|
|
5
|
+
export declare const getSerializedERC20Balances: (balances: TokenBalances) => MatrixERC20Amount[];
|
|
6
|
+
export declare const getSerializedNFTBalances: (balances: TokenBalances) => MatrixNFTAmount[];
|
|
7
|
+
export declare const onBalancesUpdate: (wallet: AbstractWallet, chain: Chain) => Promise<void>;
|
|
8
|
+
export declare const balanceForERC20Token: (wallet: AbstractWallet, networkName: NetworkName, tokenAddress: string, onlySpendable: boolean) => Promise<bigint>;
|
|
9
|
+
export declare const balanceForNFT: (wallet: AbstractWallet, networkName: NetworkName, nftTokenData: NFTTokenData, onlySpendable: boolean) => Promise<bigint>;
|
|
10
|
+
export { getTokenDataHash, getTokenDataNFT, getTokenDataERC20, TokenType, NFTTokenType, NFTTokenData, };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NFTTokenType = exports.TokenType = exports.getTokenDataERC20 = exports.getTokenDataNFT = exports.getTokenDataHash = exports.balanceForNFT = exports.balanceForERC20Token = exports.onBalancesUpdate = exports.getSerializedNFTBalances = exports.getSerializedERC20Balances = exports.setOnBalanceUpdateCallback = void 0;
|
|
4
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
5
|
+
Object.defineProperty(exports, "TokenType", { enumerable: true, get: function () { return engine_1.TokenType; } });
|
|
6
|
+
Object.defineProperty(exports, "getTokenDataHash", { enumerable: true, get: function () { return engine_1.getTokenDataHash; } });
|
|
7
|
+
Object.defineProperty(exports, "getTokenDataNFT", { enumerable: true, get: function () { return engine_1.getTokenDataNFT; } });
|
|
8
|
+
Object.defineProperty(exports, "getTokenDataERC20", { enumerable: true, get: function () { return engine_1.getTokenDataERC20; } });
|
|
9
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
10
|
+
Object.defineProperty(exports, "NFTTokenType", { enumerable: true, get: function () { return shared_models_1.NFTTokenType; } });
|
|
11
|
+
const logger_1 = require("../../../utils/logger");
|
|
12
|
+
const bytes_1 = require("../util/bytes");
|
|
13
|
+
let onBalanceUpdateCallback;
|
|
14
|
+
const setOnBalanceUpdateCallback = (callback) => {
|
|
15
|
+
onBalanceUpdateCallback = callback;
|
|
16
|
+
};
|
|
17
|
+
exports.setOnBalanceUpdateCallback = setOnBalanceUpdateCallback;
|
|
18
|
+
const getSerializedERC20Balances = (balances) => {
|
|
19
|
+
const tokenHashes = Object.keys(balances);
|
|
20
|
+
return tokenHashes
|
|
21
|
+
.filter(tokenHash => {
|
|
22
|
+
return balances[tokenHash].tokenData.tokenType === engine_1.TokenType.ERC20;
|
|
23
|
+
})
|
|
24
|
+
.map(matrixBalanceAddress => {
|
|
25
|
+
const erc20Balance = {
|
|
26
|
+
tokenAddress: (0, bytes_1.parseMatrixTokenAddress)(balances[matrixBalanceAddress].tokenData.tokenAddress).toLowerCase(),
|
|
27
|
+
amount: balances[matrixBalanceAddress].balance,
|
|
28
|
+
};
|
|
29
|
+
return erc20Balance;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
exports.getSerializedERC20Balances = getSerializedERC20Balances;
|
|
33
|
+
const getSerializedNFTBalances = (balances) => {
|
|
34
|
+
const tokenHashes = Object.keys(balances);
|
|
35
|
+
return tokenHashes
|
|
36
|
+
.filter(tokenHash => {
|
|
37
|
+
return [engine_1.TokenType.ERC721, engine_1.TokenType.ERC1155].includes(balances[tokenHash].tokenData.tokenType);
|
|
38
|
+
})
|
|
39
|
+
.map(matrixBalanceAddress => {
|
|
40
|
+
const balanceForToken = balances[matrixBalanceAddress];
|
|
41
|
+
const tokenData = balanceForToken.tokenData;
|
|
42
|
+
const nftBalance = {
|
|
43
|
+
nftAddress: (0, bytes_1.parseMatrixTokenAddress)(tokenData.tokenAddress).toLowerCase(),
|
|
44
|
+
tokenSubID: tokenData.tokenSubID,
|
|
45
|
+
nftTokenType: tokenData.tokenType,
|
|
46
|
+
amount: balanceForToken.balance,
|
|
47
|
+
};
|
|
48
|
+
return nftBalance;
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
exports.getSerializedNFTBalances = getSerializedNFTBalances;
|
|
52
|
+
const getNFTBalances = (balances) => {
|
|
53
|
+
const tokenHashes = Object.keys(balances);
|
|
54
|
+
return tokenHashes
|
|
55
|
+
.filter(tokenHash => {
|
|
56
|
+
return ([engine_1.TokenType.ERC721, engine_1.TokenType.ERC1155].includes(balances[tokenHash].tokenData.tokenType) && balances[tokenHash].balance > BigInt(0));
|
|
57
|
+
})
|
|
58
|
+
.map(tokenHash => {
|
|
59
|
+
const tokenData = balances[tokenHash].tokenData;
|
|
60
|
+
const nftBalance = {
|
|
61
|
+
nftAddress: (0, bytes_1.parseMatrixTokenAddress)(tokenData.tokenAddress).toLowerCase(),
|
|
62
|
+
nftTokenType: tokenData.tokenType,
|
|
63
|
+
tokenSubID: tokenData.tokenSubID,
|
|
64
|
+
amount: balances[tokenHash].balance,
|
|
65
|
+
};
|
|
66
|
+
return nftBalance;
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
const onBalancesUpdate = async (wallet, chain) => {
|
|
70
|
+
try {
|
|
71
|
+
if (!onBalanceUpdateCallback) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
(0, logger_1.sendMessage)(`Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`);
|
|
75
|
+
await getAllBalancesAsSpendable(wallet, chain);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (!(err instanceof Error)) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
(0, logger_1.sendMessage)(`Error getting balances for chain ${chain.type}:${chain.id}: ${err.message}`);
|
|
82
|
+
(0, logger_1.sendErrorMessage)(err);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.onBalancesUpdate = onBalancesUpdate;
|
|
86
|
+
const getAllBalancesAsSpendable = async (wallet, chain) => {
|
|
87
|
+
if (!onBalanceUpdateCallback) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const tokenBalances = await wallet.getTokenBalances(chain, false);
|
|
91
|
+
const erc20Amounts = (0, exports.getSerializedERC20Balances)(tokenBalances);
|
|
92
|
+
const nftAmounts = getNFTBalances(tokenBalances);
|
|
93
|
+
const balancesEvent = {
|
|
94
|
+
chain,
|
|
95
|
+
erc20Amounts,
|
|
96
|
+
nftAmounts,
|
|
97
|
+
matrixWalletID: wallet.id,
|
|
98
|
+
balanceBucket: shared_models_1.MatrixWalletBalanceBucket.Spendable,
|
|
99
|
+
};
|
|
100
|
+
onBalanceUpdateCallback(balancesEvent);
|
|
101
|
+
};
|
|
102
|
+
const balanceForERC20Token = async (wallet, networkName, tokenAddress, onlySpendable) => {
|
|
103
|
+
const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
|
|
104
|
+
const balances = await wallet.getTokenBalances(chain, onlySpendable);
|
|
105
|
+
const tokenBalances = (0, exports.getSerializedERC20Balances)(balances);
|
|
106
|
+
const matchingTokenBalance = tokenBalances.find(tokenBalance => tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase());
|
|
107
|
+
if (!matchingTokenBalance) {
|
|
108
|
+
return 0n;
|
|
109
|
+
}
|
|
110
|
+
return matchingTokenBalance.amount;
|
|
111
|
+
};
|
|
112
|
+
exports.balanceForERC20Token = balanceForERC20Token;
|
|
113
|
+
const balanceForNFT = async (wallet, networkName, nftTokenData, onlySpendable) => {
|
|
114
|
+
const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
|
|
115
|
+
const balances = await wallet.getTokenBalances(chain, onlySpendable);
|
|
116
|
+
const nftBalances = (0, exports.getSerializedNFTBalances)(balances);
|
|
117
|
+
const matchingNFTBalance = nftBalances.find(nftBalance => nftBalance.nftAddress.toLowerCase() ===
|
|
118
|
+
nftTokenData.tokenAddress.toLowerCase() &&
|
|
119
|
+
BigInt(nftBalance.tokenSubID) === BigInt(nftTokenData.tokenSubID));
|
|
120
|
+
if (!matchingNFTBalance) {
|
|
121
|
+
return 0n;
|
|
122
|
+
}
|
|
123
|
+
return matchingNFTBalance.amount;
|
|
124
|
+
};
|
|
125
|
+
exports.balanceForNFT = balanceForNFT;
|
|
126
|
+
//# sourceMappingURL=balance-update.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Chain } from '@matrix-privacy/engine';
|
|
2
|
+
export declare const refreshBalances: (chain: Chain, walletIdFilter: Optional<string[]>) => Promise<void>;
|
|
3
|
+
export declare const rescanFullUTXOMerkletreesAndWallets: (chain: Chain, walletIdFilter: Optional<string[]>) => Promise<void>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rescanFullUTXOMerkletreesAndWallets = exports.refreshBalances = void 0;
|
|
4
|
+
const error_1 = require("../../../utils/error");
|
|
5
|
+
const engine_1 = require("../core/engine");
|
|
6
|
+
const refreshBalances = async (chain, walletIdFilter) => {
|
|
7
|
+
try {
|
|
8
|
+
// Wallet will trigger .emit('scanned', {chain}) event when finished,
|
|
9
|
+
// which calls `onBalancesUpdate` (balance-update.ts).
|
|
10
|
+
// Kick off a background merkletree scan.
|
|
11
|
+
// This will call wallet.scanBalances when it's done, but may take some time.
|
|
12
|
+
const engine = (0, engine_1.getEngine)();
|
|
13
|
+
await engine.scanContractHistory(chain, walletIdFilter);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
throw (0, error_1.reportAndSanitizeError)(exports.refreshBalances.name, err);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
exports.refreshBalances = refreshBalances;
|
|
20
|
+
const rescanFullUTXOMerkletreesAndWallets = async (chain, walletIdFilter) => {
|
|
21
|
+
try {
|
|
22
|
+
const engine = (0, engine_1.getEngine)();
|
|
23
|
+
await engine.fullRescanUTXOMerkletreesAndWallets(chain, walletIdFilter);
|
|
24
|
+
// Wallet will trigger .emit('scanned', {chain}) event when finished,
|
|
25
|
+
// which calls `onBalancesUpdate` (balance-update.ts).
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw (0, error_1.reportAndSanitizeError)(exports.rescanFullUTXOMerkletreesAndWallets.name, err);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
exports.rescanFullUTXOMerkletreesAndWallets = rescanFullUTXOMerkletreesAndWallets;
|
|
32
|
+
//# sourceMappingURL=balances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/balances.ts"],"names":[],"mappings":";;;AACA,gDAA8D;AAC9D,2CAA2C;AAEpC,MAAM,eAAe,GAAG,KAAK,EAClC,KAAY,EACZ,cAAkC,EACnB,EAAE;IACjB,IAAI;QACF,qEAAqE;QACrE,sDAAsD;QAEtD,yCAAyC;QACzC,6EAA6E;QAE7E,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;KACzD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uBAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzD;AACH,CAAC,CAAC;AAhBW,QAAA,eAAe,mBAgB1B;AAEK,MAAM,mCAAmC,GAAG,KAAK,EACtD,KAAY,EACZ,cAAkC,EACnB,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,mCAAmC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAExE,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,2CAAmC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC7E;AACH,CAAC,CAAC;AAbW,QAAA,mCAAmC,uCAa9C","sourcesContent":["import { Chain } from '@matrix-privacy/engine';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine } from '../core/engine';\n\nexport const refreshBalances = async (\n chain: Chain,\n walletIdFilter: Optional<string[]>,\n): Promise<void> => {\n try {\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n\n // Kick off a background merkletree scan.\n // This will call wallet.scanBalances when it's done, but may take some time.\n\n const engine = getEngine();\n await engine.scanContractHistory(chain, walletIdFilter);\n } catch (err) {\n throw reportAndSanitizeError(refreshBalances.name, err);\n }\n};\n\nexport const rescanFullUTXOMerkletreesAndWallets = async (\n chain: Chain,\n walletIdFilter: Optional<string[]>,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullRescanUTXOMerkletreesAndWallets(chain, walletIdFilter);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(rescanFullUTXOMerkletreesAndWallets.name, err);\n }\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./balance-update"), exports);
|
|
18
|
+
__exportStar(require("./balances"), exports);
|
|
19
|
+
__exportStar(require("./wallets"), exports);
|
|
20
|
+
__exportStar(require("../history/transaction-history"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/matrix/wallets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,6CAA2B;AAC3B,4CAA0B;AAC1B,iEAA+C","sourcesContent":["export * from './balance-update';\nexport * from './balances';\nexport * from './wallets';\nexport * from '../history/transaction-history';\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MatrixWallet, AbstractWallet, AddressData } from '@matrix-privacy/engine';
|
|
2
|
+
import { MatrixWalletInfo, Chain } from '@matrix-privacy/shared-models';
|
|
3
|
+
export declare const awaitWalletScan: (walletID: string, chain: Chain) => Promise<unknown>;
|
|
4
|
+
export declare const awaitMultipleWalletScans: (walletID: string, chain: Chain, numScans: number) => Promise<void>;
|
|
5
|
+
export declare const walletForID: (id: string) => AbstractWallet;
|
|
6
|
+
export declare const fullWalletForID: (id: string) => MatrixWallet;
|
|
7
|
+
export declare const viewOnlyWalletForID: (id: string) => MatrixWallet;
|
|
8
|
+
export declare const createMatrixWallet: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>, matrixWalletDerivationIndex?: number) => Promise<MatrixWalletInfo>;
|
|
9
|
+
export declare const createViewOnlyMatrixWallet: (encryptionKey: string, shareableViewingKey: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<MatrixWalletInfo>;
|
|
10
|
+
export declare const loadWalletByID: (encryptionKey: string, matrixWalletID: string, isViewOnlyWallet: boolean) => Promise<MatrixWalletInfo>;
|
|
11
|
+
export declare const unloadWalletByID: (matrixWalletID: string) => void;
|
|
12
|
+
export declare const deleteWalletByID: (matrixWalletID: string) => Promise<void>;
|
|
13
|
+
export declare const getWalletMnemonic: (encryptionKey: string, matrixWalletID: string) => Promise<string>;
|
|
14
|
+
export declare const getMatrixWalletAddressData: (address: string) => AddressData;
|
|
15
|
+
export declare const getMatrixWalletPrivateViewingKey: (matrixWalletID: string) => Uint8Array;
|
|
16
|
+
export declare const signWithWalletViewingKey: (matrixWalletID: string, message: string) => Promise<string>;
|
|
17
|
+
export declare const assertValidMatrixAddress: (address: string) => void;
|
|
18
|
+
export declare const validateMatrixAddress: (address: string) => boolean;
|
|
19
|
+
export declare const assertValidEthAddress: (address: string) => void;
|
|
20
|
+
export declare const validateEthAddress: (address: string) => boolean;
|
|
21
|
+
export declare const getMatrixAddress: (matrixWalletID: string) => Optional<string>;
|
|
22
|
+
export declare const getWalletShareableViewingKey: (matrixWalletID: string) => Promise<Optional<string>>;
|