dop-wallet-v6 1.1.8 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/artifacts/artifact-util.js +13 -5
- package/dist/services/artifacts/artifact-util.js.map +1 -1
- package/dist/services/artifacts/json/artifact-v2-hashes.json +65 -0
- package/dist/services/dop/core/artifacts.d.ts +2 -2
- package/dist/services/dop/core/artifacts.js +3 -1
- package/dist/services/dop/core/artifacts.js.map +1 -1
- package/dist/services/dop/core/engine.js +3 -0
- package/dist/services/dop/core/engine.js.map +1 -1
- package/dist/services/dop/quick-sync/graphql/index.js +5 -5
- package/dist/services/dop/quick-sync/graphql/index.js.map +1 -1
- package/dist/services/dop/util/commitment.d.ts +1 -2
- package/dist/services/dop/util/commitment.js +3 -2
- package/dist/services/dop/util/commitment.js.map +1 -1
- package/dist/services/dop/wallets/wallets.d.ts +2 -0
- package/dist/services/dop/wallets/wallets.js +17 -2
- package/dist/services/dop/wallets/wallets.js.map +1 -1
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +2 -4
- package/dist/services/transactions/tx-cross-contract-calls.js +260 -108
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
- package/dist/services/transactions/tx-gas-details.js +14 -2
- package/dist/services/transactions/tx-gas-details.js.map +1 -1
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +1 -4
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +185 -86
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
- package/dist/services/transactions/tx-generator.d.ts +2 -3
- package/dist/services/transactions/tx-generator.js +54 -25
- package/dist/services/transactions/tx-generator.js.map +1 -1
- package/dist/services/transactions/tx-proof-transfer.d.ts +2 -1
- package/dist/services/transactions/tx-proof-transfer.js +11 -17
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
- package/dist/services/transactions/tx-proof-unshield.d.ts +2 -3
- package/dist/services/transactions/tx-proof-unshield.js +143 -84
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
- package/dist/services/transactions/tx-shield-base-token.d.ts +1 -1
- package/dist/services/transactions/tx-shield-base-token.js +8 -5
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
- package/dist/services/transactions/tx-shield.js +4 -0
- package/dist/services/transactions/tx-shield.js.map +1 -1
- package/dist/services/transactions/tx-transfer.d.ts +1 -2
- package/dist/services/transactions/tx-transfer.js +53 -14
- package/dist/services/transactions/tx-transfer.js.map +1 -1
- package/dist/services/transactions/tx-unshield.d.ts +1 -3
- package/dist/services/transactions/tx-unshield.js +116 -37
- package/dist/services/transactions/tx-unshield.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { TransactionStruct } from 'dop-engine-v5';
|
|
2
|
-
import { CommitmentSummary } from 'dop-sharedmodel-v5';
|
|
1
|
+
import { TransactionStruct, CommitmentSummary } from 'dop-engine-v5';
|
|
3
2
|
export declare const convertTransactionStructToCommitmentSummary: (transactionStruct: TransactionStruct, commitmentIndex: number) => CommitmentSummary;
|
|
@@ -6,10 +6,11 @@ const convertTransactionStructToCommitmentSummary = (transactionStruct, commitme
|
|
|
6
6
|
const commitmentCiphertextStruct = transactionStruct.boundParams
|
|
7
7
|
.commitmentCiphertext[commitmentIndex];
|
|
8
8
|
const commitmentCiphertext = (0, dop_engine_v5_1.formatCommitmentCiphertext)(commitmentCiphertextStruct);
|
|
9
|
-
const commitmentHash = transactionStruct.commitments[
|
|
9
|
+
// const commitmentHash = transactionStruct.commitments[
|
|
10
|
+
// commitmentIndex
|
|
11
|
+
// ] as string;
|
|
10
12
|
return {
|
|
11
13
|
commitmentCiphertext,
|
|
12
|
-
commitmentHash,
|
|
13
14
|
};
|
|
14
15
|
};
|
|
15
16
|
exports.convertTransactionStructToCommitmentSummary = convertTransactionStructToCommitmentSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../../src/services/dop/util/commitment.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"commitment.js","sourceRoot":"","sources":["../../../../src/services/dop/util/commitment.ts"],"names":[],"mappings":";;;AAAA,iDAKuB;AAMhB,MAAM,2CAA2C,GAAG,CACzD,iBAAoC,EACpC,eAAuB,EACJ,EAAE;IACrB,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,WAAW;SAC7D,oBAAoB,CAAC,eAAe,CAAqC,CAAC;IAE7E,MAAM,oBAAoB,GAAyB,IAAA,0CAA0B,EAC3E,0BAA0B,CAC3B,CAAC;IACF,wDAAwD;IACxD,oBAAoB;IACpB,eAAe;IAEf,OAAO;QACL,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,2CAA2C,+CAiBtD","sourcesContent":["import {\n CommitmentCiphertextStructOutput,\n TransactionStruct,\n formatCommitmentCiphertext,\n CommitmentSummary,\n} from 'dop-engine-v5';\n\nimport {\n CommitmentCiphertext,\n} from 'dop-sharedmodel-v5';\n\nexport const convertTransactionStructToCommitmentSummary = (\n transactionStruct: TransactionStruct,\n commitmentIndex: number,\n): CommitmentSummary => {\n const commitmentCiphertextStruct = transactionStruct.boundParams\n .commitmentCiphertext[commitmentIndex] as CommitmentCiphertextStructOutput;\n\n const commitmentCiphertext: CommitmentCiphertext = formatCommitmentCiphertext(\n commitmentCiphertextStruct,\n );\n // const commitmentHash = transactionStruct.commitments[\n // commitmentIndex\n // ] as string;\n\n return {\n commitmentCiphertext,\n };\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { AddressData } from 'dop-engine-v5';
|
|
2
2
|
import { DopWalletInfo } from 'dop-sharedmodel-v5';
|
|
3
|
+
export declare const createWalletFromTransaction: (leaf: any, viewingPrivateKey: Uint8Array, chain: any, encryptionKey: string, mnemonic: string, index?: number) => Promise<any>;
|
|
4
|
+
export declare const createUserWalletWithID: (encryptionKey: string, id: string, leaf: any, viewingPrivateKey: Uint8Array, chain: any) => Promise<any>;
|
|
3
5
|
export declare const createDopWallet: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
4
6
|
export declare const createViewOnlyDopWallet: (encryptionKey: string, shareableViewingKey: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
|
|
5
7
|
export declare const loadWalletByID: (encryptionKey: string, dopWalletID: string, isViewOnlyWallet: boolean) => Promise<DopWalletInfo>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = void 0;
|
|
3
|
+
exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = exports.createUserWalletWithID = exports.createWalletFromTransaction = void 0;
|
|
4
4
|
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
5
5
|
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
6
6
|
const engine_1 = require("../core/engine");
|
|
@@ -48,6 +48,20 @@ const loadExistingWallet = async (encryptionKey, dopWalletID, isViewOnlyWallet)
|
|
|
48
48
|
subscribeToBalanceEvents(wallet);
|
|
49
49
|
return infoForWallet(wallet);
|
|
50
50
|
};
|
|
51
|
+
// here
|
|
52
|
+
const createWalletFromTransaction = async (leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index = 0) => {
|
|
53
|
+
const engine = (0, engine_1.getEngine)();
|
|
54
|
+
const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);
|
|
55
|
+
return res;
|
|
56
|
+
};
|
|
57
|
+
exports.createWalletFromTransaction = createWalletFromTransaction;
|
|
58
|
+
// here
|
|
59
|
+
const createUserWalletWithID = async (encryptionKey, id, leaf, viewingPrivateKey, chain) => {
|
|
60
|
+
const engine = (0, engine_1.getEngine)();
|
|
61
|
+
const res = engine.createUserWalletWithID(encryptionKey, id, leaf, viewingPrivateKey, chain);
|
|
62
|
+
return res;
|
|
63
|
+
};
|
|
64
|
+
exports.createUserWalletWithID = createUserWalletWithID;
|
|
51
65
|
const createWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
|
|
52
66
|
const formattedCreationBlockNumbers = formatCreationBlockNumbers(creationBlockNumbers);
|
|
53
67
|
const engine = (0, engine_1.getEngine)();
|
|
@@ -62,6 +76,7 @@ const createViewOnlyWallet = async (encryptionKey, shareableViewingKey, creation
|
|
|
62
76
|
subscribeToBalanceEvents(wallet);
|
|
63
77
|
return infoForWallet(wallet);
|
|
64
78
|
};
|
|
79
|
+
// here
|
|
65
80
|
const createDopWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
|
|
66
81
|
try {
|
|
67
82
|
return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);
|
|
@@ -191,7 +206,7 @@ const getWalletShareableViewingKey = async (dopWalletID) => {
|
|
|
191
206
|
exports.getWalletShareableViewingKey = getWalletShareableViewingKey;
|
|
192
207
|
const formatCreationBlockNumbers = (creationBlockNumbers) => {
|
|
193
208
|
var _a;
|
|
194
|
-
// Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine's number[][] type
|
|
209
|
+
// Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-tranparency's number[][] type
|
|
195
210
|
if (!creationBlockNumbers)
|
|
196
211
|
return;
|
|
197
212
|
const formattedCreationBlockNumbers = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n hexlify,\n hexStringToBytes,\n} from 'dop-engine-v5';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n} from 'dop-sharedmodel-v5';\nimport { getEngine, walletForID } from '../core/engine';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\n\nconst subscribeToBalanceEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletScanComplete,\n ({ chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n 0,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n\nexport const createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet: ${sanitizedError.message}`);\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.');\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.');\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(hexStringToBytes(message));\n return hexlify(signature);\n};\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n hexlify,\n hexStringToBytes,\n} from 'dop-engine-v5';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n} from 'dop-sharedmodel-v5';\nimport { getEngine, walletForID } from '../core/engine';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\n\nconst subscribeToBalanceEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletScanComplete,\n ({ chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: any,\n viewingPrivateKey: Uint8Array,\n chain: any,\n encryptionKey: string,\n mnemonic: string,\n index: number = 0,\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\n// here\nexport const createUserWalletWithID = async (\n encryptionKey: string,\n id: string,\n leaf: any,\n viewingPrivateKey: Uint8Array,\n chain: any\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletWithID(\n encryptionKey,\n id,\n leaf,\n viewingPrivateKey,\n chain\n );\n return res;\n};\n\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n 0,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n// here \nexport const createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n\n return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet: ${sanitizedError.message}`);\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.');\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.');\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(hexStringToBytes(message));\n return hexlify(signature);\n};\n\n\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-tranparency's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { DopPopulateTransactionResponse,
|
|
2
|
-
import {
|
|
1
|
+
import { DopPopulateTransactionResponse, DopERC20Amount, NetworkName, TransactionReceiptLog, DopERC20AmountRecipient, DopNFTAmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient } from 'dop-sharedmodel-v5';
|
|
2
|
+
import { NFTTokenData } from 'dop-engine-v5';
|
|
3
3
|
import { ContractTransaction, Log } from 'ethers';
|
|
4
4
|
export declare const createRelayAdaptUnshieldERC20AmountRecipients: (networkName: NetworkName, unshieldERC20Amounts: DopERC20Amount[]) => DopERC20AmountRecipient[];
|
|
5
5
|
export declare const createRelayAdaptUnshieldNFTAmountRecipients: (networkName: NetworkName, unshieldNFTAmounts: DopNFTAmount[]) => DopNFTAmountRecipient[];
|
|
6
6
|
export declare const createNFTTokenDataFromDopNFTAmount: (nftAmount: DopNFTAmount) => NFTTokenData;
|
|
7
7
|
export declare const populateProvedCrossContractCalls: (networkName: NetworkName, dopWalletID: string, relayAdaptUnshieldERC20Amounts: DopERC20Amount[], relayAdaptUnshieldNFTAmounts: DopNFTAmount[], relayAdaptShieldERC20Recipients: DopERC20Recipient[], relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[], crossContractCalls: ContractTransaction[], relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<DopPopulateTransactionResponse>;
|
|
8
|
-
export declare const gasEstimateForUnprovenCrossContractCalls: (networkName: NetworkName, dopWalletID: string, encryptionKey: string, relayAdaptUnshieldERC20Amounts: DopERC20Amount[], relayAdaptUnshieldNFTAmounts: DopNFTAmount[], relayAdaptShieldERC20Recipients: DopERC20Recipient[], relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[], crossContractCalls: ContractTransaction[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean, minGasLimit: Optional<bigint>) => Promise<DopTransactionGasEstimateResponse>;
|
|
9
|
-
export declare const generateCrossContractCallsProof: (networkName: NetworkName, dopWalletID: string, encryptionKey: string, relayAdaptUnshieldERC20Amounts: DopERC20Amount[], relayAdaptUnshieldNFTAmounts: DopNFTAmount[], relayAdaptShieldERC20Recipients: DopERC20Recipient[], relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[], crossContractCalls: ContractTransaction[], relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, minGasLimit: Optional<bigint>, progressCallback: ProverProgressCallback) => Promise<void>;
|
|
10
8
|
export declare const getRelayAdaptTransactionError: (receiptLogs: TransactionReceiptLog[] | readonly Log[]) => Optional<string>;
|
|
11
9
|
export declare const parseRelayAdaptReturnValue: (data: string) => Optional<string>;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.
|
|
3
|
+
exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.populateProvedCrossContractCalls = exports.createNFTTokenDataFromDopNFTAmount = exports.createRelayAdaptUnshieldNFTAmountRecipients = exports.createRelayAdaptUnshieldERC20AmountRecipients = void 0;
|
|
4
4
|
const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
|
|
5
5
|
const providers_1 = require("../dop/core/providers");
|
|
6
|
-
const tx_generator_1 = require("./tx-generator");
|
|
7
6
|
const proof_cache_1 = require("./proof-cache");
|
|
8
7
|
const logger_1 = require("../../utils/logger");
|
|
9
8
|
const dop_engine_v5_1 = require("dop-engine-v5");
|
|
10
9
|
const blocked_address_1 = require("../../utils/blocked-address");
|
|
11
|
-
|
|
10
|
+
// import { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';
|
|
12
11
|
const error_1 = require("../../utils/error");
|
|
13
12
|
const createValidCrossContractCalls = (crossContractCalls) => {
|
|
14
13
|
if (!crossContractCalls.length) {
|
|
@@ -95,114 +94,267 @@ const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayA
|
|
|
95
94
|
}
|
|
96
95
|
};
|
|
97
96
|
exports.populateProvedCrossContractCalls = populateProvedCrossContractCalls;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
97
|
+
/*
|
|
98
|
+
export const gasEstimateForUnprovenCrossContractCalls = async (
|
|
99
|
+
networkName: NetworkName,
|
|
100
|
+
dopWalletID: string,
|
|
101
|
+
encryptionKey: string,
|
|
102
|
+
relayAdaptUnshieldERC20Amounts: DopERC20Amount[],
|
|
103
|
+
relayAdaptUnshieldNFTAmounts: DopNFTAmount[],
|
|
104
|
+
relayAdaptShieldERC20Recipients: DopERC20Recipient[],
|
|
105
|
+
relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],
|
|
106
|
+
crossContractCalls: ContractTransaction[],
|
|
107
|
+
originalGasDetails: TransactionGasDetails,
|
|
108
|
+
feeTokenDetails: Optional<FeeTokenDetails>,
|
|
109
|
+
sendWithPublicWallet: boolean,
|
|
110
|
+
minGasLimit: Optional<bigint>,
|
|
111
|
+
valueCheck: bigint
|
|
112
|
+
): Promise<DopTransactionGasEstimateResponse> => {
|
|
113
|
+
try {
|
|
114
|
+
setCachedProvedTransaction(undefined);
|
|
115
|
+
|
|
116
|
+
const overallBatchMinGasPrice = 0n;
|
|
117
|
+
|
|
118
|
+
const validCrossContractCalls =
|
|
119
|
+
createValidCrossContractCalls(crossContractCalls);
|
|
120
|
+
|
|
121
|
+
const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);
|
|
122
|
+
|
|
123
|
+
const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =
|
|
124
|
+
createRelayAdaptUnshieldERC20AmountRecipients(
|
|
125
|
+
networkName,
|
|
126
|
+
relayAdaptUnshieldERC20Amounts,
|
|
127
|
+
);
|
|
128
|
+
const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =
|
|
129
|
+
createRelayAdaptUnshieldNFTAmountRecipients(
|
|
130
|
+
networkName,
|
|
131
|
+
relayAdaptUnshieldNFTAmounts,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
const shieldRandom = randomHex(16);
|
|
135
|
+
const relayShieldRequests =
|
|
136
|
+
await RelayAdaptHelper.generateRelayShieldRequests(
|
|
137
|
+
shieldRandom,
|
|
138
|
+
relayAdaptShieldERC20Recipients,
|
|
139
|
+
createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
const minimumGasLimit =
|
|
143
|
+
minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
|
|
144
|
+
|
|
145
|
+
const response = await gasEstimateResponseDummyProofIterativeRelayerFee(
|
|
146
|
+
(relayerFeeERC20Amount: Optional<DopERC20Amount>) =>
|
|
147
|
+
generateDummyProofTransactions(
|
|
148
|
+
ProofType.CrossContractCalls,
|
|
149
|
+
networkName,
|
|
150
|
+
dopWalletID,
|
|
151
|
+
encryptionKey,
|
|
152
|
+
false, // showSenderAddressToRecipient
|
|
153
|
+
undefined, // memoText
|
|
154
|
+
relayAdaptUnshieldERC20AmountRecipients,
|
|
155
|
+
relayAdaptUnshieldNFTAmountRecipients,
|
|
156
|
+
relayerFeeERC20Amount,
|
|
157
|
+
sendWithPublicWallet,
|
|
158
|
+
overallBatchMinGasPrice,
|
|
159
|
+
valueCheck
|
|
160
|
+
),
|
|
161
|
+
async (txs: TransactionStruct[]) => {
|
|
162
|
+
const relayAdaptParamsRandom = randomHex(31);
|
|
163
|
+
|
|
164
|
+
// TODO: We should add the relay adapt contract gas limit here.
|
|
165
|
+
const transaction = await relayAdaptContract.populateCrossContractCalls(
|
|
166
|
+
txs,
|
|
167
|
+
validCrossContractCalls,
|
|
168
|
+
relayShieldRequests,
|
|
169
|
+
relayAdaptParamsRandom,
|
|
170
|
+
true, // isGasEstimate
|
|
171
|
+
!sendWithPublicWallet, // isRelayerTransaction
|
|
172
|
+
minimumGasLimit,
|
|
173
|
+
);
|
|
174
|
+
// Remove gasLimit, we'll set to the minimum below.
|
|
175
|
+
// TODO: Remove after callbacks upgrade.
|
|
176
|
+
delete transaction.gasLimit;
|
|
177
|
+
return transaction;
|
|
178
|
+
},
|
|
179
|
+
networkName,
|
|
180
|
+
dopWalletID,
|
|
181
|
+
relayAdaptUnshieldERC20AmountRecipients,
|
|
182
|
+
originalGasDetails,
|
|
183
|
+
feeTokenDetails,
|
|
184
|
+
sendWithPublicWallet,
|
|
185
|
+
true, // isCrossContractCall
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// TODO: Remove this after callbacks upgrade.
|
|
189
|
+
// If gas estimate is under the cross-contract-minimum, replace it with the minimum.
|
|
190
|
+
if (response.gasEstimate) {
|
|
191
|
+
if (response.gasEstimate < minimumGasLimit) {
|
|
192
|
+
response.gasEstimate = minimumGasLimit;
|
|
193
|
+
}
|
|
133
194
|
}
|
|
195
|
+
|
|
196
|
+
return response;
|
|
197
|
+
} catch (err) {
|
|
198
|
+
throw reportAndSanitizeError(
|
|
199
|
+
gasEstimateForUnprovenCrossContractCalls.name,
|
|
200
|
+
err,
|
|
201
|
+
);
|
|
202
|
+
}
|
|
134
203
|
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
+
*/
|
|
205
|
+
/*
|
|
206
|
+
export const generateCrossContractCallsProof = async (
|
|
207
|
+
networkName: NetworkName,
|
|
208
|
+
dopWalletID: string,
|
|
209
|
+
encryptionKey: string,
|
|
210
|
+
relayAdaptUnshieldERC20Amounts: DopERC20Amount[],
|
|
211
|
+
relayAdaptUnshieldNFTAmounts: DopNFTAmount[],
|
|
212
|
+
relayAdaptShieldERC20Recipients: DopERC20Recipient[],
|
|
213
|
+
relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],
|
|
214
|
+
crossContractCalls: ContractTransaction[],
|
|
215
|
+
relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,
|
|
216
|
+
sendWithPublicWallet: boolean,
|
|
217
|
+
overallBatchMinGasPrice: Optional<bigint>,
|
|
218
|
+
minGasLimit: Optional<bigint>,
|
|
219
|
+
progressCallback: ProverProgressCallback,
|
|
220
|
+
valueCheck: bigint
|
|
221
|
+
): Promise<void> => {
|
|
222
|
+
try {
|
|
223
|
+
setCachedProvedTransaction(undefined);
|
|
224
|
+
|
|
225
|
+
const validCrossContractCalls =
|
|
226
|
+
createValidCrossContractCalls(crossContractCalls);
|
|
227
|
+
|
|
228
|
+
const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);
|
|
229
|
+
|
|
230
|
+
const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =
|
|
231
|
+
createRelayAdaptUnshieldERC20AmountRecipients(
|
|
232
|
+
networkName,
|
|
233
|
+
relayAdaptUnshieldERC20Amounts,
|
|
234
|
+
);
|
|
235
|
+
const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =
|
|
236
|
+
createRelayAdaptUnshieldNFTAmountRecipients(
|
|
237
|
+
networkName,
|
|
238
|
+
relayAdaptUnshieldNFTAmounts,
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
// Generate dummy txs for relay adapt params.
|
|
242
|
+
const dummyUnshieldTxs = await generateDummyProofTransactions(
|
|
243
|
+
ProofType.CrossContractCalls,
|
|
244
|
+
networkName,
|
|
245
|
+
dopWalletID,
|
|
246
|
+
encryptionKey,
|
|
247
|
+
false, // showSenderAddressToRecipient
|
|
248
|
+
undefined, // memoText
|
|
249
|
+
relayAdaptUnshieldERC20AmountRecipients,
|
|
250
|
+
relayAdaptUnshieldNFTAmountRecipients,
|
|
251
|
+
relayerFeeERC20AmountRecipient,
|
|
252
|
+
sendWithPublicWallet,
|
|
253
|
+
overallBatchMinGasPrice,
|
|
254
|
+
valueCheck
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
// Generate relay adapt params from dummy transactions.
|
|
258
|
+
const shieldRandom = randomHex(16);
|
|
259
|
+
|
|
260
|
+
const relayShieldRequests =
|
|
261
|
+
await RelayAdaptHelper.generateRelayShieldRequests(
|
|
262
|
+
shieldRandom,
|
|
263
|
+
relayAdaptShieldERC20Recipients,
|
|
264
|
+
createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
const minimumGasLimit =
|
|
268
|
+
minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
|
|
269
|
+
|
|
270
|
+
const isRelayerTransaction = !sendWithPublicWallet;
|
|
271
|
+
const relayAdaptParamsRandom = randomHex(31);
|
|
272
|
+
const relayAdaptParams =
|
|
273
|
+
await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(
|
|
274
|
+
dummyUnshieldTxs,
|
|
275
|
+
validCrossContractCalls,
|
|
276
|
+
relayShieldRequests,
|
|
277
|
+
relayAdaptParamsRandom,
|
|
278
|
+
isRelayerTransaction,
|
|
279
|
+
minimumGasLimit,
|
|
280
|
+
);
|
|
281
|
+
const relayAdaptID: AdaptID = {
|
|
282
|
+
contract: relayAdaptContract.address,
|
|
283
|
+
parameters: relayAdaptParams,
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
// console.log("====== 4",
|
|
288
|
+
// ProofType.CrossContractCalls,
|
|
289
|
+
// networkName,
|
|
290
|
+
// dopWalletID,
|
|
291
|
+
// encryptionKey,
|
|
292
|
+
// false, // showSenderAddressToRecipient
|
|
293
|
+
// undefined, // memoText
|
|
294
|
+
// relayAdaptUnshieldERC20AmountRecipients,
|
|
295
|
+
// relayAdaptUnshieldNFTAmountRecipients,
|
|
296
|
+
// relayerFeeERC20AmountRecipient,
|
|
297
|
+
// sendWithPublicWallet,
|
|
298
|
+
// relayAdaptID,
|
|
299
|
+
// false, // useDummyProof
|
|
300
|
+
// overallBatchMinGasPrice,
|
|
301
|
+
// progressCallback);
|
|
302
|
+
|
|
303
|
+
// Create real transactions with relay adapt params.
|
|
304
|
+
const transactions = await generateProofTransactions(
|
|
305
|
+
ProofType.CrossContractCalls,
|
|
306
|
+
networkName,
|
|
307
|
+
dopWalletID,
|
|
308
|
+
encryptionKey,
|
|
309
|
+
false, // showSenderAddressToRecipient
|
|
310
|
+
undefined, // memoText
|
|
311
|
+
relayAdaptUnshieldERC20AmountRecipients,
|
|
312
|
+
relayAdaptUnshieldNFTAmountRecipients,
|
|
313
|
+
relayerFeeERC20AmountRecipient,
|
|
314
|
+
sendWithPublicWallet,
|
|
315
|
+
relayAdaptID,
|
|
316
|
+
false, // useDummyProof
|
|
317
|
+
overallBatchMinGasPrice,
|
|
318
|
+
progressCallback,
|
|
319
|
+
valueCheck
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
const nullifiers = nullifiersForTransactions(transactions);
|
|
323
|
+
|
|
324
|
+
const transaction = await relayAdaptContract.populateCrossContractCalls(
|
|
325
|
+
transactions,
|
|
326
|
+
validCrossContractCalls,
|
|
327
|
+
relayShieldRequests,
|
|
328
|
+
relayAdaptParamsRandom,
|
|
329
|
+
false, // isGasEstimate
|
|
330
|
+
isRelayerTransaction,
|
|
331
|
+
minimumGasLimit,
|
|
332
|
+
);
|
|
333
|
+
delete transaction.from;
|
|
334
|
+
|
|
335
|
+
setCachedProvedTransaction({
|
|
336
|
+
proofType: ProofType.CrossContractCalls,
|
|
337
|
+
dopWalletID,
|
|
338
|
+
showSenderAddressToRecipient: false,
|
|
339
|
+
memoText: undefined,
|
|
340
|
+
erc20AmountRecipients: [],
|
|
341
|
+
nftAmountRecipients: [],
|
|
342
|
+
relayAdaptUnshieldERC20Amounts,
|
|
343
|
+
relayAdaptUnshieldNFTAmounts,
|
|
344
|
+
relayAdaptShieldERC20Recipients,
|
|
345
|
+
relayAdaptShieldNFTRecipients,
|
|
346
|
+
crossContractCalls: validCrossContractCalls,
|
|
347
|
+
relayerFeeERC20AmountRecipient,
|
|
348
|
+
sendWithPublicWallet,
|
|
349
|
+
transaction,
|
|
350
|
+
overallBatchMinGasPrice,
|
|
351
|
+
nullifiers,
|
|
352
|
+
});
|
|
353
|
+
} catch (err) {
|
|
354
|
+
throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);
|
|
355
|
+
}
|
|
204
356
|
};
|
|
205
|
-
|
|
357
|
+
*/
|
|
206
358
|
const getRelayAdaptTransactionError = (receiptLogs) => {
|
|
207
359
|
try {
|
|
208
360
|
const relayAdaptError = dop_engine_v5_1.RelayAdaptContract.getRelayAdaptCallError(receiptLogs);
|