{
  "schemaVersion": "1.0",
  "item": {
    "slug": "gank-solana-bundler",
    "name": "solana-bundler-sniper-volume-bot",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/pissdart/gank-solana-bundler",
    "canonicalUrl": "https://clawhub.ai/pissdart/gank-solana-bundler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/gank-solana-bundler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=gank-solana-bundler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "examples.md",
      "README.md",
      "skill.json",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/gank-solana-bundler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/gank-solana-bundler",
    "agentPageUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "gank — solana trading terminal for agents",
        "body": "gank is a multi-wallet solana trading terminal. launch tokens on pump.fun, run swarm buys, volume bots, copy trades, manage wallets. we literally have the most toxic platform atm and now your agents can take full advantage of it lol.\n\nbase url: https://gank.dev/api/v2\n\nauth: Authorization: Bearer <GANK_API_KEY>\n\nget your key at gank.dev > settings > api keys. keys start with pb_.\n\nerrors always come back as { \"success\": false, \"error\": \"...\" }."
      },
      {
        "title": "wallet types",
        "body": "gank uses typed wallets. each type is locked to its module — don't mix them up.\n\ntypewhat it's fordevlaunching tokens (pump.fun creator wallet)regularbuying/selling, transfersbundlebundle buys at launchsnipesniping new launchesswarmcoordinated multi-wallet buysvolumevolume botpugprivacy protocol — clean funds via bnb/eth swap"
      },
      {
        "title": "wallets",
        "body": "list your wallets\n\nGET /wallets/user\n\nreturns everything grouped by type.\n\n{\n  \"dev\": [{ \"id\": 1, \"wallet_address\": \"...\", \"label\": \"main dev\" }],\n  \"regular\": [...],\n  \"swarm\": [...],\n  \"volume\": [...]\n}\n\nwallet balance\n\nGET /wallets/{id}/balance\n\nbatch balances\n\nPOST /wallets/balances\n{ \"addresses\": [\"addr1...\", \"addr2...\"] }\n\npositions (all token holdings)\n\nGET /user/positions\n\nsearch tokens\n\nGET /search?q=pepe&limit=10"
      },
      {
        "title": "launching a token",
        "body": "three steps: reserve mint → upload image → launch.\n\n1. reserve a vanity mint (optional but worth it)\n\nPOST /launch/reserve-mint\n\ngives you a ...pump address upfront. the keypair field is the mint keypair (token contract address keypair, not a wallet private key), pass it straight to /launch as reserved_mint_keypair. don't store it beyond that.\n\n{ \"success\": true, \"address\": \"AbcD...pump\", \"keypair\": \"base58...\" }\n\n2. upload image + metadata to ipfs\n\nPOST /ipfs/upload\nContent-Type: multipart/form-data\n\nfields: file, name, symbol, description, twitter, telegram, website\n\n{ \"success\": true, \"metadata_uri\": \"https://ipfs.io/ipfs/Qm...\" }\n\n3. launch\n\nPOST /launch\n\n{\n  \"token_name\": \"my token\",\n  \"token_ticker\": \"MTK\",\n  \"metadata_uri\": \"https://ipfs.io/ipfs/Qm...\",\n  \"dev_wallet_address\": \"DevWallet...\",\n  \"dev_buy_sol\": 0.5,\n  \"jito_tip\": 0.0003,\n  \"reserved_mint_keypair\": \"base58_from_step1\",\n  \"regular_wallets\": [\n    { \"wallet_address\": \"Wallet1...\", \"amount\": 0.1 },\n    { \"wallet_address\": \"Wallet2...\", \"amount\": 0.2 }\n  ],\n  \"bundle_groups\": [\n    {\n      \"block_target\": 1,\n      \"wallets\": [{ \"wallet_address\": \"BundleWallet1...\", \"amount\": 0.05 }]\n    }\n  ],\n  \"sniper_wallets\": [\n    { \"wallet_address\": \"SnipeWallet1...\", \"amount\": 0.1, \"block_target\": 2 }\n  ]\n}\n\n{ \"success\": true, \"launch_id\": \"uuid\", \"token_mint\": \"...\", \"tx_signature\": \"...\" }\n\ncheck launch status\n\nGET /launch/{launch_id}\n\nlaunch history\n\nGET /launch/history?limit=20\n\nsave a launch config/preset\n\nPUT /launch/configs\n{ \"name\": \"my template\", \"config\": { ...launch_params... } }"
      },
      {
        "title": "buy & sell",
        "body": "buy\n\nPOST /phases/regular/buy\n\n{\n  \"wallet_address\": \"RegularWallet...\",\n  \"token_mint\": \"TokenMint...\",\n  \"amount_sol\": 0.1,\n  \"slippage_bps\": 500\n}\n\nsell\n\nPOST /phases/regular/sell\n\n{\n  \"wallet_address\": \"RegularWallet...\",\n  \"token_mint\": \"TokenMint...\",\n  \"sell_percentage\": 100,\n  \"slippage_bps\": 500\n}"
      },
      {
        "title": "swarm",
        "body": "swarm = hit a token from multiple wallets at the same time. useful for coordinated entries.\n\nswarm buy\n\nPOST /phases/swarm/buy\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallets\": [\n    { \"wallet_address\": \"SwarmWallet1...\", \"amount_sol\": 0.05 },\n    { \"wallet_address\": \"SwarmWallet2...\", \"amount_sol\": 0.1 }\n  ],\n  \"slippage_bps\": 500\n}\n\nswarm sell\n\nPOST /phases/swarm/sell\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallets\": [\"SwarmWallet1...\", \"SwarmWallet2...\"],\n  \"sell_percentage\": 100,\n  \"slippage_bps\": 500\n}\n\nconsolidate sol back to one wallet\n\nPOST /phases/swarm/consolidate\n{ \"source_wallets\": [\"...\"], \"destination_wallet\": \"MainWallet...\" }\n\nrecover (emergency drain — sells everything, sweeps sol)\n\nPOST /phases/swarm/recover\n{ \"source_wallets\": [\"...\"], \"destination_wallet\": \"MainWallet...\" }"
      },
      {
        "title": "volume bot",
        "body": "start\n\nPOST /phases/volume/start\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallet_addresses\": [\"VolumeWallet1...\", \"VolumeWallet2...\"],\n  \"sol_per_trade\": 0.001,\n  \"duration_minutes\": 60,\n  \"intensity\": \"medium\"\n}\n\nintensity: \"low\" | \"medium\" | \"high\"\n\nreturns { \"success\": true, \"session_id\": \"uuid\" }\n\nstop\n\nPOST /phases/volume/stop\n{ \"session_id\": \"uuid\" }"
      },
      {
        "title": "wallet ops",
        "body": "transfer sol\n\nPOST /wallets/transfer\n{ \"from_wallet\": \"...\", \"to_wallet\": \"...\", \"amount_sol\": 1.0 }\n\nsplit sol (1 → many, max 50 targets)\n\nPOST /wallets/split\n{\n  \"source_wallet\": \"...\",\n  \"targets\": [\n    { \"address\": \"Wallet1...\", \"amount_sol\": 0.1 },\n    { \"address\": \"Wallet2...\", \"amount_sol\": 0.2 }\n  ]\n}\n\nvamp all (drain wallets — sells tokens, closes accounts, sweeps sol)\n\nPOST /wallets/vamp-all\n{ \"source_wallets\": [\"Wallet1...\", \"Wallet2...\"], \"destination_wallet\": \"MainWallet...\" }\n\nclean funds (privacy swap — sol→bnb→sol or sol→eth→sol, ~5 min)\n\ntwo routes available: bnb (BSC, default) or eth (Arbitrum). source and destination must match 1:1 — use fresh destination wallets.\n\nget a quote first:\n\nPOST /wallets/clean-funds/quote\n{ \"amount_sol\": 1.0, \"route\": \"bnb\" }\n\ninitiate:\n\nPOST /wallets/clean-funds\n{ \"source_wallets\": [\"Wallet1...\"], \"destination_wallets\": [\"FreshWallet1...\"], \"route\": \"bnb\" }\n\nroute: \"bnb\" (default) | \"eth\" — xmr is not available.\n\ncheck status:\n\nGET /wallets/clean-funds/status"
      },
      {
        "title": "sniping at launch",
        "body": "sniping is only available at launch time via sniper_wallets in the /launch payload — see the launch section above. standalone auto-snipe is not available."
      },
      {
        "title": "market data",
        "body": "token info (price, mcap, volume, holders, bonding curve %)\n\nGET /token/{mint}\n\nohlcv chart\n\nGET /market/chart/{mint}?limit=500&timeframe=5\n\ntimeframe is in minutes.\n\nholders\n\nGET /market/holders/{mint}?limit=20\n\nrecent trades\n\nGET /market/trades/{mint}?limit=30"
      },
      {
        "title": "referrals & stats",
        "body": "your stats (points, level, exp, trades, volume)\n\nGET /auth/user-stats\n\nreferral stats (tier, l1/l2/l3 counts, earnings, claimable sol)\n\nGET /user/referrals\n\nclaim earnings (pays to your payout wallet)\n\nPOST /user/referrals/claim\n\nleaderboard\n\nGET /user/leaderboard/points?limit=50\nGET /user/leaderboard/referrals?limit=50"
      },
      {
        "title": "fee preferences",
        "body": "GET /fees/preferences\nPOST /fees/preferences\n\n{\n  \"fee_mode\": \"manual\",\n  \"priority_fee_max_sol\": 0.001,\n  \"jito_tip_max_sol\": 0.0005\n}\n\nfee_mode: \"auto\" | \"manual\""
      },
      {
        "title": "how to use this",
        "body": "launching a token:\n\nreserve mint → upload image to ipfs → POST /launch → poll GET /launch/{id}\n\ncoordinated buy:\n\ncheck balances → POST /phases/swarm/buy → GET /user/positions\n\nrecovering funds:\n\nPOST /wallets/vamp-all  (sells everything + sweeps sol)\nor\nPOST /wallets/clean-funds  (privacy swap via bnb/eth, ~5 min)"
      },
      {
        "title": "notes",
        "body": "api keys start with pb_ — don't log them, don't put them in prompts\nwallet private keys are encrypted server-side, the api never gives them back\nreserve-mint returns a mint keypair (the token's contract address keypair, not a wallet key), pass it to /launch as reserved_mint_keypair and discard after use\nsol amounts are in sol, not lamports\nslippage is in basis points — 500 = 5%\nsniping only works at launch time via sniper_wallets in /launch — no standalone auto-snipe\nclean funds routes: bnb (BSC) or eth (Arbitrum) — xmr is disabled\nthe platform fee wallet is protected, you can't accidentally send to it"
      },
      {
        "title": "config",
        "body": "~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"gank\": {\n        \"enabled\": true,\n        \"apiKey\": \"pb_your_key_here\"\n      }\n    }\n  }\n}\n\nor just set GANK_API_KEY in env.\n\ngank.dev · dm @pissdart on x or tg if something's broken"
      }
    ],
    "body": "gank — solana trading terminal for agents\n\ngank is a multi-wallet solana trading terminal. launch tokens on pump.fun, run swarm buys, volume bots, copy trades, manage wallets. we literally have the most toxic platform atm and now your agents can take full advantage of it lol.\n\nbase url: https://gank.dev/api/v2\n\nauth: Authorization: Bearer <GANK_API_KEY>\n\nget your key at gank.dev > settings > api keys. keys start with pb_.\n\nerrors always come back as { \"success\": false, \"error\": \"...\" }.\n\nwallet types\n\ngank uses typed wallets. each type is locked to its module — don't mix them up.\n\ntype\twhat it's for\ndev\tlaunching tokens (pump.fun creator wallet)\nregular\tbuying/selling, transfers\nbundle\tbundle buys at launch\nsnipe\tsniping new launches\nswarm\tcoordinated multi-wallet buys\nvolume\tvolume bot\npug\tprivacy protocol — clean funds via bnb/eth swap\nwallets\n\nlist your wallets\n\nGET /wallets/user\n\n\nreturns everything grouped by type.\n\n{\n  \"dev\": [{ \"id\": 1, \"wallet_address\": \"...\", \"label\": \"main dev\" }],\n  \"regular\": [...],\n  \"swarm\": [...],\n  \"volume\": [...]\n}\n\n\nwallet balance\n\nGET /wallets/{id}/balance\n\n\nbatch balances\n\nPOST /wallets/balances\n{ \"addresses\": [\"addr1...\", \"addr2...\"] }\n\n\npositions (all token holdings)\n\nGET /user/positions\n\n\nsearch tokens\n\nGET /search?q=pepe&limit=10\n\nlaunching a token\n\nthree steps: reserve mint → upload image → launch.\n\n1. reserve a vanity mint (optional but worth it)\n\nPOST /launch/reserve-mint\n\n\ngives you a ...pump address upfront. the keypair field is the mint keypair (token contract address keypair, not a wallet private key), pass it straight to /launch as reserved_mint_keypair. don't store it beyond that.\n\n{ \"success\": true, \"address\": \"AbcD...pump\", \"keypair\": \"base58...\" }\n\n\n2. upload image + metadata to ipfs\n\nPOST /ipfs/upload\nContent-Type: multipart/form-data\n\n\nfields: file, name, symbol, description, twitter, telegram, website\n\n{ \"success\": true, \"metadata_uri\": \"https://ipfs.io/ipfs/Qm...\" }\n\n\n3. launch\n\nPOST /launch\n\n{\n  \"token_name\": \"my token\",\n  \"token_ticker\": \"MTK\",\n  \"metadata_uri\": \"https://ipfs.io/ipfs/Qm...\",\n  \"dev_wallet_address\": \"DevWallet...\",\n  \"dev_buy_sol\": 0.5,\n  \"jito_tip\": 0.0003,\n  \"reserved_mint_keypair\": \"base58_from_step1\",\n  \"regular_wallets\": [\n    { \"wallet_address\": \"Wallet1...\", \"amount\": 0.1 },\n    { \"wallet_address\": \"Wallet2...\", \"amount\": 0.2 }\n  ],\n  \"bundle_groups\": [\n    {\n      \"block_target\": 1,\n      \"wallets\": [{ \"wallet_address\": \"BundleWallet1...\", \"amount\": 0.05 }]\n    }\n  ],\n  \"sniper_wallets\": [\n    { \"wallet_address\": \"SnipeWallet1...\", \"amount\": 0.1, \"block_target\": 2 }\n  ]\n}\n\n{ \"success\": true, \"launch_id\": \"uuid\", \"token_mint\": \"...\", \"tx_signature\": \"...\" }\n\n\ncheck launch status\n\nGET /launch/{launch_id}\n\n\nlaunch history\n\nGET /launch/history?limit=20\n\n\nsave a launch config/preset\n\nPUT /launch/configs\n{ \"name\": \"my template\", \"config\": { ...launch_params... } }\n\nbuy & sell\n\nbuy\n\nPOST /phases/regular/buy\n\n{\n  \"wallet_address\": \"RegularWallet...\",\n  \"token_mint\": \"TokenMint...\",\n  \"amount_sol\": 0.1,\n  \"slippage_bps\": 500\n}\n\n\nsell\n\nPOST /phases/regular/sell\n\n{\n  \"wallet_address\": \"RegularWallet...\",\n  \"token_mint\": \"TokenMint...\",\n  \"sell_percentage\": 100,\n  \"slippage_bps\": 500\n}\n\nswarm\n\nswarm = hit a token from multiple wallets at the same time. useful for coordinated entries.\n\nswarm buy\n\nPOST /phases/swarm/buy\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallets\": [\n    { \"wallet_address\": \"SwarmWallet1...\", \"amount_sol\": 0.05 },\n    { \"wallet_address\": \"SwarmWallet2...\", \"amount_sol\": 0.1 }\n  ],\n  \"slippage_bps\": 500\n}\n\n\nswarm sell\n\nPOST /phases/swarm/sell\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallets\": [\"SwarmWallet1...\", \"SwarmWallet2...\"],\n  \"sell_percentage\": 100,\n  \"slippage_bps\": 500\n}\n\n\nconsolidate sol back to one wallet\n\nPOST /phases/swarm/consolidate\n{ \"source_wallets\": [\"...\"], \"destination_wallet\": \"MainWallet...\" }\n\n\nrecover (emergency drain — sells everything, sweeps sol)\n\nPOST /phases/swarm/recover\n{ \"source_wallets\": [\"...\"], \"destination_wallet\": \"MainWallet...\" }\n\nvolume bot\n\nstart\n\nPOST /phases/volume/start\n\n{\n  \"token_mint\": \"TokenMint...\",\n  \"wallet_addresses\": [\"VolumeWallet1...\", \"VolumeWallet2...\"],\n  \"sol_per_trade\": 0.001,\n  \"duration_minutes\": 60,\n  \"intensity\": \"medium\"\n}\n\n\nintensity: \"low\" | \"medium\" | \"high\"\n\nreturns { \"success\": true, \"session_id\": \"uuid\" }\n\nstop\n\nPOST /phases/volume/stop\n{ \"session_id\": \"uuid\" }\n\nwallet ops\n\ntransfer sol\n\nPOST /wallets/transfer\n{ \"from_wallet\": \"...\", \"to_wallet\": \"...\", \"amount_sol\": 1.0 }\n\n\nsplit sol (1 → many, max 50 targets)\n\nPOST /wallets/split\n{\n  \"source_wallet\": \"...\",\n  \"targets\": [\n    { \"address\": \"Wallet1...\", \"amount_sol\": 0.1 },\n    { \"address\": \"Wallet2...\", \"amount_sol\": 0.2 }\n  ]\n}\n\n\nvamp all (drain wallets — sells tokens, closes accounts, sweeps sol)\n\nPOST /wallets/vamp-all\n{ \"source_wallets\": [\"Wallet1...\", \"Wallet2...\"], \"destination_wallet\": \"MainWallet...\" }\n\n\nclean funds (privacy swap — sol→bnb→sol or sol→eth→sol, ~5 min)\n\ntwo routes available: bnb (BSC, default) or eth (Arbitrum). source and destination must match 1:1 — use fresh destination wallets.\n\nget a quote first:\n\nPOST /wallets/clean-funds/quote\n{ \"amount_sol\": 1.0, \"route\": \"bnb\" }\n\n\ninitiate:\n\nPOST /wallets/clean-funds\n{ \"source_wallets\": [\"Wallet1...\"], \"destination_wallets\": [\"FreshWallet1...\"], \"route\": \"bnb\" }\n\n\nroute: \"bnb\" (default) | \"eth\" — xmr is not available.\n\ncheck status:\n\nGET /wallets/clean-funds/status\n\nsniping at launch\n\nsniping is only available at launch time via sniper_wallets in the /launch payload — see the launch section above. standalone auto-snipe is not available.\n\nmarket data\n\ntoken info (price, mcap, volume, holders, bonding curve %)\n\nGET /token/{mint}\n\n\nohlcv chart\n\nGET /market/chart/{mint}?limit=500&timeframe=5\n\n\ntimeframe is in minutes.\n\nholders\n\nGET /market/holders/{mint}?limit=20\n\n\nrecent trades\n\nGET /market/trades/{mint}?limit=30\n\nreferrals & stats\n\nyour stats (points, level, exp, trades, volume)\n\nGET /auth/user-stats\n\n\nreferral stats (tier, l1/l2/l3 counts, earnings, claimable sol)\n\nGET /user/referrals\n\n\nclaim earnings (pays to your payout wallet)\n\nPOST /user/referrals/claim\n\n\nleaderboard\n\nGET /user/leaderboard/points?limit=50\nGET /user/leaderboard/referrals?limit=50\n\nfee preferences\nGET /fees/preferences\nPOST /fees/preferences\n\n{\n  \"fee_mode\": \"manual\",\n  \"priority_fee_max_sol\": 0.001,\n  \"jito_tip_max_sol\": 0.0005\n}\n\n\nfee_mode: \"auto\" | \"manual\"\n\nhow to use this\n\nlaunching a token:\n\nreserve mint → upload image to ipfs → POST /launch → poll GET /launch/{id}\n\n\ncoordinated buy:\n\ncheck balances → POST /phases/swarm/buy → GET /user/positions\n\n\nrecovering funds:\n\nPOST /wallets/vamp-all  (sells everything + sweeps sol)\nor\nPOST /wallets/clean-funds  (privacy swap via bnb/eth, ~5 min)\n\nnotes\napi keys start with pb_ — don't log them, don't put them in prompts\nwallet private keys are encrypted server-side, the api never gives them back\nreserve-mint returns a mint keypair (the token's contract address keypair, not a wallet key), pass it to /launch as reserved_mint_keypair and discard after use\nsol amounts are in sol, not lamports\nslippage is in basis points — 500 = 5%\nsniping only works at launch time via sniper_wallets in /launch — no standalone auto-snipe\nclean funds routes: bnb (BSC) or eth (Arbitrum) — xmr is disabled\nthe platform fee wallet is protected, you can't accidentally send to it\nconfig\n\n~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"gank\": {\n        \"enabled\": true,\n        \"apiKey\": \"pb_your_key_here\"\n      }\n    }\n  }\n}\n\n\nor just set GANK_API_KEY in env.\n\ngank.dev · dm @pissdart on x or tg if something's broken"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/pissdart/gank-solana-bundler",
    "publisherUrl": "https://clawhub.ai/pissdart/gank-solana-bundler",
    "owner": "pissdart",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/gank-solana-bundler",
    "downloadUrl": "https://openagent3.xyz/downloads/gank-solana-bundler",
    "agentUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gank-solana-bundler/agent.md"
  }
}