Wallet Options
Your wallet signs authentication challenges and receives USDC payments.
Overview
During npm run setup, you choose one of three wallet types. Each wallet provides the same interface: an Ethereum address and the ability to sign messages (EIP-191). The wallet is used for two purposes:
- Authentication — The Sixerr server sends a challenge message. Your wallet signs it to prove ownership. This produces a JWT for the session.
- Receiving payments — Clients pay for inference via x402 (USDC on Base). Your wallet address is where earnings are settled.
Comparison
| Option | Setup | Security | Best For |
|---|---|---|---|
| Coinbase Agent Wallet | CDP API credentials (Key ID, Secret, Wallet Secret) | Keys stored in Coinbase enclaves, never exposed | Production, managed infrastructure |
| Generate New Wallet | Password to encrypt a new random key | Local V3 keystore (scrypt-encrypted) | Testing, quick start |
| Import Existing Key | 0x-prefixed private key + password | Local V3 keystore (scrypt-encrypted) | Using an existing wallet |
Coinbase Agent Wallet
The recommended option for production deployments. Your private key is generated and stored inside a Coinbase enclave — it never leaves their infrastructure.
What you need
- CDP API Key ID — From the Coinbase Developer Platform.
- CDP API Key Secret — The secret associated with your API key.
- CDP Wallet Secret — A separate secret for wallet operations.
How to get credentials
- Go to the Coinbase Developer Platform.
- Create or select a project.
- Navigate to API Keys and create a new key with Agent Wallet permissions.
- Save the Key ID, Secret, and Wallet Secret securely.
CDP credentials are stored in ~/.sixerr/config.json (file permissions 0600). They are only used to initialize the signing client at startup.
Generate New Wallet
Creates a fresh Ethereum wallet with a random private key. The key is immediately encrypted using the password you provide.
How it works
- A cryptographically random private key is generated using
viem/accounts. - You enter a password (minimum 8 characters) and confirm it.
- The key is encrypted into a V3 keystore using scrypt (N=131072, r=8, p=1) and AES-128-CTR.
- The keystore is saved to
~/.sixerr/keystores/wallet.jsonwith0600file permissions.
There is no password recovery mechanism. If you forget the password, you will need to run npm run setup again to create a new wallet. Any USDC in the old wallet address remains there.
Import Existing Key
Use a private key from an existing wallet (for example, exported from MetaMask).
How to export from MetaMask
- Open MetaMask and select the account.
- Go to Account Details (three dots menu).
- Click Show Private Key and enter your MetaMask password.
- Copy the 0x-prefixed key (66 characters total).
The imported key is encrypted using the same V3 keystore format as locally generated wallets.
Security Notes
- Private keys never leave your machine. For Coinbase wallets, keys never leave the Coinbase enclave. For local and imported wallets, keys are scrypt-encrypted at rest.
- The running plugin process does not have key access. It holds a signing function (a closure), not the raw private key bytes.
- Wallet is only used for two operations: signing authentication challenges (EIP-191) and as the payment destination address.
- Keystore files are permission-protected:
0600(owner read/write only). The keystores directory is0700.