Install
openclaw skills install raphael-solanaManage Solana and Polygon wallets, run Polymarket weather arbitrage, post to X/Twitter, and execute Raydium swaps — all from natural language.
openclaw skills install raphael-solanaSource code: https://github.com/inspi-writer001/raphael-solana
All code executed by this skill lives in that public repository. Review it before providing credentials or enabling live trading.
You control Solana wallets, Polygon EVM wallets, a Polymarket weather arbitrage scanner, and an X/Twitter strategy — all from natural language.
This skill is self-contained. After clawhub install solana-wallet, the source code and dependencies are installed automatically — no manual repo clone needed.
Add your credentials to ~/.openclaw/.env (see Environment Variables below).
node --experimental-transform-types {baseDir}/bin/solana-wallet.ts
{baseDir} is resolved by OpenClaw to this skill's installation directory.ExperimentalWarning, bigint deprecation, punycode. Disregard them in output parsing.These 13 tools are registered by src/plugin.ts, bundled in this skill package at {baseDir}/src/plugin.ts. OpenClaw loads them automatically when the skill is activated.
| Tool | When to use |
|---|---|
create_evm_wallet | User wants to create a Polygon wallet for Polymarket |
list_evm_wallets | User asks what EVM wallets exist |
check_usdc_balance | User wants to verify USDC arrived on Polygon |
start_weather_arb | User wants to start the weather arb scanner |
stop_weather_arb | User wants to stop the weather arb scanner |
get_strategy_status | User asks about scanner status, city readings, edges, X tweet count |
| Tool | When to use |
|---|---|
x_post_tweet | User wants to post a tweet |
x_reply | User wants to reply to a specific tweet |
x_search | User wants to search recent tweets (requires Basic+ X tier) |
x_get_mentions | User wants to see recent mentions of the bot |
x_resolve_user | User wants to look up a Twitter user by @handle |
start_x_strategy | User wants to start mention monitoring / keyword feed / trade posting |
stop_x_strategy | User wants to stop the X strategy |
The CLI prefix for ALL commands below is:
node --experimental-transform-types {baseDir}/bin/solana-wallet.ts
| User says | Command |
|---|---|
| Check Solana balance | <prefix> balance <wallet-name> |
| Create Solana wallet | <prefix> wallet create <name> [--network devnet|mainnet-beta] |
| List Solana wallets | <prefix> wallet list |
| Transfer SOL | <prefix> transfer sol <wallet> <to-address> <amount> |
| Transfer SPL token | <prefix> transfer spl <wallet> <to-address> <mint> <amount> |
| Transfer MATIC | <prefix> transfer matic <wallet> <to-address> <amount> |
| Transfer ERC-20 (USDC etc.) | <prefix> transfer erc20 <wallet> <to-address> <token-address> <amount> |
| Swap tokens | <prefix> swap <wallet> SOL <output-mint> <amount> |
| Find pump.fun plays | <prefix> find-pairs |
| User says | Command |
|---|---|
| Create Polygon wallet | <prefix> evm-wallet create <name> |
| List Polygon wallets | <prefix> evm-wallet list |
| Check MATIC / ERC-20 balance | <prefix> evm-wallet balance <name> [--token <address>] |
| User says | Command |
|---|---|
| Post a tweet | <prefix> x tweet <text> |
| Reply to a tweet | <prefix> x reply <tweet-id> <text> |
| Search tweets | <prefix> x search <query> [--max 10] |
| Check mentions | <prefix> x mentions [--since <tweet-id>] |
| Look up a user | <prefix> x resolve <handle> |
| Start X strategy | See full command below |
Start X strategy (full command):
node --experimental-transform-types {baseDir}/bin/solana-wallet.ts scanner start x \
--handle <bot-handle> \
[--keywords "pump.fun,graduation"] \
[--post-trade-updates] \
[--auto-reply] \
[--max-tweets-per-hour 2] \
[--interval 60] \
[--dry-run]
| User says | Command |
|---|---|
| Start weather arb | See full command below |
| Stop scanner | node --experimental-transform-types {baseDir}/bin/solana-wallet.ts scanner stop |
| Check scanner status | node --experimental-transform-types {baseDir}/bin/solana-wallet.ts scanner status |
Start weather arb (full command):
node --experimental-transform-types {baseDir}/bin/solana-wallet.ts scanner start polymarket-weather <evm-wallet-name> \
--amount <usdc-per-trade> \
[--cities nyc,london,seoul,chicago,dallas,miami,paris,toronto,seattle] \
[--max-position <usdc>] \
[--min-edge 0.20] \
[--min-fair-value 0.40] \
[--interval <seconds>] \
[--dry-run]
create_evm_wallet or CLI: evm-wallet create polymarket1)<address>"check_usdc_balance { wallet_name: "polymarket1" }start_weather_arb { wallet_name: "polymarket1", trade_amount_usdc: 5, dry_run: true }get_strategy_statusstart_weather_arb { ..., dry_run: false }X_API_KEY, X_API_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, X_BEARER_TOKENstart_x_strategy { handle: "mybot", dry_run: true, post_trade_updates: true }get_strategy_status — shows tweets sent this hour| Key | City |
|---|---|
nyc | New York City |
london | London |
seoul | Seoul |
chicago | Chicago |
dallas | Dallas |
miami | Miami |
paris | Paris |
toronto | Toronto |
seattle | Seattle |
This is the complete list of every environment variable the skill reads. It reads no others.
| Variable | What it is | Used by |
|---|---|---|
MASTER_ENCRYPTION_PASSWORD_CRYPTO | Your chosen password — held in memory only, never written to disk | Wallet decryption |
MASTER_ENCRYPTED | AES-256-GCM encrypted master key blob (generated by pnpm setup) | Wallet decryption |
MASTER_SALT | PBKDF2 salt for key derivation (generated by pnpm setup) | Wallet decryption |
| Variable | Default | What it is | Used by |
|---|---|---|---|
SOLANA_RPC_URL | https://api.devnet.solana.com | Solana JSON-RPC endpoint | Balances, transfers, swaps |
RAPHAEL_DATA_DIR | ~/.raphael | Directory for encrypted wallet files and scanner state | Wallet store, PID files |
WALLET_STORE_PATH | $RAPHAEL_DATA_DIR/wallets.json | Path to encrypted Solana wallet JSON | Wallet store |
PUMPPORTAL_WS | wss://pumpportal.fun/api/data | pump.fun WebSocket (public, no key needed) | pump.fun scanner |
X_API_KEY | — | OAuth 1.0a consumer key | X writes (tweets, replies) |
X_API_SECRET | — | OAuth 1.0a consumer secret | X writes |
X_ACCESS_TOKEN | — | OAuth 1.0a user access token | X writes |
X_ACCESS_TOKEN_SECRET | — | OAuth 1.0a user access token secret | X writes |
X_BEARER_TOKEN | — | OAuth 2.0 app-only bearer token | X reads (search, timelines) |
X features are fully optional — the skill operates without any X_* vars. Obtain them from developer.x.com → Projects & Apps → Keys and Tokens with Read and Write permissions.
Private keys are never stored in plaintext. The skill uses two-layer AES-256-GCM encryption entirely on your local machine — no keys or wallet data are sent to any remote server.
MASTER_ENCRYPTION_PASSWORD_CRYPTO (your password, memory only)
↓ PBKDF2 — 100,000 iterations, SHA-256
MASTER_ENCRYPTED + MASTER_SALT (encrypted blob — useless without the password)
↓ AES-256-GCM decrypt → master key
wallet private key (AES-256-GCM, per-wallet salt → ~/.raphael/)
MASTER_ENCRYPTED and MASTER_SALT are outputs of pnpm setup — they are specific to your password and machine. Sharing them without the password reveals nothing.
--dry-run / dry_run: true for first-time scanner and X strategy startssolana airdrop 2 <address> --url devnet