Use this skill when working with Aztec account implementations and lifecycle flows, including Schnorr/ECDSA account flavors, account abstraction entrypoints, transaction routing, key-store integration, deployment, and wallet reconstruction.
Use this skill for Aztec account implementation and account-lifecycle work.
Primary scope:
Schnorr, ECDSA)secret, salt, signing key/public key)AccountManager and wallet account helpersOut of scope:
aztec-js or aztec-deployment)aztec-pxe)aztec-wallet-sdk)Use the upstream repository and pin:
https://github.com/AztecProtocol/aztec-packagesv4.2.0f8c89cf4345df6c4ca9e66ea9b738e96070abc5ayarn-project/accountsyarn-project/entrypointsyarn-project/key-storeCheckout example:
git clone https://github.com/AztecProtocol/aztec-packages.git
cd aztec-packages
git checkout v4.2.0
git status
Expected status includes HEAD detached at v4.2.0.
secret + salt + account flavor + signing key/public key as the account identity tuple. Change any of them and the address changes.Schnorr for most production use cases, and ECDSA for Ethereum-style signer integrations.lazy account modules explicitly note they are incompatible with Node.js at this pin.@aztec/accounts only define account behavior; actual deploy/recovery lifecycle is wired through AccountManager and wallet helpers.AccountManager.create(...), register the resulting instance/artifact with the wallet/PXE before relying on it for interactions.AccountEntrypointMetaPaymentMethod.# install core account-related packages
scripts/install_aztec_accounts_deps.sh npm
import { Fr, GrumpkinScalar } from '@aztec/aztec.js/fields';
import { createAztecNodeClient, waitForNode } from '@aztec/aztec.js/node';
import { EmbeddedWallet } from '@aztec/wallets/embedded';
const node = createAztecNodeClient('http://localhost:8080');
await waitForNode(node);
const wallet = await EmbeddedWallet.create(node);
const accountManager = await wallet.createSchnorrAccount(
Fr.random(),
Fr.random(),
GrumpkinScalar.random(),
);
const deployMethod = await accountManager.getDeployMethod();
await deployMethod.send({ from: existingFundedAccountAddress });
console.log(accountManager.address.toString());
SchnorrAccountContract
EcdsaKAccountContract
EcdsaRAccountContract
EcdsaRSSHAccountContract
EmbeddedWallet.createSchnorrAccount(...) or AccountManager.create(...).accountManager.getCompleteAddress().getSchnorrAccountContractAddress(secret, salt, signingKey?).accountManager.getInstance() when you need the contract instance definition before publishing.AccountManager.create(...).accountManager.getDeployMethod().await deployMethod.send({ from: fundedAccountAddress })universalDeployment: true.skipClassPublication: trueskipInstancePublication: trueskipInitialization: falseskipClassPublication: true is unavailable for account contracts that expose public functions with a private initializer: v4.2.0 emits a separate public init nullifier via an auto-enqueued public call, which requires the account class to be published onchain.DeployAccountMethod routes fee execution through AccountEntrypointMetaPaymentMethod.createSchnorrAccount(...), createECDSAKAccount(...), or createECDSARAccount(...)AccountManager.create(wallet, secret, contract, salt)getAccount() for the runtime account objectDefaultAccountContract wires a BaseAccount around DefaultAccountEntrypoint.DefaultAccountEntrypoint:
entrypoint(...) payloadcancellable, txNonce, and fee-routing modeDefaultEntrypoint:
DefaultMultiCallEntrypoint:
SignerlessAccountAccountFeePaymentMethodOptions controls how the account entrypoint treats fees:
EXTERNALPREEXISTING_FEE_JUICEFEE_JUICE_WITH_CLAIMAccountEntrypointMetaPaymentMethod computes these automatically when self-funding deployment:
KeyStore is a secure input component for PXE, not just a convenience map.createAccount()addAccount(sk, partialAddress)getAccounts() / hasAccount(account)getKeyValidationRequest(pkMHash, contractAddress)getMasterIncomingViewingSecretKey(account)getAppOutgoingViewingSecretKey(account, app)getMasterSecretKey(pkM)accountHasKey(account, pkMHash)@aztec/accounts/testing exposes deterministic/local-network-friendly helpers:
getInitialTestAccountsData()generateSchnorrAccounts(numberOfAccounts)yarn-project/accounts/README.md still shows getSchnorrAccount(...) and getSchnorrWallet(...).@aztec/accounts/*getSchnorrAccountContractAddress(...)AccountManagerreference.md and patterns.md over the README snippets when they differ.# preflight node/package-manager checks and optional source-tree validation
scripts/preflight_aztec_accounts.sh [node-url] [aztec-packages-dir]
# install account-related SDK packages
scripts/install_aztec_accounts_deps.sh <npm|yarn|pnpm> [version]
# summarize exports and core source anchors from an aztec-packages checkout
scripts/summarize_accounts_surface.sh <aztec-packages-dir>
# run package tests for accounts, entrypoints, and key-store
scripts/run_accounts_tests.sh <aztec-packages-dir> [accounts|entrypoints|key-store]
getDeployMethod() throws about missing initializer:
that account contract does not expose an initializer path at this pin.AccountFeePaymentMethodOptions.lazy account modules fail under Node:
expected at this pin; switch to eager imports.reference.md for the pinned source map and API/file coverage.patterns.md for reusable deployment and reconstruction snippets.scripts/ for repeatable setup, inspection, and test workflows.