Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Manage on-chain EVM and Solana wallets: balances, transfers, message signing, and transaction history via Privy Server Wallets.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
SKILL.md
1---2name: wallet3version: 3.5.04description: "Multi-chain wallet โ balances, transfers, signing, policy (EVM multi-chain + Solana)"5author: starchild6tags: [wallet, evm, solana, transfer, sign, policy, debank, birdeye]7tools:8- wallet_info9- wallet_balance10- wallet_sol_balance11- wallet_get_all_balances12- wallet_transfer13- wallet_sign_transaction14- wallet_sign15- wallet_sign_typed_data16- wallet_transactions17- wallet_sol_transfer18- wallet_sol_sign_transaction19- wallet_sol_sign20- wallet_sol_transactions21- wallet_get_policy22- wallet_propose_policy23tool_module: wallet.wallet24---2526# ๐ฐ Wallet Skill2728Multi-chain wallet for EVM (DeBank-supported chains) + Solana. Balances, transfers, signing, policy management.2930## Tools3132| Tool | Description |33|------|-------------|34| `wallet_info` | Get all wallet addresses |35| `wallet_balance` | EVM balance on a chain (DeBank) |36| `wallet_sol_balance` | Solana balance (Birdeye) |37| `wallet_get_all_balances` | All chains at once |38| `wallet_transfer` | **Broadcast** EVM tx (gas sponsored by default, user-paid fallback) |39| `wallet_sign_transaction` | Sign EVM tx (no broadcast) |40| `wallet_sign` | EIP-191 message signing |41| `wallet_sign_typed_data` | EIP-712 typed data signing |42| `wallet_transactions` | EVM tx history |43| `wallet_sol_transfer` | **Broadcast** Solana tx |44| `wallet_sol_sign_transaction` | Sign Solana tx (no broadcast) |45| `wallet_sol_sign` | Solana message signing |46| `wallet_sol_transactions` | Solana tx history |47| `wallet_get_policy` | Check policy status |48| `wallet_propose_policy` | Propose policy (sends to UI) |4950## Key Facts5152- **Gas is sponsored by default** on EVM chains โ user doesn't need native tokens for gas. Falls back to user-paid if sponsorship is unavailable. Use `sponsor=false` in wallet_transfer to explicitly pay gas from wallet balance.53- **Policy default: OFF** (allow-all). Only when user enables policy do transactions need UI confirmation54- **Supported EVM chains**: All DeBank-supported chains. Common names auto-mapped to DeBank chain IDs (e.g. `avalanche` โ `avax`, `bsc` โ `bsc`, `zksync` โ `era`). For full chain list call `db_chain_list()` from the debank skill. The 16 common chains (ethereum, base, arbitrum, optimism, polygon, linea, bsc, avalanche, fantom, gnosis, zksync, scroll, blast, mantle, celo, aurora) have built-in fallback mapping.55- **Balance sources**: DeBank (EVM), Birdeye (Solana), wallet-service (fallback)5657## Workflow5859### Check Balances601. Single chain: `wallet_balance(chain="base")` or `wallet_sol_balance()`612. All at once: `wallet_get_all_balances()`6263### Send Transaction (EVM)641. Check balance: `wallet_balance(chain=...)`652. Transfer: `wallet_transfer(to=..., amount=..., chain_id=...)`663. Verify: `wallet_transactions()` or check balance again6768### Policy Management691. Check: `wallet_get_policy(chain_type="ethereum")`702. If user wants to enable: `wallet_propose_policy(chain_type, rules, title, description)`713. User confirms in UI โ policy applied7273### Standard Wildcard Policy (when needed)74```75rules = [76{"name": "Deny key export", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},77{"name": "Allow all", "method": "*", "conditions": [], "action": "ALLOW"},78]79```8081### Policy Modes โ CRITICAL DECISION TABLE8283โ ๏ธ **DENY > ALLOW in Privy.** `DENY *` overrides ALL ALLOW rules. NEVER mix them.8485| Mode | Rules | Effect |86|------|-------|--------|87| **Allow-all** (default) | `DENY exportPrivateKey` + `ALLOW *` | Everything allowed except key export |88| **Deny-all** (lockdown) | `DENY exportPrivateKey` + `DENY *` | Nothing works. No ALLOW rules! |89| **Whitelist** (selective) | `DENY exportPrivateKey` + specific ALLOW rules only | Only whitelisted ops work, rest implicitly denied |9091### Mode 1: Allow-All (Standard Wildcard)92```93rules = [94{"name": "Deny key export", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},95{"name": "Allow all", "method": "*", "conditions": [], "action": "ALLOW"},96]97```9899### Mode 2: Deny-All (Lockdown)100```101rules = [102{"name": "Deny key export", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},103{"name": "Deny all actions", "method": "*", "conditions": [], "action": "DENY"},104]105# โ ๏ธ NO ALLOW rules here โ DENY * would override them!106```107108### Mode 3: Whitelist (Selective Allow)109```110rules = [111{"name": "Deny key export", "method": "exportPrivateKey", "conditions": [], "action": "DENY"},112{"name": "Allow transfer to Uniswap", "method": "eth_sendTransaction", "conditions": [113{"field_source": "ethereum_transaction", "field": "to", "operator": "eq", "value": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}114], "action": "ALLOW"},115]116# โ ๏ธ NO "DENY *" here! enabled=true already denies everything not ALLOWed.117# Adding DENY * would override the ALLOW rules above (DENY > ALLOW).118```119120## Privy Policy Rules โ Key Constraints121122| Rule | Details |123|------|---------|124| **Default behavior** | `enabled=true` โ deny-all unless explicitly ALLOWed |125| **DENY > ALLOW** | DENY always wins when both match |126| **Empty conditions** | Only `exportPrivateKey` and `*` (wildcard) allow `conditions: []` |127| **TX methods need conditions** | `eth_sendTransaction`, `eth_signTransaction`, `eth_signTypedData_v4`, `eth_signUserOperation`, `signAndSendTransaction`, etc. ALL require โฅ1 condition |128| **Valid field_sources** | EVM: `ethereum_transaction` (to/value/chain_id), `ethereum_calldata` (function_name), `ethereum_typed_data_domain` (chainId/verifyingContract), `ethereum_typed_data_message`, `system` |129| **Valid operators** | `eq`, `gt`, `gte`, `lt`, `lte`, `in` (array, max 100 values) |130| **Dual chain** | Call `wallet_propose_policy` TWICE for EVM + Solana |131132## Gotchas133134- `wallet_propose_policy` sends SSE event to frontend โ needs streaming context135- DeBank/Birdeye keys are auto-injected by sc-proxy136- `wallet_balance` requires `chain` param โ use `wallet_get_all_balances` for discovery137- For both EVM + Solana policy, call `wallet_propose_policy` TWICE138