A production-oriented CLI for generating on-chain trading volume on the Pons v2 bonding curve on Robinhood Chain. The bot coordinates multiple funded wallets through automated buy-and-sell cycles, with configurable sizing, timing, budget controls, and graduation safeguards.
This software is developed and maintained by CoolBB Agency — a multidisciplinary development studio focused on Web3 infrastructure, trading automation, and token launch tooling.
| Author | CoolBB Agency |
| Website | https://coolbb.site |
| Chain | Robinhood Chain (EVM, chain ID 4663) |
| Protocol | pons v2 bonding curve |
| Runtime | Node.js 18+, TypeScript, viem |
Tokens launched through Pons v2 trade on a constant-product bonding curve before graduating into a permanently locked Uniswap v4 pool. While a launch remains in phase 0 (NotGraduated), all swaps are executed directly against the curve contract — not through a DEX router.
This bot is purpose-built for that pre-graduation window. It:
- Resolves your token's curve address and launch metadata from the Pons v2 factory.
- Distributes activity across a pool of wallets using round-robin selection.
- Executes a buy → delay → sell cycle on each eligible wallet.
- Tracks cumulative volume, fees, and spend against operator-defined limits.
- Halts automatically when safety thresholds are reached or on graceful shutdown.
The quoting engine replicates Pons v2's on-chain pricing logic off-chain (constant-product math with directional fee application), so trade parameters are computed before submission and slippage bounds are applied at execution time.
- Multi-wallet orchestration — Round-robin wallet rotation with per-wallet balance eligibility checks.
- Pons v2 curve integration — Direct
buy()/sell()calls against the bonding curve contract. - Accurate off-chain quoting — Constant-product pricing with protocol fees, creator tax, and snipe-tax handling per Pons v2 documentation.
- Native and ERC-20 quote support — Handles ETH-native launches and custom-pair (e.g. WETH) launches with automatic approval flows.
- Configurable trade randomization — Random trade sizes and inter-trade delays within operator-defined ranges.
- Safety guards — Graduation progress cap, total spend budget, max cycle count, and minimum wallet balance thresholds.
- Dry-run mode — Full cycle simulation without broadcasting transactions.
- Structured logging — JSON event lines per cycle plus human-readable status and metrics summaries.
- Graceful shutdown —
SIGINT/SIGTERMhandling with end-of-run metrics reporting.
┌─────────────┐ ┌──────────────┐ ┌───────────────────┐
│ CLI │────▶│ BotRunner │────▶│ WashVolumeStrategy│
│ (index.ts) │ │ (runner.ts) │ │ (washVolume.ts) │
└─────────────┘ └──────────────┘ └─────────┬─────────┘
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ WalletPool │ │ CurveTrader │ │ QuoteEngine │
│ (pool.ts) │ │ (trade.ts) │ │ (quote.ts) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└────────────────────────────┼────────────────────────────┘
▼
Robinhood Chain RPC (chain 4663)
Pons v2 Factory + Bonding Curve
| Contract | Address |
|---|---|
| Robinhood Chain RPC | https://rpc.mainnet.chain.robinhood.com |
| Chain ID | 4663 |
| Pons v2 Factory | 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e |
| WETH | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
| Block explorer | robinhoodchain.blockscout.com |
The bot only operates when a token is in phase 0 (NotGraduated). All other phases are rejected at startup:
| Phase | Label | Bot behavior |
|---|---|---|
0 |
NotGraduated | Active — trades on bonding curve |
1 |
Swept | Rejected — curve closed, pool pending |
2 |
PoolCreated | Rejected — graduated to Uniswap v4 |
3 |
Rescued | Rejected — recovery path |
Before running the bot, ensure the following:
- Node.js 18 or later installed on the host machine.
- A Pons v2 token that is still on its bonding curve (phase
0, not graduated). - ETH on Robinhood Chain distributed across bot wallets sufficient for trade sizes, gas, and the configured
MIN_WALLET_ETHthreshold. - Private keys for each participating wallet, provided via environment variable or key file.
- Network access to the Robinhood Chain RPC endpoint.
ETH must be bridged to Robinhood Chain before use. Refer to the Robinhood Chain documentation for canonical bridge routes and supported assets. Each wallet should hold enough ETH to cover:
- The maximum configured trade size (
MAX_TRADE_ETH) - Estimated gas per buy, sell, and approval transaction
- The
MIN_WALLET_ETHreserve defined in configuration
# Clone or copy the project, then install dependencies
npm install
# Create your environment file from the template
cp .env.example .envEdit .env with your token address, wallet keys, and operational parameters before running any commands.
Security: Never commit
.env, private keys, or key files to version control. The.gitignoreexcludes.envandkeys/by default.
All settings are loaded from environment variables and validated at startup via Zod. Invalid or conflicting values (e.g. MIN_TRADE_ETH greater than MAX_TRADE_ETH) cause an immediate exit with a descriptive error.
| Variable | Description |
|---|---|
TOKEN_ADDRESS |
Contract address of your Pons v2 token |
WALLET_KEYS |
Comma-separated list of private keys (0x-prefixed) |
WALLET_KEYS_FILE |
Alternative to WALLET_KEYS — path to a JSON array of private keys |
At least one wallet key source must be provided.
| Variable | Default | Description |
|---|---|---|
RPC_URL |
https://rpc.mainnet.chain.robinhood.com |
Robinhood Chain JSON-RPC endpoint |
| Variable | Default | Description |
|---|---|---|
MIN_TRADE_ETH |
0.001 |
Lower bound for randomized buy size (ETH) |
MAX_TRADE_ETH |
0.01 |
Upper bound for randomized buy size (ETH) |
SLIPPAGE_BPS |
100 |
Slippage tolerance in basis points (100 = 1%) |
| Variable | Default | Description |
|---|---|---|
MIN_DELAY_MS |
3000 |
Minimum wait between buy and sell within a cycle |
MAX_DELAY_MS |
15000 |
Maximum wait between buy and sell within a cycle |
CYCLE_INTERVAL_MS |
5000 |
Pause between completed cycles |
| Variable | Default | Description |
|---|---|---|
MAX_TOTAL_SPEND_ETH |
0.5 |
Cumulative buy spend cap across all cycles |
MAX_CYCLES |
0 |
Maximum completed cycles (0 = unlimited until budget exhausted) |
MAX_GRADUATION_PROGRESS_PCT |
90 |
Halt when curve graduation progress reaches this percentage |
MIN_WALLET_ETH |
0.005 |
Minimum wallet balance required to participate in a cycle |
DRY_RUN |
true |
When true, simulates cycles without broadcasting transactions |
Validates the token launch record, prints curve metadata, graduation progress, fee rates, and per-wallet ETH balances with eligibility flags.
npm run statusEstimates the output of a buy followed by a full sell-back, including fees and round-trip loss — without executing any transaction.
npm run quote -- --eth 0.01Starts the wash volume loop. Respects the DRY_RUN setting in .env.
npm run startPress Ctrl+C to request a graceful shutdown. The bot finishes the current cycle, prints a metrics summary, and exits.
npm run build # TypeScript type-check
npm test # Offline quote engine unit testsWe recommend the following sequence before enabling live trading:
| Step | Command / action | Purpose |
|---|---|---|
| 1 | npm run status |
Confirm token is phase 0, curve resolves, wallets are funded |
| 2 | npm run quote -- --eth 0.001 |
Estimate per-cycle fee burn at your target trade size |
| 3 | Set DRY_RUN=true, run npm run start |
Verify cycle logic and logging without on-chain cost |
| 4 | Set MAX_CYCLES=1, DRY_RUN=false |
Execute a single live cycle on one wallet |
| 5 | Scale wallets and remove cycle cap | Run sustained volume with budget and graduation guards active |
For each eligible wallet, the bot performs:
- Select wallet — Round-robin from the pool; skip wallets below
MIN_WALLET_ETHor insufficient for trade + gas. - Size trade — Random amount between
MIN_TRADE_ETHandMAX_TRADE_ETH. - Buy — Submit
curve.buy(quoteIn, minTokensOut, recipient); parseCurveBuyevent for actualtokensOut. - Delay — Random pause between
MIN_DELAY_MSandMAX_DELAY_MS. - Sell — Submit
curve.sell(tokensIn, minQuoteOut, recipient)for the acquired token balance. - Record metrics — Update volume, fees, spend, and cycle count.
- Guard check — Evaluate graduation progress, budget, and cycle limits before the next iteration.
Volume generation on a bonding curve is not cost-free. Every round-trip incurs:
- Protocol fee — Charged on the quote leg (
feeBpson the curve). - Creator tax — Additional quote-leg charge set at launch (
creatorTaxBps). - Price impact — Buys move the curve price up; sells move it back down.
- Gas — ETH spent on approvals, buys, sells, and receipt confirmation.
Buy fees are deducted from the input before pricing; sell fees are deducted from the output after pricing. These directions are not symmetric — the quote command reflects the actual round-trip economics.
Use npm run quote to model expected loss per cycle before committing capital.
| Risk | Mitigation |
|---|---|
| Accidental graduation | MAX_GRADUATION_PROGRESS_PCT halts the bot before the curve nears completion |
| Budget overrun | MAX_TOTAL_SPEND_ETH caps cumulative buy spend |
| Underfunded wallets | MIN_WALLET_ETH and per-cycle balance checks skip ineligible wallets |
| Slippage on volatile curves | SLIPPAGE_BPS sets minimum output bounds on each trade |
| Partial fills near graduation | Buy events are parsed from receipts; CurveBuyRefunded is handled via actual tokensOut |
- Verify the token contract address is correct before starting. Token names and symbols on Pons are not unique; the contract address is canonical.
- Monitor graduation progress during operation, especially with large trade sizes.
- Comply with applicable laws, platform terms of service, and exchange policies. Artificial volume generation may be restricted or prohibited in certain jurisdictions and contexts.
- Secure private keys. Use dedicated wallets with limited funds rather than primary holdings.
src/
├── index.ts # CLI entry point (status, quote, start)
├── config.ts # Environment loading and Zod validation
├── chain/
│ └── robinhood.ts # Chain definition, public/wallet client factories
├── pons/
│ ├── abis.ts # Factory, curve, and ERC-20 ABIs
│ ├── launch.ts # Token resolution, phase checks, status formatting
│ ├── quote.ts # Off-chain constant-product quote engine
│ ├── trade.ts # Buy/sell execution and event parsing
│ └── quote.test.ts # Quote engine unit tests
├── wallets/
│ └── pool.ts # Multi-wallet loading, balances, eligibility
├── strategy/
│ └── washVolume.ts # Cycle logic, guards, randomization
└── bot/
├── runner.ts # Main loop, shutdown handling
└── metrics.ts # Cumulative volume, fees, and cycle tracking
| Symptom | Likely cause | Suggested action |
|---|---|---|
Token is not a Pons v2 launch |
Wrong TOKEN_ADDRESS or non-Pons token |
Verify address on Blockscout |
phase ... only trades on bonding curve |
Token has graduated or been swept | This bot does not support post-graduation trading |
no_eligible_wallet in logs |
Wallets below MIN_WALLET_ETH or trade + gas threshold |
Fund wallets or lower thresholds |
Graduation progress >= cap |
Curve approaching completion | Increase cap only if intentional; otherwise expected stop |
| Transaction reverts on sell | Curve may be readyToGraduate() |
Stop bot; graduation imminent — sells can revert |
| RPC timeouts | Network or endpoint issues | Retry; consider a dedicated RPC provider |
- CoolBB Agency
- Pons documentation
- Pons v2 builder guide
- Pons v2 quoting
- Robinhood Chain documentation
- Uniswap v3 on Robinhood Chain
Copyright © 2026 CoolBB Agency. All rights reserved.
This software is written and maintained by CoolBB Agency. Unauthorized reproduction, redistribution, or commercial use without prior written consent from CoolBB Agency is prohibited.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL COOLBB AGENCY BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF THIS SOFTWARE.