dop-wallet-v6 1.1.7 → 1.1.8
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 +13 -13
- package/dist/services/artifacts/artifact-util.js.map +1 -1
- package/dist/services/dop/core/artifacts.d.ts +2 -2
- package/dist/services/dop/core/artifacts.js +5 -5
- 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 +13 -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/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 +2 -2
- package/dist/services/dop/util/commitment.js +2 -2
- 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 +2 -2
- package/dist/services/dop/wallets/wallets.js +10 -10
- 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 -2
- package/dist/services/transactions/tx-cross-contract-calls.js +21 -21
- 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 +22 -22
- package/dist/services/transactions/tx-gas-details.js.map +1 -1
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +2 -2
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +2 -2
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
- package/dist/services/transactions/tx-generator.d.ts +2 -2
- package/dist/services/transactions/tx-generator.js +17 -17
- 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 +2 -2
- package/dist/services/transactions/tx-proof-transfer.js +3 -3
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
- package/dist/services/transactions/tx-proof-unshield.d.ts +2 -2
- package/dist/services/transactions/tx-proof-unshield.js +8 -8
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
- package/dist/services/transactions/tx-shield-base-token.d.ts +1 -1
- package/dist/services/transactions/tx-shield-base-token.js +5 -5
- 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 +12 -12
- package/dist/services/transactions/tx-shield.js.map +1 -1
- package/dist/services/transactions/tx-transfer.d.ts +1 -1
- package/dist/services/transactions/tx-transfer.js +3 -3
- package/dist/services/transactions/tx-transfer.js.map +1 -1
- package/dist/services/transactions/tx-unshield.d.ts +1 -1
- package/dist/services/transactions/tx-unshield.js +7 -7
- 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 +1 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resumeIsolatedPollingProviderForNetwork = exports.pauseAllPollingProviders = exports.unloadProvider = exports.loadProvider = exports.getRelayAdaptContractForNetwork = exports.getDopSmartWalletContractForNetwork = exports.getMerkleTreeForNetwork = exports.setPollingProviderForNetwork = exports.setFallbackProviderForNetwork = exports.getPollingProviderForNetwork = exports.getFallbackProviderForNetwork = void 0;
|
|
4
|
-
const
|
|
4
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
5
|
const logger_1 = require("../../../utils/logger");
|
|
6
6
|
const engine_1 = require("./engine");
|
|
7
|
-
const
|
|
7
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
8
8
|
const error_1 = require("../../../utils/error");
|
|
9
9
|
const fallbackProviderMap = {};
|
|
10
10
|
const pollingProviderMap = {};
|
|
11
11
|
const getFallbackProviderForNetwork = (networkName) => {
|
|
12
12
|
const provider = fallbackProviderMap[networkName];
|
|
13
|
-
if (!(0,
|
|
13
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(provider)) {
|
|
14
14
|
throw new Error(`Provider not yet loaded for network ${networkName}`);
|
|
15
15
|
}
|
|
16
16
|
return provider;
|
|
@@ -18,7 +18,7 @@ const getFallbackProviderForNetwork = (networkName) => {
|
|
|
18
18
|
exports.getFallbackProviderForNetwork = getFallbackProviderForNetwork;
|
|
19
19
|
const getPollingProviderForNetwork = (networkName) => {
|
|
20
20
|
const provider = pollingProviderMap[networkName];
|
|
21
|
-
if (!(0,
|
|
21
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(provider)) {
|
|
22
22
|
throw new Error(`Polling provider not yet loaded for network ${networkName}`);
|
|
23
23
|
}
|
|
24
24
|
return provider;
|
|
@@ -33,30 +33,30 @@ const setPollingProviderForNetwork = (networkName, provider) => {
|
|
|
33
33
|
};
|
|
34
34
|
exports.setPollingProviderForNetwork = setPollingProviderForNetwork;
|
|
35
35
|
const getMerkleTreeForNetwork = (networkName) => {
|
|
36
|
-
const network =
|
|
36
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
37
37
|
const { chain } = network;
|
|
38
38
|
const merkleTree = (0, engine_1.getEngine)().merkletrees[chain.type][chain.id];
|
|
39
|
-
if (!(0,
|
|
39
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(merkleTree)) {
|
|
40
40
|
throw new Error(`MerkleTree not yet loaded for network ${network.publicName}`);
|
|
41
41
|
}
|
|
42
42
|
return merkleTree;
|
|
43
43
|
};
|
|
44
44
|
exports.getMerkleTreeForNetwork = getMerkleTreeForNetwork;
|
|
45
45
|
const getDopSmartWalletContractForNetwork = (networkName) => {
|
|
46
|
-
const network =
|
|
46
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
47
47
|
const { chain } = network;
|
|
48
48
|
const dopSmartWalletContract = (0, engine_1.getEngine)().dopSmartWalletContracts[chain.type][chain.id];
|
|
49
|
-
if (!(0,
|
|
49
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(dopSmartWalletContract)) {
|
|
50
50
|
throw new Error(`DopSmartWallet contract not yet loaded for network ${network.publicName}`);
|
|
51
51
|
}
|
|
52
52
|
return dopSmartWalletContract;
|
|
53
53
|
};
|
|
54
54
|
exports.getDopSmartWalletContractForNetwork = getDopSmartWalletContractForNetwork;
|
|
55
55
|
const getRelayAdaptContractForNetwork = (networkName) => {
|
|
56
|
-
const network =
|
|
56
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
57
57
|
const { chain } = network;
|
|
58
58
|
const relayAdaptContract = (0, engine_1.getEngine)().relayAdaptContracts[chain.type][chain.id];
|
|
59
|
-
if (!(0,
|
|
59
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(relayAdaptContract)) {
|
|
60
60
|
throw new Error(`Relay Adapt contract not yet loaded for network ${network.publicName}`);
|
|
61
61
|
}
|
|
62
62
|
return relayAdaptContract;
|
|
@@ -67,7 +67,7 @@ const createFallbackProviderForNetwork = async (networkName, fallbackProviderJso
|
|
|
67
67
|
if (existingProvider) {
|
|
68
68
|
return existingProvider;
|
|
69
69
|
}
|
|
70
|
-
const fallbackProvider = (0,
|
|
70
|
+
const fallbackProvider = (0, dop_sharedmodel_v5_1.createFallbackProviderFromJsonConfig)(fallbackProviderJsonConfig);
|
|
71
71
|
(0, exports.setFallbackProviderForNetwork)(networkName, fallbackProvider);
|
|
72
72
|
return fallbackProvider;
|
|
73
73
|
};
|
|
@@ -76,7 +76,7 @@ const createPollingProviderForNetwork = async (networkName, fallbackProvider, po
|
|
|
76
76
|
if (existingProvider) {
|
|
77
77
|
return existingProvider;
|
|
78
78
|
}
|
|
79
|
-
const pollingProvider = await (0,
|
|
79
|
+
const pollingProvider = await (0, dop_engine_v5_1.createPollingJsonRpcProviderForListeners)(fallbackProvider, pollingInterval);
|
|
80
80
|
(0, exports.setPollingProviderForNetwork)(networkName, pollingProvider);
|
|
81
81
|
return pollingProvider;
|
|
82
82
|
};
|
|
@@ -84,7 +84,7 @@ const loadProviderForNetwork = async (chain, networkName, fallbackProviderJsonCo
|
|
|
84
84
|
(0, logger_1.sendMessage)(`Load provider for network: ${networkName}`);
|
|
85
85
|
const fallbackProvider = await createFallbackProviderForNetwork(networkName, fallbackProviderJsonConfig);
|
|
86
86
|
const pollingProvider = await createPollingProviderForNetwork(networkName, fallbackProvider, pollingInterval);
|
|
87
|
-
const network =
|
|
87
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
88
88
|
const { proxyContract, relayAdaptContract, deploymentBlock, publicName } = network;
|
|
89
89
|
// eslint-disable-next-line
|
|
90
90
|
if (!proxyContract) {
|
|
@@ -110,7 +110,7 @@ const loadProviderForNetwork = async (chain, networkName, fallbackProviderJsonCo
|
|
|
110
110
|
const loadProvider = async (fallbackProviderJsonConfig, networkName, pollingInterval = 15000) => {
|
|
111
111
|
try {
|
|
112
112
|
delete fallbackProviderMap[networkName];
|
|
113
|
-
const { chain } =
|
|
113
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
114
114
|
if (fallbackProviderJsonConfig.chainId !== chain.id) {
|
|
115
115
|
throw new Error('Invalid chain ID');
|
|
116
116
|
}
|
|
@@ -144,7 +144,7 @@ const pauseAllPollingProviders = (excludeNetworkName) => {
|
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
const pollingProvider = pollingProviderMap[networkName];
|
|
147
|
-
if ((0,
|
|
147
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(pollingProvider) && !pollingProvider.paused) {
|
|
148
148
|
pollingProvider.pause();
|
|
149
149
|
}
|
|
150
150
|
});
|
|
@@ -153,7 +153,7 @@ exports.pauseAllPollingProviders = pauseAllPollingProviders;
|
|
|
153
153
|
const resumeIsolatedPollingProviderForNetwork = (networkName) => {
|
|
154
154
|
(0, exports.pauseAllPollingProviders)(networkName);
|
|
155
155
|
const pollingProviderForNetwork = pollingProviderMap[networkName];
|
|
156
|
-
if ((0,
|
|
156
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(pollingProviderForNetwork) &&
|
|
157
157
|
pollingProviderForNetwork.paused) {
|
|
158
158
|
pollingProviderForNetwork.resume();
|
|
159
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../src/services/dop/core/providers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FallbackProviderJsonConfig,\n createFallbackProviderFromJsonConfig,\n NetworkName,\n NETWORK_CONFIG,\n LoadProviderResponse,\n isDefined,\n} from 'dop-sharedmodel';\nimport { sendMessage } from '../../../utils/logger';\nimport { getEngine } from './engine';\nimport {\n Chain,\n DopSmartWalletContract,\n RelayAdaptContract,\n PollingJsonRpcProvider,\n createPollingJsonRpcProviderForListeners,\n} from 'dop-engine';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { FallbackProvider } from 'ethers';\n\nconst fallbackProviderMap: MapType<FallbackProvider> = {};\nconst pollingProviderMap: MapType<PollingJsonRpcProvider> = {};\n\nexport const getFallbackProviderForNetwork = (\n networkName: NetworkName,\n): FallbackProvider => {\n const provider = fallbackProviderMap[networkName];\n if (!isDefined(provider)) {\n throw new Error(`Provider not yet loaded for network ${networkName}`);\n }\n return provider;\n};\n\nexport const getPollingProviderForNetwork = (\n networkName: NetworkName,\n): PollingJsonRpcProvider => {\n const provider = pollingProviderMap[networkName];\n if (!isDefined(provider)) {\n throw new Error(\n `Polling provider not yet loaded for network ${networkName}`,\n );\n }\n return provider;\n};\n\nexport const setFallbackProviderForNetwork = (\n networkName: NetworkName,\n provider: FallbackProvider,\n): void => {\n fallbackProviderMap[networkName] = provider;\n};\n\nexport const setPollingProviderForNetwork = (\n networkName: NetworkName,\n provider: PollingJsonRpcProvider,\n): void => {\n pollingProviderMap[networkName] = provider;\n};\n\nexport const getMerkleTreeForNetwork = (networkName: NetworkName) => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n const merkleTree = getEngine().merkletrees[chain.type][chain.id];\n if (!isDefined(merkleTree)) {\n throw new Error(\n `MerkleTree not yet loaded for network ${network.publicName}`,\n );\n }\n return merkleTree;\n};\n\nexport const getDopSmartWalletContractForNetwork = (\n networkName: NetworkName,\n): DopSmartWalletContract => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n\n const dopSmartWalletContract =\n getEngine().dopSmartWalletContracts[chain.type][chain.id];\n if (!isDefined(dopSmartWalletContract)) {\n throw new Error(\n `DopSmartWallet contract not yet loaded for network ${network.publicName}`,\n );\n }\n return dopSmartWalletContract;\n};\n\nexport const getRelayAdaptContractForNetwork = (\n networkName: NetworkName,\n): RelayAdaptContract => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n const relayAdaptContract =\n getEngine().relayAdaptContracts[chain.type][chain.id];\n if (!isDefined(relayAdaptContract)) {\n throw new Error(\n `Relay Adapt contract not yet loaded for network ${network.publicName}`,\n );\n }\n return relayAdaptContract;\n};\n\nconst createFallbackProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n): Promise<FallbackProvider> => {\n const existingProvider = fallbackProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const fallbackProvider = createFallbackProviderFromJsonConfig(\n fallbackProviderJsonConfig,\n );\n setFallbackProviderForNetwork(networkName, fallbackProvider);\n return fallbackProvider;\n};\n\nconst createPollingProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProvider: FallbackProvider,\n pollingInterval: number,\n): Promise<PollingJsonRpcProvider> => {\n const existingProvider = pollingProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const pollingProvider = await createPollingJsonRpcProviderForListeners(\n fallbackProvider,\n pollingInterval,\n );\n setPollingProviderForNetwork(networkName, pollingProvider);\n return pollingProvider;\n};\n\nconst loadProviderForNetwork = async (\n chain: Chain,\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n pollingInterval: number,\n) => {\n sendMessage(`Load provider for network: ${networkName}`);\n\n const fallbackProvider = await createFallbackProviderForNetwork(\n networkName,\n fallbackProviderJsonConfig,\n );\n const pollingProvider = await createPollingProviderForNetwork(\n networkName,\n fallbackProvider,\n pollingInterval,\n );\n\n const network = NETWORK_CONFIG[networkName];\n const { proxyContract, relayAdaptContract, deploymentBlock, publicName } =\n network;\n // eslint-disable-next-line\n if (!proxyContract) {\n throw new Error(`Could not find Proxy contract for network: ${publicName}`);\n }\n // eslint-disable-next-line\n if (!relayAdaptContract) {\n throw new Error(\n `Could not find Relay Adapt contract for network: ${publicName}`,\n );\n }\n\n const engine = getEngine();\n\n // This function will set up the contracts for this chain.\n // Throws if provider does not respond.\n await engine.loadNetwork(\n chain,\n proxyContract,\n relayAdaptContract,\n fallbackProvider,\n pollingProvider,\n deploymentBlock ?? 0,\n );\n\n // NOTE: This is an async call, but we need not await.\n // Let Engine scan events in the background.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n engine.scanHistory(chain);\n};\n\n/**\n * Note: The first provider listed in your fallback provider config is used as a polling provider\n * for new DOP events (balance updates).\n */\nexport const loadProvider = async (\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n networkName: NetworkName,\n pollingInterval = 15000,\n): Promise<LoadProviderResponse> => {\n try {\n delete fallbackProviderMap[networkName];\n\n const { chain } = NETWORK_CONFIG[networkName];\n if (fallbackProviderJsonConfig.chainId !== chain.id) {\n throw new Error('Invalid chain ID');\n }\n\n await loadProviderForNetwork(\n chain,\n networkName,\n fallbackProviderJsonConfig,\n pollingInterval,\n );\n\n const dopSmartWalletContract =\n getDopSmartWalletContractForNetwork(networkName);\n\n const { shield, unshield, nft } = await dopSmartWalletContract.fees();\n\n // Note: Shield and Unshield fees are in basis points.\n // NFT fee is in wei (though currently 0).\n const feesSerialized = {\n shield: shield.toString(),\n unshield: unshield.toString(),\n nft: nft.toString(),\n };\n\n return { feesSerialized };\n } catch (err) {\n throw reportAndSanitizeError(loadProvider.name, err);\n }\n};\n\nexport const unloadProvider = async (\n networkName: NetworkName,\n): Promise<void> => {\n await fallbackProviderMap[networkName]?.destroy();\n pollingProviderMap[networkName]?.destroy();\n delete fallbackProviderMap[networkName];\n delete pollingProviderMap[networkName];\n};\n\nexport const pauseAllPollingProviders = (\n excludeNetworkName?: NetworkName,\n): void => {\n Object.keys(pollingProviderMap).forEach(networkName => {\n if (networkName === excludeNetworkName) {\n return;\n }\n const pollingProvider = pollingProviderMap[networkName];\n if (isDefined(pollingProvider) && !pollingProvider.paused) {\n pollingProvider.pause();\n }\n });\n};\n\nexport const resumeIsolatedPollingProviderForNetwork = (\n networkName: NetworkName,\n): void => {\n pauseAllPollingProviders(\n networkName, // excludeNetworkName\n );\n const pollingProviderForNetwork = pollingProviderMap[networkName];\n if (\n isDefined(pollingProviderForNetwork) &&\n pollingProviderForNetwork.paused\n ) {\n pollingProviderForNetwork.resume();\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../src/services/dop/core/providers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FallbackProviderJsonConfig,\n createFallbackProviderFromJsonConfig,\n NetworkName,\n NETWORK_CONFIG,\n LoadProviderResponse,\n isDefined,\n} from 'dop-sharedmodel-v5';\nimport { sendMessage } from '../../../utils/logger';\nimport { getEngine } from './engine';\nimport {\n Chain,\n DopSmartWalletContract,\n RelayAdaptContract,\n PollingJsonRpcProvider,\n createPollingJsonRpcProviderForListeners,\n} from 'dop-engine-v5';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { FallbackProvider } from 'ethers';\n\nconst fallbackProviderMap: MapType<FallbackProvider> = {};\nconst pollingProviderMap: MapType<PollingJsonRpcProvider> = {};\n\nexport const getFallbackProviderForNetwork = (\n networkName: NetworkName,\n): FallbackProvider => {\n const provider = fallbackProviderMap[networkName];\n if (!isDefined(provider)) {\n throw new Error(`Provider not yet loaded for network ${networkName}`);\n }\n return provider;\n};\n\nexport const getPollingProviderForNetwork = (\n networkName: NetworkName,\n): PollingJsonRpcProvider => {\n const provider = pollingProviderMap[networkName];\n if (!isDefined(provider)) {\n throw new Error(\n `Polling provider not yet loaded for network ${networkName}`,\n );\n }\n return provider;\n};\n\nexport const setFallbackProviderForNetwork = (\n networkName: NetworkName,\n provider: FallbackProvider,\n): void => {\n fallbackProviderMap[networkName] = provider;\n};\n\nexport const setPollingProviderForNetwork = (\n networkName: NetworkName,\n provider: PollingJsonRpcProvider,\n): void => {\n pollingProviderMap[networkName] = provider;\n};\n\nexport const getMerkleTreeForNetwork = (networkName: NetworkName) => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n const merkleTree = getEngine().merkletrees[chain.type][chain.id];\n if (!isDefined(merkleTree)) {\n throw new Error(\n `MerkleTree not yet loaded for network ${network.publicName}`,\n );\n }\n return merkleTree;\n};\n\nexport const getDopSmartWalletContractForNetwork = (\n networkName: NetworkName,\n): DopSmartWalletContract => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n\n const dopSmartWalletContract =\n getEngine().dopSmartWalletContracts[chain.type][chain.id];\n if (!isDefined(dopSmartWalletContract)) {\n throw new Error(\n `DopSmartWallet contract not yet loaded for network ${network.publicName}`,\n );\n }\n return dopSmartWalletContract;\n};\n\nexport const getRelayAdaptContractForNetwork = (\n networkName: NetworkName,\n): RelayAdaptContract => {\n const network = NETWORK_CONFIG[networkName];\n const { chain } = network;\n const relayAdaptContract =\n getEngine().relayAdaptContracts[chain.type][chain.id];\n if (!isDefined(relayAdaptContract)) {\n throw new Error(\n `Relay Adapt contract not yet loaded for network ${network.publicName}`,\n );\n }\n return relayAdaptContract;\n};\n\nconst createFallbackProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n): Promise<FallbackProvider> => {\n const existingProvider = fallbackProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const fallbackProvider = createFallbackProviderFromJsonConfig(\n fallbackProviderJsonConfig,\n );\n setFallbackProviderForNetwork(networkName, fallbackProvider);\n return fallbackProvider;\n};\n\nconst createPollingProviderForNetwork = async (\n networkName: NetworkName,\n fallbackProvider: FallbackProvider,\n pollingInterval: number,\n): Promise<PollingJsonRpcProvider> => {\n const existingProvider = pollingProviderMap[networkName];\n if (existingProvider) {\n return existingProvider;\n }\n const pollingProvider = await createPollingJsonRpcProviderForListeners(\n fallbackProvider,\n pollingInterval,\n );\n setPollingProviderForNetwork(networkName, pollingProvider);\n return pollingProvider;\n};\n\nconst loadProviderForNetwork = async (\n chain: Chain,\n networkName: NetworkName,\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n pollingInterval: number,\n) => {\n sendMessage(`Load provider for network: ${networkName}`);\n\n const fallbackProvider = await createFallbackProviderForNetwork(\n networkName,\n fallbackProviderJsonConfig,\n );\n const pollingProvider = await createPollingProviderForNetwork(\n networkName,\n fallbackProvider,\n pollingInterval,\n );\n\n const network = NETWORK_CONFIG[networkName];\n const { proxyContract, relayAdaptContract, deploymentBlock, publicName } =\n network;\n // eslint-disable-next-line\n if (!proxyContract) {\n throw new Error(`Could not find Proxy contract for network: ${publicName}`);\n }\n // eslint-disable-next-line\n if (!relayAdaptContract) {\n throw new Error(\n `Could not find Relay Adapt contract for network: ${publicName}`,\n );\n }\n\n const engine = getEngine();\n\n // This function will set up the contracts for this chain.\n // Throws if provider does not respond.\n await engine.loadNetwork(\n chain,\n proxyContract,\n relayAdaptContract,\n fallbackProvider,\n pollingProvider,\n deploymentBlock ?? 0,\n );\n\n // NOTE: This is an async call, but we need not await.\n // Let Engine scan events in the background.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n engine.scanHistory(chain);\n};\n\n/**\n * Note: The first provider listed in your fallback provider config is used as a polling provider\n * for new DOP events (balance updates).\n */\nexport const loadProvider = async (\n fallbackProviderJsonConfig: FallbackProviderJsonConfig,\n networkName: NetworkName,\n pollingInterval = 15000,\n): Promise<LoadProviderResponse> => {\n try {\n delete fallbackProviderMap[networkName];\n\n const { chain } = NETWORK_CONFIG[networkName];\n if (fallbackProviderJsonConfig.chainId !== chain.id) {\n throw new Error('Invalid chain ID');\n }\n\n await loadProviderForNetwork(\n chain,\n networkName,\n fallbackProviderJsonConfig,\n pollingInterval,\n );\n\n const dopSmartWalletContract =\n getDopSmartWalletContractForNetwork(networkName);\n\n const { shield, unshield, nft } = await dopSmartWalletContract.fees();\n\n // Note: Shield and Unshield fees are in basis points.\n // NFT fee is in wei (though currently 0).\n const feesSerialized = {\n shield: shield.toString(),\n unshield: unshield.toString(),\n nft: nft.toString(),\n };\n\n return { feesSerialized };\n } catch (err) {\n throw reportAndSanitizeError(loadProvider.name, err);\n }\n};\n\nexport const unloadProvider = async (\n networkName: NetworkName,\n): Promise<void> => {\n await fallbackProviderMap[networkName]?.destroy();\n pollingProviderMap[networkName]?.destroy();\n delete fallbackProviderMap[networkName];\n delete pollingProviderMap[networkName];\n};\n\nexport const pauseAllPollingProviders = (\n excludeNetworkName?: NetworkName,\n): void => {\n Object.keys(pollingProviderMap).forEach(networkName => {\n if (networkName === excludeNetworkName) {\n return;\n }\n const pollingProvider = pollingProviderMap[networkName];\n if (isDefined(pollingProvider) && !pollingProvider.paused) {\n pollingProvider.pause();\n }\n });\n};\n\nexport const resumeIsolatedPollingProviderForNetwork = (\n networkName: NetworkName,\n): void => {\n pauseAllPollingProviders(\n networkName, // excludeNetworkName\n );\n const pollingProviderForNetwork = pollingProviderMap[networkName];\n if (\n isDefined(pollingProviderForNetwork) &&\n pollingProviderForNetwork.paused\n ) {\n pollingProviderForNetwork.resume();\n }\n};\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAllShields = void 0;
|
|
4
|
-
const
|
|
4
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
5
|
const engine_1 = require("./engine");
|
|
6
6
|
const getAllShields = async (networkName, startingBlock) => {
|
|
7
7
|
const engine = (0, engine_1.getEngine)();
|
|
8
|
-
const { chain } =
|
|
8
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
9
9
|
const encryptCommitments = await engine.getAllEncryptCommitments(chain, startingBlock);
|
|
10
10
|
return encryptCommitments.map(commitment => {
|
|
11
11
|
const shieldData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shields.js","sourceRoot":"","sources":["../../../../src/services/dop/core/shields.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"shields.js","sourceRoot":"","sources":["../../../../src/services/dop/core/shields.ts"],"names":[],"mappings":";;;AAAA,2DAAiE;AACjE,qCAAqC;AAQ9B,MAAM,aAAa,GAAG,KAAK,EAChC,WAAwB,EACxB,aAAqB,EACrB,EAAE;IACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAC9D,KAAK,EACL,aAAa,CACd,CAAC;IAEF,OAAO,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACzC,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAnBW,QAAA,aAAa,iBAmBxB","sourcesContent":["import { NETWORK_CONFIG, NetworkName } from 'dop-sharedmodel-v5';\nimport { getEngine } from './engine';\n\nexport type ShieldData = {\n txid: string;\n hash: string;\n timestamp: Optional<number>;\n};\n\nexport const getAllShields = async (\n networkName: NetworkName,\n startingBlock: number,\n) => {\n const engine = getEngine();\n const { chain } = NETWORK_CONFIG[networkName];\n const encryptCommitments = await engine.getAllEncryptCommitments(\n chain,\n startingBlock,\n );\n\n return encryptCommitments.map(commitment => {\n const shieldData: ShieldData = {\n txid: commitment.txid,\n hash: commitment.hash,\n timestamp: commitment.timestamp,\n };\n return shieldData;\n });\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Chain } from 'dop-engine';
|
|
2
|
-
import { TransactionHistoryItem, TransactionHistoryItemCategory } from 'dop-sharedmodel';
|
|
1
|
+
import { Chain } from 'dop-engine-v5';
|
|
2
|
+
import { TransactionHistoryItem, TransactionHistoryItemCategory } from 'dop-sharedmodel-v5';
|
|
3
3
|
export declare const categoryForTransactionHistoryItem: (historyItem: TransactionHistoryItem) => TransactionHistoryItemCategory;
|
|
4
4
|
export declare const getWalletTransactionHistory: (chain: Chain, dopWalletID: string, startingBlock: Optional<number>) => Promise<TransactionHistoryItem[]>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getWalletTransactionHistory = exports.categoryForTransactionHistoryItem = 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 engine_1 = require("../core/engine");
|
|
7
7
|
const bytes_1 = require("../util/bytes");
|
|
8
8
|
const error_1 = require("../../../utils/error");
|
|
@@ -67,14 +67,14 @@ const transactionHistoryNFTToDopNFTAmount = (transactionHistoryNFT) => {
|
|
|
67
67
|
};
|
|
68
68
|
};
|
|
69
69
|
const filterERC20 = (tokenAmount) => {
|
|
70
|
-
return tokenAmount.tokenData.tokenType ===
|
|
70
|
+
return tokenAmount.tokenData.tokenType === dop_engine_v5_1.TokenType.ERC20;
|
|
71
71
|
};
|
|
72
72
|
const filterNFT = (tokenAmount) => {
|
|
73
73
|
switch (tokenAmount.tokenData.tokenType) {
|
|
74
|
-
case
|
|
74
|
+
case dop_engine_v5_1.TokenType.ERC20:
|
|
75
75
|
return false;
|
|
76
|
-
case
|
|
77
|
-
case
|
|
76
|
+
case dop_engine_v5_1.TokenType.ERC721:
|
|
77
|
+
case dop_engine_v5_1.TokenType.ERC1155:
|
|
78
78
|
return tokenAmount.amount > BigInt(0);
|
|
79
79
|
}
|
|
80
80
|
};
|
|
@@ -87,14 +87,14 @@ const categoryForTransactionHistoryItem = (historyItem) => {
|
|
|
87
87
|
const hasUnshieldNFTs = historyItem.unshieldNFTAmounts.length > 0;
|
|
88
88
|
if (hasTransferNFTs || hasReceiveNFTs || hasUnshieldNFTs) {
|
|
89
89
|
// Some kind of NFT Transfer. Unhandled case.
|
|
90
|
-
return
|
|
90
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown;
|
|
91
91
|
}
|
|
92
92
|
const hasTransferERC20s = historyItem.transferERC20Amounts.length > 0;
|
|
93
93
|
const hasReceiveERC20s = historyItem.receiveERC20Amounts.length > 0;
|
|
94
94
|
const hasUnshieldERC20s = historyItem.unshieldERC20Amounts.length > 0;
|
|
95
95
|
if (hasTransferERC20s && !hasReceiveERC20s && !hasUnshieldERC20s) {
|
|
96
96
|
// Only transfer erc20s.
|
|
97
|
-
return
|
|
97
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.TransferSendERC20s;
|
|
98
98
|
}
|
|
99
99
|
if (!hasTransferERC20s && hasReceiveERC20s && !hasUnshieldERC20s) {
|
|
100
100
|
// Only receive erc20s.
|
|
@@ -102,20 +102,20 @@ const categoryForTransactionHistoryItem = (historyItem) => {
|
|
|
102
102
|
if (hasShieldFee) {
|
|
103
103
|
// Note: Shield fees were added to contract events in Mar 2023.
|
|
104
104
|
// Prior shields will show as TransferReceiveERC20s without fees.
|
|
105
|
-
return
|
|
105
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.ShieldERC20s;
|
|
106
106
|
}
|
|
107
|
-
return
|
|
107
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.TransferReceiveERC20s;
|
|
108
108
|
}
|
|
109
109
|
if (!hasTransferERC20s && !hasReceiveERC20s && hasUnshieldERC20s) {
|
|
110
110
|
// Only unshield erc20s.
|
|
111
|
-
return
|
|
111
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.UnshieldERC20s;
|
|
112
112
|
}
|
|
113
|
-
return
|
|
113
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown;
|
|
114
114
|
};
|
|
115
115
|
exports.categoryForTransactionHistoryItem = categoryForTransactionHistoryItem;
|
|
116
116
|
const serializeTransactionHistory = (transactionHistory) => {
|
|
117
117
|
const historyItemsUncategorized = transactionHistory.map(historyEntry => ({
|
|
118
|
-
txid: (0,
|
|
118
|
+
txid: (0, dop_engine_v5_1.formatToByteLength)(historyEntry.txid, dop_engine_v5_1.ByteLength.UINT_256, true),
|
|
119
119
|
blockNumber: historyEntry.blockNumber,
|
|
120
120
|
timestamp: historyEntry.timestamp,
|
|
121
121
|
transferERC20Amounts: historyEntry.transferTokenAmounts
|
|
@@ -143,7 +143,7 @@ const serializeTransactionHistory = (transactionHistory) => {
|
|
|
143
143
|
.filter(filterNFT)
|
|
144
144
|
.map(transactionHistoryUnshieldNFTToDopNFTAmount),
|
|
145
145
|
version: historyEntry.version,
|
|
146
|
-
category:
|
|
146
|
+
category: dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown,
|
|
147
147
|
}));
|
|
148
148
|
// Add category for items based on token types.
|
|
149
149
|
return historyItemsUncategorized.map(historyItem => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-history.js","sourceRoot":"","sources":["../../../../src/services/dop/history/transaction-history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TransactionHistoryTransferTokenAmount,\n TransactionHistoryTokenAmount,\n TransactionHistoryEntry,\n Chain,\n TransactionHistoryReceiveTokenAmount,\n TokenType,\n formatToByteLength,\n ByteLength,\n TransactionHistoryUnshieldTokenAmount,\n} from 'dop-engine';\nimport {\n TransactionHistoryItem,\n DopERC20Amount,\n DopSendERC20Amount,\n DopReceiveERC20Amount,\n DopSendNFTAmount,\n DopNFTAmount,\n DopReceiveNFTAmount,\n DopUnshieldERC20Amount,\n DopUnshieldNFTAmount,\n TransactionHistoryItemCategory,\n} from 'dop-sharedmodel';\nimport { walletForID } from '../core/engine';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { reportAndSanitizeError } from '../../../utils/error';\n\nconst transactionHistoryReceiveTokenAmountToDopERC20Amount = (\n transactionHistoryReceiveTokenAmount: TransactionHistoryReceiveTokenAmount,\n): DopReceiveERC20Amount => {\n return {\n ...transactionHistoryTokenAmountToDopERC20Amount(\n transactionHistoryReceiveTokenAmount,\n ),\n memoText: transactionHistoryReceiveTokenAmount.memoText,\n senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,\n shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,\n };\n};\n\nconst transactionHistoryReceiveNFTToDopNFTAmount = (\n transactionHistoryReceiveTokenAmount: TransactionHistoryReceiveTokenAmount,\n): DopReceiveNFTAmount => {\n return {\n ...transactionHistoryNFTToDopNFTAmount(\n transactionHistoryReceiveTokenAmount,\n ),\n memoText: transactionHistoryReceiveTokenAmount.memoText,\n senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,\n shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,\n };\n};\n\nconst transactionHistoryTransferTokenAmountToDopERC20Amount = (\n transactionHistoryTokenAmount: TransactionHistoryTransferTokenAmount,\n): DopSendERC20Amount => {\n const walletSource =\n transactionHistoryTokenAmount.noteAnnotationData?.walletSource;\n return {\n ...transactionHistoryTokenAmountToDopERC20Amount(\n transactionHistoryTokenAmount,\n ),\n recipientAddress: transactionHistoryTokenAmount.recipientAddress,\n memoText: transactionHistoryTokenAmount.memoText,\n walletSource,\n };\n};\n\nconst transactionHistoryUnshieldTokenAmountToDopERC20Amount = (\n transactionHistoryUnshieldTokenAmount: TransactionHistoryUnshieldTokenAmount,\n): DopUnshieldERC20Amount => {\n return {\n ...transactionHistoryTransferTokenAmountToDopERC20Amount(\n transactionHistoryUnshieldTokenAmount,\n ),\n unshieldFee: transactionHistoryUnshieldTokenAmount.unshieldFee,\n };\n};\n\nconst transactionHistoryTransferNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryTransferTokenAmount,\n): DopSendNFTAmount => {\n const walletSource = transactionHistoryNFT.noteAnnotationData?.walletSource;\n return {\n ...transactionHistoryNFTToDopNFTAmount(transactionHistoryNFT),\n memoText: transactionHistoryNFT.memoText,\n walletSource,\n recipientAddress: transactionHistoryNFT.recipientAddress,\n };\n};\n\nconst transactionHistoryUnshieldNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryUnshieldTokenAmount,\n): DopUnshieldNFTAmount => {\n return {\n ...transactionHistoryTransferNFTToDopNFTAmount(transactionHistoryNFT),\n unshieldFee: transactionHistoryNFT.unshieldFee,\n };\n};\n\nconst transactionHistoryTokenAmountToDopERC20Amount = (\n transactionHistoryTokenAmount: TransactionHistoryTokenAmount,\n): DopERC20Amount => {\n return {\n tokenAddress: parseDopTokenAddress(\n transactionHistoryTokenAmount.tokenData.tokenAddress,\n ).toLowerCase(),\n amount: transactionHistoryTokenAmount.amount,\n };\n};\n\nconst transactionHistoryNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryTokenAmount,\n): DopNFTAmount => {\n return {\n nftAddress: parseDopTokenAddress(\n transactionHistoryNFT.tokenData.tokenAddress,\n ).toLowerCase(),\n nftTokenType: transactionHistoryNFT.tokenData.tokenType as 1 | 2,\n tokenSubID: transactionHistoryNFT.tokenData.tokenSubID,\n amount: transactionHistoryNFT.amount,\n };\n};\n\nconst filterERC20 = (tokenAmount: TransactionHistoryTokenAmount) => {\n return tokenAmount.tokenData.tokenType === TokenType.ERC20;\n};\n\nconst filterNFT = (tokenAmount: TransactionHistoryTokenAmount) => {\n switch (tokenAmount.tokenData.tokenType) {\n case TokenType.ERC20:\n return false;\n case TokenType.ERC721:\n case TokenType.ERC1155:\n return tokenAmount.amount > BigInt(0);\n }\n};\n\nconst receiveERC20AmountsHaveShieldFee = (\n receiveERC20Amounts: DopReceiveERC20Amount[],\n): boolean => {\n return receiveERC20Amounts.find(amount => amount.shieldFee) != null;\n};\n\nexport const categoryForTransactionHistoryItem = (\n historyItem: TransactionHistoryItem,\n): TransactionHistoryItemCategory => {\n const hasTransferNFTs = historyItem.transferNFTAmounts.length > 0;\n const hasReceiveNFTs = historyItem.receiveNFTAmounts.length > 0;\n const hasUnshieldNFTs = historyItem.unshieldNFTAmounts.length > 0;\n if (hasTransferNFTs || hasReceiveNFTs || hasUnshieldNFTs) {\n // Some kind of NFT Transfer. Unhandled case.\n return TransactionHistoryItemCategory.Unknown;\n }\n\n const hasTransferERC20s = historyItem.transferERC20Amounts.length > 0;\n const hasReceiveERC20s = historyItem.receiveERC20Amounts.length > 0;\n const hasUnshieldERC20s = historyItem.unshieldERC20Amounts.length > 0;\n\n if (hasTransferERC20s && !hasReceiveERC20s && !hasUnshieldERC20s) {\n // Only transfer erc20s.\n return TransactionHistoryItemCategory.TransferSendERC20s;\n }\n\n if (!hasTransferERC20s && hasReceiveERC20s && !hasUnshieldERC20s) {\n // Only receive erc20s.\n const hasShieldFee = receiveERC20AmountsHaveShieldFee(\n historyItem.receiveERC20Amounts,\n );\n if (hasShieldFee) {\n // Note: Shield fees were added to contract events in Mar 2023.\n // Prior shields will show as TransferReceiveERC20s without fees.\n return TransactionHistoryItemCategory.ShieldERC20s;\n }\n return TransactionHistoryItemCategory.TransferReceiveERC20s;\n }\n\n if (!hasTransferERC20s && !hasReceiveERC20s && hasUnshieldERC20s) {\n // Only unshield erc20s.\n return TransactionHistoryItemCategory.UnshieldERC20s;\n }\n\n return TransactionHistoryItemCategory.Unknown;\n};\n\nconst serializeTransactionHistory = (\n transactionHistory: TransactionHistoryEntry[],\n): TransactionHistoryItem[] => {\n const historyItemsUncategorized: TransactionHistoryItem[] =\n transactionHistory.map(historyEntry => ({\n txid: formatToByteLength(historyEntry.txid, ByteLength.UINT_256, true),\n blockNumber: historyEntry.blockNumber,\n timestamp: historyEntry.timestamp,\n transferERC20Amounts: historyEntry.transferTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryTransferTokenAmountToDopERC20Amount),\n relayerFeeERC20Amount: historyEntry.relayerFeeTokenAmount\n ? transactionHistoryTokenAmountToDopERC20Amount(\n historyEntry.relayerFeeTokenAmount,\n )\n : undefined,\n changeERC20Amounts: historyEntry.changeTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryTokenAmountToDopERC20Amount),\n receiveERC20Amounts: historyEntry.receiveTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryReceiveTokenAmountToDopERC20Amount),\n unshieldERC20Amounts: historyEntry.unshieldTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryUnshieldTokenAmountToDopERC20Amount),\n receiveNFTAmounts: historyEntry.receiveTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryReceiveNFTToDopNFTAmount),\n transferNFTAmounts: historyEntry.transferTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryTransferNFTToDopNFTAmount),\n unshieldNFTAmounts: historyEntry.unshieldTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryUnshieldNFTToDopNFTAmount),\n version: historyEntry.version,\n category: TransactionHistoryItemCategory.Unknown,\n }));\n\n // Add category for items based on token types.\n return historyItemsUncategorized.map(historyItem => ({\n ...historyItem,\n category: categoryForTransactionHistoryItem(historyItem),\n }));\n};\n\nexport const getWalletTransactionHistory = async (\n chain: Chain,\n dopWalletID: string,\n startingBlock: Optional<number>,\n): Promise<TransactionHistoryItem[]> => {\n try {\n const wallet = walletForID(dopWalletID);\n const transactionHistory = await wallet.getTransactionHistory(\n chain,\n startingBlock,\n );\n return serializeTransactionHistory(transactionHistory);\n } catch (err) {\n reportAndSanitizeError(getWalletTransactionHistory.name, err);\n throw new Error('Could not load DOP wallet transaction history.');\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"transaction-history.js","sourceRoot":"","sources":["../../../../src/services/dop/history/transaction-history.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TransactionHistoryTransferTokenAmount,\n TransactionHistoryTokenAmount,\n TransactionHistoryEntry,\n Chain,\n TransactionHistoryReceiveTokenAmount,\n TokenType,\n formatToByteLength,\n ByteLength,\n TransactionHistoryUnshieldTokenAmount,\n} from 'dop-engine-v5';\nimport {\n TransactionHistoryItem,\n DopERC20Amount,\n DopSendERC20Amount,\n DopReceiveERC20Amount,\n DopSendNFTAmount,\n DopNFTAmount,\n DopReceiveNFTAmount,\n DopUnshieldERC20Amount,\n DopUnshieldNFTAmount,\n TransactionHistoryItemCategory,\n} from 'dop-sharedmodel-v5';\nimport { walletForID } from '../core/engine';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { reportAndSanitizeError } from '../../../utils/error';\n\nconst transactionHistoryReceiveTokenAmountToDopERC20Amount = (\n transactionHistoryReceiveTokenAmount: TransactionHistoryReceiveTokenAmount,\n): DopReceiveERC20Amount => {\n return {\n ...transactionHistoryTokenAmountToDopERC20Amount(\n transactionHistoryReceiveTokenAmount,\n ),\n memoText: transactionHistoryReceiveTokenAmount.memoText,\n senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,\n shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,\n };\n};\n\nconst transactionHistoryReceiveNFTToDopNFTAmount = (\n transactionHistoryReceiveTokenAmount: TransactionHistoryReceiveTokenAmount,\n): DopReceiveNFTAmount => {\n return {\n ...transactionHistoryNFTToDopNFTAmount(\n transactionHistoryReceiveTokenAmount,\n ),\n memoText: transactionHistoryReceiveTokenAmount.memoText,\n senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,\n shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,\n };\n};\n\nconst transactionHistoryTransferTokenAmountToDopERC20Amount = (\n transactionHistoryTokenAmount: TransactionHistoryTransferTokenAmount,\n): DopSendERC20Amount => {\n const walletSource =\n transactionHistoryTokenAmount.noteAnnotationData?.walletSource;\n return {\n ...transactionHistoryTokenAmountToDopERC20Amount(\n transactionHistoryTokenAmount,\n ),\n recipientAddress: transactionHistoryTokenAmount.recipientAddress,\n memoText: transactionHistoryTokenAmount.memoText,\n walletSource,\n };\n};\n\nconst transactionHistoryUnshieldTokenAmountToDopERC20Amount = (\n transactionHistoryUnshieldTokenAmount: TransactionHistoryUnshieldTokenAmount,\n): DopUnshieldERC20Amount => {\n return {\n ...transactionHistoryTransferTokenAmountToDopERC20Amount(\n transactionHistoryUnshieldTokenAmount,\n ),\n unshieldFee: transactionHistoryUnshieldTokenAmount.unshieldFee,\n };\n};\n\nconst transactionHistoryTransferNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryTransferTokenAmount,\n): DopSendNFTAmount => {\n const walletSource = transactionHistoryNFT.noteAnnotationData?.walletSource;\n return {\n ...transactionHistoryNFTToDopNFTAmount(transactionHistoryNFT),\n memoText: transactionHistoryNFT.memoText,\n walletSource,\n recipientAddress: transactionHistoryNFT.recipientAddress,\n };\n};\n\nconst transactionHistoryUnshieldNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryUnshieldTokenAmount,\n): DopUnshieldNFTAmount => {\n return {\n ...transactionHistoryTransferNFTToDopNFTAmount(transactionHistoryNFT),\n unshieldFee: transactionHistoryNFT.unshieldFee,\n };\n};\n\nconst transactionHistoryTokenAmountToDopERC20Amount = (\n transactionHistoryTokenAmount: TransactionHistoryTokenAmount,\n): DopERC20Amount => {\n return {\n tokenAddress: parseDopTokenAddress(\n transactionHistoryTokenAmount.tokenData.tokenAddress,\n ).toLowerCase(),\n amount: transactionHistoryTokenAmount.amount,\n };\n};\n\nconst transactionHistoryNFTToDopNFTAmount = (\n transactionHistoryNFT: TransactionHistoryTokenAmount,\n): DopNFTAmount => {\n return {\n nftAddress: parseDopTokenAddress(\n transactionHistoryNFT.tokenData.tokenAddress,\n ).toLowerCase(),\n nftTokenType: transactionHistoryNFT.tokenData.tokenType as 1 | 2,\n tokenSubID: transactionHistoryNFT.tokenData.tokenSubID,\n amount: transactionHistoryNFT.amount,\n };\n};\n\nconst filterERC20 = (tokenAmount: TransactionHistoryTokenAmount) => {\n return tokenAmount.tokenData.tokenType === TokenType.ERC20;\n};\n\nconst filterNFT = (tokenAmount: TransactionHistoryTokenAmount) => {\n switch (tokenAmount.tokenData.tokenType) {\n case TokenType.ERC20:\n return false;\n case TokenType.ERC721:\n case TokenType.ERC1155:\n return tokenAmount.amount > BigInt(0);\n }\n};\n\nconst receiveERC20AmountsHaveShieldFee = (\n receiveERC20Amounts: DopReceiveERC20Amount[],\n): boolean => {\n return receiveERC20Amounts.find(amount => amount.shieldFee) != null;\n};\n\nexport const categoryForTransactionHistoryItem = (\n historyItem: TransactionHistoryItem,\n): TransactionHistoryItemCategory => {\n const hasTransferNFTs = historyItem.transferNFTAmounts.length > 0;\n const hasReceiveNFTs = historyItem.receiveNFTAmounts.length > 0;\n const hasUnshieldNFTs = historyItem.unshieldNFTAmounts.length > 0;\n if (hasTransferNFTs || hasReceiveNFTs || hasUnshieldNFTs) {\n // Some kind of NFT Transfer. Unhandled case.\n return TransactionHistoryItemCategory.Unknown;\n }\n\n const hasTransferERC20s = historyItem.transferERC20Amounts.length > 0;\n const hasReceiveERC20s = historyItem.receiveERC20Amounts.length > 0;\n const hasUnshieldERC20s = historyItem.unshieldERC20Amounts.length > 0;\n\n if (hasTransferERC20s && !hasReceiveERC20s && !hasUnshieldERC20s) {\n // Only transfer erc20s.\n return TransactionHistoryItemCategory.TransferSendERC20s;\n }\n\n if (!hasTransferERC20s && hasReceiveERC20s && !hasUnshieldERC20s) {\n // Only receive erc20s.\n const hasShieldFee = receiveERC20AmountsHaveShieldFee(\n historyItem.receiveERC20Amounts,\n );\n if (hasShieldFee) {\n // Note: Shield fees were added to contract events in Mar 2023.\n // Prior shields will show as TransferReceiveERC20s without fees.\n return TransactionHistoryItemCategory.ShieldERC20s;\n }\n return TransactionHistoryItemCategory.TransferReceiveERC20s;\n }\n\n if (!hasTransferERC20s && !hasReceiveERC20s && hasUnshieldERC20s) {\n // Only unshield erc20s.\n return TransactionHistoryItemCategory.UnshieldERC20s;\n }\n\n return TransactionHistoryItemCategory.Unknown;\n};\n\nconst serializeTransactionHistory = (\n transactionHistory: TransactionHistoryEntry[],\n): TransactionHistoryItem[] => {\n const historyItemsUncategorized: TransactionHistoryItem[] =\n transactionHistory.map(historyEntry => ({\n txid: formatToByteLength(historyEntry.txid, ByteLength.UINT_256, true),\n blockNumber: historyEntry.blockNumber,\n timestamp: historyEntry.timestamp,\n transferERC20Amounts: historyEntry.transferTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryTransferTokenAmountToDopERC20Amount),\n relayerFeeERC20Amount: historyEntry.relayerFeeTokenAmount\n ? transactionHistoryTokenAmountToDopERC20Amount(\n historyEntry.relayerFeeTokenAmount,\n )\n : undefined,\n changeERC20Amounts: historyEntry.changeTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryTokenAmountToDopERC20Amount),\n receiveERC20Amounts: historyEntry.receiveTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryReceiveTokenAmountToDopERC20Amount),\n unshieldERC20Amounts: historyEntry.unshieldTokenAmounts\n .filter(filterERC20)\n .map(transactionHistoryUnshieldTokenAmountToDopERC20Amount),\n receiveNFTAmounts: historyEntry.receiveTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryReceiveNFTToDopNFTAmount),\n transferNFTAmounts: historyEntry.transferTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryTransferNFTToDopNFTAmount),\n unshieldNFTAmounts: historyEntry.unshieldTokenAmounts\n .filter(filterNFT)\n .map(transactionHistoryUnshieldNFTToDopNFTAmount),\n version: historyEntry.version,\n category: TransactionHistoryItemCategory.Unknown,\n }));\n\n // Add category for items based on token types.\n return historyItemsUncategorized.map(historyItem => ({\n ...historyItem,\n category: categoryForTransactionHistoryItem(historyItem),\n }));\n};\n\nexport const getWalletTransactionHistory = async (\n chain: Chain,\n dopWalletID: string,\n startingBlock: Optional<number>,\n): Promise<TransactionHistoryItem[]> => {\n try {\n const wallet = walletForID(dopWalletID);\n const transactionHistory = await wallet.getTransactionHistory(\n chain,\n startingBlock,\n );\n return serializeTransactionHistory(transactionHistory);\n } catch (err) {\n reportAndSanitizeError(getWalletTransactionHistory.name, err);\n throw new Error('Could not load DOP wallet transaction history.');\n }\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AddressData, CommitmentCiphertext } from 'dop-engine';
|
|
2
|
-
import { Network, DopERC20Amount } from 'dop-sharedmodel';
|
|
1
|
+
import { AddressData, CommitmentCiphertext } from 'dop-engine-v5';
|
|
2
|
+
import { Network, DopERC20Amount } from 'dop-sharedmodel-v5';
|
|
3
3
|
import { ContractTransaction } from 'ethers';
|
|
4
4
|
export declare const extractFirstNoteERC20AmountMapFromTransactionRequest: (dopWalletID: string, network: Network, transactionRequest: ContractTransaction, useRelayAdapt: boolean) => Promise<MapType<bigint>>;
|
|
5
5
|
export declare const extractERC20AmountFromCommitmentCiphertext: (network: Network, commitmentCiphertext: CommitmentCiphertext, commitmentHash: string, receivingViewingPrivateKey: Uint8Array, receivingDopAddressData: AddressData) => Promise<Optional<DopERC20Amount>>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.extractERC20AmountFromCommitmentCiphertext = exports.extractFirstNoteERC20AmountMapFromTransactionRequest = void 0;
|
|
4
|
-
const
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
5
|
const engine_1 = require("../core/engine");
|
|
6
6
|
const wallets_1 = require("../wallets");
|
|
7
|
-
const
|
|
7
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
8
8
|
const providers_1 = require("../core/providers");
|
|
9
9
|
const utils_1 = require("../../../utils");
|
|
10
10
|
const util_1 = require("../util");
|
|
@@ -18,9 +18,9 @@ var TransactionName;
|
|
|
18
18
|
const getABIForTransaction = (transactionName) => {
|
|
19
19
|
switch (transactionName) {
|
|
20
20
|
case TransactionName.DopSmartWallet:
|
|
21
|
-
return
|
|
21
|
+
return dop_engine_v5_1.ABIDopSmartWallet;
|
|
22
22
|
case TransactionName.RelayAdapt:
|
|
23
|
-
return
|
|
23
|
+
return dop_engine_v5_1.ABIRelayAdapt;
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
const extractFirstNoteERC20AmountMapFromTransactionRequest = (dopWalletID, network, transactionRequest, useRelayAdapt) => {
|
|
@@ -87,17 +87,17 @@ const extractFirstNoteERC20AmountMap = async (dopWalletID, network, transactionR
|
|
|
87
87
|
const index = 0;
|
|
88
88
|
const commitmentCiphertextStructOutput = boundParams.commitmentCiphertext[index];
|
|
89
89
|
const commitmentHash = commitments[index];
|
|
90
|
-
if (!(0,
|
|
90
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(commitmentCiphertextStructOutput)) {
|
|
91
91
|
(0, utils_1.sendMessage)('no ciphertext found for commitment at index 0');
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
|
-
const commitmentCiphertext = (0,
|
|
94
|
+
const commitmentCiphertext = (0, dop_engine_v5_1.formatCommitmentCiphertext)(commitmentCiphertextStructOutput);
|
|
95
95
|
const erc20PaymentAmount = await (0, exports.extractERC20AmountFromCommitmentCiphertext)(network, commitmentCiphertext, commitmentHash, receivingViewingPrivateKey, receivingDopAddressData);
|
|
96
96
|
if (!erc20PaymentAmount) {
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
99
|
const { tokenAddress, amount } = erc20PaymentAmount;
|
|
100
|
-
if (!(0,
|
|
100
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(erc20PaymentAmounts[tokenAddress])) {
|
|
101
101
|
erc20PaymentAmounts[tokenAddress] = 0n;
|
|
102
102
|
}
|
|
103
103
|
erc20PaymentAmounts[tokenAddress] += amount;
|
|
@@ -106,16 +106,16 @@ const extractFirstNoteERC20AmountMap = async (dopWalletID, network, transactionR
|
|
|
106
106
|
};
|
|
107
107
|
const decryptReceiverNoteSafe = async (commitmentCiphertext, receivingViewingPrivateKey, receivingDopAddressData, chain) => {
|
|
108
108
|
try {
|
|
109
|
-
const blindedSenderViewingKey = (0,
|
|
110
|
-
const blindedReceiverViewingKey = (0,
|
|
111
|
-
const sharedKey = await (0,
|
|
109
|
+
const blindedSenderViewingKey = (0, dop_engine_v5_1.hexStringToBytes)(commitmentCiphertext.blindedSenderViewingKey);
|
|
110
|
+
const blindedReceiverViewingKey = (0, dop_engine_v5_1.hexStringToBytes)(commitmentCiphertext.blindedReceiverViewingKey);
|
|
111
|
+
const sharedKey = await (0, dop_engine_v5_1.getSharedSymmetricKey)(receivingViewingPrivateKey, blindedSenderViewingKey);
|
|
112
112
|
if (!sharedKey) {
|
|
113
113
|
(0, utils_1.sendMessage)('invalid sharedKey');
|
|
114
114
|
return undefined;
|
|
115
115
|
}
|
|
116
116
|
const { db } = (0, engine_1.getEngine)();
|
|
117
|
-
const tokenDataGetter = new
|
|
118
|
-
const note = await
|
|
117
|
+
const tokenDataGetter = new dop_engine_v5_1.TokenDataGetter(db, chain);
|
|
118
|
+
const note = await dop_engine_v5_1.TransactNote.decrypt(receivingDopAddressData, commitmentCiphertext.ciphertext, sharedKey, commitmentCiphertext.memo, commitmentCiphertext.annotationData, blindedReceiverViewingKey, // blindedReceiverViewingKey
|
|
119
119
|
blindedSenderViewingKey, // blindedSenderViewingKey
|
|
120
120
|
undefined, // senderRandom - not used
|
|
121
121
|
false, // isSentNote
|
|
@@ -140,14 +140,14 @@ const extractERC20AmountFromCommitmentCiphertext = async (network, commitmentCip
|
|
|
140
140
|
(0, utils_1.sendMessage)('invalid masterPublicKey');
|
|
141
141
|
return;
|
|
142
142
|
}
|
|
143
|
-
const noteHash = (0,
|
|
144
|
-
const commitHash = (0,
|
|
143
|
+
const noteHash = (0, dop_engine_v5_1.nToHex)(decryptedReceiverNote.hash, dop_engine_v5_1.ByteLength.UINT_256);
|
|
144
|
+
const commitHash = (0, dop_engine_v5_1.formatToByteLength)(commitmentHash, dop_engine_v5_1.ByteLength.UINT_256);
|
|
145
145
|
if (noteHash !== commitHash) {
|
|
146
146
|
(0, utils_1.sendMessage)('invalid commitHash');
|
|
147
147
|
return;
|
|
148
148
|
}
|
|
149
149
|
const { tokenData } = decryptedReceiverNote;
|
|
150
|
-
if (tokenData.tokenType !==
|
|
150
|
+
if (tokenData.tokenType !== dop_engine_v5_1.TokenType.ERC20) {
|
|
151
151
|
(0, utils_1.sendMessage)('not an erc20');
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-first-note.js","sourceRoot":"","sources":["../../../../src/services/dop/process/extract-first-note.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ABIDopSmartWallet,\n ABIRelayAdapt,\n formatToByteLength,\n ByteLength,\n TransactNote,\n hexStringToBytes,\n getSharedSymmetricKey,\n TokenDataGetter,\n formatCommitmentCiphertext,\n nToHex,\n TokenType,\n AddressData,\n CommitmentCiphertext,\n CommitmentCiphertextStructOutput,\n} from 'dop-engine';\nimport { getEngine, walletForID } from '../core/engine';\nimport { getDopWalletAddressData } from '../wallets';\nimport {\n Chain,\n Network,\n DopERC20Amount,\n isDefined,\n} from 'dop-sharedmodel';\nimport { getFallbackProviderForNetwork } from '../core/providers';\nimport { sendMessage } from '../../../utils';\nimport { parseDopTokenAddress } from '../util';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { Contract, ContractTransaction, Result } from 'ethers';\n\ntype BoundParams = {\n // ...\n commitmentCiphertext: CommitmentCiphertextStructOutput[];\n};\n\ntype TransactionData = {\n // ...\n commitments: string[];\n boundParams: BoundParams;\n};\n\nenum TransactionName {\n DopSmartWallet = 'transact',\n RelayAdapt = 'relay',\n}\n\nconst getABIForTransaction = (transactionName: TransactionName): Array<any> => {\n switch (transactionName) {\n case TransactionName.DopSmartWallet:\n return ABIDopSmartWallet;\n case TransactionName.RelayAdapt:\n return ABIRelayAdapt;\n }\n};\n\nexport const extractFirstNoteERC20AmountMapFromTransactionRequest = (\n dopWalletID: string,\n network: Network,\n transactionRequest: ContractTransaction,\n useRelayAdapt: boolean,\n): Promise<MapType<bigint>> => {\n const transactionName = useRelayAdapt\n ? TransactionName.RelayAdapt\n : TransactionName.DopSmartWallet;\n const contractAddress = useRelayAdapt\n ? network.relayAdaptContract\n : network.proxyContract;\n\n return extractFirstNoteERC20AmountMap(\n dopWalletID,\n network,\n transactionRequest,\n transactionName,\n contractAddress,\n );\n};\n\nconst recursivelyDecodeResult = (result: Result): any => {\n if (typeof result !== 'object') {\n // End (primitive) value\n return result;\n }\n try {\n const obj = result.toObject();\n if ('_' in obj) {\n throw new Error('Decode as array, not object');\n }\n Object.keys(obj).forEach(key => {\n obj[key] = recursivelyDecodeResult(obj[key]);\n });\n return obj;\n } catch (err) {\n // Result is array.\n return result\n .toArray()\n .map(item => recursivelyDecodeResult(item as Result));\n }\n};\n\nconst extractFirstNoteERC20AmountMap = async (\n dopWalletID: string,\n network: Network,\n transactionRequest: ContractTransaction,\n transactionName: TransactionName,\n contractAddress: string,\n): Promise<MapType<bigint>> => {\n const abi = getABIForTransaction(transactionName);\n\n if (\n !transactionRequest.to ||\n transactionRequest.to.toLowerCase() !== contractAddress.toLowerCase()\n ) {\n throw new Error(\n `Invalid contract address: got ${transactionRequest.to}, expected ${contractAddress} for network ${network.name}`,\n );\n }\n\n const provider = getFallbackProviderForNetwork(network.name);\n const contract = new Contract(contractAddress, abi, provider);\n\n const parsedTransaction = contract.interface.parseTransaction({\n data: transactionRequest.data ?? '',\n value: transactionRequest.value,\n });\n if (!parsedTransaction) {\n throw new Error('No transaction parsable from request');\n }\n if (parsedTransaction.name !== transactionName) {\n throw new Error(`Contract method invalid: expected ${transactionName}`);\n }\n\n const args = recursivelyDecodeResult(parsedTransaction.args);\n\n const dopWallet = walletForID(dopWalletID);\n const dopWalletAddress = dopWallet.getAddress();\n const receivingViewingPrivateKey = dopWallet.viewingKeyPair.privateKey;\n const receivingDopAddressData =\n getDopWalletAddressData(dopWalletAddress);\n\n const erc20PaymentAmounts: MapType<bigint> = {};\n\n // eslint-disable-next-line no-underscore-dangle\n const dopTxs: TransactionData[] = args._transactions;\n\n await Promise.all(\n dopTxs.map(async (dopTx: TransactionData) => {\n const { commitments, boundParams } = dopTx;\n\n // Extract first commitment (index 0)\n const index = 0;\n const commitmentCiphertextStructOutput =\n boundParams.commitmentCiphertext[index];\n const commitmentHash: string = commitments[index];\n if (!isDefined(commitmentCiphertextStructOutput)) {\n sendMessage('no ciphertext found for commitment at index 0');\n return;\n }\n\n const commitmentCiphertext = formatCommitmentCiphertext(\n commitmentCiphertextStructOutput,\n );\n\n const erc20PaymentAmount =\n await extractERC20AmountFromCommitmentCiphertext(\n network,\n commitmentCiphertext,\n commitmentHash,\n receivingViewingPrivateKey,\n receivingDopAddressData,\n );\n if (!erc20PaymentAmount) {\n return;\n }\n\n const { tokenAddress, amount } = erc20PaymentAmount;\n\n if (!isDefined(erc20PaymentAmounts[tokenAddress])) {\n erc20PaymentAmounts[tokenAddress] = 0n;\n }\n (erc20PaymentAmounts[tokenAddress] as bigint) += amount;\n }),\n );\n\n return erc20PaymentAmounts;\n};\n\nconst decryptReceiverNoteSafe = async (\n commitmentCiphertext: CommitmentCiphertext,\n receivingViewingPrivateKey: Uint8Array,\n receivingDopAddressData: AddressData,\n chain: Chain,\n): Promise<Optional<TransactNote>> => {\n try {\n const blindedSenderViewingKey = hexStringToBytes(\n commitmentCiphertext.blindedSenderViewingKey,\n );\n const blindedReceiverViewingKey = hexStringToBytes(\n commitmentCiphertext.blindedReceiverViewingKey,\n );\n const sharedKey = await getSharedSymmetricKey(\n receivingViewingPrivateKey,\n blindedSenderViewingKey,\n );\n if (!sharedKey) {\n sendMessage('invalid sharedKey');\n return undefined;\n }\n\n const { db } = getEngine();\n const tokenDataGetter = new TokenDataGetter(db, chain);\n\n const note = await TransactNote.decrypt(\n receivingDopAddressData,\n commitmentCiphertext.ciphertext,\n sharedKey,\n commitmentCiphertext.memo,\n commitmentCiphertext.annotationData,\n blindedReceiverViewingKey, // blindedReceiverViewingKey\n blindedSenderViewingKey, // blindedSenderViewingKey\n undefined, // senderRandom - not used\n false, // isSentNote\n false, // isLegacyDecryption\n tokenDataGetter,\n undefined, // blockNumber - not used\n );\n return note;\n } catch (err) {\n reportAndSanitizeError(decryptReceiverNoteSafe.name, err);\n return undefined;\n }\n};\n\nexport const extractERC20AmountFromCommitmentCiphertext = async (\n network: Network,\n commitmentCiphertext: CommitmentCiphertext,\n commitmentHash: string,\n receivingViewingPrivateKey: Uint8Array,\n receivingDopAddressData: AddressData,\n): Promise<Optional<DopERC20Amount>> => {\n const decryptedReceiverNote = await decryptReceiverNoteSafe(\n commitmentCiphertext,\n receivingViewingPrivateKey,\n receivingDopAddressData,\n network.chain,\n );\n if (!decryptedReceiverNote) {\n // Addressed to us, but different note than fee.\n sendMessage('invalid decryptedReceiverNote');\n return;\n }\n\n if (\n decryptedReceiverNote.receiverAddressData.masterPublicKey !==\n receivingDopAddressData.masterPublicKey\n ) {\n sendMessage('invalid masterPublicKey');\n return;\n }\n\n const noteHash = nToHex(decryptedReceiverNote.hash, ByteLength.UINT_256);\n const commitHash = formatToByteLength(commitmentHash, ByteLength.UINT_256);\n if (noteHash !== commitHash) {\n sendMessage('invalid commitHash');\n return;\n }\n\n const { tokenData } = decryptedReceiverNote;\n if (tokenData.tokenType !== TokenType.ERC20) {\n sendMessage('not an erc20');\n return;\n }\n\n const tokenAddress = parseDopTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase();\n\n const amount = decryptedReceiverNote.value;\n const erc20Amount: DopERC20Amount = {\n tokenAddress,\n amount,\n };\n return erc20Amount;\n};\n\nexport { CommitmentCiphertext };\n"]}
|
|
1
|
+
{"version":3,"file":"extract-first-note.js","sourceRoot":"","sources":["../../../../src/services/dop/process/extract-first-note.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ABIDopSmartWallet,\n ABIRelayAdapt,\n formatToByteLength,\n ByteLength,\n TransactNote,\n hexStringToBytes,\n getSharedSymmetricKey,\n TokenDataGetter,\n formatCommitmentCiphertext,\n nToHex,\n TokenType,\n AddressData,\n CommitmentCiphertext,\n CommitmentCiphertextStructOutput,\n} from 'dop-engine-v5';\nimport { getEngine, walletForID } from '../core/engine';\nimport { getDopWalletAddressData } from '../wallets';\nimport {\n Chain,\n Network,\n DopERC20Amount,\n isDefined,\n} from 'dop-sharedmodel-v5';\nimport { getFallbackProviderForNetwork } from '../core/providers';\nimport { sendMessage } from '../../../utils';\nimport { parseDopTokenAddress } from '../util';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { Contract, ContractTransaction, Result } from 'ethers';\n\ntype BoundParams = {\n // ...\n commitmentCiphertext: CommitmentCiphertextStructOutput[];\n};\n\ntype TransactionData = {\n // ...\n commitments: string[];\n boundParams: BoundParams;\n};\n\nenum TransactionName {\n DopSmartWallet = 'transact',\n RelayAdapt = 'relay',\n}\n\nconst getABIForTransaction = (transactionName: TransactionName): Array<any> => {\n switch (transactionName) {\n case TransactionName.DopSmartWallet:\n return ABIDopSmartWallet;\n case TransactionName.RelayAdapt:\n return ABIRelayAdapt;\n }\n};\n\nexport const extractFirstNoteERC20AmountMapFromTransactionRequest = (\n dopWalletID: string,\n network: Network,\n transactionRequest: ContractTransaction,\n useRelayAdapt: boolean,\n): Promise<MapType<bigint>> => {\n const transactionName = useRelayAdapt\n ? TransactionName.RelayAdapt\n : TransactionName.DopSmartWallet;\n const contractAddress = useRelayAdapt\n ? network.relayAdaptContract\n : network.proxyContract;\n\n return extractFirstNoteERC20AmountMap(\n dopWalletID,\n network,\n transactionRequest,\n transactionName,\n contractAddress,\n );\n};\n\nconst recursivelyDecodeResult = (result: Result): any => {\n if (typeof result !== 'object') {\n // End (primitive) value\n return result;\n }\n try {\n const obj = result.toObject();\n if ('_' in obj) {\n throw new Error('Decode as array, not object');\n }\n Object.keys(obj).forEach(key => {\n obj[key] = recursivelyDecodeResult(obj[key]);\n });\n return obj;\n } catch (err) {\n // Result is array.\n return result\n .toArray()\n .map(item => recursivelyDecodeResult(item as Result));\n }\n};\n\nconst extractFirstNoteERC20AmountMap = async (\n dopWalletID: string,\n network: Network,\n transactionRequest: ContractTransaction,\n transactionName: TransactionName,\n contractAddress: string,\n): Promise<MapType<bigint>> => {\n const abi = getABIForTransaction(transactionName);\n\n if (\n !transactionRequest.to ||\n transactionRequest.to.toLowerCase() !== contractAddress.toLowerCase()\n ) {\n throw new Error(\n `Invalid contract address: got ${transactionRequest.to}, expected ${contractAddress} for network ${network.name}`,\n );\n }\n\n const provider = getFallbackProviderForNetwork(network.name);\n const contract = new Contract(contractAddress, abi, provider);\n\n const parsedTransaction = contract.interface.parseTransaction({\n data: transactionRequest.data ?? '',\n value: transactionRequest.value,\n });\n if (!parsedTransaction) {\n throw new Error('No transaction parsable from request');\n }\n if (parsedTransaction.name !== transactionName) {\n throw new Error(`Contract method invalid: expected ${transactionName}`);\n }\n\n const args = recursivelyDecodeResult(parsedTransaction.args);\n\n const dopWallet = walletForID(dopWalletID);\n const dopWalletAddress = dopWallet.getAddress();\n const receivingViewingPrivateKey = dopWallet.viewingKeyPair.privateKey;\n const receivingDopAddressData =\n getDopWalletAddressData(dopWalletAddress);\n\n const erc20PaymentAmounts: MapType<bigint> = {};\n\n // eslint-disable-next-line no-underscore-dangle\n const dopTxs: TransactionData[] = args._transactions;\n\n await Promise.all(\n dopTxs.map(async (dopTx: TransactionData) => {\n const { commitments, boundParams } = dopTx;\n\n // Extract first commitment (index 0)\n const index = 0;\n const commitmentCiphertextStructOutput =\n boundParams.commitmentCiphertext[index];\n const commitmentHash: string = commitments[index];\n if (!isDefined(commitmentCiphertextStructOutput)) {\n sendMessage('no ciphertext found for commitment at index 0');\n return;\n }\n\n const commitmentCiphertext = formatCommitmentCiphertext(\n commitmentCiphertextStructOutput,\n );\n\n const erc20PaymentAmount =\n await extractERC20AmountFromCommitmentCiphertext(\n network,\n commitmentCiphertext,\n commitmentHash,\n receivingViewingPrivateKey,\n receivingDopAddressData,\n );\n if (!erc20PaymentAmount) {\n return;\n }\n\n const { tokenAddress, amount } = erc20PaymentAmount;\n\n if (!isDefined(erc20PaymentAmounts[tokenAddress])) {\n erc20PaymentAmounts[tokenAddress] = 0n;\n }\n (erc20PaymentAmounts[tokenAddress] as bigint) += amount;\n }),\n );\n\n return erc20PaymentAmounts;\n};\n\nconst decryptReceiverNoteSafe = async (\n commitmentCiphertext: CommitmentCiphertext,\n receivingViewingPrivateKey: Uint8Array,\n receivingDopAddressData: AddressData,\n chain: Chain,\n): Promise<Optional<TransactNote>> => {\n try {\n const blindedSenderViewingKey = hexStringToBytes(\n commitmentCiphertext.blindedSenderViewingKey,\n );\n const blindedReceiverViewingKey = hexStringToBytes(\n commitmentCiphertext.blindedReceiverViewingKey,\n );\n const sharedKey = await getSharedSymmetricKey(\n receivingViewingPrivateKey,\n blindedSenderViewingKey,\n );\n if (!sharedKey) {\n sendMessage('invalid sharedKey');\n return undefined;\n }\n\n const { db } = getEngine();\n const tokenDataGetter = new TokenDataGetter(db, chain);\n\n const note = await TransactNote.decrypt(\n receivingDopAddressData,\n commitmentCiphertext.ciphertext,\n sharedKey,\n commitmentCiphertext.memo,\n commitmentCiphertext.annotationData,\n blindedReceiverViewingKey, // blindedReceiverViewingKey\n blindedSenderViewingKey, // blindedSenderViewingKey\n undefined, // senderRandom - not used\n false, // isSentNote\n false, // isLegacyDecryption\n tokenDataGetter,\n undefined, // blockNumber - not used\n );\n return note;\n } catch (err) {\n reportAndSanitizeError(decryptReceiverNoteSafe.name, err);\n return undefined;\n }\n};\n\nexport const extractERC20AmountFromCommitmentCiphertext = async (\n network: Network,\n commitmentCiphertext: CommitmentCiphertext,\n commitmentHash: string,\n receivingViewingPrivateKey: Uint8Array,\n receivingDopAddressData: AddressData,\n): Promise<Optional<DopERC20Amount>> => {\n const decryptedReceiverNote = await decryptReceiverNoteSafe(\n commitmentCiphertext,\n receivingViewingPrivateKey,\n receivingDopAddressData,\n network.chain,\n );\n if (!decryptedReceiverNote) {\n // Addressed to us, but different note than fee.\n sendMessage('invalid decryptedReceiverNote');\n return;\n }\n\n if (\n decryptedReceiverNote.receiverAddressData.masterPublicKey !==\n receivingDopAddressData.masterPublicKey\n ) {\n sendMessage('invalid masterPublicKey');\n return;\n }\n\n const noteHash = nToHex(decryptedReceiverNote.hash, ByteLength.UINT_256);\n const commitHash = formatToByteLength(commitmentHash, ByteLength.UINT_256);\n if (noteHash !== commitHash) {\n sendMessage('invalid commitHash');\n return;\n }\n\n const { tokenData } = decryptedReceiverNote;\n if (tokenData.tokenType !== TokenType.ERC20) {\n sendMessage('not an erc20');\n return;\n }\n\n const tokenAddress = parseDopTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase();\n\n const amount = decryptedReceiverNote.value;\n const erc20Amount: DopERC20Amount = {\n tokenAddress,\n amount,\n };\n return erc20Amount;\n};\n\nexport { CommitmentCiphertext };\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AccumulatedEvents } from 'dop-engine';
|
|
1
|
+
import { AccumulatedEvents } from 'dop-engine-v5';
|
|
2
2
|
export declare const EMPTY_EVENTS: AccumulatedEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-events.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/empty-events.ts"],"names":[],"mappings":";;;AAEa,QAAA,YAAY,GAAsB;IAC7C,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;CACpB,CAAC","sourcesContent":["import { AccumulatedEvents } from 'dop-engine';\n\nexport const EMPTY_EVENTS: AccumulatedEvents = {\n commitmentEvents: [],\n unshieldEvents: [],\n nullifierEvents: [],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"empty-events.js","sourceRoot":"","sources":["../../../../src/services/dop/quick-sync/empty-events.ts"],"names":[],"mappings":";;;AAEa,QAAA,YAAY,GAAsB;IAC7C,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;CACpB,CAAC","sourcesContent":["import { AccumulatedEvents } from 'dop-engine-v5';\n\nexport const EMPTY_EVENTS: AccumulatedEvents = {\n commitmentEvents: [],\n unshieldEvents: [],\n nullifierEvents: [],\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Nullifier, UnshieldStoredEvent, CommitmentEvent } from 'dop-engine';
|
|
1
|
+
import { Nullifier, UnshieldStoredEvent, CommitmentEvent } from 'dop-engine-v5';
|
|
2
2
|
import { Nullifier as GraphNullifier, Unshield as GraphUnshield, LegacyGeneratedCommitment as GraphLegacyGeneratedCommitment, LegacyEncryptedCommitment as GraphLegacyEncryptedCommitment, EncryptCommitment as GraphEncryptCommitment, TransactCommitment as GraphTransactCommitment } from './graphql';
|
|
3
3
|
export type GraphCommitment = GraphLegacyEncryptedCommitment | GraphLegacyGeneratedCommitment | GraphEncryptCommitment | GraphTransactCommitment;
|
|
4
4
|
export type GraphCommitmentBatch = {
|