@aztec/wallets 0.0.1-commit.e2b2873ed → 0.0.1-commit.e588bc7e5
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/dest/embedded/account-contract-providers/bundle.d.ts +6 -2
- package/dest/embedded/account-contract-providers/bundle.d.ts.map +1 -1
- package/dest/embedded/account-contract-providers/bundle.js +4 -0
- package/dest/embedded/account-contract-providers/lazy.d.ts +6 -2
- package/dest/embedded/account-contract-providers/lazy.d.ts.map +1 -1
- package/dest/embedded/account-contract-providers/lazy.js +4 -0
- package/dest/embedded/account-contract-providers/types.d.ts +6 -2
- package/dest/embedded/account-contract-providers/types.d.ts.map +1 -1
- package/dest/embedded/embedded_wallet.d.ts +18 -4
- package/dest/embedded/embedded_wallet.d.ts.map +1 -1
- package/dest/embedded/embedded_wallet.js +89 -26
- package/dest/embedded/entrypoints/browser.d.ts +7 -2
- package/dest/embedded/entrypoints/browser.d.ts.map +1 -1
- package/dest/embedded/entrypoints/browser.js +21 -14
- package/dest/embedded/entrypoints/node.d.ts +6 -10
- package/dest/embedded/entrypoints/node.d.ts.map +1 -1
- package/dest/embedded/entrypoints/node.js +7 -9
- package/dest/testing.d.ts +1 -1
- package/dest/testing.d.ts.map +1 -1
- package/dest/testing.js +2 -2
- package/package.json +19 -9
- package/src/embedded/account-contract-providers/bundle.ts +6 -1
- package/src/embedded/account-contract-providers/lazy.ts +6 -1
- package/src/embedded/account-contract-providers/types.ts +2 -1
- package/src/embedded/embedded_wallet.ts +128 -38
- package/src/embedded/entrypoints/browser.ts +39 -17
- package/src/embedded/entrypoints/node.ts +23 -24
- package/src/testing.ts +2 -1
- package/dest/embedded/embedded_wallet_browser.d.ts +0 -5
- package/dest/embedded/embedded_wallet_browser.d.ts.map +0 -1
- package/dest/embedded/embedded_wallet_browser.js +0 -31
- package/src/embedded/embedded_wallet_browser.ts +0 -40
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
4
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
4
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
5
|
import type { AccountContractsProvider } from './types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Loads account contract artifacts eagerly via static imports.
|
|
@@ -13,5 +13,9 @@ export declare class BundleAccountContractsProvider implements AccountContractsP
|
|
|
13
13
|
getEcdsaKAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
14
14
|
getStubAccountContractArtifact(): Promise<ContractArtifact>;
|
|
15
15
|
createStubAccount(address: CompleteAddress): Promise<Account>;
|
|
16
|
+
getMulticallContract(): Promise<{
|
|
17
|
+
instance: ContractInstanceWithAddress;
|
|
18
|
+
artifact: ContractArtifact;
|
|
19
|
+
}>;
|
|
16
20
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZW1iZWRkZWQvYWNjb3VudC1jb250cmFjdC1wcm92aWRlcnMvYnVuZGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTNGLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNEOzs7R0FHRztBQUNILHFCQUFhLDhCQUErQixZQUFXLHdCQUF3QjtJQUM3RSx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFbEU7SUFFRCx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFckU7SUFFRCx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFckU7SUFFRCw4QkFBOEIsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FFMUQ7SUFFRCxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFNUQ7SUFFRCxvQkFBb0IsSUFBSSxPQUFPLENBQUM7UUFBRSxRQUFRLEVBQUUsMkJBQTJCLENBQUM7UUFBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUE7S0FBRSxDQUFDLENBRXJHO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/bundle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/bundle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAC7E,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAElE;IAED,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAErE;IAED,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAErE;IAED,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAE1D;IAED,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5D;IAED,oBAAoB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,2BAA2B,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAErG;CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EcdsaKAccountContract, EcdsaRAccountContract } from '@aztec/accounts/ecdsa';
|
|
2
2
|
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
3
3
|
import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
|
|
4
|
+
import { getCanonicalMultiCallEntrypoint } from '@aztec/protocol-contracts/multi-call-entrypoint';
|
|
4
5
|
/**
|
|
5
6
|
* Loads account contract artifacts eagerly via static imports.
|
|
6
7
|
* Designed for Node.js environments where all artifacts are available at startup.
|
|
@@ -20,4 +21,7 @@ import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/
|
|
|
20
21
|
createStubAccount(address) {
|
|
21
22
|
return Promise.resolve(createStubAccount(address));
|
|
22
23
|
}
|
|
24
|
+
getMulticallContract() {
|
|
25
|
+
return getCanonicalMultiCallEntrypoint();
|
|
26
|
+
}
|
|
23
27
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
4
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
4
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
5
|
import type { AccountContractsProvider } from './types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Loads account contract artifacts lazily via dynamic imports.
|
|
@@ -13,5 +13,9 @@ export declare class LazyAccountContractsProvider implements AccountContractsPro
|
|
|
13
13
|
getEcdsaKAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
14
14
|
getStubAccountContractArtifact(): Promise<ContractArtifact>;
|
|
15
15
|
createStubAccount(address: CompleteAddress): Promise<Account>;
|
|
16
|
+
getMulticallContract(): Promise<{
|
|
17
|
+
instance: ContractInstanceWithAddress;
|
|
18
|
+
artifact: ContractArtifact;
|
|
19
|
+
}>;
|
|
16
20
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VtYmVkZGVkL2FjY291bnQtY29udHJhY3QtcHJvdmlkZXJzL2xhenkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0YsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0Q7OztHQUdHO0FBQ0gscUJBQWEsNEJBQTZCLFlBQVcsd0JBQXdCO0lBQ3JFLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUd4RTtJQUVLLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUczRTtJQUVLLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUczRTtJQUVLLDhCQUE4QixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUdoRTtJQUVLLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUdsRTtJQUVELG9CQUFvQixJQUFJLE9BQU8sQ0FBQztRQUFFLFFBQVEsRUFBRSwyQkFBMkIsQ0FBQztRQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQTtLQUFFLENBQUMsQ0FFckc7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;GAGG;AACH,qBAAa,4BAA6B,YAAW,wBAAwB;IACrE,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAGxE;IAEK,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAG3E;IAEK,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAG3E;IAEK,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAGhE;IAEK,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;IAED,oBAAoB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,2BAA2B,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAErG;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCanonicalMultiCallEntrypoint } from '@aztec/protocol-contracts/multi-call-entrypoint/lazy';
|
|
1
2
|
/**
|
|
2
3
|
* Loads account contract artifacts lazily via dynamic imports.
|
|
3
4
|
* Designed for browser environments where code splitting reduces initial bundle size.
|
|
@@ -22,4 +23,7 @@
|
|
|
22
23
|
const { createStubAccount } = await import('@aztec/accounts/stub/lazy');
|
|
23
24
|
return createStubAccount(address);
|
|
24
25
|
}
|
|
26
|
+
getMulticallContract() {
|
|
27
|
+
return getCanonicalMultiCallEntrypoint();
|
|
28
|
+
}
|
|
25
29
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
4
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
4
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
5
|
/**
|
|
6
6
|
* Provides account contract implementations and stub accounts for the EmbeddedWallet.
|
|
7
7
|
* Two implementations exist:
|
|
@@ -13,6 +13,10 @@ export interface AccountContractsProvider {
|
|
|
13
13
|
getEcdsaRAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
14
14
|
getEcdsaKAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
15
15
|
getStubAccountContractArtifact(): Promise<ContractArtifact>;
|
|
16
|
+
getMulticallContract(): Promise<{
|
|
17
|
+
instance: ContractInstanceWithAddress;
|
|
18
|
+
artifact: ContractArtifact;
|
|
19
|
+
}>;
|
|
16
20
|
createStubAccount(address: CompleteAddress): Promise<Account>;
|
|
17
21
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbWJlZGRlZC9hY2NvdW50LWNvbnRyYWN0LXByb3ZpZGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRjs7Ozs7R0FLRztBQUNILE1BQU0sV0FBVyx3QkFBd0I7SUFDdkMseUJBQXlCLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEUsd0JBQXdCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkUsd0JBQXdCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkUsOEJBQThCLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUQsb0JBQW9CLElBQUksT0FBTyxDQUFDO1FBQUUsUUFBUSxFQUFFLDJCQUEyQixDQUFDO1FBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQ3ZHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQy9EIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/embedded/account-contract-providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,yBAAyB,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpE,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvE,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvE,8BAA8B,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5D,oBAAoB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,2BAA2B,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IACvG,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { type Account } from '@aztec/aztec.js/account';
|
|
2
|
-
import type
|
|
2
|
+
import { type InteractionWaitOptions, type SendReturn } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import type { Aliased, SendOptions } from '@aztec/aztec.js/wallet';
|
|
3
4
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
4
5
|
import { Fq, Fr } from '@aztec/foundation/curves/bn254';
|
|
5
6
|
import type { Logger } from '@aztec/foundation/log';
|
|
7
|
+
import type { PXEConfig, PXECreationOptions } from '@aztec/pxe/client/lazy';
|
|
6
8
|
import type { PXE } from '@aztec/pxe/server';
|
|
7
9
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
10
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
9
11
|
import { ExecutionPayload, type TxSimulationResult } from '@aztec/stdlib/tx';
|
|
10
|
-
import { BaseWallet, type
|
|
12
|
+
import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
|
|
11
13
|
import type { AccountContractsProvider } from './account-contract-providers/types.js';
|
|
12
14
|
import { type AccountType, WalletDB } from './wallet_db.js';
|
|
13
15
|
export type EmbeddedWalletOptions = {
|
|
@@ -15,21 +17,32 @@ export type EmbeddedWalletOptions = {
|
|
|
15
17
|
logger?: Logger;
|
|
16
18
|
/** Use ephemeral (in-memory) stores. Data will not persist across sessions. */
|
|
17
19
|
ephemeral?: boolean;
|
|
20
|
+
/** Override PXE configuration. */
|
|
21
|
+
pxeConfig?: Partial<PXEConfig>;
|
|
22
|
+
/** Advanced PXE creation options (custom store, prover, simulator). */
|
|
23
|
+
pxeOptions?: PXECreationOptions;
|
|
18
24
|
};
|
|
19
25
|
export declare class EmbeddedWallet extends BaseWallet {
|
|
20
26
|
protected walletDB: WalletDB;
|
|
21
27
|
protected accountContracts: AccountContractsProvider;
|
|
28
|
+
protected estimatedGasPadding: number;
|
|
22
29
|
constructor(pxe: PXE, aztecNode: AztecNode, walletDB: WalletDB, accountContracts: AccountContractsProvider, log?: Logger);
|
|
23
30
|
protected getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
24
31
|
getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
25
32
|
registerSender(address: AztecAddress, alias: string): Promise<AztecAddress>;
|
|
26
33
|
getAddressBook(): Promise<Aliased<AztecAddress>[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Overrides the base sendTx to add a pre-simulation step before the actual send. The simulation
|
|
36
|
+
* estimates actual gas usage and captures call authorization requests to generate
|
|
37
|
+
* the necessary authwitnesses.
|
|
38
|
+
*/
|
|
39
|
+
sendTx<W extends InteractionWaitOptions = undefined>(executionPayload: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
|
|
27
40
|
/**
|
|
28
41
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
29
42
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
30
43
|
* private kernel circuit execution.
|
|
31
44
|
*/
|
|
32
|
-
protected simulateViaEntrypoint(executionPayload: ExecutionPayload,
|
|
45
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResult>;
|
|
33
46
|
private getFakeAccountDataFor;
|
|
34
47
|
protected createAccountInternal(type: AccountType, secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
|
|
35
48
|
createAndStoreAccount(alias: string, type: AccountType, secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
|
|
@@ -37,6 +50,7 @@ export declare class EmbeddedWallet extends BaseWallet {
|
|
|
37
50
|
createECDSARAccount(secret: Fr, salt: Fr, signingKey: Buffer, alias?: string): Promise<AccountManager>;
|
|
38
51
|
createECDSAKAccount(secret: Fr, salt: Fr, signingKey: Buffer, alias?: string): Promise<AccountManager>;
|
|
39
52
|
setMinFeePadding(value?: number): void;
|
|
53
|
+
setEstimatedGasPadding(value?: number): void;
|
|
40
54
|
stop(): Promise<void>;
|
|
41
55
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWRfd2FsbGV0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW1iZWRkZWQvZW1iZWRkZWRfd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBVyxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixFQUFFLEtBQUssVUFBVSxFQUFnQixNQUFNLDJCQUEyQixDQUFDO0FBQ3ZHLE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHeEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakUsT0FBTyxFQUNMLGdCQUFnQixFQUdoQixLQUFLLGtCQUFrQixFQUd4QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlGLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE1BQU0sTUFBTSxxQkFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded_wallet.d.ts","sourceRoot":"","sources":["../../src/embedded/embedded_wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"embedded_wallet.d.ts","sourceRoot":"","sources":["../../src/embedded/embedded_wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
|
+
import { CallAuthorizationRequest } from '@aztec/aztec.js/authorization';
|
|
3
|
+
import { getGasLimits } from '@aztec/aztec.js/contracts';
|
|
2
4
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
5
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
3
6
|
import { Fq, Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
7
|
import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
8
|
+
import { GasSettings } from '@aztec/stdlib/gas';
|
|
6
9
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
7
|
-
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
10
|
+
import { collectOffchainEffects, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
8
11
|
import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
|
|
12
|
+
const DEFAULT_ESTIMATED_GAS_PADDING = 0.1;
|
|
9
13
|
export class EmbeddedWallet extends BaseWallet {
|
|
10
14
|
walletDB;
|
|
11
15
|
accountContracts;
|
|
16
|
+
estimatedGasPadding;
|
|
12
17
|
constructor(pxe, aztecNode, walletDB, accountContracts, log){
|
|
13
|
-
super(pxe, aztecNode, log), this.walletDB = walletDB, this.accountContracts = accountContracts;
|
|
18
|
+
super(pxe, aztecNode, log), this.walletDB = walletDB, this.accountContracts = accountContracts, this.estimatedGasPadding = DEFAULT_ESTIMATED_GAS_PADDING;
|
|
14
19
|
}
|
|
15
20
|
async getAccountFromAddress(address) {
|
|
16
|
-
if (address.equals(AztecAddress.ZERO)) {
|
|
17
|
-
return new SignerlessAccount();
|
|
18
|
-
}
|
|
19
21
|
const { secretKey, salt, signingKey, type } = await this.walletDB.retrieveAccount(address);
|
|
20
22
|
const accountManager = await this.createAccountInternal(type, secretKey, salt, signingKey);
|
|
21
23
|
const account = await accountManager.getAccount();
|
|
@@ -42,43 +44,98 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
42
44
|
return storedSenders;
|
|
43
45
|
}
|
|
44
46
|
/**
|
|
47
|
+
* Overrides the base sendTx to add a pre-simulation step before the actual send. The simulation
|
|
48
|
+
* estimates actual gas usage and captures call authorization requests to generate
|
|
49
|
+
* the necessary authwitnesses.
|
|
50
|
+
*/ async sendTx(executionPayload, opts) {
|
|
51
|
+
const feeOptions = await this.completeFeeOptionsForEstimation(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
|
|
52
|
+
// Simulate the transaction first to estimate gas and capture required
|
|
53
|
+
// private authwitnesses based on offchain effects.
|
|
54
|
+
const simulationResult = await this.simulateViaEntrypoint(executionPayload, {
|
|
55
|
+
from: opts.from,
|
|
56
|
+
feeOptions,
|
|
57
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
58
|
+
skipTxValidation: true
|
|
59
|
+
});
|
|
60
|
+
const offchainEffects = collectOffchainEffects(simulationResult.privateExecutionResult);
|
|
61
|
+
const authWitnesses = await Promise.all(offchainEffects.map(async (effect)=>{
|
|
62
|
+
try {
|
|
63
|
+
const authRequest = await CallAuthorizationRequest.fromFields(effect.data);
|
|
64
|
+
return this.createAuthWit(authRequest.onBehalfOf, {
|
|
65
|
+
consumer: effect.contractAddress,
|
|
66
|
+
innerHash: authRequest.innerHash
|
|
67
|
+
});
|
|
68
|
+
} catch {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
}));
|
|
72
|
+
for (const authwit of authWitnesses){
|
|
73
|
+
if (authwit) {
|
|
74
|
+
executionPayload.authWitnesses.push(authwit);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const estimated = getGasLimits(simulationResult, this.estimatedGasPadding);
|
|
78
|
+
this.log.verbose(`Estimated gas limits for tx: DA=${estimated.gasLimits.daGas} L2=${estimated.gasLimits.l2Gas} teardownDA=${estimated.teardownGasLimits.daGas} teardownL2=${estimated.teardownGasLimits.l2Gas}`);
|
|
79
|
+
const gasSettings = GasSettings.from({
|
|
80
|
+
...opts.fee?.gasSettings,
|
|
81
|
+
maxFeesPerGas: feeOptions.gasSettings.maxFeesPerGas,
|
|
82
|
+
maxPriorityFeesPerGas: feeOptions.gasSettings.maxPriorityFeesPerGas,
|
|
83
|
+
gasLimits: opts.fee?.gasSettings?.gasLimits ?? estimated.gasLimits,
|
|
84
|
+
teardownGasLimits: opts.fee?.gasSettings?.teardownGasLimits ?? estimated.teardownGasLimits
|
|
85
|
+
});
|
|
86
|
+
return super.sendTx(executionPayload, {
|
|
87
|
+
...opts,
|
|
88
|
+
fee: {
|
|
89
|
+
...opts.fee,
|
|
90
|
+
gasSettings
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
45
95
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
46
96
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
47
97
|
* private kernel circuit execution.
|
|
48
|
-
*/ async simulateViaEntrypoint(executionPayload,
|
|
49
|
-
const {
|
|
98
|
+
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
99
|
+
const { from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement } = opts;
|
|
50
100
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
51
|
-
const executionOptions = {
|
|
52
|
-
txNonce: Fr.random(),
|
|
53
|
-
cancellable: this.cancellableTransactions,
|
|
54
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
55
|
-
};
|
|
56
101
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
57
102
|
feeExecutionPayload,
|
|
58
103
|
executionPayload
|
|
59
104
|
]) : executionPayload;
|
|
60
105
|
const chainInfo = await this.getChainInfo();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
106
|
+
let overrides;
|
|
107
|
+
let txRequest;
|
|
108
|
+
if (from === NO_FROM) {
|
|
109
|
+
const entrypoint = new DefaultEntrypoint();
|
|
110
|
+
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
111
|
+
} else {
|
|
112
|
+
const { account, instance, artifact } = await this.getFakeAccountDataFor(from);
|
|
113
|
+
overrides = {
|
|
67
114
|
contracts: {
|
|
68
115
|
[from.toString()]: {
|
|
69
116
|
instance,
|
|
70
117
|
artifact
|
|
71
118
|
}
|
|
72
119
|
}
|
|
73
|
-
}
|
|
120
|
+
};
|
|
121
|
+
const executionOptions = {
|
|
122
|
+
txNonce: Fr.random(),
|
|
123
|
+
cancellable: this.cancellableTransactions,
|
|
124
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
125
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
126
|
+
};
|
|
127
|
+
txRequest = await account.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
128
|
+
}
|
|
129
|
+
return this.pxe.simulateTx(txRequest, {
|
|
130
|
+
simulatePublic: true,
|
|
131
|
+
skipFeeEnforcement,
|
|
132
|
+
skipTxValidation,
|
|
133
|
+
overrides,
|
|
74
134
|
scopes
|
|
75
135
|
});
|
|
76
136
|
}
|
|
77
137
|
async getFakeAccountDataFor(address) {
|
|
78
138
|
const originalAccount = await this.getAccountFromAddress(address);
|
|
79
|
-
if (originalAccount instanceof SignerlessAccount) {
|
|
80
|
-
throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
|
|
81
|
-
}
|
|
82
139
|
const originalAddress = originalAccount.getCompleteAddress();
|
|
83
140
|
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
84
141
|
if (!contractInstance) {
|
|
@@ -120,8 +177,11 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
120
177
|
}
|
|
121
178
|
const accountManager = await AccountManager.create(this, secret, contract, salt);
|
|
122
179
|
const instance = accountManager.getInstance();
|
|
123
|
-
const
|
|
124
|
-
|
|
180
|
+
const existingInstance = await this.pxe.getContractInstance(instance.address);
|
|
181
|
+
if (!existingInstance) {
|
|
182
|
+
const existingArtifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
|
|
183
|
+
await this.registerContract(instance, !existingArtifact ? await accountManager.getAccountContract().getContractArtifact() : undefined, accountManager.getSecretKey());
|
|
184
|
+
}
|
|
125
185
|
return accountManager;
|
|
126
186
|
}
|
|
127
187
|
async createAndStoreAccount(alias, type, secret, salt, signingKey) {
|
|
@@ -148,6 +208,9 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
148
208
|
setMinFeePadding(value) {
|
|
149
209
|
this.minFeePadding = value ?? 0.5;
|
|
150
210
|
}
|
|
211
|
+
setEstimatedGasPadding(value) {
|
|
212
|
+
this.estimatedGasPadding = value ?? DEFAULT_ESTIMATED_GAS_PADDING;
|
|
213
|
+
}
|
|
151
214
|
stop() {
|
|
152
215
|
return this.pxe.stop();
|
|
153
216
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { type PXE } from '@aztec/pxe/client/lazy';
|
|
4
|
+
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
1
5
|
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
6
|
+
import { WalletDB } from '../wallet_db.js';
|
|
2
7
|
export declare class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
3
|
-
static create(
|
|
8
|
+
static 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>;
|
|
4
9
|
}
|
|
5
10
|
export { BrowserEmbeddedWallet as EmbeddedWallet };
|
|
6
11
|
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
7
12
|
export { WalletDB } from '../wallet_db.js';
|
|
8
13
|
export type { AccountType } from '../wallet_db.js';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VtYmVkZGVkL2VudHJ5cG9pbnRzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQXNDLE1BQU0sd0JBQXdCLENBQUM7QUFJdEYsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MscUJBQWEscUJBQXNCLFNBQVEsY0FBYztJQUN2RCxPQUFhLE1BQU0sQ0FBQyxDQUFDLFNBQVMscUJBQXFCLEdBQUcscUJBQXFCLEVBQ3pFLElBQUksRUFBRSxLQUNKLEdBQUcsRUFBRSxHQUFHLEVBQ1IsU0FBUyxFQUFFLFNBQVMsRUFDcEIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQzFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sS0FDVCxDQUFDLEVBQ04sU0FBUyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQzdCLE9BQU8sR0FBRSxxQkFBMEIsR0FDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQTJDWjtDQUNGO0FBRUQsT0FBTyxFQUFFLHFCQUFxQixJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ25ELFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,wBAAwB,CAAC;AAItF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,OAAa,MAAM,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,EACzE,IAAI,EAAE,KACJ,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,wBAAwB,EAC1C,GAAG,CAAC,EAAE,MAAM,KACT,CAAC,EACN,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,CAAC,CAAC,CA2CZ;CACF;AAED,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -7,28 +7,35 @@ import { LazyAccountContractsProvider } from '../account-contract-providers/lazy
|
|
|
7
7
|
import { EmbeddedWallet } from '../embedded_wallet.js';
|
|
8
8
|
import { WalletDB } from '../wallet_db.js';
|
|
9
9
|
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
10
|
-
static async create(
|
|
10
|
+
static async create(nodeOrUrl, options = {}) {
|
|
11
11
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
12
|
-
const aztecNode = createAztecNodeClient(
|
|
12
|
+
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
13
13
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const pxeConfig = Object.assign(getPXEConfig(), {
|
|
15
|
+
proverEnabled: options.pxeConfig?.proverEnabled ?? false,
|
|
16
|
+
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
17
|
+
...options.pxeConfig
|
|
18
|
+
});
|
|
19
|
+
if (options.ephemeral) {
|
|
20
|
+
delete pxeConfig.dataDirectory;
|
|
18
21
|
}
|
|
19
|
-
const
|
|
22
|
+
const pxeOptions = {
|
|
23
|
+
...options.pxeOptions,
|
|
20
24
|
loggers: {
|
|
21
25
|
store: rootLogger.createChild('pxe:data'),
|
|
22
26
|
pxe: rootLogger.createChild('pxe:service'),
|
|
23
|
-
prover: rootLogger.createChild('pxe:prover')
|
|
27
|
+
prover: rootLogger.createChild('pxe:prover'),
|
|
28
|
+
...options.pxeOptions?.loggers
|
|
24
29
|
}
|
|
25
|
-
}
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
};
|
|
31
|
+
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
|
32
|
+
const walletDBStore = options.ephemeral ? await openTmpStore(true) : await createStore('wallet_data', {
|
|
33
|
+
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
|
|
34
|
+
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
|
|
35
|
+
l1Contracts
|
|
36
|
+
}, 1, rootLogger.createChild('wallet:data'));
|
|
30
37
|
const walletDB = WalletDB.init(walletDBStore, rootLogger.createChild('wallet:db').info);
|
|
31
|
-
return new
|
|
38
|
+
return new this(pxe, aztecNode, walletDB, new LazyAccountContractsProvider(), rootLogger);
|
|
32
39
|
}
|
|
33
40
|
}
|
|
34
41
|
export { BrowserEmbeddedWallet as EmbeddedWallet };
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
+
import { type PXE } from '@aztec/pxe/server';
|
|
3
3
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
4
|
+
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
4
5
|
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
5
|
-
|
|
6
|
-
/** Override PXE configuration. */
|
|
7
|
-
pxeConfig?: Partial<PXEConfig>;
|
|
8
|
-
/** Advanced PXE creation options (custom store, prover, simulator). */
|
|
9
|
-
pxeOptions?: PXECreationOptions;
|
|
10
|
-
};
|
|
6
|
+
import { WalletDB } from '../wallet_db.js';
|
|
11
7
|
export declare class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
12
|
-
static create(nodeOrUrl: string | AztecNode, options?:
|
|
8
|
+
static 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>;
|
|
13
9
|
}
|
|
14
10
|
export { NodeEmbeddedWallet as EmbeddedWallet };
|
|
15
11
|
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
16
12
|
export { WalletDB } from '../wallet_db.js';
|
|
17
13
|
export type { AccountType } from '../wallet_db.js';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VtYmVkZGVkL2VudHJ5cG9pbnRzL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBc0MsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxxQkFBYSxrQkFBbUIsU0FBUSxjQUFjO0lBQ3BELE9BQWEsTUFBTSxDQUFDLENBQUMsU0FBUyxrQkFBa0IsR0FBRyxrQkFBa0IsRUFDbkUsSUFBSSxFQUFFLEtBQ0osR0FBRyxFQUFFLEdBQUcsRUFDUixTQUFTLEVBQUUsU0FBUyxFQUNwQixRQUFRLEVBQUUsUUFBUSxFQUNsQixnQkFBZ0IsRUFBRSx3QkFBd0IsRUFDMUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxLQUNULENBQUMsRUFDTixTQUFTLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDN0IsT0FBTyxHQUFFLHFCQUEwQixHQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBaURaO0NBQ0Y7QUFFRCxPQUFPLEVBQUUsa0JBQWtCLElBQUksY0FBYyxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAa,MAAM,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EACnE,IAAI,EAAE,KACJ,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,wBAAwB,EAC1C,GAAG,CAAC,EAAE,MAAM,KACT,CAAC,EACN,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,CAAC,CAAC,CAiDZ;CACF;AAED,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { createStore
|
|
3
|
+
import { createStore, openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
4
|
import { getPXEConfig } from '@aztec/pxe/config';
|
|
5
5
|
import { createPXE } from '@aztec/pxe/server';
|
|
6
6
|
import { BundleAccountContractsProvider } from '../account-contract-providers/bundle.js';
|
|
@@ -10,8 +10,10 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
10
10
|
static async create(nodeOrUrl, options = {}) {
|
|
11
11
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
12
12
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
13
|
+
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
13
14
|
const pxeConfig = Object.assign(getPXEConfig(), {
|
|
14
15
|
proverEnabled: options.pxeConfig?.proverEnabled ?? false,
|
|
16
|
+
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
15
17
|
...options.pxeConfig
|
|
16
18
|
});
|
|
17
19
|
if (options.ephemeral) {
|
|
@@ -27,17 +29,13 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
27
29
|
}
|
|
28
30
|
};
|
|
29
31
|
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const walletDBStore = options.ephemeral ? await openTmpStore('wallet_data', true, undefined, undefined, rootLogger.createChild('wallet:data').getBindings()) : await createWalletStore('wallet_data', 1, {
|
|
33
|
-
dataDirectory: pxeConfig.dataDirectory,
|
|
32
|
+
const walletDBStore = options.ephemeral ? await openTmpStore(`wallet_data_${l1Contracts.rollupAddress}`, true, undefined, undefined, rootLogger.createChild('wallet:data').getBindings()) : await createStore('wallet_data', 1, {
|
|
33
|
+
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
|
|
34
34
|
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
|
|
35
|
-
l1Contracts
|
|
36
|
-
rollupAddress
|
|
37
|
-
}
|
|
35
|
+
l1Contracts
|
|
38
36
|
}, rootLogger.createChild('wallet:data').getBindings());
|
|
39
37
|
const walletDB = WalletDB.init(walletDBStore, rootLogger.createChild('wallet:db').info);
|
|
40
|
-
return new
|
|
38
|
+
return new this(pxe, aztecNode, walletDB, new BundleAccountContractsProvider(), rootLogger);
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
export { NodeEmbeddedWallet as EmbeddedWallet };
|
package/dest/testing.d.ts
CHANGED
|
@@ -9,4 +9,4 @@ interface WalletWithSchnorrAccounts {
|
|
|
9
9
|
export declare function deployFundedSchnorrAccounts(wallet: WalletWithSchnorrAccounts, accountsData: InitialAccountData[], waitOptions?: WaitOpts): Promise<AccountManager[]>;
|
|
10
10
|
export declare function registerInitialLocalNetworkAccountsInWallet(wallet: WalletWithSchnorrAccounts): Promise<AztecAddress[]>;
|
|
11
11
|
export {};
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdsRSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELFVBQVUseUJBQXlCO0lBQ2pDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztDQUN0RztBQUVELHdCQUFzQiwyQkFBMkIsQ0FDL0MsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsRUFDbEMsV0FBVyxDQUFDLEVBQUUsUUFBUSw2QkFnQnZCO0FBRUQsd0JBQXNCLDJDQUEyQyxDQUMvRCxNQUFNLEVBQUUseUJBQXlCLEdBQ2hDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQU96QiJ9
|
package/dest/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,UAAU,yBAAyB;IACjC,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACtG;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,yBAAyB,EACjC,YAAY,EAAE,kBAAkB,EAAE,EAClC,WAAW,CAAC,EAAE,QAAQ,6BAgBvB;AAED,wBAAsB,2CAA2C,CAC/D,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAOzB"}
|
package/dest/testing.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing/lazy';
|
|
2
|
-
import {
|
|
2
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
3
3
|
export async function deployFundedSchnorrAccounts(wallet, accountsData, waitOptions) {
|
|
4
4
|
const accountManagers = [];
|
|
5
5
|
// Serial due to https://github.com/AztecProtocol/aztec-packages/issues/12045
|
|
@@ -8,7 +8,7 @@ export async function deployFundedSchnorrAccounts(wallet, accountsData, waitOpti
|
|
|
8
8
|
const accountManager = await wallet.createSchnorrAccount(secret, salt, signingKey);
|
|
9
9
|
const deployMethod = await accountManager.getDeployMethod();
|
|
10
10
|
await deployMethod.send({
|
|
11
|
-
from:
|
|
11
|
+
from: NO_FROM,
|
|
12
12
|
skipClassPublication: i !== 0,
|
|
13
13
|
wait: waitOptions
|
|
14
14
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/wallets",
|
|
3
3
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/wallets",
|
|
4
|
-
"version": "0.0.1-commit.
|
|
4
|
+
"version": "0.0.1-commit.e588bc7e5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./embedded": {
|
|
@@ -27,14 +27,15 @@
|
|
|
27
27
|
"../package.common.json"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
31
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
32
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
33
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
34
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
35
|
-
"@aztec/
|
|
36
|
-
"@aztec/
|
|
37
|
-
"@aztec/
|
|
30
|
+
"@aztec/accounts": "0.0.1-commit.e588bc7e5",
|
|
31
|
+
"@aztec/aztec.js": "0.0.1-commit.e588bc7e5",
|
|
32
|
+
"@aztec/entrypoints": "0.0.1-commit.e588bc7e5",
|
|
33
|
+
"@aztec/foundation": "0.0.1-commit.e588bc7e5",
|
|
34
|
+
"@aztec/kv-store": "0.0.1-commit.e588bc7e5",
|
|
35
|
+
"@aztec/protocol-contracts": "0.0.1-commit.e588bc7e5",
|
|
36
|
+
"@aztec/pxe": "0.0.1-commit.e588bc7e5",
|
|
37
|
+
"@aztec/stdlib": "0.0.1-commit.e588bc7e5",
|
|
38
|
+
"@aztec/wallet-sdk": "0.0.1-commit.e588bc7e5"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
40
41
|
"@jest/globals": "^30.0.0",
|
|
@@ -43,6 +44,15 @@
|
|
|
43
44
|
"ts-node": "^10.9.1",
|
|
44
45
|
"typescript": "^5.3.3"
|
|
45
46
|
},
|
|
47
|
+
"typedocOptions": {
|
|
48
|
+
"entryPoints": [
|
|
49
|
+
"./src/embedded/entrypoints/browser.ts",
|
|
50
|
+
"./src/embedded/entrypoints/node.ts",
|
|
51
|
+
"./src/testing.ts"
|
|
52
|
+
],
|
|
53
|
+
"name": "Wallets",
|
|
54
|
+
"tsconfig": "./tsconfig.json"
|
|
55
|
+
},
|
|
46
56
|
"files": [
|
|
47
57
|
"dest",
|
|
48
58
|
"src",
|
|
@@ -3,8 +3,9 @@ import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
|
3
3
|
import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
|
|
4
4
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
5
5
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
6
|
+
import { getCanonicalMultiCallEntrypoint } from '@aztec/protocol-contracts/multi-call-entrypoint';
|
|
6
7
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
7
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
8
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
8
9
|
|
|
9
10
|
import type { AccountContractsProvider } from './types.js';
|
|
10
11
|
|
|
@@ -32,4 +33,8 @@ export class BundleAccountContractsProvider implements AccountContractsProvider
|
|
|
32
33
|
createStubAccount(address: CompleteAddress): Promise<Account> {
|
|
33
34
|
return Promise.resolve(createStubAccount(address));
|
|
34
35
|
}
|
|
36
|
+
|
|
37
|
+
getMulticallContract(): Promise<{ instance: ContractInstanceWithAddress; artifact: ContractArtifact }> {
|
|
38
|
+
return getCanonicalMultiCallEntrypoint();
|
|
39
|
+
}
|
|
35
40
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import { getCanonicalMultiCallEntrypoint } from '@aztec/protocol-contracts/multi-call-entrypoint/lazy';
|
|
3
4
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
4
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
5
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
6
|
|
|
6
7
|
import type { AccountContractsProvider } from './types.js';
|
|
7
8
|
|
|
@@ -34,4 +35,8 @@ export class LazyAccountContractsProvider implements AccountContractsProvider {
|
|
|
34
35
|
const { createStubAccount } = await import('@aztec/accounts/stub/lazy');
|
|
35
36
|
return createStubAccount(address);
|
|
36
37
|
}
|
|
38
|
+
|
|
39
|
+
getMulticallContract(): Promise<{ instance: ContractInstanceWithAddress; artifact: ContractArtifact }> {
|
|
40
|
+
return getCanonicalMultiCallEntrypoint();
|
|
41
|
+
}
|
|
37
42
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Account, AccountContract } from '@aztec/aztec.js/account';
|
|
2
2
|
import type { Fq } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
4
|
-
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
4
|
+
import type { CompleteAddress, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Provides account contract implementations and stub accounts for the EmbeddedWallet.
|
|
@@ -14,5 +14,6 @@ export interface AccountContractsProvider {
|
|
|
14
14
|
getEcdsaRAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
15
15
|
getEcdsaKAccountContract(signingKey: Buffer): Promise<AccountContract>;
|
|
16
16
|
getStubAccountContractArtifact(): Promise<ContractArtifact>;
|
|
17
|
+
getMulticallContract(): Promise<{ instance: ContractInstanceWithAddress; artifact: ContractArtifact }>;
|
|
17
18
|
createStubAccount(address: CompleteAddress): Promise<Account>;
|
|
18
19
|
}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
import { type Account,
|
|
2
|
-
import
|
|
1
|
+
import { type Account, NO_FROM } from '@aztec/aztec.js/account';
|
|
2
|
+
import { CallAuthorizationRequest } from '@aztec/aztec.js/authorization';
|
|
3
|
+
import { type InteractionWaitOptions, type SendReturn, getGasLimits } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import type { Aliased, SendOptions } from '@aztec/aztec.js/wallet';
|
|
3
5
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
4
6
|
import type { DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
|
|
7
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
5
8
|
import { Fq, Fr } from '@aztec/foundation/curves/bn254';
|
|
6
9
|
import type { Logger } from '@aztec/foundation/log';
|
|
10
|
+
import type { PXEConfig, PXECreationOptions } from '@aztec/pxe/client/lazy';
|
|
7
11
|
import type { PXE } from '@aztec/pxe/server';
|
|
8
12
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
13
|
import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
14
|
+
import { GasSettings } from '@aztec/stdlib/gas';
|
|
10
15
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
11
16
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
12
|
-
import {
|
|
13
|
-
|
|
17
|
+
import {
|
|
18
|
+
ExecutionPayload,
|
|
19
|
+
SimulationOverrides,
|
|
20
|
+
type TxExecutionRequest,
|
|
21
|
+
type TxSimulationResult,
|
|
22
|
+
collectOffchainEffects,
|
|
23
|
+
mergeExecutionPayloads,
|
|
24
|
+
} from '@aztec/stdlib/tx';
|
|
25
|
+
import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
|
|
14
26
|
|
|
15
27
|
import type { AccountContractsProvider } from './account-contract-providers/types.js';
|
|
16
28
|
import { type AccountType, WalletDB } from './wallet_db.js';
|
|
@@ -20,9 +32,17 @@ export type EmbeddedWalletOptions = {
|
|
|
20
32
|
logger?: Logger;
|
|
21
33
|
/** Use ephemeral (in-memory) stores. Data will not persist across sessions. */
|
|
22
34
|
ephemeral?: boolean;
|
|
35
|
+
/** Override PXE configuration. */
|
|
36
|
+
pxeConfig?: Partial<PXEConfig>;
|
|
37
|
+
/** Advanced PXE creation options (custom store, prover, simulator). */
|
|
38
|
+
pxeOptions?: PXECreationOptions;
|
|
23
39
|
};
|
|
24
40
|
|
|
41
|
+
const DEFAULT_ESTIMATED_GAS_PADDING = 0.1;
|
|
42
|
+
|
|
25
43
|
export class EmbeddedWallet extends BaseWallet {
|
|
44
|
+
protected estimatedGasPadding = DEFAULT_ESTIMATED_GAS_PADDING;
|
|
45
|
+
|
|
26
46
|
constructor(
|
|
27
47
|
pxe: PXE,
|
|
28
48
|
aztecNode: AztecNode,
|
|
@@ -34,10 +54,6 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
34
54
|
}
|
|
35
55
|
|
|
36
56
|
protected async getAccountFromAddress(address: AztecAddress): Promise<Account> {
|
|
37
|
-
if (address.equals(AztecAddress.ZERO)) {
|
|
38
|
-
return new SignerlessAccount();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
57
|
const { secretKey, salt, signingKey, type } = await this.walletDB.retrieveAccount(address);
|
|
42
58
|
const accountManager = await this.createAccountInternal(type, secretKey, salt, signingKey);
|
|
43
59
|
const account = await accountManager.getAccount();
|
|
@@ -69,6 +85,66 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
69
85
|
return storedSenders;
|
|
70
86
|
}
|
|
71
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Overrides the base sendTx to add a pre-simulation step before the actual send. The simulation
|
|
90
|
+
* estimates actual gas usage and captures call authorization requests to generate
|
|
91
|
+
* the necessary authwitnesses.
|
|
92
|
+
*/
|
|
93
|
+
public override async sendTx<W extends InteractionWaitOptions = undefined>(
|
|
94
|
+
executionPayload: ExecutionPayload,
|
|
95
|
+
opts: SendOptions<W>,
|
|
96
|
+
): Promise<SendReturn<W>> {
|
|
97
|
+
const feeOptions = await this.completeFeeOptionsForEstimation(
|
|
98
|
+
opts.from,
|
|
99
|
+
executionPayload.feePayer,
|
|
100
|
+
opts.fee?.gasSettings,
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// Simulate the transaction first to estimate gas and capture required
|
|
104
|
+
// private authwitnesses based on offchain effects.
|
|
105
|
+
const simulationResult = await this.simulateViaEntrypoint(executionPayload, {
|
|
106
|
+
from: opts.from,
|
|
107
|
+
feeOptions,
|
|
108
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
109
|
+
skipTxValidation: true,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const offchainEffects = collectOffchainEffects(simulationResult.privateExecutionResult);
|
|
113
|
+
const authWitnesses = await Promise.all(
|
|
114
|
+
offchainEffects.map(async effect => {
|
|
115
|
+
try {
|
|
116
|
+
const authRequest = await CallAuthorizationRequest.fromFields(effect.data);
|
|
117
|
+
return this.createAuthWit(authRequest.onBehalfOf, {
|
|
118
|
+
consumer: effect.contractAddress,
|
|
119
|
+
innerHash: authRequest.innerHash,
|
|
120
|
+
});
|
|
121
|
+
} catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}),
|
|
125
|
+
);
|
|
126
|
+
for (const authwit of authWitnesses) {
|
|
127
|
+
if (authwit) {
|
|
128
|
+
executionPayload.authWitnesses.push(authwit);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const estimated = getGasLimits(simulationResult, this.estimatedGasPadding);
|
|
132
|
+
this.log.verbose(
|
|
133
|
+
`Estimated gas limits for tx: DA=${estimated.gasLimits.daGas} L2=${estimated.gasLimits.l2Gas} teardownDA=${estimated.teardownGasLimits.daGas} teardownL2=${estimated.teardownGasLimits.l2Gas}`,
|
|
134
|
+
);
|
|
135
|
+
const gasSettings = GasSettings.from({
|
|
136
|
+
...opts.fee?.gasSettings,
|
|
137
|
+
maxFeesPerGas: feeOptions.gasSettings.maxFeesPerGas,
|
|
138
|
+
maxPriorityFeesPerGas: feeOptions.gasSettings.maxPriorityFeesPerGas,
|
|
139
|
+
gasLimits: opts.fee?.gasSettings?.gasLimits ?? estimated.gasLimits,
|
|
140
|
+
teardownGasLimits: opts.fee?.gasSettings?.teardownGasLimits ?? estimated.teardownGasLimits,
|
|
141
|
+
});
|
|
142
|
+
return super.sendTx(executionPayload, {
|
|
143
|
+
...opts,
|
|
144
|
+
fee: { ...opts.fee, gasSettings },
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
72
148
|
/**
|
|
73
149
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
74
150
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
@@ -76,47 +152,52 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
76
152
|
*/
|
|
77
153
|
protected override async simulateViaEntrypoint(
|
|
78
154
|
executionPayload: ExecutionPayload,
|
|
79
|
-
|
|
80
|
-
feeOptions: FeeOptions,
|
|
81
|
-
_skipTxValidation?: boolean,
|
|
82
|
-
_skipFeeEnforcement?: boolean,
|
|
83
|
-
scopes?: AztecAddress[],
|
|
155
|
+
opts: SimulateViaEntrypointOptions,
|
|
84
156
|
): Promise<TxSimulationResult> {
|
|
85
|
-
const {
|
|
157
|
+
const { from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement } = opts;
|
|
86
158
|
|
|
87
159
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
88
|
-
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
89
|
-
txNonce: Fr.random(),
|
|
90
|
-
cancellable: this.cancellableTransactions,
|
|
91
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions,
|
|
92
|
-
};
|
|
93
160
|
const finalExecutionPayload = feeExecutionPayload
|
|
94
161
|
? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
|
|
95
162
|
: executionPayload;
|
|
96
163
|
const chainInfo = await this.getChainInfo();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
164
|
+
|
|
165
|
+
let overrides: SimulationOverrides | undefined;
|
|
166
|
+
let txRequest: TxExecutionRequest;
|
|
167
|
+
if (from === NO_FROM) {
|
|
168
|
+
const entrypoint = new DefaultEntrypoint();
|
|
169
|
+
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
170
|
+
} else {
|
|
171
|
+
const { account, instance, artifact } = await this.getFakeAccountDataFor(from);
|
|
172
|
+
overrides = {
|
|
173
|
+
contracts: { [from.toString()]: { instance, artifact } },
|
|
174
|
+
};
|
|
175
|
+
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
176
|
+
txNonce: Fr.random(),
|
|
177
|
+
cancellable: this.cancellableTransactions,
|
|
178
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
179
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions!,
|
|
180
|
+
};
|
|
181
|
+
txRequest = await account.createTxExecutionRequest(
|
|
182
|
+
finalExecutionPayload,
|
|
183
|
+
feeOptions.gasSettings,
|
|
184
|
+
chainInfo,
|
|
185
|
+
executionOptions,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
103
189
|
return this.pxe.simulateTx(txRequest, {
|
|
104
190
|
simulatePublic: true,
|
|
105
|
-
skipFeeEnforcement
|
|
106
|
-
skipTxValidation
|
|
107
|
-
overrides
|
|
108
|
-
contracts: { [from.toString()]: { instance, artifact } },
|
|
109
|
-
},
|
|
191
|
+
skipFeeEnforcement,
|
|
192
|
+
skipTxValidation,
|
|
193
|
+
overrides,
|
|
110
194
|
scopes,
|
|
111
195
|
});
|
|
112
196
|
}
|
|
113
197
|
|
|
114
198
|
private async getFakeAccountDataFor(address: AztecAddress) {
|
|
115
199
|
const originalAccount = await this.getAccountFromAddress(address);
|
|
116
|
-
|
|
117
|
-
throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
|
|
118
|
-
}
|
|
119
|
-
const originalAddress = (originalAccount as Account).getCompleteAddress();
|
|
200
|
+
const originalAddress = originalAccount.getCompleteAddress();
|
|
120
201
|
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
121
202
|
if (!contractInstance) {
|
|
122
203
|
throw new Error(`No contract instance found for address: ${originalAddress.address}`);
|
|
@@ -161,10 +242,15 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
161
242
|
const accountManager = await AccountManager.create(this, secret, contract, salt);
|
|
162
243
|
|
|
163
244
|
const instance = accountManager.getInstance();
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
245
|
+
const existingInstance = await this.pxe.getContractInstance(instance.address);
|
|
246
|
+
if (!existingInstance) {
|
|
247
|
+
const existingArtifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
|
|
248
|
+
await this.registerContract(
|
|
249
|
+
instance,
|
|
250
|
+
!existingArtifact ? await accountManager.getAccountContract().getContractArtifact() : undefined,
|
|
251
|
+
accountManager.getSecretKey(),
|
|
252
|
+
);
|
|
253
|
+
}
|
|
168
254
|
return accountManager;
|
|
169
255
|
}
|
|
170
256
|
|
|
@@ -197,6 +283,10 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
197
283
|
this.minFeePadding = value ?? 0.5;
|
|
198
284
|
}
|
|
199
285
|
|
|
286
|
+
setEstimatedGasPadding(value?: number) {
|
|
287
|
+
this.estimatedGasPadding = value ?? DEFAULT_ESTIMATED_GAS_PADDING;
|
|
288
|
+
}
|
|
289
|
+
|
|
200
290
|
stop() {
|
|
201
291
|
return this.pxe.stop();
|
|
202
292
|
}
|
|
@@ -1,46 +1,68 @@
|
|
|
1
|
-
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
1
|
+
import { type AztecNode, createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { createStore, openTmpStore } from '@aztec/kv-store/indexeddb';
|
|
4
|
-
import { createPXE } from '@aztec/pxe/client/lazy';
|
|
5
|
-
import { getPXEConfig } from '@aztec/pxe/config';
|
|
4
|
+
import { type PXE, type PXECreationOptions, createPXE } from '@aztec/pxe/client/lazy';
|
|
5
|
+
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
|
|
6
6
|
|
|
7
7
|
import { LazyAccountContractsProvider } from '../account-contract-providers/lazy.js';
|
|
8
|
+
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
8
9
|
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
9
10
|
import { WalletDB } from '../wallet_db.js';
|
|
10
11
|
|
|
11
12
|
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
12
|
-
static async create
|
|
13
|
+
static async create<T extends BrowserEmbeddedWallet = BrowserEmbeddedWallet>(
|
|
14
|
+
this: new (
|
|
15
|
+
pxe: PXE,
|
|
16
|
+
aztecNode: AztecNode,
|
|
17
|
+
walletDB: WalletDB,
|
|
18
|
+
accountContracts: AccountContractsProvider,
|
|
19
|
+
log?: Logger,
|
|
20
|
+
) => T,
|
|
21
|
+
nodeOrUrl: string | AztecNode,
|
|
22
|
+
options: EmbeddedWalletOptions = {},
|
|
23
|
+
): Promise<T> {
|
|
13
24
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
14
25
|
|
|
15
|
-
const aztecNode = createAztecNodeClient(
|
|
16
|
-
|
|
26
|
+
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
17
27
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
18
|
-
const rollupAddress = l1Contracts.rollupAddress;
|
|
19
28
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
const pxeConfig: PXEConfig = Object.assign(getPXEConfig(), {
|
|
30
|
+
proverEnabled: options.pxeConfig?.proverEnabled ?? false,
|
|
31
|
+
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
32
|
+
...options.pxeConfig,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (options.ephemeral) {
|
|
36
|
+
delete pxeConfig.dataDirectory;
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
const
|
|
39
|
+
const pxeOptions: PXECreationOptions = {
|
|
40
|
+
...options.pxeOptions,
|
|
26
41
|
loggers: {
|
|
27
42
|
store: rootLogger.createChild('pxe:data'),
|
|
28
43
|
pxe: rootLogger.createChild('pxe:service'),
|
|
29
44
|
prover: rootLogger.createChild('pxe:prover'),
|
|
45
|
+
...options.pxeOptions?.loggers,
|
|
30
46
|
},
|
|
31
|
-
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
|
32
50
|
|
|
33
51
|
const walletDBStore = options.ephemeral
|
|
34
52
|
? await openTmpStore(true)
|
|
35
53
|
: await createStore(
|
|
36
|
-
|
|
37
|
-
{
|
|
38
|
-
|
|
54
|
+
'wallet_data',
|
|
55
|
+
{
|
|
56
|
+
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
|
|
57
|
+
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
|
|
58
|
+
l1Contracts,
|
|
59
|
+
},
|
|
60
|
+
1,
|
|
39
61
|
rootLogger.createChild('wallet:data'),
|
|
40
62
|
);
|
|
41
63
|
const walletDB = WalletDB.init(walletDBStore, rootLogger.createChild('wallet:db').info);
|
|
42
64
|
|
|
43
|
-
return new
|
|
65
|
+
return new this(pxe, aztecNode, walletDB, new LazyAccountContractsProvider(), rootLogger) as T;
|
|
44
66
|
}
|
|
45
67
|
}
|
|
46
68
|
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { createStore
|
|
4
|
-
import type
|
|
5
|
-
import {
|
|
6
|
-
import { type PXECreationOptions, createPXE } from '@aztec/pxe/server';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { createStore, openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
4
|
+
import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
|
|
5
|
+
import { type PXE, type PXECreationOptions, createPXE } from '@aztec/pxe/server';
|
|
7
6
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
8
7
|
|
|
9
8
|
import { BundleAccountContractsProvider } from '../account-contract-providers/bundle.js';
|
|
9
|
+
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
10
10
|
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
11
11
|
import { WalletDB } from '../wallet_db.js';
|
|
12
12
|
|
|
13
|
-
export type NodeEmbeddedWalletOptions = EmbeddedWalletOptions & {
|
|
14
|
-
/** Override PXE configuration. */
|
|
15
|
-
pxeConfig?: Partial<PXEConfig>;
|
|
16
|
-
/** Advanced PXE creation options (custom store, prover, simulator). */
|
|
17
|
-
pxeOptions?: PXECreationOptions;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
13
|
export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
21
|
-
static async create(
|
|
14
|
+
static async create<T extends NodeEmbeddedWallet = NodeEmbeddedWallet>(
|
|
15
|
+
this: new (
|
|
16
|
+
pxe: PXE,
|
|
17
|
+
aztecNode: AztecNode,
|
|
18
|
+
walletDB: WalletDB,
|
|
19
|
+
accountContracts: AccountContractsProvider,
|
|
20
|
+
log?: Logger,
|
|
21
|
+
) => T,
|
|
22
22
|
nodeOrUrl: string | AztecNode,
|
|
23
|
-
options:
|
|
24
|
-
): Promise<
|
|
23
|
+
options: EmbeddedWalletOptions = {},
|
|
24
|
+
): Promise<T> {
|
|
25
25
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
26
26
|
|
|
27
27
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
28
|
+
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
28
29
|
|
|
29
|
-
const pxeConfig = Object.assign(getPXEConfig(), {
|
|
30
|
+
const pxeConfig: PXEConfig = Object.assign(getPXEConfig(), {
|
|
30
31
|
proverEnabled: options.pxeConfig?.proverEnabled ?? false,
|
|
32
|
+
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
31
33
|
...options.pxeConfig,
|
|
32
34
|
});
|
|
33
35
|
|
|
@@ -47,30 +49,27 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
47
49
|
|
|
48
50
|
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
|
49
51
|
|
|
50
|
-
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
51
|
-
const rollupAddress = l1Contracts.rollupAddress;
|
|
52
|
-
|
|
53
52
|
const walletDBStore = options.ephemeral
|
|
54
53
|
? await openTmpStore(
|
|
55
|
-
|
|
54
|
+
`wallet_data_${l1Contracts.rollupAddress}`,
|
|
56
55
|
true,
|
|
57
56
|
undefined,
|
|
58
57
|
undefined,
|
|
59
58
|
rootLogger.createChild('wallet:data').getBindings(),
|
|
60
59
|
)
|
|
61
|
-
: await
|
|
60
|
+
: await createStore(
|
|
62
61
|
'wallet_data',
|
|
63
62
|
1,
|
|
64
63
|
{
|
|
65
|
-
dataDirectory:
|
|
64
|
+
dataDirectory: `wallet_data_${l1Contracts.rollupAddress}`,
|
|
66
65
|
dataStoreMapSizeKb: pxeConfig.dataStoreMapSizeKb,
|
|
67
|
-
l1Contracts
|
|
66
|
+
l1Contracts,
|
|
68
67
|
},
|
|
69
68
|
rootLogger.createChild('wallet:data').getBindings(),
|
|
70
69
|
);
|
|
71
70
|
const walletDB = WalletDB.init(walletDBStore, rootLogger.createChild('wallet:db').info);
|
|
72
71
|
|
|
73
|
-
return new
|
|
72
|
+
return new this(pxe, aztecNode, walletDB, new BundleAccountContractsProvider(), rootLogger) as T;
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
75
|
|
package/src/testing.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { InitialAccountData } from '@aztec/accounts/testing';
|
|
2
2
|
import { getInitialTestAccountsData } from '@aztec/accounts/testing/lazy';
|
|
3
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
3
4
|
import type { WaitOpts } from '@aztec/aztec.js/contracts';
|
|
4
5
|
import type { AccountManager } from '@aztec/aztec.js/wallet';
|
|
5
6
|
import type { Fq, Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -21,7 +22,7 @@ export async function deployFundedSchnorrAccounts(
|
|
|
21
22
|
const accountManager = await wallet.createSchnorrAccount(secret, salt, signingKey);
|
|
22
23
|
const deployMethod = await accountManager.getDeployMethod();
|
|
23
24
|
await deployMethod.send({
|
|
24
|
-
from:
|
|
25
|
+
from: NO_FROM,
|
|
25
26
|
skipClassPublication: i !== 0,
|
|
26
27
|
wait: waitOptions,
|
|
27
28
|
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EmbeddedWallet } from './embedded_wallet.js';
|
|
2
|
-
export declare class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
3
|
-
static create(nodeUrl: string): Promise<BrowserEmbeddedWallet>;
|
|
4
|
-
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWRfd2FsbGV0X2Jyb3dzZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbWJlZGRlZC9lbWJlZGRlZF93YWxsZXRfYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQscUJBQWEscUJBQXNCLFNBQVEsY0FBYztJQUN2RCxPQUFhLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQTJCbkU7Q0FDRiJ9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedded_wallet_browser.d.ts","sourceRoot":"","sources":["../../src/embedded/embedded_wallet_browser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,OAAa,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2BnE;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { createStore } from '@aztec/kv-store/indexeddb';
|
|
4
|
-
import { createPXE } from '@aztec/pxe/client/lazy';
|
|
5
|
-
import { getPXEConfig } from '@aztec/pxe/config';
|
|
6
|
-
import { LazyAccountContractsProvider } from './account-contract-providers/lazy.js';
|
|
7
|
-
import { EmbeddedWallet } from './embedded_wallet.js';
|
|
8
|
-
import { WalletDB } from './wallet_db.js';
|
|
9
|
-
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
10
|
-
static async create(nodeUrl) {
|
|
11
|
-
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
12
|
-
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
13
|
-
const rollupAddress = l1Contracts.rollupAddress;
|
|
14
|
-
const config = getPXEConfig();
|
|
15
|
-
config.dataDirectory = `pxe-${rollupAddress}`;
|
|
16
|
-
const pxe = await createPXE(aztecNode, config, {
|
|
17
|
-
loggers: {
|
|
18
|
-
store: createLogger('pxe:data:idb'),
|
|
19
|
-
pxe: createLogger('pxe:service'),
|
|
20
|
-
prover: createLogger('bb:wasm:lazy')
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
const logger = createLogger('embedded-wallet:browser');
|
|
24
|
-
const walletDBStore = await createStore(`wallet-${rollupAddress}`, {
|
|
25
|
-
dataDirectory: 'wallet',
|
|
26
|
-
dataStoreMapSizeKb: 2e10
|
|
27
|
-
}, undefined, createLogger('wallet:data:idb'));
|
|
28
|
-
const walletDB = WalletDB.init(walletDBStore, logger.info);
|
|
29
|
-
return new BrowserEmbeddedWallet(pxe, aztecNode, walletDB, new LazyAccountContractsProvider());
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { createAztecNodeClient } from '@aztec/aztec.js/node';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { createStore } from '@aztec/kv-store/indexeddb';
|
|
4
|
-
import { createPXE } from '@aztec/pxe/client/lazy';
|
|
5
|
-
import { getPXEConfig } from '@aztec/pxe/config';
|
|
6
|
-
|
|
7
|
-
import { LazyAccountContractsProvider } from './account-contract-providers/lazy.js';
|
|
8
|
-
import { EmbeddedWallet } from './embedded_wallet.js';
|
|
9
|
-
import { WalletDB } from './wallet_db.js';
|
|
10
|
-
|
|
11
|
-
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
12
|
-
static async create(nodeUrl: string): Promise<BrowserEmbeddedWallet> {
|
|
13
|
-
const aztecNode = createAztecNodeClient(nodeUrl);
|
|
14
|
-
|
|
15
|
-
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
16
|
-
const rollupAddress = l1Contracts.rollupAddress;
|
|
17
|
-
|
|
18
|
-
const config = getPXEConfig();
|
|
19
|
-
config.dataDirectory = `pxe-${rollupAddress}`;
|
|
20
|
-
|
|
21
|
-
const pxe = await createPXE(aztecNode, config, {
|
|
22
|
-
loggers: {
|
|
23
|
-
store: createLogger('pxe:data:idb'),
|
|
24
|
-
pxe: createLogger('pxe:service'),
|
|
25
|
-
prover: createLogger('bb:wasm:lazy'),
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
const logger = createLogger('embedded-wallet:browser');
|
|
30
|
-
const walletDBStore = await createStore(
|
|
31
|
-
`wallet-${rollupAddress}`,
|
|
32
|
-
{ dataDirectory: 'wallet', dataStoreMapSizeKb: 2e10 },
|
|
33
|
-
undefined,
|
|
34
|
-
createLogger('wallet:data:idb'),
|
|
35
|
-
);
|
|
36
|
-
const walletDB = WalletDB.init(walletDBStore, logger.info);
|
|
37
|
-
|
|
38
|
-
return new BrowserEmbeddedWallet(pxe, aztecNode, walletDB, new LazyAccountContractsProvider());
|
|
39
|
-
}
|
|
40
|
-
}
|