Aztec Accounts Skill
Create, deploy, and manage Aztec accounts with proper key management.
Code Philosophy
You are writing application code, not library code. Application code should fail fast and loud. Do not add resilience patterns (retries, fallbacks, default values) unless explicitly requested. The developer's debugging experience is more important than the app "not crashing" — a crash with a clear error message is always better than silent misbehavior.
Subskills
- Schnorr Accounts - Creating and deploying Schnorr accounts
- Account Recovery - Recovering accounts from saved credentials
Quick Start: Create and Deploy Account
import { Fr } from "@aztec/aztec.js/fields";
import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin";
import { AztecAddress } from "@aztec/stdlib/aztec-address";
import { AccountManager } from "@aztec/aztec.js/wallet";
import { SponsoredFeePaymentMethod } from "@aztec/aztec.js/fee";
// Generate new account keys
const secretKey = Fr.random();
const signingKey = GrumpkinScalar.random();
const salt = Fr.random();
// Create account manager
const account = await wallet.createSchnorrAccount(secretKey, salt, signingKey);
console.log(`Account address: ${account.address}`);
// Deploy account (required before use)
const deployMethod = await account.getDeployMethod();
await deployMethod.simulate({ from: AztecAddress.ZERO });
await deployMethod.send({
from: AztecAddress.ZERO,
fee: { paymentMethod: sponsoredPaymentMethod },
wait: { timeout: 120000 }
});
Account Types
Aztec supports several account types:
| Type | Description | Use Case |
|---|---|---|
| Schnorr | ECDSA-compatible | Most common, recommended |
| ECDSA | Ethereum-style | Ethereum compatibility |
Key Components
- Secret Key (Fr) - Private key for encryption
- Signing Key (GrumpkinScalar) - Private key for transaction signing
- Salt (Fr) - Randomness for address derivation
- Address - Derived deterministically from above
Important: Save Credentials
After creating an account, always save the credentials:
console.log(`SECRET=${secretKey.toString()}`);
console.log(`SIGNING_KEY=${signingKey.toString()}`);
console.log(`SALT=${salt.toString()}`);
Store these in your .env file for later recovery.
Key Imports
// Key types
import { Fr } from "@aztec/aztec.js/fields";
import { GrumpkinScalar } from "@aztec/foundation/curves/grumpkin";
// Account management
import { AccountManager } from "@aztec/aztec.js/wallet";
import { AztecAddress } from "@aztec/stdlib/aztec-address";
// Wallet
import { EmbeddedWallet } from "@aztec/wallets/embedded";
// Fee payment
import { SponsoredFeePaymentMethod } from "@aztec/aztec.js/fee";
