dop-wallet-v6 1.2.1 → 1.2.2

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 (115) hide show
  1. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -1
  2. package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
  3. package/dist/services/artifacts/artifact-downloader.js.map +1 -1
  4. package/dist/services/artifacts/artifact-hash.d.ts +1 -1
  5. package/dist/services/artifacts/artifact-hash.js.map +1 -1
  6. package/dist/services/artifacts/artifact-util.d.ts +1 -1
  7. package/dist/services/artifacts/artifact-util.js.map +1 -1
  8. package/dist/services/dop/core/__tests__/providers.test.js.map +1 -1
  9. package/dist/services/dop/core/artifacts.d.ts +2 -2
  10. package/dist/services/dop/core/artifacts.js.map +1 -1
  11. package/dist/services/dop/core/encrypts.d.ts +1 -1
  12. package/dist/services/dop/core/encrypts.js.map +1 -1
  13. package/dist/services/dop/core/engine.d.ts +1 -1
  14. package/dist/services/dop/core/engine.js.map +1 -1
  15. package/dist/services/dop/core/init.d.ts +2 -2
  16. package/dist/services/dop/core/init.js.map +1 -1
  17. package/dist/services/dop/core/load-provider.d.ts +1 -1
  18. package/dist/services/dop/core/load-provider.js.map +1 -1
  19. package/dist/services/dop/core/merkletree.d.ts +2 -2
  20. package/dist/services/dop/core/merkletree.js.map +1 -1
  21. package/dist/services/dop/core/prover.d.ts +1 -1
  22. package/dist/services/dop/core/prover.js.map +1 -1
  23. package/dist/services/dop/core/providers.d.ts +2 -2
  24. package/dist/services/dop/core/providers.js.map +1 -1
  25. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +1 -1
  26. package/dist/services/dop/dop-txids/blinded-commitments.d.ts +1 -1
  27. package/dist/services/dop/dop-txids/blinded-commitments.js.map +1 -1
  28. package/dist/services/dop/dop-txids/dop-txid-graph-type-formatters.d.ts +1 -1
  29. package/dist/services/dop/dop-txids/dop-txid-graph-type-formatters.js.map +1 -1
  30. package/dist/services/dop/dop-txids/dop-txid-merkletrees.d.ts +1 -1
  31. package/dist/services/dop/dop-txids/dop-txid-merkletrees.js.map +1 -1
  32. package/dist/services/dop/dop-txids/dop-txid-sync-graph-v2.d.ts +1 -1
  33. package/dist/services/dop/dop-txids/dop-txid-sync-graph-v2.js.map +1 -1
  34. package/dist/services/dop/history/transaction-history.d.ts +2 -2
  35. package/dist/services/dop/history/transaction-history.js.map +1 -1
  36. package/dist/services/dop/process/extract-transaction-data.d.ts +1 -1
  37. package/dist/services/dop/process/extract-transaction-data.js.map +1 -1
  38. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +1 -1
  39. package/dist/services/dop/quick-sync/V2/graph-type-formatters-v2.d.ts +1 -1
  40. package/dist/services/dop/quick-sync/V2/graph-type-formatters-v2.js.map +1 -1
  41. package/dist/services/dop/quick-sync/V2/quick-sync-events-graph-v2.d.ts +1 -1
  42. package/dist/services/dop/quick-sync/V2/quick-sync-events-graph-v2.js.map +1 -1
  43. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -1
  44. package/dist/services/dop/quick-sync/V3/graph-type-formatters-v3.d.ts +1 -1
  45. package/dist/services/dop/quick-sync/V3/graph-type-formatters-v3.js.map +1 -1
  46. package/dist/services/dop/quick-sync/V3/quick-sync-events-graph-v3.d.ts +1 -1
  47. package/dist/services/dop/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -1
  48. package/dist/services/dop/quick-sync/graph-query.d.ts +1 -1
  49. package/dist/services/dop/quick-sync/graph-query.js.map +1 -1
  50. package/dist/services/dop/quick-sync/quick-sync-events.d.ts +1 -1
  51. package/dist/services/dop/quick-sync/quick-sync-events.js.map +1 -1
  52. package/dist/services/dop/quick-sync/shared-formatters.d.ts +1 -1
  53. package/dist/services/dop/quick-sync/shared-formatters.js.map +1 -1
  54. package/dist/services/dop/util/bytes.d.ts +1 -1
  55. package/dist/services/dop/util/bytes.js.map +1 -1
  56. package/dist/services/dop/util/crypto.d.ts +2 -2
  57. package/dist/services/dop/util/crypto.js.map +1 -1
  58. package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +1 -1
  59. package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +1 -1
  60. package/dist/services/dop/wallets/__tests__/balances.test.js.map +1 -1
  61. package/dist/services/dop/wallets/__tests__/wallets.test.js.map +1 -1
  62. package/dist/services/dop/wallets/balance-update.d.ts +2 -2
  63. package/dist/services/dop/wallets/balance-update.js.map +1 -1
  64. package/dist/services/dop/wallets/balances.d.ts +1 -1
  65. package/dist/services/dop/wallets/balances.js.map +1 -1
  66. package/dist/services/dop/wallets/wallets.d.ts +2 -2
  67. package/dist/services/dop/wallets/wallets.js.map +1 -1
  68. package/dist/services/ethers/ethers-util.js.map +1 -1
  69. package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -1
  70. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -1
  71. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +1 -1
  72. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -1
  73. package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -1
  74. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -1
  75. package/dist/services/transactions/proof-cache.d.ts +1 -1
  76. package/dist/services/transactions/proof-cache.js.map +1 -1
  77. package/dist/services/transactions/tx-cross-contract-calls.d.ts +2 -2
  78. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
  79. package/dist/services/transactions/tx-decrypt.d.ts +1 -1
  80. package/dist/services/transactions/tx-decrypt.js.map +1 -1
  81. package/dist/services/transactions/tx-encrypt-base-token.d.ts +1 -1
  82. package/dist/services/transactions/tx-encrypt-base-token.js.map +1 -1
  83. package/dist/services/transactions/tx-encrypt.d.ts +1 -1
  84. package/dist/services/transactions/tx-encrypt.js.map +1 -1
  85. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +2 -2
  86. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -1
  87. package/dist/services/transactions/tx-gas-details.d.ts +1 -1
  88. package/dist/services/transactions/tx-gas-details.js.map +1 -1
  89. package/dist/services/transactions/tx-generator.d.ts +2 -2
  90. package/dist/services/transactions/tx-generator.js.map +1 -1
  91. package/dist/services/transactions/tx-notes.d.ts +2 -2
  92. package/dist/services/transactions/tx-notes.js.map +1 -1
  93. package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
  94. package/dist/services/transactions/tx-nullifiers.js.map +1 -1
  95. package/dist/services/transactions/tx-proof-decrypt.d.ts +1 -1
  96. package/dist/services/transactions/tx-proof-decrypt.js.map +1 -1
  97. package/dist/services/transactions/tx-proof-transfer.d.ts +1 -1
  98. package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
  99. package/dist/services/transactions/tx-transfer.d.ts +1 -1
  100. package/dist/services/transactions/tx-transfer.js.map +1 -1
  101. package/dist/tests/helper.test.d.ts +1 -1
  102. package/dist/tests/helper.test.js.map +1 -1
  103. package/dist/tests/mocks.test.d.ts +2 -2
  104. package/dist/tests/mocks.test.js.map +1 -1
  105. package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +2 -2
  106. package/dist/tests/poi/test-wallet-poi-requester.test.js.map +1 -1
  107. package/dist/tests/setup.test.d.ts +1 -1
  108. package/dist/tests/setup.test.js.map +1 -1
  109. package/dist/tests/stubs/engine-stubs.test.d.ts +1 -1
  110. package/dist/tests/stubs/engine-stubs.test.js.map +1 -1
  111. package/dist/utils/blocked-address.js.map +1 -1
  112. package/dist/utils/error.js.map +1 -1
  113. package/dist/utils/gas-price.d.ts +1 -1
  114. package/dist/utils/gas-price.js.map +1 -1
  115. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"quick-sync-events-graph-v3.js","sourceRoot":"","sources":["../../../../../src/services/dop/quick-sync/V3/quick-sync-events-graph-v3.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AccumulatedEvents,\n Chain,\n getDopTransactionIDHex,\n} from 'dop-engine-v3';\nimport { EMPTY_EVENTS, autoPaginatingQuery } from '../graph-query';\nimport {\n NetworkName,\n isDefined,\n networkForChain,\n} from 'dop-sharedmodels-v3';\nimport { MeshInstance, getMesh } from '@graphql-mesh/runtime';\nimport { removeDuplicatesByID } from '../../util/graph-util';\nimport { getMeshOptions, getSdk } from './graphql';\nimport {\n DopTxidMapV3,\n formatGraphCommitmentEventsV3,\n formatGraphNullifierEventsV3,\n formatGraphDopTransactionEventsV3,\n formatGraphDecryptEventsV3,\n} from './graph-type-formatters-v3';\n\nconst meshes: MapType<MeshInstance> = {};\n\n// 1.5 full trees of commitments\n// TODO: This will have to change when we have more than 100k commitments.\nconst MAX_QUERY_RESULTS = 100000;\n\nconst sourceNameForNetwork = (networkName: NetworkName): string => {\n switch (networkName) {\n case NetworkName.Ethereum:\n case NetworkName.EthereumSepolia:\n case NetworkName.BNBChain:\n case NetworkName.Polygon:\n case NetworkName.Arbitrum:\n case NetworkName.Xlayer:\n case NetworkName.PolygonAmoy:\n case NetworkName.ArbitrumGoerli_DEPRECATED:\n case NetworkName.EthereumGoerli_DEPRECATED:\n case NetworkName.EthereumRopsten_DEPRECATED:\n case NetworkName.PolygonMumbai_DEPRECATED:\n case NetworkName.Hardhat:\n default:\n throw new Error(\n 'No Graph API hosted service for this network on DOP V3',\n );\n }\n};\n\nconst isSupportedByNetwork = (networkName: NetworkName) => {\n try {\n sourceNameForNetwork(networkName);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const quickSyncEventsGraphV3 = async (\n chain: Chain,\n startingBlock: number,\n): Promise<AccumulatedEvents> => {\n const network = networkForChain(chain);\n if (!network || !isSupportedByNetwork(network.name)) {\n // Return empty logs, Engine will default to full scan.\n return EMPTY_EVENTS;\n }\n\n const sdk = getBuiltGraphSDK(network.name);\n\n const [nullifiers, decrypts, commitments, dopTransactions] =\n await Promise.all([\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Nullifiers({\n blockNumber,\n })\n ).nullifiers,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Decrypts({\n blockNumber,\n })\n ).decrypts,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Commitments({\n blockNumber,\n })\n ).commitments,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.DopTransactions({\n blockNumber,\n })\n ).dopTransactions,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n ]);\n\n const filteredDopTransactions = removeDuplicatesByID(dopTransactions);\n const filteredNullifiers = removeDuplicatesByID(nullifiers);\n const filteredDecrypts = removeDuplicatesByID(decrypts);\n const filteredCommitments = removeDuplicatesByID(commitments);\n\n const dopTransactionEvents = formatGraphDopTransactionEventsV3(\n filteredDopTransactions,\n );\n\n const dopTxidMap: DopTxidMapV3 = {};\n for (const dopTransaction of filteredDopTransactions) {\n const dopTxid = getDopTransactionIDHex(dopTransaction);\n dopTxidMap[dopTxid] = dopTransaction.commitments;\n }\n\n const nullifierEvents = formatGraphNullifierEventsV3(filteredNullifiers);\n const decryptEvents = formatGraphDecryptEventsV3(\n filteredDecrypts,\n dopTxidMap,\n );\n const commitmentEvents = formatGraphCommitmentEventsV3(\n filteredCommitments,\n dopTxidMap,\n );\n\n return {\n nullifierEvents,\n decryptEvents,\n commitmentEvents,\n dopTransactionEvents,\n };\n};\n\nconst getBuiltGraphClient = async (\n networkName: NetworkName,\n): Promise<MeshInstance> => {\n const meshForNetwork = meshes[networkName];\n if (isDefined(meshForNetwork)) {\n return meshForNetwork;\n }\n const sourceName = sourceNameForNetwork(networkName);\n const meshOptions = await getMeshOptions();\n const filteredSources = meshOptions.sources.filter(source => {\n return source.name === sourceName;\n });\n if (filteredSources.length !== 1) {\n throw new Error(\n `Expected exactly one source for network ${networkName}, found ${filteredSources.length}`,\n );\n }\n meshOptions.sources = [filteredSources[0]];\n const mesh = await getMesh(meshOptions);\n meshes[networkName] = mesh;\n const id = mesh.pubsub.subscribe('destroy', () => {\n meshes[networkName] = undefined;\n mesh.pubsub.unsubscribe(id);\n });\n return mesh;\n};\n\nconst getBuiltGraphSDK = <TGlobalContext, TOperationContext>(\n networkName: NetworkName,\n globalContext?: TGlobalContext,\n) => {\n const sdkRequester$ = getBuiltGraphClient(networkName).then(\n ({ sdkRequesterFactory }) => sdkRequesterFactory(globalContext),\n );\n return getSdk<TOperationContext, TGlobalContext>((...args) =>\n sdkRequester$.then(sdkRequester => sdkRequester(...args)),\n );\n};\n"]}
