dop-wallet-v6 1.1.7 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
- package/dist/services/artifacts/artifact-downloader.js +20 -20
- package/dist/services/artifacts/artifact-downloader.js.map +1 -1
- package/dist/services/artifacts/artifact-hash.d.ts +1 -1
- package/dist/services/artifacts/artifact-hash.js +8 -8
- package/dist/services/artifacts/artifact-hash.js.map +1 -1
- package/dist/services/artifacts/artifact-util.d.ts +1 -1
- package/dist/services/artifacts/artifact-util.js +26 -18
- package/dist/services/artifacts/artifact-util.js.map +1 -1
- package/dist/services/artifacts/json/artifact-v2-hashes.json +65 -0
- package/dist/services/dop/core/artifacts.d.ts +3 -3
- package/dist/services/dop/core/artifacts.js +8 -6
- package/dist/services/dop/core/artifacts.js.map +1 -1
- package/dist/services/dop/core/engine.d.ts +2 -2
- package/dist/services/dop/core/engine.js +16 -13
- package/dist/services/dop/core/engine.js.map +1 -1
- package/dist/services/dop/core/prover.d.ts +1 -1
- package/dist/services/dop/core/prover.js +2 -2
- package/dist/services/dop/core/prover.js.map +1 -1
- package/dist/services/dop/core/providers.d.ts +3 -3
- package/dist/services/dop/core/providers.js +16 -16
- package/dist/services/dop/core/providers.js.map +1 -1
- package/dist/services/dop/core/shields.d.ts +1 -1
- package/dist/services/dop/core/shields.js +2 -2
- package/dist/services/dop/core/shields.js.map +1 -1
- package/dist/services/dop/history/transaction-history.d.ts +2 -2
- package/dist/services/dop/history/transaction-history.js +14 -14
- package/dist/services/dop/history/transaction-history.js.map +1 -1
- package/dist/services/dop/process/extract-first-note.d.ts +2 -2
- package/dist/services/dop/process/extract-first-note.js +15 -15
- package/dist/services/dop/process/extract-first-note.js.map +1 -1
- package/dist/services/dop/quick-sync/empty-events.d.ts +1 -1
- package/dist/services/dop/quick-sync/empty-events.js.map +1 -1
- package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +1 -1
- package/dist/services/dop/quick-sync/graph-type-formatters.js +15 -15
- package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -1
- package/dist/services/dop/quick-sync/graphql/index.js +5 -5
- package/dist/services/dop/quick-sync/graphql/index.js.map +1 -1
- package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +1 -1
- package/dist/services/dop/quick-sync/quick-sync-graph.js +17 -17
- package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -1
- package/dist/services/dop/util/bytes.d.ts +1 -1
- package/dist/services/dop/util/bytes.js +7 -7
- package/dist/services/dop/util/bytes.js.map +1 -1
- package/dist/services/dop/util/commitment.d.ts +1 -2
- package/dist/services/dop/util/commitment.js +5 -4
- package/dist/services/dop/util/commitment.js.map +1 -1
- package/dist/services/dop/util/crypto.d.ts +2 -2
- package/dist/services/dop/util/crypto.js +15 -15
- package/dist/services/dop/util/crypto.js.map +1 -1
- package/dist/services/dop/util/db.d.ts +1 -1
- package/dist/services/dop/util/db.js +2 -2
- package/dist/services/dop/util/db.js.map +1 -1
- package/dist/services/dop/wallets/balance-update.d.ts +2 -2
- package/dist/services/dop/wallets/balance-update.js +6 -6
- package/dist/services/dop/wallets/balance-update.js.map +1 -1
- package/dist/services/dop/wallets/balances.d.ts +2 -2
- package/dist/services/dop/wallets/balances.js.map +1 -1
- package/dist/services/dop/wallets/wallets.d.ts +4 -2
- package/dist/services/dop/wallets/wallets.js +27 -12
- package/dist/services/dop/wallets/wallets.js.map +1 -1
- package/dist/services/ethers/ethers-util.js +2 -2
- package/dist/services/ethers/ethers-util.js.map +1 -1
- package/dist/services/transactions/proof-cache.d.ts +1 -1
- package/dist/services/transactions/proof-cache.js +16 -16
- package/dist/services/transactions/proof-cache.js.map +1 -1
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +2 -4
- package/dist/services/transactions/tx-cross-contract-calls.js +269 -117
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
- package/dist/services/transactions/tx-gas-details.d.ts +1 -1
- package/dist/services/transactions/tx-gas-details.js +36 -24
- package/dist/services/transactions/tx-gas-details.js.map +1 -1
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +1 -4
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +187 -88
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
- package/dist/services/transactions/tx-generator.d.ts +4 -5
- package/dist/services/transactions/tx-generator.js +71 -42
- package/dist/services/transactions/tx-generator.js.map +1 -1
- package/dist/services/transactions/tx-notes.d.ts +2 -2
- package/dist/services/transactions/tx-notes.js +13 -13
- package/dist/services/transactions/tx-notes.js.map +1 -1
- package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
- package/dist/services/transactions/tx-nullifiers.js.map +1 -1
- package/dist/services/transactions/tx-proof-transfer.d.ts +4 -3
- package/dist/services/transactions/tx-proof-transfer.js +13 -19
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
- package/dist/services/transactions/tx-proof-unshield.d.ts +3 -4
- package/dist/services/transactions/tx-proof-unshield.js +146 -87
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
- package/dist/services/transactions/tx-shield-base-token.d.ts +2 -2
- package/dist/services/transactions/tx-shield-base-token.js +13 -10
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
- package/dist/services/transactions/tx-shield.d.ts +1 -1
- package/dist/services/transactions/tx-shield.js +16 -12
- package/dist/services/transactions/tx-shield.js.map +1 -1
- package/dist/services/transactions/tx-transfer.d.ts +1 -2
- package/dist/services/transactions/tx-transfer.js +55 -16
- package/dist/services/transactions/tx-transfer.js.map +1 -1
- package/dist/services/transactions/tx-unshield.d.ts +1 -3
- package/dist/services/transactions/tx-unshield.js +119 -40
- package/dist/services/transactions/tx-unshield.js.map +1 -1
- package/dist/utils/blocked-address.js +3 -3
- package/dist/utils/blocked-address.js.map +1 -1
- package/dist/utils/error.js +2 -2
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/gas-price.d.ts +1 -1
- package/dist/utils/gas-price.js +13 -13
- package/dist/utils/gas-price.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AccumulatedEvents, Chain } from 'dop-engine';
|
|
1
|
+
import { AccumulatedEvents, Chain } from 'dop-engine-v5';
|
|
2
2
|
export declare const quickSyncGraph: (chain: Chain, startingBlock: number) => Promise<AccumulatedEvents>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.quickSyncGraph = void 0;
|
|
4
|
-
const
|
|
4
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
5
|
const empty_events_1 = require("./empty-events");
|
|
6
6
|
const graphql_1 = require("./graphql");
|
|
7
7
|
const runtime_1 = require("@graphql-mesh/runtime");
|
|
@@ -12,32 +12,32 @@ const meshes = {};
|
|
|
12
12
|
const MAX_QUERY_RESULTS = 100000;
|
|
13
13
|
const sourceNameForNetwork = (networkName) => {
|
|
14
14
|
switch (networkName) {
|
|
15
|
-
case
|
|
15
|
+
case dop_sharedmodel_v5_1.NetworkName.Ethereum:
|
|
16
16
|
return 'ethereum';
|
|
17
|
-
case
|
|
17
|
+
case dop_sharedmodel_v5_1.NetworkName.EthereumGoerli:
|
|
18
18
|
return 'goerli';
|
|
19
|
-
case
|
|
19
|
+
case dop_sharedmodel_v5_1.NetworkName.BNBChain:
|
|
20
20
|
return 'bsc';
|
|
21
|
-
case
|
|
21
|
+
case dop_sharedmodel_v5_1.NetworkName.Polygon:
|
|
22
22
|
return 'matic';
|
|
23
|
-
case
|
|
23
|
+
case dop_sharedmodel_v5_1.NetworkName.Arbitrum:
|
|
24
24
|
return 'arbitrum-one';
|
|
25
|
-
case
|
|
25
|
+
case dop_sharedmodel_v5_1.NetworkName.ArbitrumGoerli:
|
|
26
26
|
return 'arbitrum-goerli';
|
|
27
|
-
case
|
|
27
|
+
case dop_sharedmodel_v5_1.NetworkName.Xlayer:
|
|
28
28
|
return 'xlayer';
|
|
29
|
-
case
|
|
29
|
+
case dop_sharedmodel_v5_1.NetworkName.XlayerTestnet:
|
|
30
30
|
return 'xlayer-testnet';
|
|
31
|
-
case
|
|
31
|
+
case dop_sharedmodel_v5_1.NetworkName.PolygonMumbai:
|
|
32
32
|
return 'mumbai';
|
|
33
|
-
case
|
|
34
|
-
case
|
|
35
|
-
case
|
|
33
|
+
case dop_sharedmodel_v5_1.NetworkName.Dop:
|
|
34
|
+
case dop_sharedmodel_v5_1.NetworkName.EthereumRopsten_DEPRECATED:
|
|
35
|
+
case dop_sharedmodel_v5_1.NetworkName.Hardhat:
|
|
36
36
|
throw new Error('No Graph API hosted service for this network');
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
const quickSyncGraph = async (chain, startingBlock) => {
|
|
40
|
-
const network = (0,
|
|
40
|
+
const network = (0, dop_sharedmodel_v5_1.networkForChain)(chain);
|
|
41
41
|
if (!network || !network.shouldQuickSync) {
|
|
42
42
|
// Return empty logs, Engine will default to full scan.
|
|
43
43
|
return empty_events_1.EMPTY_EVENTS;
|
|
@@ -70,7 +70,7 @@ const createGraphCommitmentBatches = (flattenedCommitments) => {
|
|
|
70
70
|
for (const commitment of flattenedCommitments) {
|
|
71
71
|
const startPosition = commitment.batchStartTreePosition;
|
|
72
72
|
const existingBatch = graphCommitmentMap[startPosition];
|
|
73
|
-
if ((0,
|
|
73
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(existingBatch)) {
|
|
74
74
|
existingBatch.commitments.push(commitment);
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
@@ -83,7 +83,7 @@ const createGraphCommitmentBatches = (flattenedCommitments) => {
|
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
return (0,
|
|
86
|
+
return (0, dop_sharedmodel_v5_1.removeUndefineds)(Object.values(graphCommitmentMap));
|
|
87
87
|
};
|
|
88
88
|
const autoPaginatingQuery = async (query, blockNumber, prevResults = []) => {
|
|
89
89
|
const newResults = await query(blockNumber);
|
|
@@ -124,7 +124,7 @@ const sortByTreeNumberAndStartPosition = (a, b) => {
|
|
|
124
124
|
};
|
|
125
125
|
const getBuiltGraphClient = async (networkName) => {
|
|
126
126
|
const meshForNetwork = meshes[networkName];
|
|
127
|
-
if ((0,
|
|
127
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(meshForNetwork)) {
|
|
128
128
|
return meshForNetwork;
|
|
129
129
|
}
|
|
130
130
|
const sourceName = sourceNameForNetwork(networkName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quick-sync-graph.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/quick-sync-graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { AccumulatedEvents, Chain } from 'dop-engine';\nimport {\n NetworkName,\n isDefined,\n networkForChain,\n removeUndefineds,\n} from 'dop-sharedmodel';\nimport { EMPTY_EVENTS } from './empty-events';\nimport { getMeshOptions, getSdk } from './graphql';\nimport { MeshInstance, getMesh } from '@graphql-mesh/runtime';\nimport {\n GraphCommitment,\n GraphCommitmentBatch,\n formatGraphCommitmentEvents,\n formatGraphNullifierEvents,\n formatGraphUnshieldEvents,\n} from './graph-type-formatters';\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 return 'ethereum';\n case NetworkName.EthereumGoerli:\n return 'goerli';\n case NetworkName.BNBChain:\n return 'bsc';\n case NetworkName.Polygon:\n return 'matic';\n case NetworkName.Arbitrum:\n return 'arbitrum-one';\n case NetworkName.ArbitrumGoerli:\n return 'arbitrum-goerli';\n case NetworkName.Xlayer:\n return 'xlayer';\n case NetworkName.XlayerTestnet:\n return 'xlayer-testnet';\n case NetworkName.PolygonMumbai:\n return 'mumbai';\n case NetworkName.Dop:\n case NetworkName.EthereumRopsten_DEPRECATED:\n case NetworkName.Hardhat:\n throw new Error('No Graph API hosted service for this network');\n }\n};\n\nexport const quickSyncGraph = async (\n chain: Chain,\n startingBlock: number,\n): Promise<AccumulatedEvents> => {\n const network = networkForChain(chain);\n if (!network || !network.shouldQuickSync) {\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, unshields, commitments] = await Promise.all([\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Nullifiers({\n blockNumber,\n })\n ).nullifiers,\n startingBlock.toString(),\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Unshields({\n blockNumber,\n })\n ).unshields,\n startingBlock.toString(),\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Commitments({\n blockNumber,\n })\n ).commitments,\n startingBlock.toString(),\n ),\n ]);\n\n const filteredNullifiers = removeDuplicatesByID(nullifiers);\n const filteredUnshields = removeDuplicatesByID(unshields);\n const filteredCommitments = removeDuplicatesByID(commitments);\n const graphCommitmentBatches =\n createGraphCommitmentBatches(filteredCommitments);\n\n graphCommitmentBatches.sort(sortByTreeNumberAndStartPosition);\n\n const nullifierEvents = formatGraphNullifierEvents(filteredNullifiers);\n const unshieldEvents = formatGraphUnshieldEvents(filteredUnshields);\n const commitmentEvents = formatGraphCommitmentEvents(graphCommitmentBatches);\n\n return { nullifierEvents, unshieldEvents, commitmentEvents };\n};\n\nconst createGraphCommitmentBatches = (\n flattenedCommitments: GraphCommitment[],\n): GraphCommitmentBatch[] => {\n const graphCommitmentMap: MapType<GraphCommitmentBatch> = {};\n for (const commitment of flattenedCommitments) {\n const startPosition = commitment.batchStartTreePosition;\n const existingBatch = graphCommitmentMap[startPosition];\n if (isDefined(existingBatch)) {\n existingBatch.commitments.push(commitment);\n } else {\n graphCommitmentMap[commitment.batchStartTreePosition] = {\n commitments: [commitment],\n transactionHash: commitment.transactionHash,\n treeNumber: commitment.treeNumber,\n startPosition: commitment.batchStartTreePosition,\n blockNumber: Number(commitment.blockNumber),\n };\n }\n }\n return removeUndefineds(Object.values(graphCommitmentMap));\n};\n\nconst autoPaginatingQuery = async <ReturnType extends { blockNumber: string }>(\n query: (blockNumber: string) => Promise<ReturnType[]>,\n blockNumber: string,\n prevResults: ReturnType[] = [],\n): Promise<ReturnType[]> => {\n const newResults = await query(blockNumber);\n if (newResults.length === 0) {\n return prevResults;\n }\n\n const totalResults = prevResults.concat(newResults);\n\n const overLimit = totalResults.length >= MAX_QUERY_RESULTS;\n const lastResult = totalResults[totalResults.length - 1];\n\n const shouldQueryMore = newResults.length === 1000;\n if (!overLimit && shouldQueryMore) {\n return autoPaginatingQuery(query, lastResult.blockNumber, totalResults);\n }\n\n return totalResults;\n};\n\nconst removeDuplicatesByID = <T extends { id: string }>(array: T[]): T[] => {\n const seen = new Set();\n return array.filter((item: T) => {\n const duplicate = seen.has(item.id);\n seen.add(item.id);\n return !duplicate;\n });\n};\n\nconst sortByTreeNumberAndStartPosition = (\n a: GraphCommitmentBatch,\n b: GraphCommitmentBatch,\n) => {\n if (a.treeNumber < b.treeNumber) {\n return -1;\n }\n if (a.treeNumber > b.treeNumber) {\n return 1;\n }\n if (a.startPosition < b.startPosition) {\n return -1;\n }\n if (a.startPosition > b.startPosition) {\n return 1;\n }\n return 0;\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 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-graph.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/quick-sync-graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { AccumulatedEvents, Chain } from 'dop-engine-v5';\nimport {\n NetworkName,\n isDefined,\n networkForChain,\n removeUndefineds,\n} from 'dop-sharedmodel-v5';\nimport { EMPTY_EVENTS } from './empty-events';\nimport { getMeshOptions, getSdk } from './graphql';\nimport { MeshInstance, getMesh } from '@graphql-mesh/runtime';\nimport {\n GraphCommitment,\n GraphCommitmentBatch,\n formatGraphCommitmentEvents,\n formatGraphNullifierEvents,\n formatGraphUnshieldEvents,\n} from './graph-type-formatters';\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 return 'ethereum';\n case NetworkName.EthereumGoerli:\n return 'goerli';\n case NetworkName.BNBChain:\n return 'bsc';\n case NetworkName.Polygon:\n return 'matic';\n case NetworkName.Arbitrum:\n return 'arbitrum-one';\n case NetworkName.ArbitrumGoerli:\n return 'arbitrum-goerli';\n case NetworkName.Xlayer:\n return 'xlayer';\n case NetworkName.XlayerTestnet:\n return 'xlayer-testnet';\n case NetworkName.PolygonMumbai:\n return 'mumbai';\n case NetworkName.Dop:\n case NetworkName.EthereumRopsten_DEPRECATED:\n case NetworkName.Hardhat:\n throw new Error('No Graph API hosted service for this network');\n }\n};\n\nexport const quickSyncGraph = async (\n chain: Chain,\n startingBlock: number,\n): Promise<AccumulatedEvents> => {\n const network = networkForChain(chain);\n if (!network || !network.shouldQuickSync) {\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, unshields, commitments] = await Promise.all([\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Nullifiers({\n blockNumber,\n })\n ).nullifiers,\n startingBlock.toString(),\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Unshields({\n blockNumber,\n })\n ).unshields,\n startingBlock.toString(),\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Commitments({\n blockNumber,\n })\n ).commitments,\n startingBlock.toString(),\n ),\n ]);\n\n const filteredNullifiers = removeDuplicatesByID(nullifiers);\n const filteredUnshields = removeDuplicatesByID(unshields);\n const filteredCommitments = removeDuplicatesByID(commitments);\n const graphCommitmentBatches =\n createGraphCommitmentBatches(filteredCommitments);\n\n graphCommitmentBatches.sort(sortByTreeNumberAndStartPosition);\n\n const nullifierEvents = formatGraphNullifierEvents(filteredNullifiers);\n const unshieldEvents = formatGraphUnshieldEvents(filteredUnshields);\n const commitmentEvents = formatGraphCommitmentEvents(graphCommitmentBatches);\n\n return { nullifierEvents, unshieldEvents, commitmentEvents };\n};\n\nconst createGraphCommitmentBatches = (\n flattenedCommitments: GraphCommitment[],\n): GraphCommitmentBatch[] => {\n const graphCommitmentMap: MapType<GraphCommitmentBatch> = {};\n for (const commitment of flattenedCommitments) {\n const startPosition = commitment.batchStartTreePosition;\n const existingBatch = graphCommitmentMap[startPosition];\n if (isDefined(existingBatch)) {\n existingBatch.commitments.push(commitment);\n } else {\n graphCommitmentMap[commitment.batchStartTreePosition] = {\n commitments: [commitment],\n transactionHash: commitment.transactionHash,\n treeNumber: commitment.treeNumber,\n startPosition: commitment.batchStartTreePosition,\n blockNumber: Number(commitment.blockNumber),\n };\n }\n }\n return removeUndefineds(Object.values(graphCommitmentMap));\n};\n\nconst autoPaginatingQuery = async <ReturnType extends { blockNumber: string }>(\n query: (blockNumber: string) => Promise<ReturnType[]>,\n blockNumber: string,\n prevResults: ReturnType[] = [],\n): Promise<ReturnType[]> => {\n const newResults = await query(blockNumber);\n if (newResults.length === 0) {\n return prevResults;\n }\n\n const totalResults = prevResults.concat(newResults);\n\n const overLimit = totalResults.length >= MAX_QUERY_RESULTS;\n const lastResult = totalResults[totalResults.length - 1];\n\n const shouldQueryMore = newResults.length === 1000;\n if (!overLimit && shouldQueryMore) {\n return autoPaginatingQuery(query, lastResult.blockNumber, totalResults);\n }\n\n return totalResults;\n};\n\nconst removeDuplicatesByID = <T extends { id: string }>(array: T[]): T[] => {\n const seen = new Set();\n return array.filter((item: T) => {\n const duplicate = seen.has(item.id);\n seen.add(item.id);\n return !duplicate;\n });\n};\n\nconst sortByTreeNumberAndStartPosition = (\n a: GraphCommitmentBatch,\n b: GraphCommitmentBatch,\n) => {\n if (a.treeNumber < b.treeNumber) {\n return -1;\n }\n if (a.treeNumber > b.treeNumber) {\n return 1;\n }\n if (a.startPosition < b.startPosition) {\n return -1;\n }\n if (a.startPosition > b.startPosition) {\n return 1;\n }\n return 0;\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 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 { hexlify, fromUTF8String, toUTF8String, hexStringToBytes } from 'dop-engine';
|
|
1
|
+
import { hexlify, fromUTF8String, toUTF8String, hexStringToBytes } 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,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hexStringToBytes = exports.toUTF8String = exports.fromUTF8String = exports.hexlify = exports.bytesToHex = exports.getRandomBytes = exports.parseDopTokenAddress = void 0;
|
|
4
|
-
const
|
|
5
|
-
Object.defineProperty(exports, "hexlify", { enumerable: true, get: function () { return
|
|
6
|
-
Object.defineProperty(exports, "fromUTF8String", { enumerable: true, get: function () { return
|
|
7
|
-
Object.defineProperty(exports, "toUTF8String", { enumerable: true, get: function () { return
|
|
8
|
-
Object.defineProperty(exports, "hexStringToBytes", { enumerable: true, get: function () { return
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
Object.defineProperty(exports, "hexlify", { enumerable: true, get: function () { return dop_engine_v5_1.hexlify; } });
|
|
6
|
+
Object.defineProperty(exports, "fromUTF8String", { enumerable: true, get: function () { return dop_engine_v5_1.fromUTF8String; } });
|
|
7
|
+
Object.defineProperty(exports, "toUTF8String", { enumerable: true, get: function () { return dop_engine_v5_1.toUTF8String; } });
|
|
8
|
+
Object.defineProperty(exports, "hexStringToBytes", { enumerable: true, get: function () { return dop_engine_v5_1.hexStringToBytes; } });
|
|
9
9
|
const parseDopTokenAddress = (tokenAddress) => {
|
|
10
|
-
return (0,
|
|
10
|
+
return (0, dop_engine_v5_1.formatToByteLength)(tokenAddress, dop_engine_v5_1.ByteLength.Address, true);
|
|
11
11
|
};
|
|
12
12
|
exports.parseDopTokenAddress = parseDopTokenAddress;
|
|
13
13
|
const getRandomBytes = (length) => {
|
|
14
|
-
return (0,
|
|
14
|
+
return (0, dop_engine_v5_1.randomHex)(length);
|
|
15
15
|
};
|
|
16
16
|
exports.getRandomBytes = getRandomBytes;
|
|
17
17
|
const bytesToHex = (bytes) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/services/dop/util/bytes.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/services/dop/util/bytes.ts"],"names":[],"mappings":";;;AAAA,iDAQuB;AAcd,wFAlBP,uBAAO,OAkBO;AAAE,+FAjBhB,8BAAc,OAiBgB;AAAE,6FAhBhC,4BAAY,OAgBgC;AAAE,iGAf9C,gCAAgB,OAe8C;AAZzD,MAAM,oBAAoB,GAAG,CAAC,YAAoB,EAAU,EAAE;IACnE,OAAO,IAAA,kCAAkB,EAAC,YAAY,EAAE,0BAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B;AAEK,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,OAAO,IAAA,yBAAS,EAAC,MAAM,CAAC,CAAC;AAC3B,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 randomHex,\n formatToByteLength,\n ByteLength,\n hexlify,\n fromUTF8String,\n toUTF8String,\n hexStringToBytes,\n} from 'dop-engine-v5';\n\nexport const parseDopTokenAddress = (tokenAddress: string): string => {\n return formatToByteLength(tokenAddress, ByteLength.Address, true);\n};\n\nexport const getRandomBytes = (length: number): string => {\n return randomHex(length);\n};\n\nexport const bytesToHex = (bytes: Uint8Array): string => {\n return Buffer.from(bytes).toString('hex');\n};\n\nexport { hexlify, fromUTF8String, toUTF8String, hexStringToBytes };\n"]}
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { TransactionStruct } from 'dop-engine';
|
|
2
|
-
import { CommitmentSummary } from 'dop-sharedmodel';
|
|
1
|
+
import { TransactionStruct, CommitmentSummary } from 'dop-engine-v5';
|
|
3
2
|
export declare const convertTransactionStructToCommitmentSummary: (transactionStruct: TransactionStruct, commitmentIndex: number) => CommitmentSummary;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.convertTransactionStructToCommitmentSummary = void 0;
|
|
4
|
-
const
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
5
|
const convertTransactionStructToCommitmentSummary = (transactionStruct, commitmentIndex) => {
|
|
6
6
|
const commitmentCiphertextStruct = transactionStruct.boundParams
|
|
7
7
|
.commitmentCiphertext[commitmentIndex];
|
|
8
|
-
const commitmentCiphertext = (0,
|
|
9
|
-
const commitmentHash = transactionStruct.commitments[
|
|
8
|
+
const commitmentCiphertext = (0, dop_engine_v5_1.formatCommitmentCiphertext)(commitmentCiphertextStruct);
|
|
9
|
+
// const commitmentHash = transactionStruct.commitments[
|
|
10
|
+
// commitmentIndex
|
|
11
|
+
// ] as string;
|
|
10
12
|
return {
|
|
11
13
|
commitmentCiphertext,
|
|
12
|
-
commitmentHash,
|
|
13
14
|
};
|
|
14
15
|
};
|
|
15
16
|
exports.convertTransactionStructToCommitmentSummary = convertTransactionStructToCommitmentSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../../src/services/dop/util/commitment.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../../src/services/dop/util/commitment.ts"],"names":[],"mappings":";;;AAAA,iDAKuB;AAMhB,MAAM,2CAA2C,GAAG,CACzD,iBAAoC,EACpC,eAAuB,EACJ,EAAE;IACrB,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,WAAW;SAC7D,oBAAoB,CAAC,eAAe,CAAqC,CAAC;IAE7E,MAAM,oBAAoB,GAAyB,IAAA,0CAA0B,EAC3E,0BAA0B,CAC3B,CAAC;IACF,wDAAwD;IACxD,oBAAoB;IACpB,eAAe;IAEf,OAAO;QACL,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,2CAA2C,+CAiBtD","sourcesContent":["import {\n CommitmentCiphertextStructOutput,\n TransactionStruct,\n formatCommitmentCiphertext,\n CommitmentSummary,\n} from 'dop-engine-v5';\n\nimport {\n CommitmentCiphertext,\n} from 'dop-sharedmodel-v5';\n\nexport const convertTransactionStructToCommitmentSummary = (\n transactionStruct: TransactionStruct,\n commitmentIndex: number,\n): CommitmentSummary => {\n const commitmentCiphertextStruct = transactionStruct.boundParams\n .commitmentCiphertext[commitmentIndex] as CommitmentCiphertextStructOutput;\n\n const commitmentCiphertext: CommitmentCiphertext = formatCommitmentCiphertext(\n commitmentCiphertextStruct,\n );\n // const commitmentHash = transactionStruct.commitments[\n // commitmentIndex\n // ] as string;\n\n return {\n commitmentCiphertext,\n };\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from 'dop-engine';
|
|
2
|
-
import { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodel';
|
|
1
|
+
import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from 'dop-engine-v5';
|
|
2
|
+
import { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodel-v5';
|
|
3
3
|
export declare const verifyRelayerSignature: (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;
|
|
@@ -25,33 +25,33 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.getPublicViewingKey = exports.tryDecryptJSONDataWithSharedKey = exports.encryptJSONDataWithSharedKey = exports.pbkdf2 = exports.encryptAESGCM256 = exports.decryptAESGCM256 = exports.encryptDataWithSharedKey = exports.verifyRelayerSignature = void 0;
|
|
27
27
|
const ed = __importStar(require("@noble/ed25519"));
|
|
28
|
-
const
|
|
29
|
-
Object.defineProperty(exports, "encryptJSONDataWithSharedKey", { enumerable: true, get: function () { return
|
|
30
|
-
Object.defineProperty(exports, "tryDecryptJSONDataWithSharedKey", { enumerable: true, get: function () { return
|
|
31
|
-
Object.defineProperty(exports, "getPublicViewingKey", { enumerable: true, get: function () { return
|
|
28
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
29
|
+
Object.defineProperty(exports, "encryptJSONDataWithSharedKey", { enumerable: true, get: function () { return dop_engine_v5_1.encryptJSONDataWithSharedKey; } });
|
|
30
|
+
Object.defineProperty(exports, "tryDecryptJSONDataWithSharedKey", { enumerable: true, get: function () { return dop_engine_v5_1.tryDecryptJSONDataWithSharedKey; } });
|
|
31
|
+
Object.defineProperty(exports, "getPublicViewingKey", { enumerable: true, get: function () { return dop_engine_v5_1.getPublicViewingKey; } });
|
|
32
32
|
const bytes_1 = require("./bytes");
|
|
33
33
|
const util_1 = require("util");
|
|
34
34
|
const crypto_1 = require("crypto");
|
|
35
35
|
const pbkdf2_1 = require("ethereum-cryptography/pbkdf2");
|
|
36
36
|
const verifyRelayerSignature = (signature, data, signingKey) => {
|
|
37
|
-
return (0,
|
|
37
|
+
return (0, dop_engine_v5_1.verifyED25519)(data, signature, signingKey);
|
|
38
38
|
};
|
|
39
39
|
exports.verifyRelayerSignature = verifyRelayerSignature;
|
|
40
40
|
const encryptDataWithSharedKey = async (data, externalPubKey) => {
|
|
41
|
-
const randomPrivKey = (0,
|
|
42
|
-
const randomPubKeyUint8Array = await (0,
|
|
43
|
-
const randomPubKey = (0,
|
|
41
|
+
const randomPrivKey = (0, dop_engine_v5_1.hexStringToBytes)((0, bytes_1.getRandomBytes)(32));
|
|
42
|
+
const randomPubKeyUint8Array = await (0, dop_engine_v5_1.getPublicViewingKey)(randomPrivKey);
|
|
43
|
+
const randomPubKey = (0, dop_engine_v5_1.hexlify)(randomPubKeyUint8Array);
|
|
44
44
|
const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);
|
|
45
|
-
const encryptedData = (0,
|
|
45
|
+
const encryptedData = (0, dop_engine_v5_1.encryptJSONDataWithSharedKey)(data, sharedKey);
|
|
46
46
|
return { encryptedData, randomPubKey, sharedKey };
|
|
47
47
|
};
|
|
48
48
|
exports.encryptDataWithSharedKey = encryptDataWithSharedKey;
|
|
49
49
|
const decryptAESGCM256 = (encryptedData, sharedKey) => {
|
|
50
|
-
return (0,
|
|
50
|
+
return (0, dop_engine_v5_1.tryDecryptJSONDataWithSharedKey)(encryptedData, sharedKey);
|
|
51
51
|
};
|
|
52
52
|
exports.decryptAESGCM256 = decryptAESGCM256;
|
|
53
53
|
const encryptAESGCM256 = (data, sharedKey) => {
|
|
54
|
-
return (0,
|
|
54
|
+
return (0, dop_engine_v5_1.encryptJSONDataWithSharedKey)(data, sharedKey);
|
|
55
55
|
};
|
|
56
56
|
exports.encryptAESGCM256 = encryptAESGCM256;
|
|
57
57
|
/**
|
|
@@ -62,18 +62,18 @@ exports.encryptAESGCM256 = encryptAESGCM256;
|
|
|
62
62
|
*/
|
|
63
63
|
const pbkdf2 = async (secret, salt, iterations) => {
|
|
64
64
|
const secretBuffer = Buffer.from(secret, 'utf-8');
|
|
65
|
-
const secretFormatted = new Uint8Array((0,
|
|
66
|
-
const saltFormatted = new Uint8Array((0,
|
|
65
|
+
const secretFormatted = new Uint8Array((0, dop_engine_v5_1.arrayify)(secretBuffer));
|
|
66
|
+
const saltFormatted = new Uint8Array((0, dop_engine_v5_1.arrayify)(salt));
|
|
67
67
|
const keyLength = 32; // Bytes
|
|
68
68
|
const digest = 'sha256';
|
|
69
69
|
let key;
|
|
70
|
-
if (
|
|
70
|
+
if (dop_engine_v5_1.isReactNative) {
|
|
71
71
|
key = await (0, pbkdf2_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
74
74
|
key = await (0, util_1.promisify)(crypto_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
|
|
75
75
|
}
|
|
76
|
-
return (0,
|
|
76
|
+
return (0, dop_engine_v5_1.hexlify)(key);
|
|
77
77
|
};
|
|
78
78
|
exports.pbkdf2 = pbkdf2;
|
|
79
79
|
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/dop/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/dop/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,iDAWuB;AAiFrB,6GAxFA,4CAA4B,OAwFA;AAC5B,gHAxFA,+CAA+B,OAwFA;AAE/B,oGAzFA,mCAAmB,OAyFA;AAlFrB,mCAAyC;AACzC,+BAAiC;AACjC,mCAA8C;AAC9C,yDAAkE;AAE3D,MAAM,sBAAsB,GAAG,CACpC,SAA8B,EAC9B,IAAyB,EACzB,UAAsB,EACJ,EAAE;IACpB,OAAO,IAAA,6BAAa,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,sBAAsB,0BAMjC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAY,EACZ,cAA0B,EACiB,EAAE;IAC7C,MAAM,aAAa,GAAG,IAAA,gCAAgB,EAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,sBAAsB,GAAG,MAAM,IAAA,mCAAmB,EAAC,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAA,uBAAO,EAAC,sBAAsB,CAAC,CAAC;IACrD,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,IAAA,wBAAQ,EAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,IAAA,wBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,IAAI,GAAwB,CAAC;IAC7B,IAAI,6BAAa,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,IAAA,uBAAO,EAAC,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC;AA/BW,QAAA,MAAM,UA+BjB","sourcesContent":["import * as ed from '@noble/ed25519';\nimport {\n arrayify,\n hexlify,\n hexStringToBytes,\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n getPublicViewingKey,\n verifyED25519,\n EncryptedData,\n ViewingKeyPair,\n isReactNative,\n} from 'dop-engine-v5';\nimport { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodel-v5';\nimport { getRandomBytes } from './bytes';\nimport { promisify } from 'util';\nimport { pbkdf2 as NodePbkdf2 } from 'crypto';\nimport { pbkdf2 as JSpbkdf2 } from 'ethereum-cryptography/pbkdf2';\n\nexport const verifyRelayerSignature = (\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 = hexStringToBytes(getRandomBytes(32));\n const randomPubKeyUint8Array = await getPublicViewingKey(randomPrivKey);\n const randomPubKey = 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(arrayify(secretBuffer));\n const saltFormatted = new Uint8Array(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 hexlify(key);\n};\n\nexport {\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n EncryptedData,\n getPublicViewingKey,\n ViewingKeyPair,\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Database } from 'dop-engine';
|
|
1
|
+
import { Database } from 'dop-engine-v5';
|
|
2
2
|
export { Database };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Database = void 0;
|
|
4
|
-
const
|
|
5
|
-
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return dop_engine_v5_1.Database; } });
|
|
6
6
|
//# sourceMappingURL=db.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../src/services/dop/util/db.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../src/services/dop/util/db.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAEhC,yFAFA,wBAAQ,OAEA","sourcesContent":["import { Database } from 'dop-engine-v5';\n\nexport { Database };\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Chain, AbstractWallet } from 'dop-engine';
|
|
2
|
-
import { DopBalancesEvent, NetworkName } from 'dop-sharedmodel';
|
|
1
|
+
import { Chain, AbstractWallet } from 'dop-engine-v5';
|
|
2
|
+
import { DopBalancesEvent, NetworkName } from 'dop-sharedmodel-v5';
|
|
3
3
|
export type BalancesUpdatedCallback = (balancesEvent: DopBalancesEvent) => void;
|
|
4
4
|
export declare const setOnBalanceUpdateCallback: (callback?: BalancesUpdatedCallback) => void;
|
|
5
5
|
export declare const onBalancesUpdate: (wallet: AbstractWallet, chain: Chain) => Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.awaitMultipleWalletScans = exports.awaitWalletScan = exports.balanceForERC20Token = exports.onBalancesUpdate = exports.setOnBalanceUpdateCallback = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
6
6
|
const logger_1 = require("../../../utils/logger");
|
|
7
7
|
const bytes_1 = require("../util/bytes");
|
|
8
8
|
const core_1 = require("../core");
|
|
@@ -15,7 +15,7 @@ const getSerializedERC20Balances = (balances) => {
|
|
|
15
15
|
const tokenHashes = Object.keys(balances);
|
|
16
16
|
return tokenHashes
|
|
17
17
|
.filter(tokenHash => {
|
|
18
|
-
return balances[tokenHash].tokenData.tokenType ===
|
|
18
|
+
return balances[tokenHash].tokenData.tokenType === dop_engine_v5_1.TokenType.ERC20;
|
|
19
19
|
})
|
|
20
20
|
.map(dopBalanceAddress => {
|
|
21
21
|
const erc20Balance = {
|
|
@@ -29,7 +29,7 @@ const getNFTBalances = (balances) => {
|
|
|
29
29
|
const tokenHashes = Object.keys(balances);
|
|
30
30
|
return tokenHashes
|
|
31
31
|
.filter(tokenHash => {
|
|
32
|
-
return ([
|
|
32
|
+
return ([dop_engine_v5_1.TokenType.ERC721, dop_engine_v5_1.TokenType.ERC1155].includes(balances[tokenHash].tokenData.tokenType) && balances[tokenHash].balance > BigInt(0));
|
|
33
33
|
})
|
|
34
34
|
.map(tokenHash => {
|
|
35
35
|
const tokenData = balances[tokenHash].tokenData;
|
|
@@ -60,7 +60,7 @@ const onBalancesUpdate = async (wallet, chain) => {
|
|
|
60
60
|
};
|
|
61
61
|
exports.onBalancesUpdate = onBalancesUpdate;
|
|
62
62
|
const balanceForERC20Token = async (wallet, networkName, tokenAddress) => {
|
|
63
|
-
const { chain } =
|
|
63
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
64
64
|
const balances = await wallet.balances(chain);
|
|
65
65
|
const tokenBalances = getSerializedERC20Balances(balances);
|
|
66
66
|
const matchingTokenBalance = tokenBalances.find(tokenBalance => tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase());
|
|
@@ -72,7 +72,7 @@ const balanceForERC20Token = async (wallet, networkName, tokenAddress) => {
|
|
|
72
72
|
exports.balanceForERC20Token = balanceForERC20Token;
|
|
73
73
|
const awaitWalletScan = (walletID, chain) => {
|
|
74
74
|
const wallet = (0, core_1.walletForID)(walletID);
|
|
75
|
-
return new Promise((resolve, reject) => wallet.once(
|
|
75
|
+
return new Promise((resolve, reject) => wallet.once(dop_engine_v5_1.EngineEvent.WalletScanComplete, ({ chain: returnedChain }) => returnedChain.type === chain.type && returnedChain.id === chain.id
|
|
76
76
|
? resolve(returnedChain)
|
|
77
77
|
: reject()));
|
|
78
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-update.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balance-update.ts"],"names":[],"mappings":";;;AAAA,
|
|
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 Balances,\n EngineEvent,\n WalletScannedEventData,\n} from 'dop-engine-v5';\nimport {\n DopBalancesEvent,\n DopNFTAmount,\n DopERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n} from 'dop-sharedmodel-v5';\nimport { sendMessage } from '../../../utils/logger';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { walletForID } from '../core';\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\nconst getSerializedERC20Balances = (\n balances: Balances,\n): DopERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n\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\nconst getNFTBalances = (balances: Balances): 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 wallet: AbstractWallet,\n chain: Chain,\n): Promise<void> => {\n sendMessage(\n `Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`,\n );\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const balances = await wallet.balances(chain);\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getNFTBalances(balances);\n\n const balancesEvent: DopBalancesEvent = {\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n tokenAddress: string,\n): Promise<bigint> => {\n const { chain } = NETWORK_CONFIG[networkName];\n const balances = await wallet.balances(chain);\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 awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletScanComplete,\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"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Chain } from 'dop-engine';
|
|
2
|
-
import { DopBalanceRefreshTrigger } from 'dop-sharedmodel';
|
|
1
|
+
import { Chain } from 'dop-engine-v5';
|
|
2
|
+
import { DopBalanceRefreshTrigger } from 'dop-sharedmodel-v5';
|
|
3
3
|
export declare const refreshDopBalances: DopBalanceRefreshTrigger;
|
|
4
4
|
export declare const scanUpdatesForMerkletreeAndWallets: (chain: Chain) => Promise<void>;
|
|
5
5
|
export declare const rescanFullMerkletreesAndWallets: (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,2CAAwD;AAEjD,MAAM,kBAAkB,GAA6B,KAAK,EAC/D,KAAY,EACZ,WAAmB,EACnB,UAAmB,EACnB,gBAA6C,EAC9B,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,WAAW,CAAC,CAAC;QACxC,IAAI,UAAU,EAAE;YAEd,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SAC1D;aAAM;YACL,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SACpD;QAED,qEAAqE;QACrE,sDAAsD;QAEtD,8CAA8C;QAC9C,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACjC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0BAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5D;AACH,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B;AAEK,MAAM,kCAAkC,GAAG,KAAK,EACrD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0CAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AAZW,QAAA,kCAAkC,sCAY7C;AAEK,MAAM,+BAA+B,GAAG,KAAK,EAClD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAEpD,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uCAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AAZW,QAAA,+BAA+B,mCAY1C;AAEK,MAAM,4BAA4B,GAAG,KAAK,EAC/C,KAAY,EACZ,gBAA6C,EAC9B,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC,CAAC;AANW,QAAA,4BAA4B,gCAMvC","sourcesContent":["import { Chain } from 'dop-engine';\nimport { DopBalanceRefreshTrigger } from 'dop-sharedmodel';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine, walletForID } from '../core/engine';\n\nexport const refreshDopBalances: DopBalanceRefreshTrigger = async (\n chain: Chain,\n dopWalletID: string,\n fullRescan: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n try {\n const wallet = walletForID(dopWalletID);\n if (fullRescan) {\n\n await wallet.fullRescanBalances(chain, progressCallback);\n } else {\n await wallet.scanBalances(chain, progressCallback);\n }\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n\n // Also kick off a background merkletree scan.\n // This will also call wallet.scanBalances when it's done, but may take longer.\n // So the user will see balances refresh from existing merkletree first.\n const engine = getEngine();\n await engine.scanHistory(chain);\n } catch (err) {\n throw reportAndSanitizeError(refreshDopBalances.name, err);\n }\n};\n\nexport const scanUpdatesForMerkletreeAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.scanHistory(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(scanUpdatesForMerkletreeAndWallets.name, err);\n }\n};\n\nexport const rescanFullMerkletreesAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullRescanMerkletreesAndWallets(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(rescanFullMerkletreesAndWallets.name, err);\n }\n};\n\nexport const fullRescanBalancesAllWallets = async (\n chain: Chain,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n const engine = getEngine();\n await engine.scanAllWallets(chain, progressCallback);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balances.ts"],"names":[],"mappings":";;;AAEA,gDAA8D;AAC9D,2CAAwD;AAEjD,MAAM,kBAAkB,GAA6B,KAAK,EAC/D,KAAY,EACZ,WAAmB,EACnB,UAAmB,EACnB,gBAA6C,EAC9B,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,WAAW,CAAC,CAAC;QACxC,IAAI,UAAU,EAAE;YAEd,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SAC1D;aAAM;YACL,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SACpD;QAED,qEAAqE;QACrE,sDAAsD;QAEtD,8CAA8C;QAC9C,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACjC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0BAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5D;AACH,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B;AAEK,MAAM,kCAAkC,GAAG,KAAK,EACrD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0CAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AAZW,QAAA,kCAAkC,sCAY7C;AAEK,MAAM,+BAA+B,GAAG,KAAK,EAClD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAEpD,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uCAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AAZW,QAAA,+BAA+B,mCAY1C;AAEK,MAAM,4BAA4B,GAAG,KAAK,EAC/C,KAAY,EACZ,gBAA6C,EAC9B,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC,CAAC;AANW,QAAA,4BAA4B,gCAMvC","sourcesContent":["import { Chain } from 'dop-engine-v5';\nimport { DopBalanceRefreshTrigger } from 'dop-sharedmodel-v5';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine, walletForID } from '../core/engine';\n\nexport const refreshDopBalances: DopBalanceRefreshTrigger = async (\n chain: Chain,\n dopWalletID: string,\n fullRescan: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n try {\n const wallet = walletForID(dopWalletID);\n if (fullRescan) {\n\n await wallet.fullRescanBalances(chain, progressCallback);\n } else {\n await wallet.scanBalances(chain, progressCallback);\n }\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n\n // Also kick off a background merkletree scan.\n // This will also call wallet.scanBalances when it's done, but may take longer.\n // So the user will see balances refresh from existing merkletree first.\n const engine = getEngine();\n await engine.scanHistory(chain);\n } catch (err) {\n throw reportAndSanitizeError(refreshDopBalances.name, err);\n }\n};\n\nexport const scanUpdatesForMerkletreeAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.scanHistory(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(scanUpdatesForMerkletreeAndWallets.name, err);\n }\n};\n\nexport const rescanFullMerkletreesAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullRescanMerkletreesAndWallets(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(rescanFullMerkletreesAndWallets.name, err);\n }\n};\n\nexport const fullRescanBalancesAllWallets = async (\n chain: Chain,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n const engine = getEngine();\n await engine.scanAllWallets(chain, progressCallback);\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { AddressData } from 'dop-engine';
|
|
2
|
-
import { DopWalletInfo } from 'dop-sharedmodel';
|
|
1
|
+
import { AddressData } from 'dop-engine-v5';
|
|
2
|
+
import { DopWalletInfo } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const createWalletFromTransaction: (leaf: any, viewingPrivateKey: Uint8Array, chain: any, encryptionKey: string, mnemonic: string, index?: number) => Promise<any>;
|
|
4
|
+
export declare const createUserWalletWithID: (encryptionKey: string, id: string, leaf: any, viewingPrivateKey: Uint8Array, chain: any) => Promise<any>;
|
|
3
5
|
export declare const createDopWallet: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
4
6
|
export declare const createViewOnlyDopWallet: (encryptionKey: string, shareableViewingKey: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
5
7
|
export declare const loadWalletByID: (encryptionKey: string, dopWalletID: string, isViewOnlyWallet: boolean) => Promise<DopWalletInfo>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
3
|
+
exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = exports.createUserWalletWithID = exports.createWalletFromTransaction = void 0;
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
6
6
|
const engine_1 = require("../core/engine");
|
|
7
7
|
const balance_update_1 = require("./balance-update");
|
|
8
8
|
const error_1 = require("../../../utils/error");
|
|
9
9
|
const ethers_1 = require("ethers");
|
|
10
10
|
const subscribeToBalanceEvents = (wallet) => {
|
|
11
|
-
wallet.on(
|
|
11
|
+
wallet.on(dop_engine_v5_1.EngineEvent.WalletScanComplete, ({ chain }) => {
|
|
12
12
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
13
13
|
(0, balance_update_1.onBalancesUpdate)(wallet, chain);
|
|
14
14
|
});
|
|
@@ -48,6 +48,20 @@ const loadExistingWallet = async (encryptionKey, dopWalletID, isViewOnlyWallet)
|
|
|
48
48
|
subscribeToBalanceEvents(wallet);
|
|
49
49
|
return infoForWallet(wallet);
|
|
50
50
|
};
|
|
51
|
+
// here
|
|
52
|
+
const createWalletFromTransaction = async (leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index = 0) => {
|
|
53
|
+
const engine = (0, engine_1.getEngine)();
|
|
54
|
+
const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);
|
|
55
|
+
return res;
|
|
56
|
+
};
|
|
57
|
+
exports.createWalletFromTransaction = createWalletFromTransaction;
|
|
58
|
+
// here
|
|
59
|
+
const createUserWalletWithID = async (encryptionKey, id, leaf, viewingPrivateKey, chain) => {
|
|
60
|
+
const engine = (0, engine_1.getEngine)();
|
|
61
|
+
const res = engine.createUserWalletWithID(encryptionKey, id, leaf, viewingPrivateKey, chain);
|
|
62
|
+
return res;
|
|
63
|
+
};
|
|
64
|
+
exports.createUserWalletWithID = createUserWalletWithID;
|
|
51
65
|
const createWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
|
|
52
66
|
const formattedCreationBlockNumbers = formatCreationBlockNumbers(creationBlockNumbers);
|
|
53
67
|
const engine = (0, engine_1.getEngine)();
|
|
@@ -62,6 +76,7 @@ const createViewOnlyWallet = async (encryptionKey, shareableViewingKey, creation
|
|
|
62
76
|
subscribeToBalanceEvents(wallet);
|
|
63
77
|
return infoForWallet(wallet);
|
|
64
78
|
};
|
|
79
|
+
// here
|
|
65
80
|
const createDopWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
|
|
66
81
|
try {
|
|
67
82
|
return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);
|
|
@@ -113,7 +128,7 @@ exports.deleteWalletByID = deleteWalletByID;
|
|
|
113
128
|
const getWalletMnemonic = async (encryptionKey, dopWalletID) => {
|
|
114
129
|
const { db } = (0, engine_1.getEngine)();
|
|
115
130
|
// Reload wallet to ensure that encryption key is valid.
|
|
116
|
-
const walletData = (await
|
|
131
|
+
const walletData = (await dop_engine_v5_1.DopWallet.getEncryptedData(db, encryptionKey, dopWalletID));
|
|
117
132
|
if (!walletData.mnemonic) {
|
|
118
133
|
throw new Error('No mnemonic for wallet.');
|
|
119
134
|
}
|
|
@@ -122,7 +137,7 @@ const getWalletMnemonic = async (encryptionKey, dopWalletID) => {
|
|
|
122
137
|
exports.getWalletMnemonic = getWalletMnemonic;
|
|
123
138
|
const getDopWalletAddressData = (address) => {
|
|
124
139
|
(0, exports.assertValidDopAddress)(address);
|
|
125
|
-
return
|
|
140
|
+
return dop_engine_v5_1.DopEngine.decodeAddress(address);
|
|
126
141
|
};
|
|
127
142
|
exports.getDopWalletAddressData = getDopWalletAddressData;
|
|
128
143
|
const getDopWalletPrivateViewingKey = (dopWalletID) => {
|
|
@@ -132,8 +147,8 @@ const getDopWalletPrivateViewingKey = (dopWalletID) => {
|
|
|
132
147
|
exports.getDopWalletPrivateViewingKey = getDopWalletPrivateViewingKey;
|
|
133
148
|
const signWithWalletViewingKey = async (dopWalletID, message) => {
|
|
134
149
|
const wallet = (0, engine_1.walletForID)(dopWalletID);
|
|
135
|
-
const signature = await wallet.signWithViewingKey((0,
|
|
136
|
-
return (0,
|
|
150
|
+
const signature = await wallet.signWithViewingKey((0, dop_engine_v5_1.hexStringToBytes)(message));
|
|
151
|
+
return (0, dop_engine_v5_1.hexlify)(signature);
|
|
137
152
|
};
|
|
138
153
|
exports.signWithWalletViewingKey = signWithWalletViewingKey;
|
|
139
154
|
const assertValidDopAddress = (address) => {
|
|
@@ -144,7 +159,7 @@ const assertValidDopAddress = (address) => {
|
|
|
144
159
|
exports.assertValidDopAddress = assertValidDopAddress;
|
|
145
160
|
const validateDopAddress = (address) => {
|
|
146
161
|
try {
|
|
147
|
-
return
|
|
162
|
+
return dop_engine_v5_1.DopEngine.decodeAddress(address) != null;
|
|
148
163
|
}
|
|
149
164
|
catch (err) {
|
|
150
165
|
return false;
|
|
@@ -191,15 +206,15 @@ const getWalletShareableViewingKey = async (dopWalletID) => {
|
|
|
191
206
|
exports.getWalletShareableViewingKey = getWalletShareableViewingKey;
|
|
192
207
|
const formatCreationBlockNumbers = (creationBlockNumbers) => {
|
|
193
208
|
var _a;
|
|
194
|
-
// Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine's number[][] type
|
|
209
|
+
// Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-tranparency's number[][] type
|
|
195
210
|
if (!creationBlockNumbers)
|
|
196
211
|
return;
|
|
197
212
|
const formattedCreationBlockNumbers = [];
|
|
198
213
|
const networksNames = Object.keys(creationBlockNumbers);
|
|
199
214
|
for (const networkName of networksNames) {
|
|
200
|
-
const network =
|
|
215
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
201
216
|
const blockNumber = creationBlockNumbers[networkName];
|
|
202
|
-
if (!(0,
|
|
217
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(blockNumber)) {
|
|
203
218
|
continue;
|
|
204
219
|
}
|
|
205
220
|
formattedCreationBlockNumbers[_a = network.chain.type] ?? (formattedCreationBlockNumbers[_a] = []);
|