dop-wallet-v6 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +73 -0
- package/.prettierrc.js +21 -0
- package/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
- package/dist/services/artifacts/artifact-downloader.js +131 -0
- package/dist/services/artifacts/artifact-downloader.js.map +1 -0
- package/dist/services/artifacts/artifact-hash.d.ts +4 -0
- package/dist/services/artifacts/artifact-hash.js +54 -0
- package/dist/services/artifacts/artifact-hash.js.map +1 -0
- package/dist/services/artifacts/artifact-store.d.ts +12 -0
- package/dist/services/artifacts/artifact-store.js +12 -0
- package/dist/services/artifacts/artifact-store.js.map +1 -0
- package/dist/services/artifacts/artifact-util.d.ts +7 -0
- package/dist/services/artifacts/artifact-util.js +83 -0
- package/dist/services/artifacts/artifact-util.js.map +1 -0
- package/dist/services/artifacts/index.d.ts +2 -0
- package/dist/services/artifacts/index.js +19 -0
- package/dist/services/artifacts/index.js.map +1 -0
- package/dist/services/artifacts/json/artifact-v2-hashes.json +337 -0
- package/dist/services/dop/core/artifacts.d.ts +10 -0
- package/dist/services/dop/core/artifacts.js +69 -0
- package/dist/services/dop/core/artifacts.js.map +1 -0
- package/dist/services/dop/core/engine.d.ts +25 -0
- package/dist/services/dop/core/engine.js +103 -0
- package/dist/services/dop/core/engine.js.map +1 -0
- package/dist/services/dop/core/index.d.ts +5 -0
- package/dist/services/dop/core/index.js +22 -0
- package/dist/services/dop/core/index.js.map +1 -0
- package/dist/services/dop/core/prover.d.ts +3 -0
- package/dist/services/dop/core/prover.js +14 -0
- package/dist/services/dop/core/prover.js.map +1 -0
- package/dist/services/dop/core/providers.d.ts +18 -0
- package/dist/services/dop/core/providers.js +162 -0
- package/dist/services/dop/core/providers.js.map +1 -0
- package/dist/services/dop/core/shields.d.ts +7 -0
- package/dist/services/dop/core/shields.js +20 -0
- package/dist/services/dop/core/shields.js.map +1 -0
- package/dist/services/dop/history/transaction-history.d.ts +4 -0
- package/dist/services/dop/history/transaction-history.js +166 -0
- package/dist/services/dop/history/transaction-history.js.map +1 -0
- package/dist/services/dop/index.d.ts +4 -0
- package/dist/services/dop/index.js +21 -0
- package/dist/services/dop/index.js.map +1 -0
- package/dist/services/dop/process/extract-first-note.d.ts +6 -0
- package/dist/services/dop/process/extract-first-note.js +163 -0
- package/dist/services/dop/process/extract-first-note.js.map +1 -0
- package/dist/services/dop/process/index.d.ts +1 -0
- package/dist/services/dop/process/index.js +18 -0
- package/dist/services/dop/process/index.js.map +1 -0
- package/dist/services/dop/quick-sync/empty-events.d.ts +2 -0
- package/dist/services/dop/quick-sync/empty-events.js +9 -0
- package/dist/services/dop/quick-sync/empty-events.js.map +1 -0
- package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +13 -0
- package/dist/services/dop/quick-sync/graph-type-formatters.js +168 -0
- package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js +24081 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.d.ts +1628 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js +4 -0
- package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
- package/dist/services/dop/quick-sync/graphql/index.d.ts +1976 -0
- package/dist/services/dop/quick-sync/graphql/index.js +512 -0
- package/dist/services/dop/quick-sync/graphql/index.js.map +1 -0
- package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +2 -0
- package/dist/services/dop/quick-sync/quick-sync-graph.js +150 -0
- package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -0
- package/dist/services/dop/util/bytes.d.ts +5 -0
- package/dist/services/dop/util/bytes.js +21 -0
- package/dist/services/dop/util/bytes.js.map +1 -0
- package/dist/services/dop/util/commitment.d.ts +2 -0
- package/dist/services/dop/util/commitment.js +17 -0
- package/dist/services/dop/util/commitment.js.map +1 -0
- package/dist/services/dop/util/crypto.d.ts +14 -0
- package/dist/services/dop/util/crypto.js +79 -0
- package/dist/services/dop/util/crypto.js.map +1 -0
- package/dist/services/dop/util/db.d.ts +2 -0
- package/dist/services/dop/util/db.js +6 -0
- package/dist/services/dop/util/db.js.map +1 -0
- package/dist/services/dop/util/index.d.ts +4 -0
- package/dist/services/dop/util/index.js +21 -0
- package/dist/services/dop/util/index.js.map +1 -0
- package/dist/services/dop/wallets/balance-update.d.ts +8 -0
- package/dist/services/dop/wallets/balance-update.js +90 -0
- package/dist/services/dop/wallets/balance-update.js.map +1 -0
- package/dist/services/dop/wallets/balances.d.ts +6 -0
- package/dist/services/dop/wallets/balances.js +57 -0
- package/dist/services/dop/wallets/balances.js.map +1 -0
- package/dist/services/dop/wallets/index.d.ts +4 -0
- package/dist/services/dop/wallets/index.js +21 -0
- package/dist/services/dop/wallets/index.js.map +1 -0
- package/dist/services/dop/wallets/wallets.d.ts +19 -0
- package/dist/services/dop/wallets/wallets.js +226 -0
- package/dist/services/dop/wallets/wallets.js.map +1 -0
- package/dist/services/ethers/ethers-util.d.ts +1 -0
- package/dist/services/ethers/ethers-util.js +9 -0
- package/dist/services/ethers/ethers-util.js.map +1 -0
- package/dist/services/ethers/index.d.ts +1 -0
- package/dist/services/ethers/index.js +18 -0
- package/dist/services/ethers/index.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/transactions/index.d.ts +13 -0
- package/dist/services/transactions/index.js +30 -0
- package/dist/services/transactions/index.js.map +1 -0
- package/dist/services/transactions/proof-cache.d.ts +27 -0
- package/dist/services/transactions/proof-cache.js +128 -0
- package/dist/services/transactions/proof-cache.js.map +1 -0
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +9 -0
- package/dist/services/transactions/tx-cross-contract-calls.js +386 -0
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
- package/dist/services/transactions/tx-gas-details.d.ts +5 -0
- package/dist/services/transactions/tx-gas-details.js +120 -0
- package/dist/services/transactions/tx-gas-details.js.map +1 -0
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +2 -0
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +209 -0
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -0
- package/dist/services/transactions/tx-generator.d.ts +9 -0
- package/dist/services/transactions/tx-generator.js +205 -0
- package/dist/services/transactions/tx-generator.js.map +1 -0
- package/dist/services/transactions/tx-notes.d.ts +10 -0
- package/dist/services/transactions/tx-notes.js +154 -0
- package/dist/services/transactions/tx-notes.js.map +1 -0
- package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
- package/dist/services/transactions/tx-nullifiers.js +17 -0
- package/dist/services/transactions/tx-nullifiers.js.map +1 -0
- package/dist/services/transactions/tx-proof-transfer.d.ts +4 -0
- package/dist/services/transactions/tx-proof-transfer.js +49 -0
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
- package/dist/services/transactions/tx-proof-unshield.d.ts +3 -0
- package/dist/services/transactions/tx-proof-unshield.js +183 -0
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
- package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
- package/dist/services/transactions/tx-shield-base-token.js +61 -0
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
- package/dist/services/transactions/tx-shield.d.ts +6 -0
- package/dist/services/transactions/tx-shield.js +84 -0
- package/dist/services/transactions/tx-shield.js.map +1 -0
- package/dist/services/transactions/tx-transfer.d.ts +2 -0
- package/dist/services/transactions/tx-transfer.js +78 -0
- package/dist/services/transactions/tx-transfer.js.map +1 -0
- package/dist/services/transactions/tx-unshield.d.ts +3 -0
- package/dist/services/transactions/tx-unshield.js +174 -0
- package/dist/services/transactions/tx-unshield.js.map +1 -0
- package/dist/utils/blocked-address.d.ts +2 -0
- package/dist/utils/blocked-address.js +21 -0
- package/dist/utils/blocked-address.js.map +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +20 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/gas-price.d.ts +6 -0
- package/dist/utils/gas-price.js +31 -0
- package/dist/utils/gas-price.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/utils.d.ts +3 -0
- package/dist/utils/utils.js +47 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +85 -0
- package/postinstall.js +52 -0
- package/react-native-shims.js +42 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FallbackProviderJsonConfig, NetworkName, LoadProviderResponse } from 'dop-sharedmodel-v5';
|
|
2
|
+
import { DopSmartWalletContract, RelayAdaptContract, PollingJsonRpcProvider } from 'dop-engine-v5';
|
|
3
|
+
import { FallbackProvider } from 'ethers';
|
|
4
|
+
export declare const getFallbackProviderForNetwork: (networkName: NetworkName) => FallbackProvider;
|
|
5
|
+
export declare const getPollingProviderForNetwork: (networkName: NetworkName) => PollingJsonRpcProvider;
|
|
6
|
+
export declare const setFallbackProviderForNetwork: (networkName: NetworkName, provider: FallbackProvider) => void;
|
|
7
|
+
export declare const setPollingProviderForNetwork: (networkName: NetworkName, provider: PollingJsonRpcProvider) => void;
|
|
8
|
+
export declare const getMerkleTreeForNetwork: (networkName: NetworkName) => import("dop-engine-v5/dist/merkletree/merkletree").MerkleTree;
|
|
9
|
+
export declare const getDopSmartWalletContractForNetwork: (networkName: NetworkName) => DopSmartWalletContract;
|
|
10
|
+
export declare const getRelayAdaptContractForNetwork: (networkName: NetworkName) => RelayAdaptContract;
|
|
11
|
+
/**
|
|
12
|
+
* Note: The first provider listed in your fallback provider config is used as a polling provider
|
|
13
|
+
* for new DOP events (balance updates).
|
|
14
|
+
*/
|
|
15
|
+
export declare const loadProvider: (fallbackProviderJsonConfig: FallbackProviderJsonConfig, networkName: NetworkName, pollingInterval?: number) => Promise<LoadProviderResponse>;
|
|
16
|
+
export declare const unloadProvider: (networkName: NetworkName) => Promise<void>;
|
|
17
|
+
export declare const pauseAllPollingProviders: (excludeNetworkName?: NetworkName) => void;
|
|
18
|
+
export declare const resumeIsolatedPollingProviderForNetwork: (networkName: NetworkName) => void;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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 dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
|
+
const logger_1 = require("../../../utils/logger");
|
|
6
|
+
const engine_1 = require("./engine");
|
|
7
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
8
|
+
const error_1 = require("../../../utils/error");
|
|
9
|
+
const fallbackProviderMap = {};
|
|
10
|
+
const pollingProviderMap = {};
|
|
11
|
+
const getFallbackProviderForNetwork = (networkName) => {
|
|
12
|
+
const provider = fallbackProviderMap[networkName];
|
|
13
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(provider)) {
|
|
14
|
+
throw new Error(`Provider not yet loaded for network ${networkName}`);
|
|
15
|
+
}
|
|
16
|
+
return provider;
|
|
17
|
+
};
|
|
18
|
+
exports.getFallbackProviderForNetwork = getFallbackProviderForNetwork;
|
|
19
|
+
const getPollingProviderForNetwork = (networkName) => {
|
|
20
|
+
const provider = pollingProviderMap[networkName];
|
|
21
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(provider)) {
|
|
22
|
+
throw new Error(`Polling provider not yet loaded for network ${networkName}`);
|
|
23
|
+
}
|
|
24
|
+
return provider;
|
|
25
|
+
};
|
|
26
|
+
exports.getPollingProviderForNetwork = getPollingProviderForNetwork;
|
|
27
|
+
const setFallbackProviderForNetwork = (networkName, provider) => {
|
|
28
|
+
fallbackProviderMap[networkName] = provider;
|
|
29
|
+
};
|
|
30
|
+
exports.setFallbackProviderForNetwork = setFallbackProviderForNetwork;
|
|
31
|
+
const setPollingProviderForNetwork = (networkName, provider) => {
|
|
32
|
+
pollingProviderMap[networkName] = provider;
|
|
33
|
+
};
|
|
34
|
+
exports.setPollingProviderForNetwork = setPollingProviderForNetwork;
|
|
35
|
+
const getMerkleTreeForNetwork = (networkName) => {
|
|
36
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
37
|
+
const { chain } = network;
|
|
38
|
+
const merkleTree = (0, engine_1.getEngine)().merkletrees[chain.type][chain.id];
|
|
39
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(merkleTree)) {
|
|
40
|
+
throw new Error(`MerkleTree not yet loaded for network ${network.publicName}`);
|
|
41
|
+
}
|
|
42
|
+
return merkleTree;
|
|
43
|
+
};
|
|
44
|
+
exports.getMerkleTreeForNetwork = getMerkleTreeForNetwork;
|
|
45
|
+
const getDopSmartWalletContractForNetwork = (networkName) => {
|
|
46
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
47
|
+
const { chain } = network;
|
|
48
|
+
const dopSmartWalletContract = (0, engine_1.getEngine)().dopSmartWalletContracts[chain.type][chain.id];
|
|
49
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(dopSmartWalletContract)) {
|
|
50
|
+
throw new Error(`DopSmartWallet contract not yet loaded for network ${network.publicName}`);
|
|
51
|
+
}
|
|
52
|
+
return dopSmartWalletContract;
|
|
53
|
+
};
|
|
54
|
+
exports.getDopSmartWalletContractForNetwork = getDopSmartWalletContractForNetwork;
|
|
55
|
+
const getRelayAdaptContractForNetwork = (networkName) => {
|
|
56
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
57
|
+
const { chain } = network;
|
|
58
|
+
const relayAdaptContract = (0, engine_1.getEngine)().relayAdaptContracts[chain.type][chain.id];
|
|
59
|
+
if (!(0, dop_sharedmodel_v5_1.isDefined)(relayAdaptContract)) {
|
|
60
|
+
throw new Error(`Relay Adapt contract not yet loaded for network ${network.publicName}`);
|
|
61
|
+
}
|
|
62
|
+
return relayAdaptContract;
|
|
63
|
+
};
|
|
64
|
+
exports.getRelayAdaptContractForNetwork = getRelayAdaptContractForNetwork;
|
|
65
|
+
const createFallbackProviderForNetwork = async (networkName, fallbackProviderJsonConfig) => {
|
|
66
|
+
const existingProvider = fallbackProviderMap[networkName];
|
|
67
|
+
if (existingProvider) {
|
|
68
|
+
return existingProvider;
|
|
69
|
+
}
|
|
70
|
+
const fallbackProvider = (0, dop_sharedmodel_v5_1.createFallbackProviderFromJsonConfig)(fallbackProviderJsonConfig);
|
|
71
|
+
(0, exports.setFallbackProviderForNetwork)(networkName, fallbackProvider);
|
|
72
|
+
return fallbackProvider;
|
|
73
|
+
};
|
|
74
|
+
const createPollingProviderForNetwork = async (networkName, fallbackProvider, pollingInterval) => {
|
|
75
|
+
const existingProvider = pollingProviderMap[networkName];
|
|
76
|
+
if (existingProvider) {
|
|
77
|
+
return existingProvider;
|
|
78
|
+
}
|
|
79
|
+
const pollingProvider = await (0, dop_engine_v5_1.createPollingJsonRpcProviderForListeners)(fallbackProvider, pollingInterval);
|
|
80
|
+
(0, exports.setPollingProviderForNetwork)(networkName, pollingProvider);
|
|
81
|
+
return pollingProvider;
|
|
82
|
+
};
|
|
83
|
+
const loadProviderForNetwork = async (chain, networkName, fallbackProviderJsonConfig, pollingInterval) => {
|
|
84
|
+
(0, logger_1.sendMessage)(`Load provider for network: ${networkName}`);
|
|
85
|
+
const fallbackProvider = await createFallbackProviderForNetwork(networkName, fallbackProviderJsonConfig);
|
|
86
|
+
const pollingProvider = await createPollingProviderForNetwork(networkName, fallbackProvider, pollingInterval);
|
|
87
|
+
const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
88
|
+
const { proxyContract, relayAdaptContract, deploymentBlock, publicName } = network;
|
|
89
|
+
// eslint-disable-next-line
|
|
90
|
+
if (!proxyContract) {
|
|
91
|
+
throw new Error(`Could not find Proxy contract for network: ${publicName}`);
|
|
92
|
+
}
|
|
93
|
+
// eslint-disable-next-line
|
|
94
|
+
if (!relayAdaptContract) {
|
|
95
|
+
throw new Error(`Could not find Relay Adapt contract for network: ${publicName}`);
|
|
96
|
+
}
|
|
97
|
+
const engine = (0, engine_1.getEngine)();
|
|
98
|
+
// This function will set up the contracts for this chain.
|
|
99
|
+
// Throws if provider does not respond.
|
|
100
|
+
await engine.loadNetwork(chain, proxyContract, relayAdaptContract, fallbackProvider, pollingProvider, deploymentBlock ?? 0);
|
|
101
|
+
// NOTE: This is an async call, but we need not await.
|
|
102
|
+
// Let Engine scan events in the background.
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
104
|
+
engine.scanHistory(chain);
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Note: The first provider listed in your fallback provider config is used as a polling provider
|
|
108
|
+
* for new DOP events (balance updates).
|
|
109
|
+
*/
|
|
110
|
+
const loadProvider = async (fallbackProviderJsonConfig, networkName, pollingInterval = 15000) => {
|
|
111
|
+
try {
|
|
112
|
+
delete fallbackProviderMap[networkName];
|
|
113
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
114
|
+
if (fallbackProviderJsonConfig.chainId !== chain.id) {
|
|
115
|
+
throw new Error('Invalid chain ID');
|
|
116
|
+
}
|
|
117
|
+
await loadProviderForNetwork(chain, networkName, fallbackProviderJsonConfig, pollingInterval);
|
|
118
|
+
const dopSmartWalletContract = (0, exports.getDopSmartWalletContractForNetwork)(networkName);
|
|
119
|
+
const { shield, unshield, nft } = await dopSmartWalletContract.fees();
|
|
120
|
+
// Note: Shield and Unshield fees are in basis points.
|
|
121
|
+
// NFT fee is in wei (though currently 0).
|
|
122
|
+
const feesSerialized = {
|
|
123
|
+
shield: shield.toString(),
|
|
124
|
+
unshield: unshield.toString(),
|
|
125
|
+
nft: nft.toString(),
|
|
126
|
+
};
|
|
127
|
+
return { feesSerialized };
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
throw (0, error_1.reportAndSanitizeError)(exports.loadProvider.name, err);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
exports.loadProvider = loadProvider;
|
|
134
|
+
const unloadProvider = async (networkName) => {
|
|
135
|
+
await fallbackProviderMap[networkName]?.destroy();
|
|
136
|
+
pollingProviderMap[networkName]?.destroy();
|
|
137
|
+
delete fallbackProviderMap[networkName];
|
|
138
|
+
delete pollingProviderMap[networkName];
|
|
139
|
+
};
|
|
140
|
+
exports.unloadProvider = unloadProvider;
|
|
141
|
+
const pauseAllPollingProviders = (excludeNetworkName) => {
|
|
142
|
+
Object.keys(pollingProviderMap).forEach(networkName => {
|
|
143
|
+
if (networkName === excludeNetworkName) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const pollingProvider = pollingProviderMap[networkName];
|
|
147
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(pollingProvider) && !pollingProvider.paused) {
|
|
148
|
+
pollingProvider.pause();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
exports.pauseAllPollingProviders = pauseAllPollingProviders;
|
|
153
|
+
const resumeIsolatedPollingProviderForNetwork = (networkName) => {
|
|
154
|
+
(0, exports.pauseAllPollingProviders)(networkName);
|
|
155
|
+
const pollingProviderForNetwork = pollingProviderMap[networkName];
|
|
156
|
+
if ((0, dop_sharedmodel_v5_1.isDefined)(pollingProviderForNetwork) &&
|
|
157
|
+
pollingProviderForNetwork.paused) {
|
|
158
|
+
pollingProviderForNetwork.resume();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
exports.resumeIsolatedPollingProviderForNetwork = resumeIsolatedPollingProviderForNetwork;
|
|
162
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../../src/services/dop/core/providers.ts"],"names":[],"mappings":";;;AAAA,2DAO4B;AAC5B,kDAAoD;AACpD,qCAAqC;AACrC,iDAMuB;AACvB,gDAA8D;AAG9D,MAAM,mBAAmB,GAA8B,EAAE,CAAC;AAC1D,MAAM,kBAAkB,GAAoC,EAAE,CAAC;AAExD,MAAM,6BAA6B,GAAG,CAC3C,WAAwB,EACN,EAAE;IACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,IAAA,8BAAS,EAAC,QAAQ,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;KACvE;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AARW,QAAA,6BAA6B,iCAQxC;AAEK,MAAM,4BAA4B,GAAG,CAC1C,WAAwB,EACA,EAAE;IAC1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,IAAA,8BAAS,EAAC,QAAQ,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CACb,+CAA+C,WAAW,EAAE,CAC7D,CAAC;KACH;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAVW,QAAA,4BAA4B,gCAUvC;AAEK,MAAM,6BAA6B,GAAG,CAC3C,WAAwB,EACxB,QAA0B,EACpB,EAAE;IACR,mBAAmB,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AAC9C,CAAC,CAAC;AALW,QAAA,6BAA6B,iCAKxC;AAEK,MAAM,4BAA4B,GAAG,CAC1C,WAAwB,EACxB,QAAgC,EAC1B,EAAE;IACR,kBAAkB,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AAC7C,CAAC,CAAC;AALW,QAAA,4BAA4B,gCAKvC;AAEK,MAAM,uBAAuB,GAAG,CAAC,WAAwB,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAA,kBAAS,GAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,IAAA,8BAAS,EAAC,UAAU,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CACb,yCAAyC,OAAO,CAAC,UAAU,EAAE,CAC9D,CAAC;KACH;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC;AAEK,MAAM,mCAAmC,GAAG,CACjD,WAAwB,EACA,EAAE;IAC1B,MAAM,OAAO,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,MAAM,sBAAsB,GAC1B,IAAA,kBAAS,GAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAA,8BAAS,EAAC,sBAAsB,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CACb,sDAAsD,OAAO,CAAC,UAAU,EAAE,CAC3E,CAAC;KACH;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC,CAAC;AAdW,QAAA,mCAAmC,uCAc9C;AAEK,MAAM,+BAA+B,GAAG,CAC7C,WAAwB,EACJ,EAAE;IACtB,MAAM,OAAO,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,kBAAkB,GACtB,IAAA,kBAAS,GAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,IAAA,8BAAS,EAAC,kBAAkB,CAAC,EAAE;QAClC,MAAM,IAAI,KAAK,CACb,mDAAmD,OAAO,CAAC,UAAU,EAAE,CACxE,CAAC;KACH;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAbW,QAAA,+BAA+B,mCAa1C;AAEF,MAAM,gCAAgC,GAAG,KAAK,EAC5C,WAAwB,EACxB,0BAAsD,EAC3B,EAAE;IAC7B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC1D,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAC;KACzB;IACD,MAAM,gBAAgB,GAAG,IAAA,yDAAoC,EAC3D,0BAA0B,CAC3B,CAAC;IACF,IAAA,qCAA6B,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,KAAK,EAC3C,WAAwB,EACxB,gBAAkC,EAClC,eAAuB,EACU,EAAE;IACnC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAC;KACzB;IACD,MAAM,eAAe,GAAG,MAAM,IAAA,wDAAwC,EACpE,gBAAgB,EAChB,eAAe,CAChB,CAAC;IACF,IAAA,oCAA4B,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC3D,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAClC,KAAY,EACZ,WAAwB,EACxB,0BAAsD,EACtD,eAAuB,EACvB,EAAE;IACF,IAAA,oBAAW,EAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;IAEzD,MAAM,gBAAgB,GAAG,MAAM,gCAAgC,CAC7D,WAAW,EACX,0BAA0B,CAC3B,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,+BAA+B,CAC3D,WAAW,EACX,gBAAgB,EAChB,eAAe,CAChB,CAAC;IAEF,MAAM,OAAO,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,GACtE,OAAO,CAAC;IACV,2BAA2B;IAC3B,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;KAC7E;IACD,2BAA2B;IAC3B,IAAI,CAAC,kBAAkB,EAAE;QACvB,MAAM,IAAI,KAAK,CACb,oDAAoD,UAAU,EAAE,CACjE,CAAC;KACH;IAED,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAE3B,0DAA0D;IAC1D,uCAAuC;IACvC,MAAM,MAAM,CAAC,WAAW,CACtB,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,IAAI,CAAC,CACrB,CAAC;IAEF,sDAAsD;IACtD,4CAA4C;IAC5C,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,YAAY,GAAG,KAAK,EAC/B,0BAAsD,EACtD,WAAwB,EACxB,eAAe,GAAG,KAAK,EACQ,EAAE;IACjC,IAAI;QACF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAExC,MAAM,EAAE,KAAK,EAAE,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,0BAA0B,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,EAAE;YACnD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACrC;QAED,MAAM,sBAAsB,CAC1B,KAAK,EACL,WAAW,EACX,0BAA0B,EAC1B,eAAe,CAChB,CAAC;QAEF,MAAM,sBAAsB,GAC1B,IAAA,2CAAmC,EAAC,WAAW,CAAC,CAAC;QAEnD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAEtE,sDAAsD;QACtD,0CAA0C;QAC1C,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC7B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;SACpB,CAAC;QAEF,OAAO,EAAE,cAAc,EAAE,CAAC;KAC3B;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,oBAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACtD;AACH,CAAC,CAAC;AArCW,QAAA,YAAY,gBAqCvB;AAEK,MAAM,cAAc,GAAG,KAAK,EACjC,WAAwB,EACT,EAAE;IACjB,MAAM,mBAAmB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAClD,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB;AAEK,MAAM,wBAAwB,GAAG,CACtC,kBAAgC,EAC1B,EAAE;IACR,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QACpD,IAAI,WAAW,KAAK,kBAAkB,EAAE;YACtC,OAAO;SACR;QACD,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,IAAA,8BAAS,EAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YACzD,eAAe,CAAC,KAAK,EAAE,CAAC;SACzB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC;AAEK,MAAM,uCAAuC,GAAG,CACrD,WAAwB,EAClB,EAAE;IACR,IAAA,gCAAwB,EACtB,WAAW,CACZ,CAAC;IACF,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAClE,IACE,IAAA,8BAAS,EAAC,yBAAyB,CAAC;QACpC,yBAAyB,CAAC,MAAM,EAChC;QACA,yBAAyB,CAAC,MAAM,EAAE,CAAC;KACpC;AACH,CAAC,CAAC;AAbW,QAAA,uCAAuC,2CAalD","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"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAllShields = void 0;
|
|
4
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
|
+
const engine_1 = require("./engine");
|
|
6
|
+
const getAllShields = async (networkName, startingBlock) => {
|
|
7
|
+
const engine = (0, engine_1.getEngine)();
|
|
8
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
9
|
+
const encryptCommitments = await engine.getAllEncryptCommitments(chain, startingBlock);
|
|
10
|
+
return encryptCommitments.map(commitment => {
|
|
11
|
+
const shieldData = {
|
|
12
|
+
txid: commitment.txid,
|
|
13
|
+
hash: commitment.hash,
|
|
14
|
+
timestamp: commitment.timestamp,
|
|
15
|
+
};
|
|
16
|
+
return shieldData;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.getAllShields = getAllShields;
|
|
20
|
+
//# sourceMappingURL=shields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Chain } from 'dop-engine-v5';
|
|
2
|
+
import { TransactionHistoryItem, TransactionHistoryItemCategory } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const categoryForTransactionHistoryItem: (historyItem: TransactionHistoryItem) => TransactionHistoryItemCategory;
|
|
4
|
+
export declare const getWalletTransactionHistory: (chain: Chain, dopWalletID: string, startingBlock: Optional<number>) => Promise<TransactionHistoryItem[]>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWalletTransactionHistory = exports.categoryForTransactionHistoryItem = void 0;
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
6
|
+
const engine_1 = require("../core/engine");
|
|
7
|
+
const bytes_1 = require("../util/bytes");
|
|
8
|
+
const error_1 = require("../../../utils/error");
|
|
9
|
+
const transactionHistoryReceiveTokenAmountToDopERC20Amount = (transactionHistoryReceiveTokenAmount) => {
|
|
10
|
+
return {
|
|
11
|
+
...transactionHistoryTokenAmountToDopERC20Amount(transactionHistoryReceiveTokenAmount),
|
|
12
|
+
memoText: transactionHistoryReceiveTokenAmount.memoText,
|
|
13
|
+
senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,
|
|
14
|
+
shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
const transactionHistoryReceiveNFTToDopNFTAmount = (transactionHistoryReceiveTokenAmount) => {
|
|
18
|
+
return {
|
|
19
|
+
...transactionHistoryNFTToDopNFTAmount(transactionHistoryReceiveTokenAmount),
|
|
20
|
+
memoText: transactionHistoryReceiveTokenAmount.memoText,
|
|
21
|
+
senderAddress: transactionHistoryReceiveTokenAmount.senderAddress,
|
|
22
|
+
shieldFee: transactionHistoryReceiveTokenAmount.shieldFee,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
const transactionHistoryTransferTokenAmountToDopERC20Amount = (transactionHistoryTokenAmount) => {
|
|
26
|
+
const walletSource = transactionHistoryTokenAmount.noteAnnotationData?.walletSource;
|
|
27
|
+
return {
|
|
28
|
+
...transactionHistoryTokenAmountToDopERC20Amount(transactionHistoryTokenAmount),
|
|
29
|
+
recipientAddress: transactionHistoryTokenAmount.recipientAddress,
|
|
30
|
+
memoText: transactionHistoryTokenAmount.memoText,
|
|
31
|
+
walletSource,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const transactionHistoryUnshieldTokenAmountToDopERC20Amount = (transactionHistoryUnshieldTokenAmount) => {
|
|
35
|
+
return {
|
|
36
|
+
...transactionHistoryTransferTokenAmountToDopERC20Amount(transactionHistoryUnshieldTokenAmount),
|
|
37
|
+
unshieldFee: transactionHistoryUnshieldTokenAmount.unshieldFee,
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const transactionHistoryTransferNFTToDopNFTAmount = (transactionHistoryNFT) => {
|
|
41
|
+
const walletSource = transactionHistoryNFT.noteAnnotationData?.walletSource;
|
|
42
|
+
return {
|
|
43
|
+
...transactionHistoryNFTToDopNFTAmount(transactionHistoryNFT),
|
|
44
|
+
memoText: transactionHistoryNFT.memoText,
|
|
45
|
+
walletSource,
|
|
46
|
+
recipientAddress: transactionHistoryNFT.recipientAddress,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const transactionHistoryUnshieldNFTToDopNFTAmount = (transactionHistoryNFT) => {
|
|
50
|
+
return {
|
|
51
|
+
...transactionHistoryTransferNFTToDopNFTAmount(transactionHistoryNFT),
|
|
52
|
+
unshieldFee: transactionHistoryNFT.unshieldFee,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const transactionHistoryTokenAmountToDopERC20Amount = (transactionHistoryTokenAmount) => {
|
|
56
|
+
return {
|
|
57
|
+
tokenAddress: (0, bytes_1.parseDopTokenAddress)(transactionHistoryTokenAmount.tokenData.tokenAddress).toLowerCase(),
|
|
58
|
+
amount: transactionHistoryTokenAmount.amount,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const transactionHistoryNFTToDopNFTAmount = (transactionHistoryNFT) => {
|
|
62
|
+
return {
|
|
63
|
+
nftAddress: (0, bytes_1.parseDopTokenAddress)(transactionHistoryNFT.tokenData.tokenAddress).toLowerCase(),
|
|
64
|
+
nftTokenType: transactionHistoryNFT.tokenData.tokenType,
|
|
65
|
+
tokenSubID: transactionHistoryNFT.tokenData.tokenSubID,
|
|
66
|
+
amount: transactionHistoryNFT.amount,
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
const filterERC20 = (tokenAmount) => {
|
|
70
|
+
return tokenAmount.tokenData.tokenType === dop_engine_v5_1.TokenType.ERC20;
|
|
71
|
+
};
|
|
72
|
+
const filterNFT = (tokenAmount) => {
|
|
73
|
+
switch (tokenAmount.tokenData.tokenType) {
|
|
74
|
+
case dop_engine_v5_1.TokenType.ERC20:
|
|
75
|
+
return false;
|
|
76
|
+
case dop_engine_v5_1.TokenType.ERC721:
|
|
77
|
+
case dop_engine_v5_1.TokenType.ERC1155:
|
|
78
|
+
return tokenAmount.amount > BigInt(0);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const receiveERC20AmountsHaveShieldFee = (receiveERC20Amounts) => {
|
|
82
|
+
return receiveERC20Amounts.find(amount => amount.shieldFee) != null;
|
|
83
|
+
};
|
|
84
|
+
const categoryForTransactionHistoryItem = (historyItem) => {
|
|
85
|
+
const hasTransferNFTs = historyItem.transferNFTAmounts.length > 0;
|
|
86
|
+
const hasReceiveNFTs = historyItem.receiveNFTAmounts.length > 0;
|
|
87
|
+
const hasUnshieldNFTs = historyItem.unshieldNFTAmounts.length > 0;
|
|
88
|
+
if (hasTransferNFTs || hasReceiveNFTs || hasUnshieldNFTs) {
|
|
89
|
+
// Some kind of NFT Transfer. Unhandled case.
|
|
90
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown;
|
|
91
|
+
}
|
|
92
|
+
const hasTransferERC20s = historyItem.transferERC20Amounts.length > 0;
|
|
93
|
+
const hasReceiveERC20s = historyItem.receiveERC20Amounts.length > 0;
|
|
94
|
+
const hasUnshieldERC20s = historyItem.unshieldERC20Amounts.length > 0;
|
|
95
|
+
if (hasTransferERC20s && !hasReceiveERC20s && !hasUnshieldERC20s) {
|
|
96
|
+
// Only transfer erc20s.
|
|
97
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.TransferSendERC20s;
|
|
98
|
+
}
|
|
99
|
+
if (!hasTransferERC20s && hasReceiveERC20s && !hasUnshieldERC20s) {
|
|
100
|
+
// Only receive erc20s.
|
|
101
|
+
const hasShieldFee = receiveERC20AmountsHaveShieldFee(historyItem.receiveERC20Amounts);
|
|
102
|
+
if (hasShieldFee) {
|
|
103
|
+
// Note: Shield fees were added to contract events in Mar 2023.
|
|
104
|
+
// Prior shields will show as TransferReceiveERC20s without fees.
|
|
105
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.ShieldERC20s;
|
|
106
|
+
}
|
|
107
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.TransferReceiveERC20s;
|
|
108
|
+
}
|
|
109
|
+
if (!hasTransferERC20s && !hasReceiveERC20s && hasUnshieldERC20s) {
|
|
110
|
+
// Only unshield erc20s.
|
|
111
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.UnshieldERC20s;
|
|
112
|
+
}
|
|
113
|
+
return dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown;
|
|
114
|
+
};
|
|
115
|
+
exports.categoryForTransactionHistoryItem = categoryForTransactionHistoryItem;
|
|
116
|
+
const serializeTransactionHistory = (transactionHistory) => {
|
|
117
|
+
const historyItemsUncategorized = transactionHistory.map(historyEntry => ({
|
|
118
|
+
txid: (0, dop_engine_v5_1.formatToByteLength)(historyEntry.txid, dop_engine_v5_1.ByteLength.UINT_256, true),
|
|
119
|
+
blockNumber: historyEntry.blockNumber,
|
|
120
|
+
timestamp: historyEntry.timestamp,
|
|
121
|
+
transferERC20Amounts: historyEntry.transferTokenAmounts
|
|
122
|
+
.filter(filterERC20)
|
|
123
|
+
.map(transactionHistoryTransferTokenAmountToDopERC20Amount),
|
|
124
|
+
relayerFeeERC20Amount: historyEntry.relayerFeeTokenAmount
|
|
125
|
+
? transactionHistoryTokenAmountToDopERC20Amount(historyEntry.relayerFeeTokenAmount)
|
|
126
|
+
: undefined,
|
|
127
|
+
changeERC20Amounts: historyEntry.changeTokenAmounts
|
|
128
|
+
.filter(filterERC20)
|
|
129
|
+
.map(transactionHistoryTokenAmountToDopERC20Amount),
|
|
130
|
+
receiveERC20Amounts: historyEntry.receiveTokenAmounts
|
|
131
|
+
.filter(filterERC20)
|
|
132
|
+
.map(transactionHistoryReceiveTokenAmountToDopERC20Amount),
|
|
133
|
+
unshieldERC20Amounts: historyEntry.unshieldTokenAmounts
|
|
134
|
+
.filter(filterERC20)
|
|
135
|
+
.map(transactionHistoryUnshieldTokenAmountToDopERC20Amount),
|
|
136
|
+
receiveNFTAmounts: historyEntry.receiveTokenAmounts
|
|
137
|
+
.filter(filterNFT)
|
|
138
|
+
.map(transactionHistoryReceiveNFTToDopNFTAmount),
|
|
139
|
+
transferNFTAmounts: historyEntry.transferTokenAmounts
|
|
140
|
+
.filter(filterNFT)
|
|
141
|
+
.map(transactionHistoryTransferNFTToDopNFTAmount),
|
|
142
|
+
unshieldNFTAmounts: historyEntry.unshieldTokenAmounts
|
|
143
|
+
.filter(filterNFT)
|
|
144
|
+
.map(transactionHistoryUnshieldNFTToDopNFTAmount),
|
|
145
|
+
version: historyEntry.version,
|
|
146
|
+
category: dop_sharedmodel_v5_1.TransactionHistoryItemCategory.Unknown,
|
|
147
|
+
}));
|
|
148
|
+
// Add category for items based on token types.
|
|
149
|
+
return historyItemsUncategorized.map(historyItem => ({
|
|
150
|
+
...historyItem,
|
|
151
|
+
category: (0, exports.categoryForTransactionHistoryItem)(historyItem),
|
|
152
|
+
}));
|
|
153
|
+
};
|
|
154
|
+
const getWalletTransactionHistory = async (chain, dopWalletID, startingBlock) => {
|
|
155
|
+
try {
|
|
156
|
+
const wallet = (0, engine_1.walletForID)(dopWalletID);
|
|
157
|
+
const transactionHistory = await wallet.getTransactionHistory(chain, startingBlock);
|
|
158
|
+
return serializeTransactionHistory(transactionHistory);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
(0, error_1.reportAndSanitizeError)(exports.getWalletTransactionHistory.name, err);
|
|
162
|
+
throw new Error('Could not load DOP wallet transaction history.');
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
exports.getWalletTransactionHistory = getWalletTransactionHistory;
|
|
166
|
+
//# sourceMappingURL=transaction-history.js.map
|
|
@@ -0,0 +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-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"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./core"), exports);
|
|
18
|
+
__exportStar(require("./util"), exports);
|
|
19
|
+
__exportStar(require("./process"), exports);
|
|
20
|
+
__exportStar(require("./wallets"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/dop/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yCAAuB;AACvB,4CAA0B;AAC1B,4CAA0B","sourcesContent":["export * from './core';\nexport * from './util';\nexport * from './process';\nexport * from './wallets';\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AddressData, CommitmentCiphertext } from 'dop-engine-v5';
|
|
2
|
+
import { Network, DopERC20Amount } from 'dop-sharedmodel-v5';
|
|
3
|
+
import { ContractTransaction } from 'ethers';
|
|
4
|
+
export declare const extractFirstNoteERC20AmountMapFromTransactionRequest: (dopWalletID: string, network: Network, transactionRequest: ContractTransaction, useRelayAdapt: boolean) => Promise<MapType<bigint>>;
|
|
5
|
+
export declare const extractERC20AmountFromCommitmentCiphertext: (network: Network, commitmentCiphertext: CommitmentCiphertext, commitmentHash: string, receivingViewingPrivateKey: Uint8Array, receivingDopAddressData: AddressData) => Promise<Optional<DopERC20Amount>>;
|
|
6
|
+
export { CommitmentCiphertext };
|