1
+ {"version":3,"file":"quick-sync-events-graph-v3.js","sourceRoot":"","sources":["../../../../../src/services/dop/quick-sync/V3/quick-sync-events-graph-v3.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AccumulatedEvents,\n Chain,\n getDopTransactionIDHex,\n} from 'dop-engine-v5';\nimport { EMPTY_EVENTS, autoPaginatingQuery } from '../graph-query';\nimport {\n NetworkName,\n isDefined,\n networkForChain,\n} from 'dop-sharedmodels-v5';\nimport { MeshInstance, getMesh } from '@graphql-mesh/runtime';\nimport { removeDuplicatesByID } from '../../util/graph-util';\nimport { getMeshOptions, getSdk } from './graphql';\nimport {\n DopTxidMapV3,\n formatGraphCommitmentEventsV3,\n formatGraphNullifierEventsV3,\n formatGraphDopTransactionEventsV3,\n formatGraphDecryptEventsV3,\n} from './graph-type-formatters-v3';\n\nconst meshes: MapType<MeshInstance> = {};\n\n// 1.5 full trees of commitments\n// TODO: This will have to change when we have more than 100k commitments.\nconst MAX_QUERY_RESULTS = 100000;\n\nconst sourceNameForNetwork = (networkName: NetworkName): string => {\n switch (networkName) {\n case NetworkName.Ethereum:\n case NetworkName.EthereumSepolia:\n case NetworkName.BNBChain:\n case NetworkName.Polygon:\n case NetworkName.Arbitrum:\n case NetworkName.Xlayer:\n case NetworkName.PolygonAmoy:\n case NetworkName.ArbitrumGoerli_DEPRECATED:\n case NetworkName.EthereumGoerli_DEPRECATED:\n case NetworkName.EthereumRopsten_DEPRECATED:\n case NetworkName.PolygonMumbai_DEPRECATED:\n case NetworkName.Hardhat:\n default:\n throw new Error(\n 'No Graph API hosted service for this network on DOP V3',\n );\n }\n};\n\nconst isSupportedByNetwork = (networkName: NetworkName) => {\n try {\n sourceNameForNetwork(networkName);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const quickSyncEventsGraphV3 = async (\n chain: Chain,\n startingBlock: number,\n): Promise<AccumulatedEvents> => {\n const network = networkForChain(chain);\n if (!network || !isSupportedByNetwork(network.name)) {\n // Return empty logs, Engine will default to full scan.\n return EMPTY_EVENTS;\n }\n\n const sdk = getBuiltGraphSDK(network.name);\n\n const [nullifiers, decrypts, commitments, dopTransactions] =\n await Promise.all([\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Nullifiers({\n blockNumber,\n })\n ).nullifiers,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Decrypts({\n blockNumber,\n })\n ).decrypts,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Commitments({\n blockNumber,\n })\n ).commitments,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.DopTransactions({\n blockNumber,\n })\n ).dopTransactions,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n ]);\n\n const filteredDopTransactions = removeDuplicatesByID(dopTransactions);\n const filteredNullifiers = removeDuplicatesByID(nullifiers);\n const filteredDecrypts = removeDuplicatesByID(decrypts);\n const filteredCommitments = removeDuplicatesByID(commitments);\n\n const dopTransactionEvents = formatGraphDopTransactionEventsV3(\n filteredDopTransactions,\n );\n\n const dopTxidMap: DopTxidMapV3 = {};\n for (const dopTransaction of filteredDopTransactions) {\n const dopTxid = getDopTransactionIDHex(dopTransaction);\n dopTxidMap[dopTxid] = dopTransaction.commitments;\n }\n\n const nullifierEvents = formatGraphNullifierEventsV3(filteredNullifiers);\n const decryptEvents = formatGraphDecryptEventsV3(\n filteredDecrypts,\n dopTxidMap,\n );\n const commitmentEvents = formatGraphCommitmentEventsV3(\n filteredCommitments,\n dopTxidMap,\n );\n\n return {\n nullifierEvents,\n decryptEvents,\n commitmentEvents,\n dopTransactionEvents,\n };\n};\n\nconst getBuiltGraphClient = async (\n networkName: NetworkName,\n): Promise<MeshInstance> => {\n const meshForNetwork = meshes[networkName];\n if (isDefined(meshForNetwork)) {\n return meshForNetwork;\n }\n const sourceName = sourceNameForNetwork(networkName);\n const meshOptions = await getMeshOptions();\n const filteredSources = meshOptions.sources.filter(source => {\n return source.name === sourceName;\n });\n if (filteredSources.length !== 1) {\n throw new Error(\n `Expected exactly one source for network ${networkName}, found ${filteredSources.length}`,\n );\n }\n meshOptions.sources = [filteredSources[0]];\n const mesh = await getMesh(meshOptions);\n meshes[networkName] = mesh;\n const id = mesh.pubsub.subscribe('destroy', () => {\n meshes[networkName] = undefined;\n mesh.pubsub.unsubscribe(id);\n });\n return mesh;\n};\n\nconst getBuiltGraphSDK = <TGlobalContext, TOperationContext>(\n networkName: NetworkName,\n globalContext?: TGlobalContext,\n) => {\n const sdkRequester$ = getBuiltGraphClient(networkName).then(\n ({ sdkRequesterFactory }) => sdkRequesterFactory(globalContext),\n );\n return getSdk<TOperationContext, TGlobalContext>((...args) =>\n sdkRequester$.then(sdkRequester => sdkRequester(...args)),\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { AccumulatedEvents } from 'dop-engine-v3';
1
+ import { AccumulatedEvents } from 'dop-engine-v5';
2
2
  export declare const EMPTY_EVENTS: AccumulatedEvents;
3
3
  export declare const autoPaginatingQuery: <ReturnType_1 extends {
4
4
  blockNumber: string;
@@ -1 +1 @@
1
- {"version":3,"file":"graph-query.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/graph-query.ts"],"names":[],"mappings":";;;AACA,6DAA4D;AAE/C,QAAA,YAAY,GAAsB;IAC7C,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEK,MAAM,mBAAmB,GAAG,KAAK,EAGtC,KAAqD,EACrD,WAAmB,EACnB,eAAuB,EACvB,cAA4B,EAAE,EACP,EAAE;IACzB,MAAM,UAAU,GAAG,MAAM,IAAA,oCAAc,EACrC,KAAK,CAAC,WAAW,CAAC,EAClB,KAAK,EACL,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAChE,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,WAAW,CAAC;KACpB;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,eAAe,CAAC;IACzD,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC;IACpD,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE;QACjC,MAAM,IAAA,2BAAK,EAAC,GAAG,CAAC,CAAC;QACjB,OAAO,IAAA,2BAAmB,EACxB,KAAK,EACL,UAAU,CAAC,WAAW,EACtB,eAAe,EACf,YAAY,CACb,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAlCW,QAAA,mBAAmB,uBAkC9B","sourcesContent":["import { AccumulatedEvents } from 'dop-engine-v3';\nimport { delay, promiseTimeout } from 'dop-sharedmodels-v3';\n\nexport const EMPTY_EVENTS: AccumulatedEvents = {\n commitmentEvents: [],\n decryptEvents: [],\n nullifierEvents: [],\n};\n\nexport const autoPaginatingQuery = async <\n ReturnType extends { blockNumber: string },\n>(\n query: (blockNumber: string) => Promise<ReturnType[]>,\n blockNumber: string,\n maxQueryResults: number,\n prevResults: ReturnType[] = [],\n): Promise<ReturnType[]> => {\n const newResults = await promiseTimeout(\n query(blockNumber),\n 20000,\n new Error('Timeout querying Graph for QuickSync of DOP Events'),\n );\n if (newResults.length === 0) {\n return prevResults;\n }\n\n const totalResults = prevResults.concat(newResults); \n\n const overLimit = totalResults.length >= maxQueryResults;\n const lastResult = totalResults[totalResults.length - 1];\n\n const shouldQueryMore = newResults.length === 10000;\n if (!overLimit && shouldQueryMore) {\n await delay(250);\n return autoPaginatingQuery(\n query,\n lastResult.blockNumber,\n maxQueryResults,\n totalResults,\n );\n }\n\n return totalResults;\n};\n"]}
1
+ {"version":3,"file":"graph-query.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/graph-query.ts"],"names":[],"mappings":";;;AACA,6DAA4D;AAE/C,QAAA,YAAY,GAAsB;IAC7C,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEK,MAAM,mBAAmB,GAAG,KAAK,EAGtC,KAAqD,EACrD,WAAmB,EACnB,eAAuB,EACvB,cAA4B,EAAE,EACP,EAAE;IACzB,MAAM,UAAU,GAAG,MAAM,IAAA,oCAAc,EACrC,KAAK,CAAC,WAAW,CAAC,EAClB,KAAK,EACL,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAChE,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,WAAW,CAAC;KACpB;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,eAAe,CAAC;IACzD,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC;IACpD,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE;QACjC,MAAM,IAAA,2BAAK,EAAC,GAAG,CAAC,CAAC;QACjB,OAAO,IAAA,2BAAmB,EACxB,KAAK,EACL,UAAU,CAAC,WAAW,EACtB,eAAe,EACf,YAAY,CACb,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAlCW,QAAA,mBAAmB,uBAkC9B","sourcesContent":["import { AccumulatedEvents } from 'dop-engine-v5';\nimport { delay, promiseTimeout } from 'dop-sharedmodels-v5';\n\nexport const EMPTY_EVENTS: AccumulatedEvents = {\n commitmentEvents: [],\n decryptEvents: [],\n nullifierEvents: [],\n};\n\nexport const autoPaginatingQuery = async <\n ReturnType extends { blockNumber: string },\n>(\n query: (blockNumber: string) => Promise<ReturnType[]>,\n blockNumber: string,\n maxQueryResults: number,\n prevResults: ReturnType[] = [],\n): Promise<ReturnType[]> => {\n const newResults = await promiseTimeout(\n query(blockNumber),\n 20000,\n new Error('Timeout querying Graph for QuickSync of DOP Events'),\n );\n if (newResults.length === 0) {\n return prevResults;\n }\n\n const totalResults = prevResults.concat(newResults); \n\n const overLimit = totalResults.length >= maxQueryResults;\n const lastResult = totalResults[totalResults.length - 1];\n\n const shouldQueryMore = newResults.length === 10000;\n if (!overLimit && shouldQueryMore) {\n await delay(250);\n return autoPaginatingQuery(\n query,\n lastResult.blockNumber,\n maxQueryResults,\n totalResults,\n );\n }\n\n return totalResults;\n};\n"]}
@@ -1,2 +1,2 @@
1
- import { Chain, TXIDVersion } from 'dop-engine-v3';
1
+ import { Chain, TXIDVersion } from 'dop-engine-v5';
2
2
  export declare const quickSyncEventsGraph: (txidVersion: TXIDVersion, chain: Chain, startingBlock: number) => Promise<import("dop-engine-v3").AccumulatedEvents>;
@@ -1 +1 @@
1
- {"version":3,"file":"quick-sync-events.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/quick-sync-events.ts"],"names":[],"mappings":";;;AACA,gFAAyE;AAElE,MAAM,oBAAoB,GAAG,KAAK,EACvC,WAAwB,EACxB,KAAY,EACZ,aAAqB,EACrB,EAAE;IACE,OAAO,IAAA,mDAAsB,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B","sourcesContent":["import { Chain, TXIDVersion } from 'dop-engine-v3';\nimport { quickSyncEventsGraphV2 } from './V2/quick-sync-events-graph-v2';\n\nexport const quickSyncEventsGraph = async (\n txidVersion: TXIDVersion,\n chain: Chain,\n startingBlock: number,\n) => {\n return quickSyncEventsGraphV2(chain, startingBlock);\n};\n"]}
1
+ {"version":3,"file":"quick-sync-events.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/quick-sync-events.ts"],"names":[],"mappings":";;;AACA,gFAAyE;AAElE,MAAM,oBAAoB,GAAG,KAAK,EACvC,WAAwB,EACxB,KAAY,EACZ,aAAqB,EACrB,EAAE;IACE,OAAO,IAAA,mDAAsB,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B","sourcesContent":["import { Chain, TXIDVersion } from 'dop-engine-v5';\nimport { quickSyncEventsGraphV2 } from './V2/quick-sync-events-graph-v2';\n\nexport const quickSyncEventsGraph = async (\n txidVersion: TXIDVersion,\n chain: Chain,\n startingBlock: number,\n) => {\n return quickSyncEventsGraphV2(chain, startingBlock);\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { PreImage, TokenData, TokenType } from 'dop-engine-v3';
1
+ import { PreImage, TokenData, TokenType } from 'dop-engine-v5';
2
2
  import { TokenType as GraphTokenTypeV2, Token as GraphTokenV2, CommitmentPreimage as GraphCommitmentPreimageV2 } from './V2/graphql';
3
3
  import { TokenType as GraphTokenTypeV3, Token as GraphTokenV3, CommitmentPreimage as GraphCommitmentPreimageV3 } from './V3/graphql';
4
4
  export declare const graphTokenTypeToEngineTokenType: (graphTokenType: GraphTokenTypeV2 | GraphTokenTypeV3) => TokenType;
@@ -1 +1 @@
1
- {"version":3,"file":"shared-formatters.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/shared-formatters.ts"],"names":[],"mappings":";;;AAAA,iDAQuB;AAYhB,MAAM,+BAA+B,GAAG,CAC7C,cAAmD,EACxC,EAAE;IACb,QAAQ,cAAc,EAAE;QACtB,KAAK,OAAO;YACV,OAAO,yBAAS,CAAC,KAAK,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,yBAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,yBAAS,CAAC,OAAO,CAAC;KAC5B;AACH,CAAC,CAAC;AAXW,QAAA,+BAA+B,mCAW1C;AAEK,MAAM,qBAAqB,GAAG,CACnC,UAAuC,EAC5B,EAAE;IACb,OAAO,IAAA,kCAAkB,EACvB,UAAU,CAAC,YAAY,EACvB,IAAA,uCAA+B,EAAC,UAAU,CAAC,SAAS,CAAC,EACrD,UAAU,CAAC,UAAU,CACtB,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEK,MAAM,cAAc,GAAG,CAC5B,aAAoE,EAC1D,EAAE;IACZ,OAAO,IAAA,iCAAiB,EACtB,aAAa,CAAC,GAAG,EACjB,IAAA,6BAAqB,EAAC,aAAa,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,0BAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,0BAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,YAAoB,EAAU,EAAE;IAChE,OAAO,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B","sourcesContent":["import {\n ByteLength,\n PreImage,\n TokenData,\n TokenType,\n ByteUtils,\n serializePreImage,\n serializeTokenData,\n} from 'dop-engine-v3';\nimport {\n TokenType as GraphTokenTypeV2,\n Token as GraphTokenV2,\n CommitmentPreimage as GraphCommitmentPreimageV2,\n} from './V2/graphql';\nimport {\n TokenType as GraphTokenTypeV3,\n Token as GraphTokenV3,\n CommitmentPreimage as GraphCommitmentPreimageV3,\n} from './V3/graphql';\n\nexport const graphTokenTypeToEngineTokenType = (\n graphTokenType: GraphTokenTypeV2 | GraphTokenTypeV3,\n): TokenType => {\n switch (graphTokenType) {\n case 'ERC20':\n return TokenType.ERC20;\n case 'ERC721':\n return TokenType.ERC721;\n case 'ERC1155':\n return TokenType.ERC1155;\n }\n};\n\nexport const formatSerializedToken = (\n graphToken: GraphTokenV2 | GraphTokenV3,\n): TokenData => {\n return serializeTokenData(\n graphToken.tokenAddress,\n graphTokenTypeToEngineTokenType(graphToken.tokenType),\n graphToken.tokenSubID,\n );\n};\n\nexport const formatPreImage = (\n graphPreImage: GraphCommitmentPreimageV2 | GraphCommitmentPreimageV3,\n): PreImage => {\n return serializePreImage(\n graphPreImage.npk,\n formatSerializedToken(graphPreImage.token),\n BigInt(graphPreImage.value),\n );\n};\n\nexport const formatTo16Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_128, prefix);\n};\n\nexport const formatTo32Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_256, prefix);\n};\n\nexport const bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n"]}
1
+ {"version":3,"file":"shared-formatters.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/shared-formatters.ts"],"names":[],"mappings":";;;AAAA,iDAQuB;AAYhB,MAAM,+BAA+B,GAAG,CAC7C,cAAmD,EACxC,EAAE;IACb,QAAQ,cAAc,EAAE;QACtB,KAAK,OAAO;YACV,OAAO,yBAAS,CAAC,KAAK,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,yBAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,yBAAS,CAAC,OAAO,CAAC;KAC5B;AACH,CAAC,CAAC;AAXW,QAAA,+BAA+B,mCAW1C;AAEK,MAAM,qBAAqB,GAAG,CACnC,UAAuC,EAC5B,EAAE;IACb,OAAO,IAAA,kCAAkB,EACvB,UAAU,CAAC,YAAY,EACvB,IAAA,uCAA+B,EAAC,UAAU,CAAC,SAAS,CAAC,EACrD,UAAU,CAAC,UAAU,CACtB,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEK,MAAM,cAAc,GAAG,CAC5B,aAAoE,EAC1D,EAAE;IACZ,OAAO,IAAA,iCAAiB,EACtB,aAAa,CAAC,GAAG,EACjB,IAAA,6BAAqB,EAAC,aAAa,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,0BAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,0BAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,YAAoB,EAAU,EAAE;IAChE,OAAO,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B","sourcesContent":["import {\n ByteLength,\n PreImage,\n TokenData,\n TokenType,\n ByteUtils,\n serializePreImage,\n serializeTokenData,\n} from 'dop-engine-v5';\nimport {\n TokenType as GraphTokenTypeV2,\n Token as GraphTokenV2,\n CommitmentPreimage as GraphCommitmentPreimageV2,\n} from './V2/graphql';\nimport {\n TokenType as GraphTokenTypeV3,\n Token as GraphTokenV3,\n CommitmentPreimage as GraphCommitmentPreimageV3,\n} from './V3/graphql';\n\nexport const graphTokenTypeToEngineTokenType = (\n graphTokenType: GraphTokenTypeV2 | GraphTokenTypeV3,\n): TokenType => {\n switch (graphTokenType) {\n case 'ERC20':\n return TokenType.ERC20;\n case 'ERC721':\n return TokenType.ERC721;\n case 'ERC1155':\n return TokenType.ERC1155;\n }\n};\n\nexport const formatSerializedToken = (\n graphToken: GraphTokenV2 | GraphTokenV3,\n): TokenData => {\n return serializeTokenData(\n graphToken.tokenAddress,\n graphTokenTypeToEngineTokenType(graphToken.tokenType),\n graphToken.tokenSubID,\n );\n};\n\nexport const formatPreImage = (\n graphPreImage: GraphCommitmentPreimageV2 | GraphCommitmentPreimageV3,\n): PreImage => {\n return serializePreImage(\n graphPreImage.npk,\n formatSerializedToken(graphPreImage.token),\n BigInt(graphPreImage.value),\n );\n};\n\nexport const formatTo16Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_128, prefix);\n};\n\nexport const formatTo32Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_256, prefix);\n};\n\nexport const bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database } from 'dop-engine-v3';
1
+ import { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database } from 'dop-engine-v5';
2
2
  export declare const parseDopTokenAddress: (tokenAddress: string) => string;
3
3
  export declare const getRandomBytes: (length: number) => string;
4
4
  export declare const bytesToHex: (bytes: Uint8Array) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/services/dop/util/bytes.ts"],"names":[],"mappings":";;;AAAA,iDAMuB;AAcd,2FAnBP,0BAAU,OAmBO;AAAE,0FAlBnB,yBAAS,OAkBmB;AAAE,+FAjB9B,8BAAc,OAiB8B;AAAE,6FAhB9C,4BAAY,OAgB8C;AAAE,yFAf5D,wBAAQ,OAe4D;AAZ/D,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAU,EAAE;IACnE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,0BAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEK,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,OAAO,yBAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAU,EAAE;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB","sourcesContent":["import {\n ByteLength,\n ByteUtils,\n fromUTF8String,\n toUTF8String,\n Database,\n} from 'dop-engine-v3';\n\nexport const parseDopTokenAddress = (tokenAddress: string): string => {\n return ByteUtils.formatToByteLength(tokenAddress, ByteLength.Address, true);\n};\n\nexport const getRandomBytes = (length: number): string => {\n return ByteUtils.randomHex(length);\n};\n\nexport const bytesToHex = (bytes: Uint8Array): string => {\n return Buffer.from(bytes).toString('hex');\n};\n\nexport { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database };\n"]}
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/services/dop/util/bytes.ts"],"names":[],"mappings":";;;AAAA,iDAMuB;AAcd,2FAnBP,0BAAU,OAmBO;AAAE,0FAlBnB,yBAAS,OAkBmB;AAAE,+FAjB9B,8BAAc,OAiB8B;AAAE,6FAhB9C,4BAAY,OAgB8C;AAAE,yFAf5D,wBAAQ,OAe4D;AAZ/D,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAU,EAAE;IACnE,OAAO,yBAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,0BAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEK,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,OAAO,yBAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAU,EAAE;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB","sourcesContent":["import {\n ByteLength,\n ByteUtils,\n fromUTF8String,\n toUTF8String,\n Database,\n} from 'dop-engine-v5';\n\nexport const parseDopTokenAddress = (tokenAddress: string): string => {\n return ByteUtils.formatToByteLength(tokenAddress, ByteLength.Address, true);\n};\n\nexport const getRandomBytes = (length: number): string => {\n return ByteUtils.randomHex(length);\n};\n\nexport const bytesToHex = (bytes: Uint8Array): string => {\n return Buffer.from(bytes).toString('hex');\n};\n\nexport { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database };\n"]}
@@ -1,5 +1,5 @@
1
- import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from 'dop-engine-v3';
2
- import { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodels-v3';
1
+ import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from 'dop-engine-v5';
2
+ import { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodels-v5';
3
3
  export declare const verifyBroadcasterSignature: (signature: string | Uint8Array, data: string | Uint8Array, signingKey: Uint8Array) => Promise<boolean>;
4
4
  export declare const encryptDataWithSharedKey: (data: object, externalPubKey: Uint8Array) => Promise<EncryptDataWithSharedKeyResponse>;
5
5
  export declare const decryptAESGCM256: (encryptedData: EncryptedData, sharedKey: Uint8Array) => object | null;
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/dop/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,iDAQuB;AAkFrB,6GAxFA,4CAA4B,OAwFA;AAC5B,gHAxFA,+CAA+B,OAwFA;AAE/B,oGAzFA,mCAAmB,OAyFA;AAnFrB,mCAAyC;AACzC,+BAAiC;AACjC,mCAA8C;AAC9C,yDAAkE;AAClE,uCAA0C;AAEnC,MAAM,0BAA0B,GAAG,CACxC,SAA8B,EAC9B,IAAyB,EACzB,UAAsB,EACJ,EAAE;IACpB,OAAO,IAAA,6BAAa,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,0BAA0B,8BAMrC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAY,EACZ,cAA0B,EACiB,EAAE;IAC7C,MAAM,aAAa,GAAG,yBAAS,CAAC,gBAAgB,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,sBAAsB,GAAG,MAAM,IAAA,mCAAmB,EAAC,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,yBAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,aAA4B,EAC5B,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,+CAA+B,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEF;;;;;GAKG;AACI,MAAM,MAAM,GAAG,KAAK,EACzB,MAAc,EACd,IAAY,EACZ,UAAkB,EACD,EAAE;IACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,yBAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,yBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,IAAI,GAAwB,CAAC;IAC7B,IAAI,uBAAa,EAAE;QACjB,GAAG,GAAG,MAAM,IAAA,eAAQ,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;SAAM;QACL,GAAG,GAAG,MAAM,IAAA,gBAAS,EAAC,eAAU,CAAC,CAC/B,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;IACD,OAAO,yBAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AA/BW,QAAA,MAAM,UA+BjB","sourcesContent":["import * as ed from '@noble/ed25519';\nimport {\n ByteUtils,\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n getPublicViewingKey,\n verifyED25519,\n EncryptedData,\n ViewingKeyPair,\n} from 'dop-engine-v3';\nimport { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodels-v3';\nimport { getRandomBytes } from './bytes';\nimport { promisify } from 'util';\nimport { pbkdf2 as NodePbkdf2 } from 'crypto';\nimport { pbkdf2 as JSpbkdf2 } from 'ethereum-cryptography/pbkdf2';\nimport { isReactNative } from './runtime';\n\nexport const verifyBroadcasterSignature = (\n signature: string | Uint8Array,\n data: string | Uint8Array,\n signingKey: Uint8Array,\n): Promise<boolean> => {\n return verifyED25519(data, signature, signingKey);\n};\n\nexport const encryptDataWithSharedKey = async (\n data: object,\n externalPubKey: Uint8Array,\n): Promise<EncryptDataWithSharedKeyResponse> => {\n const randomPrivKey = ByteUtils.hexStringToBytes(getRandomBytes(32));\n const randomPubKeyUint8Array = await getPublicViewingKey(randomPrivKey);\n const randomPubKey = ByteUtils.hexlify(randomPubKeyUint8Array);\n const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);\n const encryptedData = encryptJSONDataWithSharedKey(data, sharedKey);\n return { encryptedData, randomPubKey, sharedKey };\n};\n\nexport const decryptAESGCM256 = (\n encryptedData: EncryptedData,\n sharedKey: Uint8Array,\n): object | null => {\n return tryDecryptJSONDataWithSharedKey(encryptedData, sharedKey);\n};\n\nexport const encryptAESGCM256 = (\n data: object,\n sharedKey: Uint8Array,\n): EncryptedData => {\n return encryptJSONDataWithSharedKey(data, sharedKey);\n};\n\n/**\n * Calculates PBKDF2 hash\n * @param secret - input\n * @param salt - salt\n * @param iterations - rounds\n */\nexport const pbkdf2 = async (\n secret: string,\n salt: string,\n iterations: number,\n): Promise<string> => {\n const secretBuffer = Buffer.from(secret, 'utf-8');\n const secretFormatted = new Uint8Array(ByteUtils.arrayify(secretBuffer));\n const saltFormatted = new Uint8Array(ByteUtils.arrayify(salt));\n\n const keyLength = 32; // Bytes\n const digest = 'sha256';\n\n let key: Uint8Array | Buffer;\n if (isReactNative) {\n key = await JSpbkdf2(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n } else {\n key = await promisify(NodePbkdf2)(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n }\n return ByteUtils.hexlify(key);\n};\n\nexport {\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n EncryptedData,\n getPublicViewingKey,\n ViewingKeyPair,\n};\n"]}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/dop/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,iDAQuB;AAkFrB,6GAxFA,4CAA4B,OAwFA;AAC5B,gHAxFA,+CAA+B,OAwFA;AAE/B,oGAzFA,mCAAmB,OAyFA;AAnFrB,mCAAyC;AACzC,+BAAiC;AACjC,mCAA8C;AAC9C,yDAAkE;AAClE,uCAA0C;AAEnC,MAAM,0BAA0B,GAAG,CACxC,SAA8B,EAC9B,IAAyB,EACzB,UAAsB,EACJ,EAAE;IACpB,OAAO,IAAA,6BAAa,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,0BAA0B,8BAMrC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAY,EACZ,cAA0B,EACiB,EAAE;IAC7C,MAAM,aAAa,GAAG,yBAAS,CAAC,gBAAgB,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,sBAAsB,GAAG,MAAM,IAAA,mCAAmB,EAAC,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,yBAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,aAA4B,EAC5B,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,+CAA+B,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEF;;;;;GAKG;AACI,MAAM,MAAM,GAAG,KAAK,EACzB,MAAc,EACd,IAAY,EACZ,UAAkB,EACD,EAAE;IACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,yBAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,yBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,IAAI,GAAwB,CAAC;IAC7B,IAAI,uBAAa,EAAE;QACjB,GAAG,GAAG,MAAM,IAAA,eAAQ,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;SAAM;QACL,GAAG,GAAG,MAAM,IAAA,gBAAS,EAAC,eAAU,CAAC,CAC/B,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;IACD,OAAO,yBAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AA/BW,QAAA,MAAM,UA+BjB","sourcesContent":["import * as ed from '@noble/ed25519';\nimport {\n ByteUtils,\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n getPublicViewingKey,\n verifyED25519,\n EncryptedData,\n ViewingKeyPair,\n} from 'dop-engine-v5';\nimport { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodels-v5';\nimport { getRandomBytes } from './bytes';\nimport { promisify } from 'util';\nimport { pbkdf2 as NodePbkdf2 } from 'crypto';\nimport { pbkdf2 as JSpbkdf2 } from 'ethereum-cryptography/pbkdf2';\nimport { isReactNative } from './runtime';\n\nexport const verifyBroadcasterSignature = (\n signature: string | Uint8Array,\n data: string | Uint8Array,\n signingKey: Uint8Array,\n): Promise<boolean> => {\n return verifyED25519(data, signature, signingKey);\n};\n\nexport const encryptDataWithSharedKey = async (\n data: object,\n externalPubKey: Uint8Array,\n): Promise<EncryptDataWithSharedKeyResponse> => {\n const randomPrivKey = ByteUtils.hexStringToBytes(getRandomBytes(32));\n const randomPubKeyUint8Array = await getPublicViewingKey(randomPrivKey);\n const randomPubKey = ByteUtils.hexlify(randomPubKeyUint8Array);\n const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);\n const encryptedData = encryptJSONDataWithSharedKey(data, sharedKey);\n return { encryptedData, randomPubKey, sharedKey };\n};\n\nexport const decryptAESGCM256 = (\n encryptedData: EncryptedData,\n sharedKey: Uint8Array,\n): object | null => {\n return tryDecryptJSONDataWithSharedKey(encryptedData, sharedKey);\n};\n\nexport const encryptAESGCM256 = (\n data: object,\n sharedKey: Uint8Array,\n): EncryptedData => {\n return encryptJSONDataWithSharedKey(data, sharedKey);\n};\n\n/**\n * Calculates PBKDF2 hash\n * @param secret - input\n * @param salt - salt\n * @param iterations - rounds\n */\nexport const pbkdf2 = async (\n secret: string,\n salt: string,\n iterations: number,\n): Promise<string> => {\n const secretBuffer = Buffer.from(secret, 'utf-8');\n const secretFormatted = new Uint8Array(ByteUtils.arrayify(secretBuffer));\n const saltFormatted = new Uint8Array(ByteUtils.arrayify(salt));\n\n const keyLength = 32; // Bytes\n const digest = 'sha256';\n\n let key: Uint8Array | Buffer;\n if (isReactNative) {\n key = await JSpbkdf2(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n } else {\n key = await promisify(NodePbkdf2)(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n }\n return ByteUtils.hexlify(key);\n};\n\nexport {\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n EncryptedData,\n getPublicViewingKey,\n ViewingKeyPair,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"balances-live.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/wallets/__tests__/balances-live.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,6DAIsC;AACtC,6DAKsC;AACtC,wCAA8D;AAC9D,0CAAkE;AAClE,6DAK6B;AAC7B,4DAAwD;AAExD,+DAA6E;AAC7E,8CAA8C;AAE9C,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,IAAI,WAAmB,CAAC;AAExB,MAAM,WAAW,GAAG,IAAA,gCAAkB,GAAE,CAAC;AAEzC,MAAM,WAAW,GAAG,iCAAW,CAAC,eAAe,CAAC;AAChD,MAAM,KAAK,GAAU,oCAAc,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,aAAa,GAAG,MAAM,IAAA,yBAAe,EACzC,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,+BAAS,EAAC,aAAa,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;QACD,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;QAE/B,MAAM,IAAA,4BAAY,EAChB,uDAA0C,EAC1C,WAAW,EACX,KAAM,CACP,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,mEAAmE;QACnE,IAAA,kBAAS,GAAE,CAAC,mBAAmB,CAC7B,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAA,2CAA8B,GAAE;YAChC,yDAAyD;YACzD,IAAA,2CAA8B,GAAE;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,UAAU,GAAG;QAC7G,IAAI,CAAC,IAAA,sBAAQ,GAAE,EAAE;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;SACR;QAED,MAAM,IAAA,8CAAmC,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,WAAW,EACX,KAAK,EACL,KAAK,CACN,CAAC;QAEF,wFAAwF;QACxF,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 pollUntilTXIDMerkletreeScanned,\n pollUntilUTXOMerkletreeScanned,\n} from '../../../../tests/setup.test';\nimport { createDopWallet, fullWalletForID } from '../wallets';\nimport { rescanFullUTXOMerkletreesAndWallets } from '../balances';\nimport {\n Chain,\n NETWORK_CONFIG,\n NetworkName,\n isDefined,\n} from 'dop-sharedmodels-v3';\nimport { loadProvider } from '../../core/load-provider';\nimport { getTXIDMerkletreeForNetwork } from '../../core/merkletree';\nimport { getTestTXIDVersion, isV2Test } from '../../../../tests/helper.test';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet dopWalletID: string;\n\nconst txidVersion = getTestTXIDVersion();\n\nconst networkName = NetworkName.EthereumSepolia;\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n dopWalletID = dopWalletInfo.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 Promise.all([\n pollUntilUTXOMerkletreeScanned(),\n // Enable this when running on a network supporting PPOI:\n pollUntilTXIDMerkletreeScanned(),\n ]);\n });\n\n after(async () => {\n await closeTestEngine();\n });\n\n it('[V2] Should run live balance fetch, transaction history scan, and POI status info scan', async function run() {\n if (!isV2Test()) {\n this.skip();\n return;\n }\n\n await rescanFullUTXOMerkletreesAndWallets(chain, [dopWalletID]);\n\n const wallet = fullWalletForID(dopWalletID);\n const balances = await wallet.getTokenBalances(\n txidVersion,\n chain,\n false, // onlySpendable\n );\n\n // Note: dopWallet 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/dop/wallets/__tests__/balances-live.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,6DAIsC;AACtC,6DAKsC;AACtC,wCAA8D;AAC9D,0CAAkE;AAClE,6DAK6B;AAC7B,4DAAwD;AAExD,+DAA6E;AAC7E,8CAA8C;AAE9C,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,IAAI,WAAmB,CAAC;AAExB,MAAM,WAAW,GAAG,IAAA,gCAAkB,GAAE,CAAC;AAEzC,MAAM,WAAW,GAAG,iCAAW,CAAC,eAAe,CAAC;AAChD,MAAM,KAAK,GAAU,oCAAc,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,aAAa,GAAG,MAAM,IAAA,yBAAe,EACzC,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,+BAAS,EAAC,aAAa,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;QACD,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;QAE/B,MAAM,IAAA,4BAAY,EAChB,uDAA0C,EAC1C,WAAW,EACX,KAAM,CACP,CAAC;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,mEAAmE;QACnE,IAAA,kBAAS,GAAE,CAAC,mBAAmB,CAC7B,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAA,2CAA8B,GAAE;YAChC,yDAAyD;YACzD,IAAA,2CAA8B,GAAE;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,UAAU,GAAG;QAC7G,IAAI,CAAC,IAAA,sBAAQ,GAAE,EAAE;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;SACR;QAED,MAAM,IAAA,8CAAmC,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC5C,WAAW,EACX,KAAK,EACL,KAAK,CACN,CAAC;QAEF,wFAAwF;QACxF,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 pollUntilTXIDMerkletreeScanned,\n pollUntilUTXOMerkletreeScanned,\n} from '../../../../tests/setup.test';\nimport { createDopWallet, fullWalletForID } from '../wallets';\nimport { rescanFullUTXOMerkletreesAndWallets } from '../balances';\nimport {\n Chain,\n NETWORK_CONFIG,\n NetworkName,\n isDefined,\n} from 'dop-sharedmodels-v5';\nimport { loadProvider } from '../../core/load-provider';\nimport { getTXIDMerkletreeForNetwork } from '../../core/merkletree';\nimport { getTestTXIDVersion, isV2Test } from '../../../../tests/helper.test';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet dopWalletID: string;\n\nconst txidVersion = getTestTXIDVersion();\n\nconst networkName = NetworkName.EthereumSepolia;\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n dopWalletID = dopWalletInfo.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 Promise.all([\n pollUntilUTXOMerkletreeScanned(),\n // Enable this when running on a network supporting PPOI:\n pollUntilTXIDMerkletreeScanned(),\n ]);\n });\n\n after(async () => {\n await closeTestEngine();\n });\n\n it('[V2] Should run live balance fetch, transaction history scan, and POI status info scan', async function run() {\n if (!isV2Test()) {\n this.skip();\n return;\n }\n\n await rescanFullUTXOMerkletreesAndWallets(chain, [dopWalletID]);\n\n const wallet = fullWalletForID(dopWalletID);\n const balances = await wallet.getTokenBalances(\n txidVersion,\n chain,\n false, // onlySpendable\n );\n\n // Note: dopWallet 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 +1 @@
1
- {"version":3,"file":"balances-update.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/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 DopWallet,\n TokenBalances,\n Chain,\n ChainType,\n getTokenDataERC20,\n} from 'dop-engine-v3';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n NETWORK_CONFIG,\n NetworkName,\n DopBalancesEvent,\n DopWalletBalanceBucket,\n isDefined,\n} from 'dop-sharedmodels-v3';\nimport {\n onBalancesUpdate,\n setOnBalanceUpdateCallback,\n} from '../balance-update';\nimport { createDopWallet, 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 { getTestTXIDVersion } from '../../../../tests/helper.test';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_TOKEN_ADDRESS = '0x012536';\n\nconst txidVersion = getTestTXIDVersion();\n\nlet wallet: DopWallet;\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.EthereumSepolia,\n 10_000, // pollingInterval\n );\n const { chain } = NETWORK_CONFIG[NetworkName.EthereumSepolia];\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n wallet = fullWalletForID(dopWalletInfo.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 DopWallet,\n 'getTokenBalancesByTxidVersion',\n ).resolves(balances);\n walletBalancesByBucketStub = Sinon.stub(\n DopWallet.prototype,\n 'getTokenBalancesByBucket',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n ).resolves({ Spendable: balances } as any);\n walletTokenBalanceStub = Sinon.stub(\n DopWallet.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(txidVersion, 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!: DopBalancesEvent;\n const callback = (balancesFormatted: DopBalancesEvent) => {\n formattedBalances = balancesFormatted;\n };\n setOnBalanceUpdateCallback(callback);\n const chain: Chain = { type: ChainType.EVM, id: 80001 };\n await expect(onBalancesUpdate(txidVersion, wallet, chain)).to.be.fulfilled;\n // TODO: enable this assertion once we have PPOI on PolygonMumbai\n // because `onBalancesUpdate` only runs it if PPOI is required:\n // expect(walletBalancesByBucketStub.calledOnce).to.be.true;\n expect(formattedBalances.balanceBucket).to.deep.equal(\n DopWalletBalanceBucket.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});\n"]}
1
+ {"version":3,"file":"balances-update.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/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 DopWallet,\n TokenBalances,\n Chain,\n ChainType,\n getTokenDataERC20,\n} from 'dop-engine-v5';\nimport Sinon, { SinonStub } from 'sinon';\nimport {\n NETWORK_CONFIG,\n NetworkName,\n DopBalancesEvent,\n DopWalletBalanceBucket,\n isDefined,\n} from 'dop-sharedmodels-v5';\nimport {\n onBalancesUpdate,\n setOnBalanceUpdateCallback,\n} from '../balance-update';\nimport { createDopWallet, 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 { getTestTXIDVersion } from '../../../../tests/helper.test';\nimport { getEngine } from '../../core/engine';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst MOCK_TOKEN_ADDRESS = '0x012536';\n\nconst txidVersion = getTestTXIDVersion();\n\nlet wallet: DopWallet;\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n await loadProvider(\n MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA,\n NetworkName.EthereumSepolia,\n 10_000, // pollingInterval\n );\n const { chain } = NETWORK_CONFIG[NetworkName.EthereumSepolia];\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n getEngine().scanContractHistory(\n chain,\n undefined, // walletIdFilter\n );\n wallet = fullWalletForID(dopWalletInfo.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 DopWallet,\n 'getTokenBalancesByTxidVersion',\n ).resolves(balances);\n walletBalancesByBucketStub = Sinon.stub(\n DopWallet.prototype,\n 'getTokenBalancesByBucket',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n ).resolves({ Spendable: balances } as any);\n walletTokenBalanceStub = Sinon.stub(\n DopWallet.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(txidVersion, 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!: DopBalancesEvent;\n const callback = (balancesFormatted: DopBalancesEvent) => {\n formattedBalances = balancesFormatted;\n };\n setOnBalanceUpdateCallback(callback);\n const chain: Chain = { type: ChainType.EVM, id: 80001 };\n await expect(onBalancesUpdate(txidVersion, wallet, chain)).to.be.fulfilled;\n // TODO: enable this assertion once we have PPOI on PolygonMumbai\n // because `onBalancesUpdate` only runs it if PPOI is required:\n // expect(walletBalancesByBucketStub.calledOnce).to.be.true;\n expect(formattedBalances.balanceBucket).to.deep.equal(\n DopWalletBalanceBucket.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});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"balances.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/wallets/__tests__/balances.test.ts"],"names":[],"mappings":";;;;;AAAA,iDAAqD;AACrD,gDAAwB;AACxB,wEAA8C;AAC9C,kDAAyC;AACzC,6DAGsC;AACtC,6DAA+E;AAC/E,wCAA6C;AAC7C,0CAGqB;AACrB,6DAAkE;AAElE,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,IAAI,cAAyB,CAAC;AAC9B,IAAI,kBAA6B,CAAC;AAClC,IAAI,cAAyB,CAAC;AAC9B,IAAI,kBAA6B,CAAC;AAElC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,IAAA,2BAAc,GAAE,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM,IAAA,yBAAe,EACzC,mCAAsB,EACtB,0BAAa,EACb,SAAS,CACV,CAAC;QACF,IAAI,CAAC,IAAA,+BAAS,EAAC,aAAa,CAAC,EAAE;YAC7B,OAAO;SACR;QACD,cAAc,GAAG,eAAK,CAAC,IAAI,CACzB,yBAAS,CAAC,SAAS,EACnB,iBAAiB,CAClB,CAAC,QAAQ,EAAE,CAAC;QAEb,cAAc,GAAG,eAAK,CAAC,IAAI,CACzB,yBAAS,CAAC,SAAS,EACnB,qBAAqB,CACtB,CAAC,QAAQ,EAAE,CAAC;QAEb,kBAAkB,GAAG,eAAK,CAAC,IAAI,CAC7B,yBAAS,CAAC,SAAS,EACnB,sCAAsC,CACvC,CAAC,QAAQ,EAAE,CAAC;QAEb,kBAAkB,GAAG,eAAK,CAAC,IAAI,CAC7B,yBAAS,CAAC,SAAS,EACnB,qCAAqC,CACtC,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,YAAY,EAAE,CAAC;QAC9B,cAAc,CAAC,YAAY,EAAE,CAAC;QAC9B,kBAAkB,CAAC,YAAY,EAAE,CAAC;QAClC,kBAAkB,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,cAAc,CAAC,OAAO,EAAE,CAAC;QACzB,cAAc,CAAC,OAAO,EAAE,CAAC;QACzB,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAC7B,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAA,4BAAe,GAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,KAAK,GAAU,EAAE,IAAI,EAAE,+BAAS,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAA,0BAAe,EACpC,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,KAAK,GAAU,EAAE,IAAI,EAAE,+BAAS,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAA,8CAAmC,EACxD,KAAK,EACL,SAAS,CACV,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACjC,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { DopEngine, DopWallet } from 'dop-engine-v3';\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 { createDopWallet } from '../wallets';\nimport {\n refreshBalances,\n rescanFullUTXOMerkletreesAndWallets,\n} from '../balances';\nimport { Chain, ChainType, isDefined } from 'dop-sharedmodels-v3';\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n return;\n }\n walletScanStub = Sinon.stub(\n DopWallet.prototype,\n 'decryptBalances',\n ).resolves();\n\n engineScanStub = Sinon.stub(\n DopEngine.prototype,\n 'scanContractHistory',\n ).resolves();\n\n walletFullScanStub = Sinon.stub(\n DopWallet.prototype,\n 'fullRedecryptBalancesAllTXIDVersions',\n ).resolves();\n\n engineFullScanStub = Sinon.stub(\n DopEngine.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"]}
1
+ {"version":3,"file":"balances.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/wallets/__tests__/balances.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { DopEngine, DopWallet } from 'dop-engine-v5';\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 { createDopWallet } from '../wallets';\nimport {\n refreshBalances,\n rescanFullUTXOMerkletreesAndWallets,\n} from '../balances';\nimport { Chain, ChainType, isDefined } from 'dop-sharedmodels-v5';\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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n return;\n }\n walletScanStub = Sinon.stub(\n DopWallet.prototype,\n 'decryptBalances',\n ).resolves();\n\n engineScanStub = Sinon.stub(\n DopEngine.prototype,\n 'scanContractHistory',\n ).resolves();\n\n walletFullScanStub = Sinon.stub(\n DopWallet.prototype,\n 'fullRedecryptBalancesAllTXIDVersions',\n ).resolves();\n\n engineFullScanStub = Sinon.stub(\n DopEngine.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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/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 createDopWallet,\n createViewOnlyDopWallet,\n fullWalletForID,\n getDopAddress,\n getWalletMnemonic,\n getWalletShareableViewingKey,\n loadWalletByID,\n unloadWalletByID,\n validateDopAddress,\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 { DopWallet } from 'dop-engine-v3';\nimport { NetworkName, isDefined } from 'dop-sharedmodels-v3';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet wallet: DopWallet;\n\ndescribe('wallets', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n { [NetworkName.Ethereum]: 0, [NetworkName.Polygon]: 2 }, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error(`Could not create wallet`);\n }\n wallet = fullWalletForID(dopWalletInfo.id);\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should create view only wallet', async () => {\n const dopWalletInfo = await createViewOnlyDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.generateShareableViewingKey(),\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Could not create view-only wallet');\n }\n const viewOnlyWallet = viewOnlyWalletForID(dopWalletInfo.id);\n expect(viewOnlyWallet).to.not.be.undefined;\n expect(dopWalletInfo.dopAddress).to.equal(wallet.getAddress());\n }).timeout(60_000);\n\n it('Should get wallet address', () => {\n const addressAny = getDopAddress(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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n undefined, // creationBlockNumbers\n );\n expect(dopWalletInfo.dopAddress).to.be.a('string');\n expect(dopWalletInfo.id).to.equal(wallet.id);\n\n const loadWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n dopWalletInfo.id,\n false, // isViewOnlyWallet\n );\n expect(loadWalletInfo.dopAddress).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 dopWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.id,\n false, // isViewOnlyWallet\n );\n expect(dopWalletInfo.id).to.equal(wallet.id);\n expect(dopWalletInfo.dopAddress).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 DOP wallet');\n });\n\n it('Should validate DOP addresses', async () => {\n expect(validateDopAddress('0x9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(validateDopAddress('9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(\n validateDopAddress(\n 'rgtestropsten1qyglk9smgj240x2xmj2laj7p5hexw0a30vvdqnv9gk020nsd7yzgwkgce9x',\n ),\n ).to.be.false;\n expect(\n validateDopAddress(\n '0zk1q8hxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kfrv7j6fe3z53llhxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kg0zpzts',\n ),\n ).to.be.true;\n expect(\n validateDopAddress(\n '0zk1qyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqunpd9kxwatwqyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhshkca',\n ),\n ).to.be.true;\n });\n});\n"]}
1
+ {"version":3,"file":"wallets.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/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 createDopWallet,\n createViewOnlyDopWallet,\n fullWalletForID,\n getDopAddress,\n getWalletMnemonic,\n getWalletShareableViewingKey,\n loadWalletByID,\n unloadWalletByID,\n validateDopAddress,\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 { DopWallet } from 'dop-engine-v5';\nimport { NetworkName, isDefined } from 'dop-sharedmodels-v5';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nlet wallet: DopWallet;\n\ndescribe('wallets', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n { [NetworkName.Ethereum]: 0, [NetworkName.Polygon]: 2 }, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error(`Could not create wallet`);\n }\n wallet = fullWalletForID(dopWalletInfo.id);\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should create view only wallet', async () => {\n const dopWalletInfo = await createViewOnlyDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.generateShareableViewingKey(),\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Could not create view-only wallet');\n }\n const viewOnlyWallet = viewOnlyWalletForID(dopWalletInfo.id);\n expect(viewOnlyWallet).to.not.be.undefined;\n expect(dopWalletInfo.dopAddress).to.equal(wallet.getAddress());\n }).timeout(60_000);\n\n it('Should get wallet address', () => {\n const addressAny = getDopAddress(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 dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC_2,\n undefined, // creationBlockNumbers\n );\n expect(dopWalletInfo.dopAddress).to.be.a('string');\n expect(dopWalletInfo.id).to.equal(wallet.id);\n\n const loadWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n dopWalletInfo.id,\n false, // isViewOnlyWallet\n );\n expect(loadWalletInfo.dopAddress).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 dopWalletInfo = await loadWalletByID(\n MOCK_DB_ENCRYPTION_KEY,\n wallet.id,\n false, // isViewOnlyWallet\n );\n expect(dopWalletInfo.id).to.equal(wallet.id);\n expect(dopWalletInfo.dopAddress).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 DOP wallet');\n });\n\n it('Should validate DOP addresses', async () => {\n expect(validateDopAddress('0x9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(validateDopAddress('9E9F988356f46744Ee0374A17a5Fa1a3A3cC3777'))\n .to.be.false;\n expect(\n validateDopAddress(\n 'rgtestropsten1qyglk9smgj240x2xmj2laj7p5hexw0a30vvdqnv9gk020nsd7yzgwkgce9x',\n ),\n ).to.be.false;\n expect(\n validateDopAddress(\n '0zk1q8hxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kfrv7j6fe3z53llhxknrs97q8pjxaagwthzc0df99rzmhl2xnlxmgv9akv32sua0kg0zpzts',\n ),\n ).to.be.true;\n expect(\n validateDopAddress(\n '0zk1qyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqunpd9kxwatwqyqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhshkca',\n ),\n ).to.be.true;\n });\n});\n"]}
@@ -1,5 +1,5 @@
1
- import { Chain, AbstractWallet, TokenType, TokenBalances, NFTTokenData, getTokenDataHash, getTokenDataNFT, getTokenDataERC20 } from 'dop-engine-v3';
2
- import { DopBalancesEvent, DopNFTAmount, DopERC20Amount, NetworkName, TXIDVersion, NFTTokenType } from 'dop-sharedmodels-v3';
1
+ import { Chain, AbstractWallet, TokenType, TokenBalances, NFTTokenData, getTokenDataHash, getTokenDataNFT, getTokenDataERC20 } from 'dop-engine-v5';
2
+ import { DopBalancesEvent, DopNFTAmount, DopERC20Amount, NetworkName, TXIDVersion, NFTTokenType } from 'dop-sharedmodels-v5';
3
3
  export type BalancesUpdatedCallback = (balancesEvent: DopBalancesEvent) => void;
4
4
  export declare const setOnBalanceUpdateCallback: (callback?: BalancesUpdatedCallback) => void;
5
5
  export declare const getSerializedERC20Balances: (balances: TokenBalances) => DopERC20Amount[];
@@ -1 +1 @@
1
- {"version":3,"file":"balance-update.js","sourceRoot":"","sources":["../../../../src/services/dop/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 'dop-engine-v3';\nimport {\n DopBalancesEvent,\n DopNFTAmount,\n DopERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n TXIDVersion,\n NFTTokenType,\n DopWalletBalanceBucket,\n isDefined,\n networkForChain,\n} from 'dop-sharedmodels-v3';\nimport { sendErrorMessage, sendMessage } from '../../../utils/logger';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { getEngine } from '../core/engine';\n\nexport type BalancesUpdatedCallback = (\n balancesEvent: DopBalancesEvent,\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): DopERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n return tokenHashes\n .filter(tokenHash => {\n return balances[tokenHash].tokenData.tokenType === TokenType.ERC20;\n })\n .map(dopBalanceAddress => {\n const erc20Balance: DopERC20Amount = {\n tokenAddress: parseDopTokenAddress(\n balances[dopBalanceAddress].tokenData.tokenAddress,\n ).toLowerCase(),\n amount: balances[dopBalanceAddress].balance,\n };\n return erc20Balance;\n });\n};\n\nexport const getSerializedNFTBalances = (\n balances: TokenBalances,\n): DopNFTAmount[] => {\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(dopBalanceAddress => {\n const balanceForToken = balances[dopBalanceAddress];\n const tokenData = balanceForToken.tokenData;\n const nftBalance: DopNFTAmount = {\n nftAddress: parseDopTokenAddress(\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): DopNFTAmount[] => {\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: DopNFTAmount = {\n nftAddress: parseDopTokenAddress(\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 txidVersion: TXIDVersion,\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 const network = networkForChain(chain);\n if (!network) {\n return;\n }\n\n const tokenBalancesByBucket = await wallet.getTokenBalancesByBucket(\n txidVersion,\n chain,\n );\n\n const balanceBuckets = Object.values(DopWalletBalanceBucket);\n\n balanceBuckets.forEach(balanceBucket => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = tokenBalancesByBucket[balanceBucket];\n\n if (!isDefined(tokenBalances)) {\n return;\n }\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: DopBalancesEvent = {\n txidVersion,\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n balanceBucket,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n });\n } catch (err) {\n\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 txidVersion: TXIDVersion,\n wallet: AbstractWallet,\n chain: Chain,\n) => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = await wallet.getTokenBalances(\n txidVersion,\n chain,\n false, // onlySpendable\n );\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: DopBalancesEvent = {\n txidVersion,\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n balanceBucket: DopWalletBalanceBucket.Spendable,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n txidVersion: TXIDVersion,\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 txidVersion,\n chain,\n onlySpendable,\n );\n const tokenBalances = getSerializedERC20Balances(balances);\n\n const matchingTokenBalance: Optional<DopERC20Amount> = 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 txidVersion: TXIDVersion,\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 txidVersion,\n chain,\n onlySpendable,\n );\n const nftBalances = getSerializedNFTBalances(balances);\n\n const matchingNFTBalance: Optional<DopNFTAmount> = 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/dop/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 'dop-engine-v5';\nimport {\n DopBalancesEvent,\n DopNFTAmount,\n DopERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n TXIDVersion,\n NFTTokenType,\n DopWalletBalanceBucket,\n isDefined,\n networkForChain,\n} from 'dop-sharedmodels-v5';\nimport { sendErrorMessage, sendMessage } from '../../../utils/logger';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { getEngine } from '../core/engine';\n\nexport type BalancesUpdatedCallback = (\n balancesEvent: DopBalancesEvent,\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): DopERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n return tokenHashes\n .filter(tokenHash => {\n return balances[tokenHash].tokenData.tokenType === TokenType.ERC20;\n })\n .map(dopBalanceAddress => {\n const erc20Balance: DopERC20Amount = {\n tokenAddress: parseDopTokenAddress(\n balances[dopBalanceAddress].tokenData.tokenAddress,\n ).toLowerCase(),\n amount: balances[dopBalanceAddress].balance,\n };\n return erc20Balance;\n });\n};\n\nexport const getSerializedNFTBalances = (\n balances: TokenBalances,\n): DopNFTAmount[] => {\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(dopBalanceAddress => {\n const balanceForToken = balances[dopBalanceAddress];\n const tokenData = balanceForToken.tokenData;\n const nftBalance: DopNFTAmount = {\n nftAddress: parseDopTokenAddress(\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): DopNFTAmount[] => {\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: DopNFTAmount = {\n nftAddress: parseDopTokenAddress(\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 txidVersion: TXIDVersion,\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 const network = networkForChain(chain);\n if (!network) {\n return;\n }\n\n const tokenBalancesByBucket = await wallet.getTokenBalancesByBucket(\n txidVersion,\n chain,\n );\n\n const balanceBuckets = Object.values(DopWalletBalanceBucket);\n\n balanceBuckets.forEach(balanceBucket => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = tokenBalancesByBucket[balanceBucket];\n\n if (!isDefined(tokenBalances)) {\n return;\n }\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: DopBalancesEvent = {\n txidVersion,\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n balanceBucket,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n });\n } catch (err) {\n\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 txidVersion: TXIDVersion,\n wallet: AbstractWallet,\n chain: Chain,\n) => {\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const tokenBalances = await wallet.getTokenBalances(\n txidVersion,\n chain,\n false, // onlySpendable\n );\n\n const erc20Amounts = getSerializedERC20Balances(tokenBalances);\n const nftAmounts = getNFTBalances(tokenBalances);\n\n const balancesEvent: DopBalancesEvent = {\n txidVersion,\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n balanceBucket: DopWalletBalanceBucket.Spendable,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n txidVersion: TXIDVersion,\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 txidVersion,\n chain,\n onlySpendable,\n );\n const tokenBalances = getSerializedERC20Balances(balances);\n\n const matchingTokenBalance: Optional<DopERC20Amount> = 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 txidVersion: TXIDVersion,\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 txidVersion,\n chain,\n onlySpendable,\n );\n const nftBalances = getSerializedNFTBalances(balances);\n\n const matchingNFTBalance: Optional<DopNFTAmount> = 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,4 +1,4 @@
1
- import { Chain } from 'dop-engine-v3';
1
+ import { Chain } from 'dop-engine-v5';
2
2
  export declare const refreshBalances: (chain: Chain, walletIdFilter: Optional<string[]>) => Promise<void>;
3
3
  export declare const rescanFullUTXOMerkletreesAndWallets: (chain: Chain, walletIdFilter: Optional<string[]>) => Promise<void>;
4
4
  export declare const resetFullTXIDMerkletreesV2: (chain: Chain) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balances.ts"],"names":[],"mappings":";;;AAEA,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;AAEK,MAAM,0BAA0B,GAAG,KAAK,EAC7C,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;KAChD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,kCAA0B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACpE;AACH,CAAC,CAAC;AATW,QAAA,0BAA0B,8BASrC","sourcesContent":["import { Chain } from 'dop-engine-v3';\nimport { TXIDVersion } from 'dop-sharedmodels-v3';\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\nexport const resetFullTXIDMerkletreesV2 = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullResetTXIDMerkletreesV2(chain);\n } catch (err) {\n throw reportAndSanitizeError(resetFullTXIDMerkletreesV2.name, err);\n }\n};\n"]}
1
+ {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balances.ts"],"names":[],"mappings":";;;AAEA,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;AAEK,MAAM,0BAA0B,GAAG,KAAK,EAC7C,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;KAChD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,kCAA0B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACpE;AACH,CAAC,CAAC;AATW,QAAA,0BAA0B,8BASrC","sourcesContent":["import { Chain } from 'dop-engine-v5';\nimport { TXIDVersion } from 'dop-sharedmodels-v5';\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\nexport const resetFullTXIDMerkletreesV2 = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullResetTXIDMerkletreesV2(chain);\n } catch (err) {\n throw reportAndSanitizeError(resetFullTXIDMerkletreesV2.name, err);\n }\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { DopWallet, AbstractWallet, AddressData, Commitment } from 'dop-engine-v3';
2
- import { DopWalletInfo, Chain } from 'dop-sharedmodels-v3';
1
+ import { DopWallet, AbstractWallet, AddressData, Commitment } from 'dop-engine-v5';
2
+ import { DopWalletInfo, Chain } from 'dop-sharedmodels-v5';
3
3
  export declare const awaitWalletScan: (walletID: string, chain: Chain) => Promise<unknown>;
4
4
  export declare const awaitMultipleWalletScans: (walletID: string, chain: Chain, numScans: number) => Promise<void>;
5
5
  export declare const walletForID: (id: string) => AbstractWallet;
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n ByteUtils,\n ViewOnlyWallet,\n Commitment,\n} from 'dop-engine-v3';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from 'dop-sharedmodels-v3';\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 }: WalletScannedEventData) =>\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 DOP wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof DopWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): DopWallet => {\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 DopWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ txidVersion, chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(txidVersion, wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\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 dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: Commitment,\n viewingPrivateKey: Uint8Array,\n chain: any,\n encryptionKey: string,\n mnemonic: string,\n index = 0,\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n dopWalletDerivationIndex ?? 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<DopWalletInfo> => {\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 createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\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 getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.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 getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\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 dop-engine-v3'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/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n ByteUtils,\n ViewOnlyWallet,\n Commitment,\n} from 'dop-engine-v5';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from 'dop-sharedmodels-v5';\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 }: WalletScannedEventData) =>\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 DOP wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof DopWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): DopWallet => {\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 DopWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ txidVersion, chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(txidVersion, wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\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 dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: Commitment,\n viewingPrivateKey: Uint8Array,\n chain: any,\n encryptionKey: string,\n mnemonic: string,\n index = 0,\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n dopWalletDerivationIndex ?? 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<DopWalletInfo> => {\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 createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\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 getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.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 getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\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 dop-engine-v3'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 +1 @@
1
- {"version":3,"file":"ethers-util.js","sourceRoot":"","sources":["../../../src/services/ethers/ethers-util.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAElC,MAAM,gBAAgB,GAAG,CAC9B,QAAgB,EAChB,eAAwB,EACxB,EAAE;IACF,OAAO,KAAK,wBAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B","sourcesContent":["import { Mnemonic } from 'dop-engine-v3';\n\nexport const mnemonicTo0xPKey = (\n mnemonic: string,\n derivationIndex?: number,\n) => {\n return `0x${Mnemonic.to0xPrivateKey(mnemonic, derivationIndex)}`;\n};\n"]}
1
+ {"version":3,"file":"ethers-util.js","sourceRoot":"","sources":["../../../src/services/ethers/ethers-util.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAElC,MAAM,gBAAgB,GAAG,CAC9B,QAAgB,EAChB,eAAwB,EACxB,EAAE;IACF,OAAO,KAAK,wBAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B","sourcesContent":["import { Mnemonic } from 'dop-engine-v5';\n\nexport const mnemonicTo0xPKey = (\n mnemonic: string,\n derivationIndex?: number,\n) => {\n return `0x${Mnemonic.to0xPrivateKey(mnemonic, derivationIndex)}`;\n};\n"]}