with one click
starknet-anonymous-wallet
// Create an anonymous Starknet wallet via Typhoon and interact with Starknet contracts. Privacy-focused wallet creation for agents requiring anonymity.
// Create an anonymous Starknet wallet via Typhoon and interact with Starknet contracts. Privacy-focused wallet creation for agents requiring anonymity.
Routes Starknet agent, wallet, DeFi, identity, SDK, and Cairo contract work to the smallest focused skill module.
SNIP-36 virtual block proving on Starknet. Trigger on "virtual block", "SNIP-36", "off-chain proof", "anonymous vote", "heavy computation off-chain", "prove a transaction". Covers Cairo virtual contract, proof server, starknet.js integration, and on-chain verification.
Security audit of Cairo/Starknet code. Trigger on "audit", "check this contract", "review for security". Modes - default (full repo), deep (+ adversarial reasoning), or specific filenames.
Reference for integrating or maintaining applications built with keep-starknet-strange/starkzap, including StarkSDK setup, onboarding, wallet lifecycle, sponsored transactions, ERC20 flows, staking, and transaction builder usage.
Simple P2P payments on Starknet. Generate QR codes, payment links, invoices, and transfer ETH/STRK/USDC. Like Lightning, but native.
Reference for building Starknet applications using starknet.js v9.x SDK, including contract interaction, account management, transaction handling, fee estimation, wallet integration, and paymaster flows.
| name | starknet-anonymous-wallet |
| description | Create an anonymous Starknet wallet via Typhoon and interact with Starknet contracts. Privacy-focused wallet creation for agents requiring anonymity. |
| license | Apache-2.0 |
| metadata | {"author":"starknet-agentic","version":"1.0.0","org":"keep-starknet-strange"} |
| keywords | ["starknet","wallet","anonymous","transfer","balance","anonymous-agent-wallet","strk","eth","privacy","typhoon"] |
| allowed-tools | ["Bash","Read","Write","Glob","Grep","Task"] |
| user-invocable | true |
This skill provides agent-facing scripts for:
references/ (ABI discovery, Typhoon account flow, preflight/fee simulation notes)scripts/create-account.js, scripts/parse-smart.js, scripts/resolve-smart.jsscripts/read-smart.js, scripts/invoke-contract.js, scripts/avnu-swap.jsscripts/read-smart.js (call ERC20 allowance(owner, spender))npm install starknet@^8.9.1 typhoon-sdk@^1.1.13 @andersmyrmel/vard@^1.2.0 @avnu/avnu-sdk compromise@^14.14.5 ws@^8.19.0
These scripts talk to Starknet via JSON-RPC. Configure one of:
STARKNET_RPC_URL in your environment (recommended), ORrpcUrl in the JSON input for scripts that support it.If neither is provided, scripts fall back to the public Lava mainnet RPC:
https://rpc.starknet.lava.build:443import { RpcProvider, Account, Contract } from 'starknet';
const provider = new RpcProvider({
nodeUrl: process.env.STARKNET_RPC_URL || 'https://rpc.starknet.lava.build:443'
});
// signer can be a private key string or Starknet Signer instance
const account = new Account({
provider,
address: process.env.ACCOUNT_ADDRESS,
signer: process.env.PRIVATE_KEY
});
const contract = new Contract({
abi,
address: contractAddress,
providerOrAccount: account
});
// read
const balance = await contract.call('balance_of', [account.address]);
// write (sign -> send -> wait)
const tx = await contract.invoke('transfer', [to, amount], { waitForTransaction: false });
const receipt = await provider.waitForTransaction(tx.transaction_hash);
Common calls:
provider.getBlock('latest')provider.callContract({ contractAddress, entrypoint, calldata })provider.getClassAt(contractAddress)RPC_UNAVAILABLE → Verify STARKNET_RPC_URL, check network reachability, retry with backoff.INVALID_ADDRESS → Validate 0x... address format and expected network/account.INSUFFICIENT_FUNDS → Check STRK/token balances before write calls; reduce amount or top up.CONTRACT_CALL_FAILURE → Run read/simulate first, log contract/method/calldata, retry only for transient RPC errors.EXEC:node scripts/parse-smart.js '{"prompt":"STRING"}'
OUT (success):
{
"success": true,
"security": {"safe": true},
"tokens": ["ETH","STRK"],
"tokenMap": {"STRK":{"address":"0x...","decimals":18}},
"protocols": ["Ekubo","AVNU"],
"abis": {"Ekubo":["swap"],"AVNU":["swap"]},
"addresses": {"Ekubo":"0x...","AVNU":"0x01"}
}
OUT (no account):
{
"success": true,
"canProceed": false,
"needsAccount": true,
"operationType": "NO_ACCOUNT",
"noAccountGuide": {"steps": [...]},
"nextStep": "CREATE_ACCOUNT_REQUIRED"
}
OUT (account creation intent):
{
"success": true,
"canProceed": false,
"operationType": "CREATE_ACCOUNT_INTENT",
"hasAccount": true|false,
"noAccountGuide": {"steps": [...]},
"nextStep": "ACCOUNT_ALREADY_EXISTS|CREATE_ACCOUNT_REQUIRED"
}
LLM builds:
{
"parsed": {
"operations": [{"action":"swap","protocol":"AVNU","tokenIn":"ETH","tokenOut":"STRK","amount":10}],
"operationType": "WRITE|READ|EVENT_WATCH|CONDITIONAL",
"tokenMap": {...},
"abis": {...},
"addresses": {...}
}
}
EXEC:node scripts/resolve-smart.js '{"parsed":{...}}'
OUT (authorization required):
{
"canProceed": true,
"nextStep": "USER_AUTHORIZATION",
"authorizationDetails": {"prompt":"Authorize? (yes/no)"},
"executionPlan": {"requiresAuthorization": true}
}
RULE:
nextStep == "USER_AUTHORIZATION", ask the user for explicit confirmation.AVNU SDK sequence for WRITE/CONDITIONAL (boilerplate):
RpcProvider + Account).Typical AVNU SDK calls in this skill:
fetchTokens(...)getQuotes(...)executeSwap(...){
"watchers": [{
"action": "swap",
"protocol": "AVNU",
"tokenIn": "STRK",
"tokenOut": "ETH",
"amount": 10,
"condition": {
"eventName": "Swapped",
"protocol": "Ekubo",
"timeConstraint": {"amount":5,"unit":"minutes"}
}
}]
}
TimeConstraint → creates cron job with TTL auto-cleanup.