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,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertTransactionStructToCommitmentSummary = void 0;
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
const convertTransactionStructToCommitmentSummary = (transactionStruct, commitmentIndex) => {
|
|
6
|
+
const commitmentCiphertextStruct = transactionStruct.boundParams
|
|
7
|
+
.commitmentCiphertext[commitmentIndex];
|
|
8
|
+
const commitmentCiphertext = (0, dop_engine_v5_1.formatCommitmentCiphertext)(commitmentCiphertextStruct);
|
|
9
|
+
// const commitmentHash = transactionStruct.commitments[
|
|
10
|
+
// commitmentIndex
|
|
11
|
+
// ] as string;
|
|
12
|
+
return {
|
|
13
|
+
commitmentCiphertext,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
exports.convertTransactionStructToCommitmentSummary = convertTransactionStructToCommitmentSummary;
|
|
17
|
+
//# sourceMappingURL=commitment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../../src/services/dop/util/commitment.ts"],"names":[],"mappings":";;;AAAA,iDAKuB;AAMhB,MAAM,2CAA2C,GAAG,CACzD,iBAAoC,EACpC,eAAuB,EACJ,EAAE;IACrB,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,WAAW;SAC7D,oBAAoB,CAAC,eAAe,CAAqC,CAAC;IAE7E,MAAM,oBAAoB,GAAyB,IAAA,0CAA0B,EAC3E,0BAA0B,CAC3B,CAAC;IACF,wDAAwD;IACxD,oBAAoB;IACpB,eAAe;IAEf,OAAO;QACL,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,2CAA2C,+CAiBtD","sourcesContent":["import {\n CommitmentCiphertextStructOutput,\n TransactionStruct,\n formatCommitmentCiphertext,\n CommitmentSummary,\n} from 'dop-engine-v5';\n\nimport {\n CommitmentCiphertext,\n} from 'dop-sharedmodel-v5';\n\nexport const convertTransactionStructToCommitmentSummary = (\n transactionStruct: TransactionStruct,\n commitmentIndex: number,\n): CommitmentSummary => {\n const commitmentCiphertextStruct = transactionStruct.boundParams\n .commitmentCiphertext[commitmentIndex] as CommitmentCiphertextStructOutput;\n\n const commitmentCiphertext: CommitmentCiphertext = formatCommitmentCiphertext(\n commitmentCiphertextStruct,\n );\n // const commitmentHash = transactionStruct.commitments[\n // commitmentIndex\n // ] as string;\n\n return {\n commitmentCiphertext,\n };\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from 'dop-engine-v5';
|
|
2
|
+
import { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const verifyRelayerSignature: (signature: string | Uint8Array, data: string | Uint8Array, signingKey: Uint8Array) => Promise<boolean>;
|
|
4
|
+
export declare const encryptDataWithSharedKey: (data: object, externalPubKey: Uint8Array) => Promise<EncryptDataWithSharedKeyResponse>;
|
|
5
|
+
export declare const decryptAESGCM256: (encryptedData: EncryptedData, sharedKey: Uint8Array) => object | null;
|
|
6
|
+
export declare const encryptAESGCM256: (data: object, sharedKey: Uint8Array) => EncryptedData;
|
|
7
|
+
/**
|
|
8
|
+
* Calculates PBKDF2 hash
|
|
9
|
+
* @param secret - input
|
|
10
|
+
* @param salt - salt
|
|
11
|
+
* @param iterations - rounds
|
|
12
|
+
*/
|
|
13
|
+
export declare const pbkdf2: (secret: string, salt: string, iterations: number) => Promise<string>;
|
|
14
|
+
export { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, EncryptedData, getPublicViewingKey, ViewingKeyPair, };
|
|
@@ -0,0 +1,79 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.getPublicViewingKey = exports.tryDecryptJSONDataWithSharedKey = exports.encryptJSONDataWithSharedKey = exports.pbkdf2 = exports.encryptAESGCM256 = exports.decryptAESGCM256 = exports.encryptDataWithSharedKey = exports.verifyRelayerSignature = void 0;
|
|
27
|
+
const ed = __importStar(require("@noble/ed25519"));
|
|
28
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
29
|
+
Object.defineProperty(exports, "encryptJSONDataWithSharedKey", { enumerable: true, get: function () { return dop_engine_v5_1.encryptJSONDataWithSharedKey; } });
|
|
30
|
+
Object.defineProperty(exports, "tryDecryptJSONDataWithSharedKey", { enumerable: true, get: function () { return dop_engine_v5_1.tryDecryptJSONDataWithSharedKey; } });
|
|
31
|
+
Object.defineProperty(exports, "getPublicViewingKey", { enumerable: true, get: function () { return dop_engine_v5_1.getPublicViewingKey; } });
|
|
32
|
+
const bytes_1 = require("./bytes");
|
|
33
|
+
const util_1 = require("util");
|
|
34
|
+
const crypto_1 = require("crypto");
|
|
35
|
+
const pbkdf2_1 = require("ethereum-cryptography/pbkdf2");
|
|
36
|
+
const verifyRelayerSignature = (signature, data, signingKey) => {
|
|
37
|
+
return (0, dop_engine_v5_1.verifyED25519)(data, signature, signingKey);
|
|
38
|
+
};
|
|
39
|
+
exports.verifyRelayerSignature = verifyRelayerSignature;
|
|
40
|
+
const encryptDataWithSharedKey = async (data, externalPubKey) => {
|
|
41
|
+
const randomPrivKey = (0, dop_engine_v5_1.hexStringToBytes)((0, bytes_1.getRandomBytes)(32));
|
|
42
|
+
const randomPubKeyUint8Array = await (0, dop_engine_v5_1.getPublicViewingKey)(randomPrivKey);
|
|
43
|
+
const randomPubKey = (0, dop_engine_v5_1.hexlify)(randomPubKeyUint8Array);
|
|
44
|
+
const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);
|
|
45
|
+
const encryptedData = (0, dop_engine_v5_1.encryptJSONDataWithSharedKey)(data, sharedKey);
|
|
46
|
+
return { encryptedData, randomPubKey, sharedKey };
|
|
47
|
+
};
|
|
48
|
+
exports.encryptDataWithSharedKey = encryptDataWithSharedKey;
|
|
49
|
+
const decryptAESGCM256 = (encryptedData, sharedKey) => {
|
|
50
|
+
return (0, dop_engine_v5_1.tryDecryptJSONDataWithSharedKey)(encryptedData, sharedKey);
|
|
51
|
+
};
|
|
52
|
+
exports.decryptAESGCM256 = decryptAESGCM256;
|
|
53
|
+
const encryptAESGCM256 = (data, sharedKey) => {
|
|
54
|
+
return (0, dop_engine_v5_1.encryptJSONDataWithSharedKey)(data, sharedKey);
|
|
55
|
+
};
|
|
56
|
+
exports.encryptAESGCM256 = encryptAESGCM256;
|
|
57
|
+
/**
|
|
58
|
+
* Calculates PBKDF2 hash
|
|
59
|
+
* @param secret - input
|
|
60
|
+
* @param salt - salt
|
|
61
|
+
* @param iterations - rounds
|
|
62
|
+
*/
|
|
63
|
+
const pbkdf2 = async (secret, salt, iterations) => {
|
|
64
|
+
const secretBuffer = Buffer.from(secret, 'utf-8');
|
|
65
|
+
const secretFormatted = new Uint8Array((0, dop_engine_v5_1.arrayify)(secretBuffer));
|
|
66
|
+
const saltFormatted = new Uint8Array((0, dop_engine_v5_1.arrayify)(salt));
|
|
67
|
+
const keyLength = 32; // Bytes
|
|
68
|
+
const digest = 'sha256';
|
|
69
|
+
let key;
|
|
70
|
+
if (dop_engine_v5_1.isReactNative) {
|
|
71
|
+
key = await (0, pbkdf2_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
key = await (0, util_1.promisify)(crypto_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
|
|
75
|
+
}
|
|
76
|
+
return (0, dop_engine_v5_1.hexlify)(key);
|
|
77
|
+
};
|
|
78
|
+
exports.pbkdf2 = pbkdf2;
|
|
79
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/dop/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,iDAWuB;AAiFrB,6GAxFA,4CAA4B,OAwFA;AAC5B,gHAxFA,+CAA+B,OAwFA;AAE/B,oGAzFA,mCAAmB,OAyFA;AAlFrB,mCAAyC;AACzC,+BAAiC;AACjC,mCAA8C;AAC9C,yDAAkE;AAE3D,MAAM,sBAAsB,GAAG,CACpC,SAA8B,EAC9B,IAAyB,EACzB,UAAsB,EACJ,EAAE;IACpB,OAAO,IAAA,6BAAa,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,sBAAsB,0BAMjC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAY,EACZ,cAA0B,EACiB,EAAE;IAC7C,MAAM,aAAa,GAAG,IAAA,gCAAgB,EAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,sBAAsB,GAAG,MAAM,IAAA,mCAAmB,EAAC,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAA,uBAAO,EAAC,sBAAsB,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,aAA4B,EAC5B,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,+CAA+B,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,4CAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEF;;;;;GAKG;AACI,MAAM,MAAM,GAAG,KAAK,EACzB,MAAc,EACd,IAAY,EACZ,UAAkB,EACD,EAAE;IACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,IAAA,wBAAQ,EAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,IAAA,wBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,IAAI,GAAwB,CAAC;IAC7B,IAAI,6BAAa,EAAE;QACjB,GAAG,GAAG,MAAM,IAAA,eAAQ,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;SAAM;QACL,GAAG,GAAG,MAAM,IAAA,gBAAS,EAAC,eAAU,CAAC,CAC/B,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;IACD,OAAO,IAAA,uBAAO,EAAC,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC;AA/BW,QAAA,MAAM,UA+BjB","sourcesContent":["import * as ed from '@noble/ed25519';\nimport {\n arrayify,\n hexlify,\n hexStringToBytes,\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n getPublicViewingKey,\n verifyED25519,\n EncryptedData,\n ViewingKeyPair,\n isReactNative,\n} from 'dop-engine-v5';\nimport { EncryptDataWithSharedKeyResponse } from 'dop-sharedmodel-v5';\nimport { getRandomBytes } from './bytes';\nimport { promisify } from 'util';\nimport { pbkdf2 as NodePbkdf2 } from 'crypto';\nimport { pbkdf2 as JSpbkdf2 } from 'ethereum-cryptography/pbkdf2';\n\nexport const verifyRelayerSignature = (\n signature: string | Uint8Array,\n data: string | Uint8Array,\n signingKey: Uint8Array,\n): Promise<boolean> => {\n return verifyED25519(data, signature, signingKey);\n};\n\nexport const encryptDataWithSharedKey = async (\n data: object,\n externalPubKey: Uint8Array,\n): Promise<EncryptDataWithSharedKeyResponse> => {\n const randomPrivKey = hexStringToBytes(getRandomBytes(32));\n const randomPubKeyUint8Array = await getPublicViewingKey(randomPrivKey);\n const randomPubKey = hexlify(randomPubKeyUint8Array);\n const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);\n const encryptedData = encryptJSONDataWithSharedKey(data, sharedKey);\n return { encryptedData, randomPubKey, sharedKey };\n};\n\nexport const decryptAESGCM256 = (\n encryptedData: EncryptedData,\n sharedKey: Uint8Array,\n): object | null => {\n return tryDecryptJSONDataWithSharedKey(encryptedData, sharedKey);\n};\n\nexport const encryptAESGCM256 = (\n data: object,\n sharedKey: Uint8Array,\n): EncryptedData => {\n return encryptJSONDataWithSharedKey(data, sharedKey);\n};\n\n/**\n * Calculates PBKDF2 hash\n * @param secret - input\n * @param salt - salt\n * @param iterations - rounds\n */\nexport const pbkdf2 = async (\n secret: string,\n salt: string,\n iterations: number,\n): Promise<string> => {\n const secretBuffer = Buffer.from(secret, 'utf-8');\n const secretFormatted = new Uint8Array(arrayify(secretBuffer));\n const saltFormatted = new Uint8Array(arrayify(salt));\n\n const keyLength = 32; // Bytes\n const digest = 'sha256';\n\n let key: Uint8Array | Buffer;\n if (isReactNative) {\n key = await JSpbkdf2(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n } else {\n key = await promisify(NodePbkdf2)(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n }\n return hexlify(key);\n};\n\nexport {\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n EncryptedData,\n getPublicViewingKey,\n ViewingKeyPair,\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Database = void 0;
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return dop_engine_v5_1.Database; } });
|
|
6
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../src/services/dop/util/db.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AAEhC,yFAFA,wBAAQ,OAEA","sourcesContent":["import { Database } from 'dop-engine-v5';\n\nexport { Database };\n"]}
|
|
@@ -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("./bytes"), exports);
|
|
18
|
+
__exportStar(require("./crypto"), exports);
|
|
19
|
+
__exportStar(require("./commitment"), exports);
|
|
20
|
+
__exportStar(require("./db"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/dop/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,+CAA6B;AAC7B,uCAAqB","sourcesContent":["export * from './bytes';\nexport * from './crypto';\nexport * from './commitment';\nexport * from './db';\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Chain, AbstractWallet } from 'dop-engine-v5';
|
|
2
|
+
import { DopBalancesEvent, NetworkName } from 'dop-sharedmodel-v5';
|
|
3
|
+
export type BalancesUpdatedCallback = (balancesEvent: DopBalancesEvent) => void;
|
|
4
|
+
export declare const setOnBalanceUpdateCallback: (callback?: BalancesUpdatedCallback) => void;
|
|
5
|
+
export declare const onBalancesUpdate: (wallet: AbstractWallet, chain: Chain) => Promise<void>;
|
|
6
|
+
export declare const balanceForERC20Token: (wallet: AbstractWallet, networkName: NetworkName, tokenAddress: string) => Promise<bigint>;
|
|
7
|
+
export declare const awaitWalletScan: (walletID: string, chain: Chain) => Promise<unknown>;
|
|
8
|
+
export declare const awaitMultipleWalletScans: (walletID: string, chain: Chain, numScans: number) => Promise<void>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.awaitMultipleWalletScans = exports.awaitWalletScan = exports.balanceForERC20Token = exports.onBalancesUpdate = exports.setOnBalanceUpdateCallback = void 0;
|
|
4
|
+
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
|
+
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
6
|
+
const logger_1 = require("../../../utils/logger");
|
|
7
|
+
const bytes_1 = require("../util/bytes");
|
|
8
|
+
const core_1 = require("../core");
|
|
9
|
+
let onBalanceUpdateCallback;
|
|
10
|
+
const setOnBalanceUpdateCallback = (callback) => {
|
|
11
|
+
onBalanceUpdateCallback = callback;
|
|
12
|
+
};
|
|
13
|
+
exports.setOnBalanceUpdateCallback = setOnBalanceUpdateCallback;
|
|
14
|
+
const getSerializedERC20Balances = (balances) => {
|
|
15
|
+
const tokenHashes = Object.keys(balances);
|
|
16
|
+
return tokenHashes
|
|
17
|
+
.filter(tokenHash => {
|
|
18
|
+
return balances[tokenHash].tokenData.tokenType === dop_engine_v5_1.TokenType.ERC20;
|
|
19
|
+
})
|
|
20
|
+
.map(dopBalanceAddress => {
|
|
21
|
+
const erc20Balance = {
|
|
22
|
+
tokenAddress: (0, bytes_1.parseDopTokenAddress)(balances[dopBalanceAddress].tokenData.tokenAddress).toLowerCase(),
|
|
23
|
+
amount: balances[dopBalanceAddress].balance,
|
|
24
|
+
};
|
|
25
|
+
return erc20Balance;
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const getNFTBalances = (balances) => {
|
|
29
|
+
const tokenHashes = Object.keys(balances);
|
|
30
|
+
return tokenHashes
|
|
31
|
+
.filter(tokenHash => {
|
|
32
|
+
return ([dop_engine_v5_1.TokenType.ERC721, dop_engine_v5_1.TokenType.ERC1155].includes(balances[tokenHash].tokenData.tokenType) && balances[tokenHash].balance > BigInt(0));
|
|
33
|
+
})
|
|
34
|
+
.map(tokenHash => {
|
|
35
|
+
const tokenData = balances[tokenHash].tokenData;
|
|
36
|
+
const nftBalance = {
|
|
37
|
+
nftAddress: (0, bytes_1.parseDopTokenAddress)(tokenData.tokenAddress).toLowerCase(),
|
|
38
|
+
nftTokenType: tokenData.tokenType,
|
|
39
|
+
tokenSubID: tokenData.tokenSubID,
|
|
40
|
+
amount: balances[tokenHash].balance,
|
|
41
|
+
};
|
|
42
|
+
return nftBalance;
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const onBalancesUpdate = async (wallet, chain) => {
|
|
46
|
+
(0, logger_1.sendMessage)(`Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`);
|
|
47
|
+
if (!onBalanceUpdateCallback) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const balances = await wallet.balances(chain);
|
|
51
|
+
const erc20Amounts = getSerializedERC20Balances(balances);
|
|
52
|
+
const nftAmounts = getNFTBalances(balances);
|
|
53
|
+
const balancesEvent = {
|
|
54
|
+
chain,
|
|
55
|
+
erc20Amounts,
|
|
56
|
+
nftAmounts,
|
|
57
|
+
dopWalletID: wallet.id,
|
|
58
|
+
};
|
|
59
|
+
onBalanceUpdateCallback(balancesEvent);
|
|
60
|
+
};
|
|
61
|
+
exports.onBalancesUpdate = onBalancesUpdate;
|
|
62
|
+
const balanceForERC20Token = async (wallet, networkName, tokenAddress) => {
|
|
63
|
+
const { chain } = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
|
|
64
|
+
const balances = await wallet.balances(chain);
|
|
65
|
+
const tokenBalances = getSerializedERC20Balances(balances);
|
|
66
|
+
const matchingTokenBalance = tokenBalances.find(tokenBalance => tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase());
|
|
67
|
+
if (!matchingTokenBalance) {
|
|
68
|
+
return 0n;
|
|
69
|
+
}
|
|
70
|
+
return matchingTokenBalance.amount;
|
|
71
|
+
};
|
|
72
|
+
exports.balanceForERC20Token = balanceForERC20Token;
|
|
73
|
+
const awaitWalletScan = (walletID, chain) => {
|
|
74
|
+
const wallet = (0, core_1.walletForID)(walletID);
|
|
75
|
+
return new Promise((resolve, reject) => wallet.once(dop_engine_v5_1.EngineEvent.WalletScanComplete, ({ chain: returnedChain }) => returnedChain.type === chain.type && returnedChain.id === chain.id
|
|
76
|
+
? resolve(returnedChain)
|
|
77
|
+
: reject()));
|
|
78
|
+
};
|
|
79
|
+
exports.awaitWalletScan = awaitWalletScan;
|
|
80
|
+
const awaitMultipleWalletScans = async (walletID, chain, numScans) => {
|
|
81
|
+
let i = 0;
|
|
82
|
+
while (i < numScans) {
|
|
83
|
+
// eslint-disable-next-line no-await-in-loop
|
|
84
|
+
await (0, exports.awaitWalletScan)(walletID, chain);
|
|
85
|
+
i += 1;
|
|
86
|
+
}
|
|
87
|
+
return Promise.resolve();
|
|
88
|
+
};
|
|
89
|
+
exports.awaitMultipleWalletScans = awaitMultipleWalletScans;
|
|
90
|
+
//# sourceMappingURL=balance-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance-update.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balance-update.ts"],"names":[],"mappings":";;;AAAA,iDAOuB;AACvB,2DAM4B;AAC5B,kDAAoD;AACpD,yCAAqD;AACrD,kCAAsC;AAMtC,IAAI,uBAA0D,CAAC;AAExD,MAAM,0BAA0B,GAAG,CACxC,QAAkC,EAClC,EAAE;IACF,uBAAuB,GAAG,QAAQ,CAAC;AACrC,CAAC,CAAC;AAJW,QAAA,0BAA0B,8BAIrC;AAEF,MAAM,0BAA0B,GAAG,CACjC,QAAkB,EACA,EAAE;IACpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE1C,OAAO,WAAW;SACf,MAAM,CAAC,SAAS,CAAC,EAAE;QAClB,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,yBAAS,CAAC,KAAK,CAAC;IACrE,CAAC,CAAC;SACD,GAAG,CAAC,iBAAiB,CAAC,EAAE;QACvB,MAAM,YAAY,GAAmB;YACnC,YAAY,EAAE,IAAA,4BAAoB,EAChC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,YAAY,CACnD,CAAC,WAAW,EAAE;YACf,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,OAAO;SAC5C,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAkB,EAAE;IAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE1C,OAAO,WAAW;SACf,MAAM,CAAC,SAAS,CAAC,EAAE;QAClB,OAAO,CACL,CAAC,yBAAS,CAAC,MAAM,EAAE,yBAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,CAC5C,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,CACxC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAC7C,CAAC;IACJ,CAAC,CAAC;SACD,GAAG,CAAC,SAAS,CAAC,EAAE;QACf,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;QAEhD,MAAM,UAAU,GAAiB;YAC/B,UAAU,EAAE,IAAA,4BAAoB,EAC9B,SAAS,CAAC,YAAY,CACvB,CAAC,WAAW,EAAE;YACf,YAAY,EAAE,SAAS,CAAC,SAAkB;YAC1C,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO;SACpC,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAAsB,EACtB,KAAY,EACG,EAAE;IACjB,IAAA,oBAAW,EACT,sDAAsD,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,GAAG,CAChF,CAAC;IACF,IAAI,CAAC,uBAAuB,EAAE;QAC5B,OAAO;KACR;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,aAAa,GAAqB;QACtC,KAAK;QACL,YAAY;QACZ,UAAU;QACV,WAAW,EAAE,MAAM,CAAC,EAAE;KACvB,CAAC;IAEF,uBAAuB,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC,CAAC;AAvBW,QAAA,gBAAgB,oBAuB3B;AAEK,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAsB,EACtB,WAAwB,EACxB,YAAoB,EACH,EAAE;IACnB,MAAM,EAAE,KAAK,EAAE,GAAG,mCAAc,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAE3D,MAAM,oBAAoB,GAA6B,aAAa,CAAC,IAAI,CACvE,YAAY,CAAC,EAAE,CACb,YAAY,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CACzE,CAAC;IACF,IAAI,CAAC,oBAAoB,EAAE;QACzB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,oBAAoB,CAAC,MAAM,CAAC;AACrC,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B;AAEK,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,KAAY,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,IAAA,kBAAW,EAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CACrC,MAAM,CAAC,IAAI,CACT,2BAAW,CAAC,kBAAkB,EAC9B,CAAC,EAAE,KAAK,EAAE,aAAa,EAA0B,EAAE,EAAE,CACnD,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;QAChE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QACxB,CAAC,CAAC,MAAM,EAAE,CACf,CACF,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,eAAe,mBAW1B;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,QAAgB,EAChB,KAAY,EACZ,QAAgB,EAChB,EAAE;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,QAAQ,EAAE;QACnB,4CAA4C;QAC5C,MAAM,IAAA,uBAAe,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC,IAAI,CAAC,CAAC;KACR;IACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC","sourcesContent":["import {\n Chain,\n AbstractWallet,\n TokenType,\n Balances,\n EngineEvent,\n WalletScannedEventData,\n} from 'dop-engine-v5';\nimport {\n DopBalancesEvent,\n DopNFTAmount,\n DopERC20Amount,\n NetworkName,\n NETWORK_CONFIG,\n} from 'dop-sharedmodel-v5';\nimport { sendMessage } from '../../../utils/logger';\nimport { parseDopTokenAddress } from '../util/bytes';\nimport { walletForID } from '../core';\n\nexport type BalancesUpdatedCallback = (\n balancesEvent: DopBalancesEvent,\n) => void;\n\nlet onBalanceUpdateCallback: Optional<BalancesUpdatedCallback>;\n\nexport const setOnBalanceUpdateCallback = (\n callback?: BalancesUpdatedCallback,\n) => {\n onBalanceUpdateCallback = callback;\n};\n\nconst getSerializedERC20Balances = (\n balances: Balances,\n): DopERC20Amount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return balances[tokenHash].tokenData.tokenType === TokenType.ERC20;\n })\n .map(dopBalanceAddress => {\n const erc20Balance: DopERC20Amount = {\n tokenAddress: parseDopTokenAddress(\n balances[dopBalanceAddress].tokenData.tokenAddress,\n ).toLowerCase(),\n amount: balances[dopBalanceAddress].balance,\n };\n return erc20Balance;\n });\n};\n\nconst getNFTBalances = (balances: Balances): DopNFTAmount[] => {\n const tokenHashes = Object.keys(balances);\n\n return tokenHashes\n .filter(tokenHash => {\n return (\n [TokenType.ERC721, TokenType.ERC1155].includes(\n balances[tokenHash].tokenData.tokenType,\n ) && balances[tokenHash].balance > BigInt(0)\n );\n })\n .map(tokenHash => {\n const tokenData = balances[tokenHash].tokenData;\n\n const nftBalance: DopNFTAmount = {\n nftAddress: parseDopTokenAddress(\n tokenData.tokenAddress,\n ).toLowerCase(),\n nftTokenType: tokenData.tokenType as 1 | 2,\n tokenSubID: tokenData.tokenSubID,\n amount: balances[tokenHash].balance,\n };\n return nftBalance;\n });\n};\n\nexport const onBalancesUpdate = async (\n wallet: AbstractWallet,\n chain: Chain,\n): Promise<void> => {\n sendMessage(\n `Wallet balance SCANNED. Getting balances for chain ${chain.type}:${chain.id}.`,\n );\n if (!onBalanceUpdateCallback) {\n return;\n }\n\n const balances = await wallet.balances(chain);\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getNFTBalances(balances);\n\n const balancesEvent: DopBalancesEvent = {\n chain,\n erc20Amounts,\n nftAmounts,\n dopWalletID: wallet.id,\n };\n\n onBalanceUpdateCallback(balancesEvent);\n};\n\nexport const balanceForERC20Token = async (\n wallet: AbstractWallet,\n networkName: NetworkName,\n tokenAddress: string,\n): Promise<bigint> => {\n const { chain } = NETWORK_CONFIG[networkName];\n const balances = await wallet.balances(chain);\n const tokenBalances = getSerializedERC20Balances(balances);\n\n const matchingTokenBalance: Optional<DopERC20Amount> = tokenBalances.find(\n tokenBalance =>\n tokenBalance.tokenAddress.toLowerCase() === tokenAddress.toLowerCase(),\n );\n if (!matchingTokenBalance) {\n return 0n;\n }\n return matchingTokenBalance.amount;\n};\n\nexport const awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletScanComplete,\n ({ chain: returnedChain }: WalletScannedEventData) =>\n returnedChain.type === chain.type && returnedChain.id === chain.id\n ? resolve(returnedChain)\n : reject(),\n ),\n );\n};\n\nexport const awaitMultipleWalletScans = async (\n walletID: string,\n chain: Chain,\n numScans: number,\n) => {\n let i = 0;\n while (i < numScans) {\n // eslint-disable-next-line no-await-in-loop\n await awaitWalletScan(walletID, chain);\n i += 1;\n }\n return Promise.resolve();\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Chain } from 'dop-engine-v5';
|
|
2
|
+
import { DopBalanceRefreshTrigger } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const refreshDopBalances: DopBalanceRefreshTrigger;
|
|
4
|
+
export declare const scanUpdatesForMerkletreeAndWallets: (chain: Chain) => Promise<void>;
|
|
5
|
+
export declare const rescanFullMerkletreesAndWallets: (chain: Chain) => Promise<void>;
|
|
6
|
+
export declare const fullRescanBalancesAllWallets: (chain: Chain, progressCallback?: ((progress: number) => void) | undefined) => Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fullRescanBalancesAllWallets = exports.rescanFullMerkletreesAndWallets = exports.scanUpdatesForMerkletreeAndWallets = exports.refreshDopBalances = void 0;
|
|
4
|
+
const error_1 = require("../../../utils/error");
|
|
5
|
+
const engine_1 = require("../core/engine");
|
|
6
|
+
const refreshDopBalances = async (chain, dopWalletID, fullRescan, progressCallback) => {
|
|
7
|
+
try {
|
|
8
|
+
const wallet = (0, engine_1.walletForID)(dopWalletID);
|
|
9
|
+
if (fullRescan) {
|
|
10
|
+
await wallet.fullRescanBalances(chain, progressCallback);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
await wallet.scanBalances(chain, progressCallback);
|
|
14
|
+
}
|
|
15
|
+
// Wallet will trigger .emit('scanned', {chain}) event when finished,
|
|
16
|
+
// which calls `onBalancesUpdate` (balance-update.ts).
|
|
17
|
+
// Also kick off a background merkletree scan.
|
|
18
|
+
// This will also call wallet.scanBalances when it's done, but may take longer.
|
|
19
|
+
// So the user will see balances refresh from existing merkletree first.
|
|
20
|
+
const engine = (0, engine_1.getEngine)();
|
|
21
|
+
await engine.scanHistory(chain);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
throw (0, error_1.reportAndSanitizeError)(exports.refreshDopBalances.name, err);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.refreshDopBalances = refreshDopBalances;
|
|
28
|
+
const scanUpdatesForMerkletreeAndWallets = async (chain) => {
|
|
29
|
+
try {
|
|
30
|
+
const engine = (0, engine_1.getEngine)();
|
|
31
|
+
await engine.scanHistory(chain);
|
|
32
|
+
// Wallet will trigger .emit('scanned', {chain}) event when finished,
|
|
33
|
+
// which calls `onBalancesUpdate` (balance-update.ts).
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
throw (0, error_1.reportAndSanitizeError)(exports.scanUpdatesForMerkletreeAndWallets.name, err);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.scanUpdatesForMerkletreeAndWallets = scanUpdatesForMerkletreeAndWallets;
|
|
40
|
+
const rescanFullMerkletreesAndWallets = async (chain) => {
|
|
41
|
+
try {
|
|
42
|
+
const engine = (0, engine_1.getEngine)();
|
|
43
|
+
await engine.fullRescanMerkletreesAndWallets(chain);
|
|
44
|
+
// Wallet will trigger .emit('scanned', {chain}) event when finished,
|
|
45
|
+
// which calls `onBalancesUpdate` (balance-update.ts).
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
throw (0, error_1.reportAndSanitizeError)(exports.rescanFullMerkletreesAndWallets.name, err);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.rescanFullMerkletreesAndWallets = rescanFullMerkletreesAndWallets;
|
|
52
|
+
const fullRescanBalancesAllWallets = async (chain, progressCallback) => {
|
|
53
|
+
const engine = (0, engine_1.getEngine)();
|
|
54
|
+
await engine.scanAllWallets(chain, progressCallback);
|
|
55
|
+
};
|
|
56
|
+
exports.fullRescanBalancesAllWallets = fullRescanBalancesAllWallets;
|
|
57
|
+
//# sourceMappingURL=balances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/balances.ts"],"names":[],"mappings":";;;AAEA,gDAA8D;AAC9D,2CAAwD;AAEjD,MAAM,kBAAkB,GAA6B,KAAK,EAC/D,KAAY,EACZ,WAAmB,EACnB,UAAmB,EACnB,gBAA6C,EAC9B,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,WAAW,CAAC,CAAC;QACxC,IAAI,UAAU,EAAE;YAEd,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SAC1D;aAAM;YACL,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SACpD;QAED,qEAAqE;QACrE,sDAAsD;QAEtD,8CAA8C;QAC9C,+EAA+E;QAC/E,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACjC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0BAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5D;AACH,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B;AAEK,MAAM,kCAAkC,GAAG,KAAK,EACrD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,0CAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC;AAZW,QAAA,kCAAkC,sCAY7C;AAEK,MAAM,+BAA+B,GAAG,KAAK,EAClD,KAAY,EACG,EAAE;IACjB,IAAI;QACF,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;QAEpD,qEAAqE;QACrE,sDAAsD;KACvD;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uCAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AAZW,QAAA,+BAA+B,mCAY1C;AAEK,MAAM,4BAA4B,GAAG,KAAK,EAC/C,KAAY,EACZ,gBAA6C,EAC9B,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC,CAAC;AANW,QAAA,4BAA4B,gCAMvC","sourcesContent":["import { Chain } from 'dop-engine-v5';\nimport { DopBalanceRefreshTrigger } from 'dop-sharedmodel-v5';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getEngine, walletForID } from '../core/engine';\n\nexport const refreshDopBalances: DopBalanceRefreshTrigger = async (\n chain: Chain,\n dopWalletID: string,\n fullRescan: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n try {\n const wallet = walletForID(dopWalletID);\n if (fullRescan) {\n\n await wallet.fullRescanBalances(chain, progressCallback);\n } else {\n await wallet.scanBalances(chain, progressCallback);\n }\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n\n // Also kick off a background merkletree scan.\n // This will also call wallet.scanBalances when it's done, but may take longer.\n // So the user will see balances refresh from existing merkletree first.\n const engine = getEngine();\n await engine.scanHistory(chain);\n } catch (err) {\n throw reportAndSanitizeError(refreshDopBalances.name, err);\n }\n};\n\nexport const scanUpdatesForMerkletreeAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.scanHistory(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(scanUpdatesForMerkletreeAndWallets.name, err);\n }\n};\n\nexport const rescanFullMerkletreesAndWallets = async (\n chain: Chain,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.fullRescanMerkletreesAndWallets(chain);\n\n // Wallet will trigger .emit('scanned', {chain}) event when finished,\n // which calls `onBalancesUpdate` (balance-update.ts).\n } catch (err) {\n throw reportAndSanitizeError(rescanFullMerkletreesAndWallets.name, err);\n }\n};\n\nexport const fullRescanBalancesAllWallets = async (\n chain: Chain,\n progressCallback?: (progress: number) => void,\n): Promise<void> => {\n const engine = getEngine();\n await engine.scanAllWallets(chain, progressCallback);\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./balance-update"), exports);
|
|
18
|
+
__exportStar(require("./balances"), exports);
|
|
19
|
+
__exportStar(require("./wallets"), exports);
|
|
20
|
+
__exportStar(require("../history/transaction-history"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,6CAA2B;AAC3B,4CAA0B;AAC1B,iEAA+C","sourcesContent":["export * from './balance-update';\nexport * from './balances';\nexport * from './wallets';\nexport * from '../history/transaction-history';\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AddressData } from 'dop-engine-v5';
|
|
2
|
+
import { DopWalletInfo } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const createWalletFromTransaction: (leaf: any, viewingPrivateKey: Uint8Array, chain: any, encryptionKey: string, mnemonic: string, index?: number) => Promise<any>;
|
|
4
|
+
export declare const createUserWalletWithID: (encryptionKey: string, id: string, leaf: any, viewingPrivateKey: Uint8Array, chain: any) => Promise<any>;
|
|
5
|
+
export declare const createDopWallet: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
6
|
+
export declare const createViewOnlyDopWallet: (encryptionKey: string, shareableViewingKey: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
7
|
+
export declare const loadWalletByID: (encryptionKey: string, dopWalletID: string, isViewOnlyWallet: boolean) => Promise<DopWalletInfo>;
|
|
8
|
+
export declare const unloadWalletByID: (dopWalletID: string) => void;
|
|
9
|
+
export declare const deleteWalletByID: (dopWalletID: string) => Promise<void>;
|
|
10
|
+
export declare const getWalletMnemonic: (encryptionKey: string, dopWalletID: string) => Promise<string>;
|
|
11
|
+
export declare const getDopWalletAddressData: (address: string) => AddressData;
|
|
12
|
+
export declare const getDopWalletPrivateViewingKey: (dopWalletID: string) => Uint8Array;
|
|
13
|
+
export declare const signWithWalletViewingKey: (dopWalletID: string, message: string) => Promise<string>;
|
|
14
|
+
export declare const assertValidDopAddress: (address: string) => void;
|
|
15
|
+
export declare const validateDopAddress: (address: string) => boolean;
|
|
16
|
+
export declare const assertValidEthAddress: (address: string) => void;
|
|
17
|
+
export declare const validateEthAddress: (address: string) => boolean;
|
|
18
|
+
export declare const getDopAddress: (dopWalletID: string) => Optional<string>;
|
|
19
|
+
export declare const getWalletShareableViewingKey: (dopWalletID: string) => Promise<Optional<string>>;
|