Sponge Wallet
Flagged@rishabluthra
{"isSafe":false,"isSuspicious":true,"riskLevel":"high","findings":[{"category":"prompt_injection","severity":"high","description":"The toolkit exposes high-impact financial operations (evm_transfer, solana_transfer, withdraw_to_main_wallet, request_funding) that can be invoked via wallet.mjs with JSON arguments. In a setup where an AI agent or user prompt can influence the tool invocation, this creates a risk of prompt-injection abuse leading to unauthorized transfers or fund movements.","evidence":"Tools include evm_transfer, solana_transfer, withdraw_to_main_wallet, and request_funding in the Wallet & Balance, Transfers, and Funding/Withdrawals sections."},{"category":"data_exfiltration","severity":"medium","description":"Paid API workflows (Sponge x402) include tasks like crawl and parse that fetch external URLs and documents. Depending on implementation, this could cause user data or documents to be sent to external services. Explicit data handling/consent controls are not described.","evidence":"Sponge Paid APIs show tasks such as {\"task\":\"crawl\",\"url\":\"https://example.com\"} and {\"task\":\"parse\",\"document_url\":\"https://example.com/doc.pdf\"}."},{"category":"data_exfiltration","severity":"medium","description":"Credentials are stored to ~/.spongewallet/credentials.json automatically. If these credentials are plaintext or not adequately protected, they risk local leakage or exposure on a compromised host. Consider secure storage (OS keychain, encrypted vault) and strict file permissions.","evidence":"Credentials are saved to ~/.spongewallet/credentials.json automatically."},{"category":"system_harm","severity":"high","description":"Direct on-chain operations (transfers, withdrawals) are available as tools. If an attacker or a misbehaving prompt gains control, funds could be moved without proper safeguards. Requires strong authentication, auditing, and possibly confirmation prompts or a read-only mode.","evidence":"Wallet tools include evm_transfer, solana_transfer, withdraw_to_main_wallet, and get_transaction_status; misused could move funds."},{"category":"suspicious_url","severity":"low","description":"Examples include placeholder domains (https://example.com) for crawl/parse tasks. Not inherently harmful, but these placeholders should be replaced with explicit, trusted endpoints in production to avoid confusion or leakage.","evidence":"Occurrences of https://example.com in the Paid APIs workflow."}],"summary":"Overall, the content primarily defines a feature-rich crypto-wallet skill with legitimate capabilities. However, it introduces high-risk elements (transfer/withdraw operations) that could be abused via prompt injection, and it involves external API calls and credential storage that warrant stronger safeguards. Recommendations include: strict input validation and permissioning for transfer-related tools, hardened authentication and approval workflows, audit logging, read-only or sandbox modes by default, secure credential storage (e.g., OS keychain, encrypted vault with restricted permissions), and explicit user consent for any data exfiltration or external API interactions."}
npx machina-cli add skill @rishabluthra/sponge-wallet --openclawSponge Wallet Skill
Multi-chain crypto wallet with transfers, swaps, and paid API access.
Authentication
IMPORTANT: If any tool returns "Not authenticated" or "Invalid API key", run the login flow.
Login is two-phase (because Claude Code runs commands non-interactively):
Phase 1 — Start the device flow (returns a URL and code as JSON):
node <skill-path>/scripts/wallet.mjs login
Show the verification_url and user_code to the user. Tell them to open the URL in their browser and enter the code.
Phase 2 — After the user confirms they have approved, poll for the token:
node <skill-path>/scripts/wallet.mjs login --poll <device_code> <interval> <expires_in>
Use the device_code, interval, and expires_in values from Phase 1 output.
Credentials are saved to ~/.spongewallet/credentials.json automatically.
Credential resolution order:
SPONGE_API_KEYenvironment variable (if set, skips stored credentials)~/.spongewallet/credentials.json(saved by login)
Other auth commands:
node wallet.mjs whoami— show current auth statusnode wallet.mjs logout— remove stored credentials
How to Execute
node <skill-path>/scripts/wallet.mjs <tool_name> '<json_args>'
Output is JSON with status: "success" or status: "error".
Available Tools
Wallet & Balance
| Tool | Description | Required | Optional |
|---|---|---|---|
get_balance | Check balances across chains | — | chain |
get_solana_tokens | Discover all SPL tokens in wallet | chain | — |
search_solana_tokens | Search Jupiter token database | query | limit |
Transfers
| Tool | Description | Required | Optional |
|---|---|---|---|
evm_transfer | Transfer ETH/USDC on Ethereum/Base | chain, to, amount, currency | — |
solana_transfer | Transfer SOL/USDC on Solana | chain, to, amount, currency | — |
Swaps
| Tool | Description | Required | Optional |
|---|---|---|---|
solana_swap | Swap tokens via Jupiter | chain, input_token, output_token, amount | slippage_bps |
Transactions
| Tool | Description | Required | Optional |
|---|---|---|---|
get_transaction_status | Check tx status | transaction_hash, chain | — |
get_transaction_history | View past transactions | — | limit, chain |
Funding & Withdrawals
| Tool | Description | Required | Optional |
|---|---|---|---|
request_funding | Request funds from owner | amount, chain, currency | — |
withdraw_to_main_wallet | Return funds to owner | chain, amount | currency |
Paid APIs (Sponge x402)
| Tool | Description | Required | Optional |
|---|---|---|---|
sponge | Unified paid API interface | task | See REFERENCE.md |
create_x402_payment | Create x402 payment payload | chain, to, amount | token, decimals |
Chain Reference
Test keys (sponge_test_*): sepolia, base-sepolia, solana-devnet, tempo
Live keys (sponge_live_*): ethereum, base, solana
Common Workflows
Check Balance → Transfer → Verify
node wallet.mjs get_balance '{"chain":"base"}'
node wallet.mjs evm_transfer '{"chain":"base","to":"0x...","amount":"10","currency":"USDC"}'
node wallet.mjs get_transaction_status '{"transaction_hash":"0x...","chain":"base"}'
Swap Tokens on Solana
node wallet.mjs search_solana_tokens '{"query":"BONK"}'
node wallet.mjs solana_swap '{"chain":"solana","input_token":"SOL","output_token":"BONK","amount":"0.5"}'
Sponge Paid APIs
node wallet.mjs sponge '{"task":"search","query":"AI research papers"}'
node wallet.mjs sponge '{"task":"image","prompt":"sunset over mountains"}'
node wallet.mjs sponge '{"task":"predict","semantic_search":"will-trump-win-2028"}'
node wallet.mjs sponge '{"task":"crawl","url":"https://example.com"}'
node wallet.mjs sponge '{"task":"parse","document_url":"https://example.com/doc.pdf"}'
node wallet.mjs sponge '{"task":"prospect","apollo_query":"Stripe","apollo_endpoint":"companies"}'
Error Handling
| Error | Resolution |
|---|---|
Not authenticated | Run node wallet.mjs login |
Invalid API key | Run node wallet.mjs login to re-authenticate |
Chain 'X' is not allowed | Use correct key type (test vs live) for the chain |
Insufficient balance | Use request_funding |
Address not in allowlist | Add recipient in the dashboard |
See REFERENCE.md for detailed parameter docs.
Overview
Sponge Wallet is a multi-chain crypto wallet that supports transferring tokens, swapping on DEXes, and checking balances across chains. It also provides access to paid APIs via x402 micropayments, including search, image generation, web scraping, and more, secured by a two-phase login flow.
How This Skill Works
Actions are performed by running node <skill-path>/scripts/wallet.mjs with a specific tool and JSON arguments. Authentication uses a two-phase device flow to obtain a token, which is stored at ~/.spongewallet/credentials.json unless SPONGE_API_KEY is provided to bypass stored credentials. The toolkit exposes tools for balance, transfers, swaps, transactions, funding, and paid APIs (sponge, create_x402_payment) and always returns a JSON object with status.
When to Use It
- You need to check balances across one or more chains before making a transfer or swap.
- You want to transfer ETH/USDC on Ethereum/Base or SOL/USDC on Solana to another address.
- You need to swap tokens on a DEX (e.g., Solana via Jupiter) as part of a workflow.
- You require paid API services (search, image generation, web scraping, etc.) and must pay via x402 micropayments.
- You want to verify a transaction status or review transaction history after sending funds.
Quick Start
- Step 1: Run node <skill-path>/scripts/wallet.mjs whoami to ensure you are authenticated.
- Step 2: Use a tool like get_balance or evm_transfer with properly scoped JSON arguments.
- Step 3: For paid APIs, create an x402 payment with create_x402_payment or invoke sponge for the task.
Best Practices
- Authenticate first using the two-phase device flow and verify status with whoami before performing actions.
- Always specify the exact chain and token/currency in transfers to avoid cross-chain mistakes.
- Check balances with get_balance prior to transfers or swaps to prevent failures.
- After sending funds, promptly check status with get_transaction_status to confirm success.
- When using paid APIs, create and manage x402 payments (via sponge or create_x402_payment) and monitor outcomes.
Example Use Cases
- node wallet.mjs get_balance '{"chain":"base"}'
- node wallet.mjs evm_transfer '{"chain":"base","to":"0x...","amount":"10","currency":"USDC"}'
- node wallet.mjs solana_swap '{"chain":"solana","input_token":"SOL","output_token":"USDC","amount":"5"}'
- node wallet.mjs get_transaction_status '{"transaction_hash":"0x...","chain":"base"}'
- node wallet.mjs sponge '{"task":"image-gen","prompt":"sunset over mountains"}'