| name | aawp |
| version | 1.3.1 |
| description | AAWP (AI Agent Wallet Protocol) — the only crypto wallet protocol built exclusively for AI Agents on EVM-compatible blockchains. Not for humans. The signer is the AI Agent itself, cryptographically bound at wallet creation. Supports wallet lifecycle management, token transfers, DEX swaps, cross-chain bridging, arbitrary contract interactions, DCA automation, and price alerts.
|
| environment | [{"name":"AAWP_GUARDIAN_KEY","description":"Private key for the Guardian gas-relay wallet (auto-generated in config/guardian.json if not set)","required":false},{"name":"AAWP_GAS_KEY","description":"Alias for AAWP_GUARDIAN_KEY","required":false},{"name":"AAWP_WALLET","description":"Pinned wallet address — prevents accidental operations on wrong wallet","required":false},{"name":"AAWP_CONFIG","description":"Override config directory path (default: ./config)","required":false},{"name":"AAWP_CORE","description":"Override native addon directory path (default: ./core)","required":false},{"name":"AAWP_SKILL","description":"Override skill root directory path","required":false},{"name":"AAWP_AI_TOKEN","description":"Daemon auth token (auto-generated at startup, not user-supplied)","required":false}] |
| credentials | [{"name":"Guardian Key","description":"ECDSA private key for the gas-relay wallet. Auto-generated on first provision and stored in config/guardian.json. Used ONLY to pay gas fees — never holds user assets."},{"name":"Encrypted Seed","description":"Agent signing seed, encrypted at rest. Generated during provisioning, stored in the .agent-config directory. This is the agent's on-chain signing authority."}] |
| persistence | [{"type":"daemon","description":"Local signing daemon (background process) listens on a Unix socket at /tmp/.aawp-daemon.*. Holds the signing key in memory during operation. Managed via ensure-daemon.sh / restart-daemon.sh."},{"type":"files","description":"Writes to config/ and .agent-config/ directories, plus a daemon PID lock under /tmp/."},{"type":"cron","description":"DCA strategies and price alerts register OpenClaw cron jobs for autonomous scheduled execution."}] |
| native_binary | {"file":"core/aawp-core.node","hash_file":"core/aawp-core.node.hash","description":"Precompiled Node.js N-API addon (linux-x64) for cryptographic operations. Built from Rust via napi-rs. Hash recorded in aawp-core.node.hash.\n","source":"https://github.com/aawp-ai/aawp","verification":"On-chain factory approveBinary(hash) — only whitelisted builds can operate wallets","architecture":"linux-x64","runtime":"Node.js N-API (ABI stable)"} |
| risk_disclosure | This skill runs a persistent signing daemon and can autonomously submit on-chain transactions as the AI Agent. It manages encrypted private key material and a precompiled native binary. DCA/price-alert features register cron jobs. The on-chain factory enforces both binary approval and AI-exclusive ownership — only whitelisted AI Agent daemon builds can create or operate wallets. Humans cannot be the signer. Review the guardian architecture and verify binary provenance before installing.
|
AAWP — AI Agent Wallet Protocol
The only crypto wallet protocol built exclusively for AI Agents. Not for humans.
AAWP enforces a single invariant: the signer is the AI Agent itself — locked in at wallet creation, immutable, verifiable on-chain. AI Agents manage their own on-chain assets across EVM networks through a guardian-based architecture. Transactions are signed locally via a sharded-key daemon — no human approval per tx, with full recovery and freeze capabilities for the human guardian.
Networks: Ethereum · Base · BNB Chain · Polygon · Optimism · Arbitrum
Architecture Overview
┌─────────────────────────────────────────────────┐
│ AI Agent (OpenClaw) │
│ ┌───────────────┐ ┌──────────────────────┐ │
│ │ wallet-manager│───▶│ Signing Daemon │ │
│ │ dca / alerts │ │ (Unix socket) │ │
│ └───────────────┘ │ ┌──────────────────┐ │ │
│ │ │ aawp-core.node │ │ │
│ │ │ (Rust N-API) │ │ │
│ │ └──────────────────┘ │ │
│ └──────────┬───────────┘ │
│ │ sign │
│ ┌───────────────┐ ▼ │
│ │ Guardian Key │──▶ Pay gas ──▶ EVM Chain │
│ │ (gas only) │ │ │
│ └───────────────┘ ┌──────────▼───────────┐ │
│ │ Smart Contract Wallet │ │
│ │ (holds assets) │ │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────┘
Key separation: Guardian pays gas → Wallet holds assets → Daemon signs transactions.
Quick Reference
| Task | Command |
|---|
| Create wallet | wallet-manager.js --chain base create |
| Check balance | wallet-manager.js --chain base balance |
| Send ETH | wallet-manager.js --chain base send <to> <amount> |
| Send ERC-20 | wallet-manager.js --chain base send-token USDC <to> <amount> |
| Get swap quote | wallet-manager.js --chain base quote ETH USDC 0.01 |
| Execute swap | wallet-manager.js --chain base swap ETH USDC 0.01 |
| Bridge cross-chain | wallet-manager.js --chain base bridge ETH optimism 0.1 |
| Contract call | wallet-manager.js --chain base call <addr> "fn(args)" ... |
| Contract read | wallet-manager.js --chain base read <addr> "fn() returns (uint)" ... |
| DCA strategy | dca.js add --chain base --from ETH --to USDC --amount 0.01 --cron "0 9 * * *" |
| Price alert | price-alert.js add --chain base --from ETH --to USDC --above 2600 --notify |
| Cross-chain portfolio | portfolio.js |
| Single chain portfolio | portfolio.js --chain base |
| Limit order | limit-order.js --chain base create ETH USDC 0.1 2700 |
| List orders | limit-order.js --chain base list |
| List NFTs | nft.js --chain base balance |
| NFT transfer | nft.js --chain base transfer <contract> <tokenId> <to> |
| NFT floor price | nft.js --chain eth floor <contract> |
| Yield rates | yield.js --chain base rates |
| Supply collateral | yield.js --chain base supply USDC 1000 |
| Borrow | yield.js --chain base borrow USDC 200 |
| Aave positions | yield.js --chain base positions |
| Diagnostics | bash scripts/doctor.sh |
| Backup | wallet-manager.js backup ./backup.tar.gz |
All commands: node scripts/wallet-manager.js --help
Getting Started
1. Provision
First run is automatic — ensure-daemon.sh detects a missing seed and provisions.
bash scripts/provision.sh
bash scripts/provision.sh --reset
2. Create Wallet
node scripts/wallet-manager.js --chain base create
If the Guardian needs gas, you'll see a funding guide with the Guardian address and private key.
3. Pin & Fund
export AAWP_WALLET=0x...
node scripts/wallet-manager.js --chain base balance
4. Test
node scripts/wallet-manager.js --chain base quote ETH USDC 0.001
node scripts/wallet-manager.js --chain base swap ETH USDC 0.001
After fresh provisioning, verify the daemon binary hash is approved on the factory contract. If not, the factory owner must call approveBinary(hash).
Wallet Manager CLI
Entry point: node scripts/wallet-manager.js
Chain flag: --chain <base|bsc|polygon|optimism|arbitrum|ethereum>
Wallet Lifecycle
wallet-manager.js --chain base status
wallet-manager.js --chain base balance
wallet-manager.js --chain base portfolio
wallet-manager.js compute-address
wallet-manager.js --chain base history
wallet-manager.js --chain base upgrade-signer
wallet-manager.js --chain base guardian-chains
Transfers
wallet-manager.js --chain base send <recipient> <amount>
wallet-manager.js --chain base send-token <symbol> <recipient> <amount>
Trading
wallet-manager.js --chain base quote <from> <to> <amount>
wallet-manager.js --chain base swap <from> <to> <amount>
wallet-manager.js --chain base bridge <token> <dest> <amount>
Approvals
wallet-manager.js --chain base approve <token> <spender> <amount>
wallet-manager.js --chain base allowance <token> <spender>
wallet-manager.js --chain base revoke <token> <spender>
Contract Interaction
wallet-manager.js --chain base call <contract> "transfer(address,uint256)" 0xTo 1000
wallet-manager.js --chain base read <contract> "balanceOf(address) returns (uint256)" 0xAddr
wallet-manager.js --chain base batch ./calls.json
Batch format:
[
{ "to": "0x...", "sig": "approve(address,uint256)", "args": ["0x...", "1000000"] },
{ "to": "0x...", "sig": "transfer(address,uint256)", "args": ["0x...", "500000"] }
]
Address Book
wallet-manager.js addr add <label> <address>
wallet-manager.js addr list
wallet-manager.js addr get <label>
wallet-manager.js addr remove <label>
RPC & Backup
wallet-manager.js get-rpc
wallet-manager.js --chain base set-rpc <url|default>
wallet-manager.js backup ./backup.tar.gz
wallet-manager.js restore ./backup.tar.gz
DCA Automation
Entry point: node scripts/dca.js
dca.js add --chain base --from ETH --to USDC --amount 0.01 --cron "0 9 * * *" --name "Daily ETH→USDC"
dca.js list
dca.js run <id>
dca.js history <id>
dca.js remove <id>
Registers an OpenClaw cron job that executes swaps on schedule.
Price Alerts
Entry point: node scripts/price-alert.js
price-alert.js add --chain base --from ETH --to USDC --above 2600 --notify
price-alert.js add --chain base --from ETH --to USDC --below 2200 --notify --auto-swap 0.01
price-alert.js list
price-alert.js check
price-alert.js remove <id>
Daemon Management
| Script | Purpose |
|---|
scripts/doctor.sh | Full diagnostic check |
scripts/ensure-daemon.sh | Start daemon if not running (auto-provisions on first run) |
scripts/restart-daemon.sh | Force restart |
Run doctor.sh before sensitive operations or when signing seems off.
Cross-Chain Portfolio View
Entry point: node scripts/portfolio.js
Supported chains: All 6 (base · eth · arb · op · polygon · bsc) — queried in parallel
Commands
portfolio.js
portfolio.js --chain base
portfolio.js --no-prices
portfolio.js --hide-zero
portfolio.js --json
Output Includes
- Native balance per chain (ETH / BNB / MATIC)
- All ERC-20 token balances via Multicall3 (1 RPC call per chain)
- USD value per token (CoinGecko public API)
- Total portfolio value across all chains
- Top 8 holdings ranked by USD value with % allocation
- Multi-chain holdings — same token aggregated across chains
Tokens tracked: USDC, USDT, WETH, DAI, WBTC, BNB/WBNB, MATIC, ARB, OP, CAKE, AERO, GMX, PEPE, and more per chain.
Limit Orders (CoW Protocol — Gasless)
Entry point: node scripts/limit-order.js
Supported chains: eth · base · arb · op · polygon (CoW Protocol) · bsc (1inch Limit Orders)
Orders are signed off-chain (EIP-712) and settled by solvers — no gas on order creation (except BSC cancel which is on-chain).
Commands
limit-order.js --chain base create ETH USDC 0.1 2700
limit-order.js --chain eth create USDC ETH 1000 0.00037
limit-order.js --chain base list
limit-order.js --chain base history
limit-order.js --chain base cancel <orderUid>
limit-order.js --chain base create ETH USDC 0.1 2700 --expiry 48
Notes:
- First-time use requires one ERC-20 approval transaction (CoW VaultRelayer)
price = amount of buyToken per 1 sellToken
- Orders persist in
config/limit-orders.json for local tracking
NFT Operations (ERC-721 & ERC-1155)
Entry point: node scripts/nft.js
Supported chains: All 6 chains (BSC via BscScan NFT API)
Commands
nft.js --chain base balance
nft.js --chain eth balance --contract 0xBC4C...
nft.js --chain eth info 0xBC4C... 1234
nft.js --chain base transfer 0xNFT... 42 0xTo...
nft.js --chain base transfer 0xNFT... 42 0xTo... 5
nft.js --chain base approve 0xNFT... 0xOperator...
nft.js --chain base revoke 0xNFT... 0xOperator...
nft.js --chain base mint 0xContract...
nft.js --chain base mint 0xContract... 0xcalldata
nft.js --chain eth floor 0xBC4C...
Notes:
balance auto-detects ERC-721 vs ERC-1155 and fetches metadata
info resolves IPFS URIs and displays traits
floor queries OpenSea public API; Blur link provided for ETH collections
Yield / DeFi (Aave V3)
Entry point: node scripts/yield.js
Supported chains: base · eth · arb · op · polygon (Aave V3) · bsc (Venus Protocol)
Commands
yield.js --chain base rates
yield.js --chain base positions
yield.js --chain base supply USDC 1000
yield.js --chain base withdraw USDC 500
yield.js --chain base withdraw USDC max
yield.js --chain base borrow USDC 200
yield.js --chain base borrow USDC 200 --rate stable
yield.js --chain base repay USDC 200
yield.js --chain base repay USDC max
Supported Tokens by Chain
| Chain | Tokens |
|---|
| base | USDC, WETH, cbBTC, USDbC |
| eth | USDC, USDT, DAI, WBTC, WETH |
| arb | USDC, USDT, WETH, WBTC, DAI |
| op | USDC, USDT, WETH, WBTC, DAI |
| polygon | USDC, USDT, WETH, WBTC, DAI, WMATIC |
Safety note: Always check your health factor after borrowing. Health factor < 1.0 triggers liquidation. Use positions to monitor.
Token Launch (Clanker V4)
Deploy a token via your AAWP wallet as the on-chain deployer, admin, and LP fee recipient.
Script: scripts/deploy-clanker.js
Supported chains
| Key | Chain | ChainId |
|---|
base | Base | 8453 |
eth | Ethereum | 1 |
arb | Arbitrum | 42161 |
unichain | Unichain | 130 |
bera | Berachain | 143 |
bsc | BSC | 56 |
Usage
node scripts/deploy-clanker.js --dry-run
node scripts/deploy-clanker.js
CONFIG reference
const CONFIG = {
chain: 'base',
name: 'My Token',
symbol: 'MTK',
image: 'https://...',
description: '...',
website: '',
twitter: '',
initialMarketCap: 10,
poolPositions: 'Standard',
feeConfig: 'StaticBasic',
devBuyEth: 0.003,
vault: {
enabled: false,
percentage: 20,
lockupDays: 7,
vestingDays: 180,
},
tokenAdmin: null,
rewardRecipient: null,
};
How it works: the AAWP wallet calls Clanker.deployToken() directly (gas limit 8M).
tokenAdmin and all LP fee rewards default to the AAWP wallet — the AI Agent owns its token end-to-end.
Deployment Reference
AAWP contracts share identical addresses across all chains via CREATE2 vanity deployment:
| Contract | Address |
|---|
| Factory Proxy | 0xAAAA3Df87F112c743BbC57c4de1700C72eB7aaAA |
| Identity Proxy | 0xAAAafBf6F88367C75A9B701fFb4684Df6bCA1D1d |
Verified on: Etherscan · BaseScan · BscScan · PolygonScan · Optimistic Etherscan · Arbiscan
Security
| Rule | Why |
|---|
| Fund the wallet, not the guardian | Guardian only pays gas — your assets live in the wallet contract |
| Pin wallet address | export AAWP_WALLET=0x... prevents operating on wrong address |
| Quote before swap | Preview rates and slippage before executing |
| Start small | Test with minimal amounts on new chains or operations |
| Never expose secrets | Seeds, keys, shards must never appear in logs or chat |
| Verify binary approval | Confirm daemon hash is approved on factory after provisioning |
Troubleshooting
| Error | Fix |
|---|
E_AI_GATE / hmac_mismatch | Restart daemon: bash scripts/restart-daemon.sh |
InvalidSignature | Verify signer alignment and binary approval on factory |
Call failed | Check balance, gas, and transaction parameters |
E40 / E41 | Kill duplicate daemon process, then restart |
BinaryNotApproved | Factory owner must call approveBinary(hash) on all 6 chains |
| TX reverts with ~1M gas used | Add --gas-limit 8000000 — Clanker V4 / Uniswap V4 ops need up to 6M |
File Structure
aawp/
├── SKILL.md # This document
├── WALLET_SETUP.md # First-time setup guide
├── config/
│ ├── chains.json # Network RPC & contract addresses
│ └── guardian.json # Guardian wallet (auto-generated, gitignored)
├── scripts/
│ ├── wallet-manager.js # Primary CLI
│ ├── dca.js # DCA automation
│ ├── price-alert.js # Price alert system
│ ├── provision.sh # Initial provisioning
│ ├── doctor.sh # Diagnostics
│ ├── ensure-daemon.sh # Daemon lifecycle
│ └── restart-daemon.sh # Force restart
├── core/
│ ├── aawp-core.node # Native signing addon (linux-x64)
│ ├── aawp-core.node.hash # Binary integrity hash
│ ├── loader.js # Addon loader
│ └── index.d.ts # TypeScript declarations
└── daemon/ # Daemon implementation