-
Notifications
You must be signed in to change notification settings - Fork 598
Expand file tree
/
Copy pathbrowser.ts
More file actions
79 lines (68 loc) · 3.22 KB
/
browser.ts
File metadata and controls
79 lines (68 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { type AztecNode, createAztecNodeClient } from '@aztec/aztec.js/node';
import { type Logger, createLogger } from '@aztec/foundation/log';
import { createStore, openTmpStore } from '@aztec/kv-store/indexeddb';
import { type PXE, type PXECreationOptions, createPXE } from '@aztec/pxe/client/lazy';
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
import { LazyAccountContractsProvider } from '../account-contract-providers/lazy.js';
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
import { EmbeddedWallet, type EmbeddedWalletOptions, splitPxeOptions } from '../embedded_wallet.js';
import { WalletDB } from '../wallet_db.js';
export class BrowserEmbeddedWallet extends EmbeddedWallet {
static async create<T extends BrowserEmbeddedWallet = BrowserEmbeddedWallet>(
this: new (
pxe: PXE,
aztecNode: AztecNode,
walletDB: WalletDB,
accountContracts: AccountContractsProvider,
log?: Logger,
) => T,
nodeOrUrl: string | AztecNode,
options: EmbeddedWalletOptions = {},
): Promise<T> {
const rootLogger = options.logger ?? createLogger('embedded-wallet');
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
const l1Contracts = await aztecNode.getL1ContractAddresses();
// Support both the new unified `pxe` option and the deprecated `pxeConfig`/`pxeOptions`.
const { config: pxeConfigFromPxe, creation: pxeCreationFromPxe } = splitPxeOptions(options.pxe);
const mergedConfigOverrides = { ...options.pxeConfig, ...pxeConfigFromPxe };
const mergedCreationOverrides: PXECreationOptions = { ...options.pxeOptions, ...pxeCreationFromPxe };
const pxeConfig: PXEConfig = Object.assign(getPXEConfig(), {
proverEnabled: mergedConfigOverrides.proverEnabled ?? false,
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
...mergedConfigOverrides,
});
if (options.ephemeral) {
delete pxeConfig.dataDirectory;
}
const pxeOptions: PXECreationOptions = {
...mergedCreationOverrides,
loggers: {
store: rootLogger.createChild('pxe:data'),
pxe: rootLogger.createChild('pxe:service'),
prover: rootLogger.createChild('pxe:prover'),
...mergedCreationOverrides.loggers,
},
};
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
const walletDBStore =
options.walletDb?.store ??
(options.ephemeral
? await openTmpStore(true)
: await createStore(
'wallet_data',
{
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
l1Contracts,
},
1,
rootLogger.createChild('wallet:data'),
));
const walletDB = new WalletDB(walletDBStore, rootLogger.createChild('wallet:db').info);
return new this(pxe, aztecNode, walletDB, new LazyAccountContractsProvider(), rootLogger) as T;
}
}
export { BrowserEmbeddedWallet as EmbeddedWallet };
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
export { WalletDB } from '../wallet_db.js';
export type { AccountType } from '../wallet_db.js';