-
Notifications
You must be signed in to change notification settings - Fork 596
Expand file tree
/
Copy pathnode.ts
More file actions
86 lines (75 loc) · 3.46 KB
/
node.ts
File metadata and controls
86 lines (75 loc) · 3.46 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
80
81
82
83
84
85
86
import { createAztecNodeClient } from '@aztec/aztec.js/node';
import { type Logger, createLogger } from '@aztec/foundation/log';
import { createStore, openTmpStore } from '@aztec/kv-store/lmdb-v2';
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
import { type PXE, type PXECreationOptions, createPXE } from '@aztec/pxe/server';
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
import { BundleAccountContractsProvider } from '../account-contract-providers/bundle.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 NodeEmbeddedWallet extends EmbeddedWallet {
static async create<T extends NodeEmbeddedWallet = NodeEmbeddedWallet>(
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(
`wallet_data_${l1Contracts.rollupAddress}`,
true,
undefined,
undefined,
rootLogger.createChild('wallet:data').getBindings(),
)
: await createStore(
'wallet_data',
1,
{
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
l1Contracts,
},
rootLogger.createChild('wallet:data').getBindings(),
));
const walletDB = new WalletDB(walletDBStore, rootLogger.createChild('wallet:db').info);
return new this(pxe, aztecNode, walletDB, new BundleAccountContractsProvider(), rootLogger) as T;
}
}
export { NodeEmbeddedWallet as EmbeddedWallet };
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
export { WalletDB } from '../wallet_db.js';
export type { AccountType } from '../wallet_db.js';