feat(cooking): complete create params, fix Flap split & pump provider

- Add advanced create_token params: description, fee, dev_max_fee_per_gas,
  raised_token, anti_mev_mode, dev_wallet_bps, source, approve_vision
- Add fee-share configs: pump_fee_share_list, bags_fee_share_list,
  flap_rate_conf (+ V6 buy/sell_tax_rate), fourmeme_rate_conf
- Add multi-wallet buy: buy_wallets, snip_buy_wallets, interval_seconds
- Add CondMarket TradeParam (buy/sell_trade_config) and auto-sell sell_configs
- Pump modes: --is-mayhem / --is-cashback / --is-buy-back (Agent Auto Buyback)
- Fix Flap split_conf field: split_bps -> bps
- Pump fee-share provider: github / wallet only (drop twitter)
- Drop is_revoke_fee_auth and is_agent/agent_bps
- Sync SKILL.md and cli-usage.md with all flags, JSON schemas,
  guided launch flow (platform-aware advanced options) and percentage-based
  fee-share UX

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
prodev-nova
2026-06-02 14:04:35 +08:00
co-authored by Claude Opus 4.8
parent aebe509f29
commit ec5719ce12
4 changed files with 464 additions and 72 deletions
+120
View File
@@ -170,27 +170,147 @@ export interface TokenSignalGroup {
max_create_or_open_ts?: string;
}
export interface PumpFeeShareInfo {
provider: string; // "github" | "wallet"
username: string; // username for github; a SOL address when wallet
basic_points: number;
}
export interface BAGSFeeShareInfo {
provider: string; // "twitter" | "solana" | "kick" | "github"
username: string;
basic_points: number;
}
export interface FlapRateConf {
tax_rate?: number; // V5 unified tax rate, e.g. 5% -> 500
buy_tax_rate?: number; // V6 separate buy tax rate
sell_tax_rate?: number; // V6 separate sell tax rate
mkt_bps?: number;
deflation_bps?: number;
dividend_bps?: number;
lp_bps?: number;
minimum_share_balance?: number;
recipient_type?: string;
beneficiary?: string;
twitter_account?: string;
split_conf?: Array<{ recipient: string; bps: number }>;
}
export interface FourmemeRateConf {
fee_plan?: boolean;
fee_rate?: number;
burn_rate?: number;
divide_rate?: number;
liquidity_rate?: number;
recipient_rate?: number;
recipient_address?: string;
min_sharing?: number;
}
export interface BuyWalletInfo {
from_address: string;
buy_amt: string;
}
// Buy/sell execution config for CondMarket orders (snipe buy, auto-sell, pending_sell).
// Does NOT affect the main creation tx. Falls back to outer-level fields when omitted.
export interface TradeParam {
slippage?: number;
auto_slippage?: boolean;
fee?: string;
priority_fee?: string;
tip_fee?: string;
gas_price?: string;
max_priority_fee_per_gas?: string;
max_fee_per_gas?: string;
is_anti_mev?: boolean; // backend currently forces true; passing has no effect
anti_mev_mode?: string; // backend currently forces "secure"; passing has no effect
}
export interface CookingSellConfig {
sell_type: string; // "delay_sell" | "limit_order"
delay_sec?: number; // required when sell_type = "delay_sell"
delay_mili_sec?: number; // optional; takes precedence over delay_sec
sell_ratio: string; // "1" = 100%, "0.5" = 50%
check_price?: string; // trigger market cap in USD; required when sell_type = "limit_order"
wallet_addresses: string[]; // empty array means the strategy is inert
}
export interface CreateTokenParams {
// Required
chain: string;
dex: string;
from_address: string;
name: string;
symbol: string;
buy_amt: string;
// Image (one required)
image?: string;
image_url?: string;
// Social
description?: string;
website?: string;
twitter?: string;
telegram?: string;
// Transaction
slippage?: number;
auto_slippage?: boolean;
// Fees
fee?: string;
priority_fee?: string;
tip_fee?: string;
gas_price?: string;
max_priority_fee_per_gas?: string;
max_fee_per_gas?: string;
// Anti-MEV (SOL only)
is_anti_mev?: boolean;
anti_mev_mode?: string;
// Advanced
raised_token?: string;
dev_gas?: string;
dev_priority?: string;
dev_tip?: string;
dev_max_fee_per_gas?: string;
approve_vision?: string;
source?: string;
dev_wallet_bps?: number;
// CondMarket buy/sell execution config (snipe / bundle / auto-sell)
buy_trade_config?: TradeParam;
sell_trade_config?: TradeParam;
// Auto-sell strategies created after a successful launch
sell_configs?: CookingSellConfig[];
// Pump.fun specific
is_mayhem?: boolean;
is_cashback?: boolean;
is_buy_back?: boolean;
pump_fee_share_list?: PumpFeeShareInfo[];
// Flap specific
flap_rate_conf?: FlapRateConf;
// FourMeme specific
fourmeme_rate_conf?: FourmemeRateConf;
// BAGS specific
bags_fee_share_list?: BAGSFeeShareInfo[];
// Bonk specific
bonk_model?: string;
// Multi-wallet buy
buy_wallets?: BuyWalletInfo[];
snip_buy_wallets?: BuyWalletInfo[];
interval_seconds?: number;
}
export class OpenApiClient {
+64 -3
View File
@@ -20,23 +20,57 @@ export function registerCookingCommands(program: Command): void {
cooking
.command("create")
.description("Create a token on a launchpad platform (requires private key)")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / eth / ton")
.requiredOption("--dex <dex>", "Launchpad: pump / raydium / pancakeswap / flap / fourmeme / bonk / bags / ...")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base")
.requiredOption("--dex <dex>", "Launchpad: pump / bonk / bags (sol) / fourmeme / flap (bsc) / klik / clanker (base)")
.requiredOption("--from <address>", "Wallet address (must match API Key binding)")
.requiredOption("--name <name>", "Token name")
.requiredOption("--symbol <symbol>", "Token symbol")
.requiredOption("--buy-amt <amount>", "Initial buy amount in native token (e.g. 0.01 SOL)")
.option("--image <base64>", "Token logo as base64-encoded data (max 2MB decoded)")
.option("--image-url <url>", "Token logo URL")
.option("--description <text>", "Token description / project pitch")
.option("--website <url>", "Website URL")
.option("--twitter <url>", "Twitter link")
.option("--telegram <url>", "Telegram link")
.option("--slippage <n>", "Slippage tolerance (e.g. 0.01 = 1%)", parseFloat)
.option("--auto-slippage", "Enable automatic slippage")
.option("--fee <amount>", "Base gas / fee")
.option("--priority-fee <sol>", "Priority fee in SOL (SOL only)")
.option("--tip-fee <amount>", "Tip fee")
.option("--gas-price <amount>", "Gas price in wei (EVM chains)")
.option("--anti-mev", "Enable anti-MEV protection")
.option("--max-fee-per-gas <amount>", "Max fee per gas in wei (EVM only)")
.option("--max-priority-fee-per-gas <amount>", "Max priority fee per gas in wei (EVM only)")
.option("--anti-mev", "Enable anti-MEV protection (SOL only)")
.option("--anti-mev-mode <mode>", "Anti-MEV mode: normal / secure (SOL only)")
.option("--raised-token <symbol>", "Raise token symbol: pump→USDC; bonk→USD1; fourmeme→USDT/USD1; leave empty for native")
.option("--dev-wallet-bps <n>", "Dev wallet fee in basis points (100 = 1%)", parseInt)
.option("--dev-gas <amount>", "Dev gas amount")
.option("--dev-priority <amount>", "Dev priority fee")
.option("--dev-tip <amount>", "Dev tip fee")
.option("--dev-max-fee-per-gas <amount>", "Dev tx feeCap in wei (EVM EIP-1559)")
.option("--approve-vision <version>", "Approve vision version: v1 / v2 (default: v2)")
.option("--source <source>", "Traffic source identifier")
// Pump.fun specific
.option("--is-mayhem", "Enable Mayhem mode (Pump.fun only)")
.option("--is-cashback", "Enable Cashback (Pump.fun only)")
.option("--is-buy-back", "Enable Agent Auto Buyback (Pump.fun only)")
.option("--pump-fee-share-list <json>", "Pump.fun fee share list as JSON array (Pump.fun only)")
// Flap specific
.option("--flap-rate-conf <json>", "Flap rate config as JSON object (Flap only)")
// FourMeme specific
.option("--fourmeme-rate-conf <json>", "FourMeme rate config as JSON object (FourMeme only)")
// BAGS specific
.option("--bags-fee-share-list <json>", "BAGS fee share list as JSON array (BAGS only)")
// Bonk specific
.option("--bonk-model <model>", "Bonk model identifier (bonk DEX only)")
// Multi-wallet buy
.option("--buy-wallets <json>", "Multi-wallet buy config as JSON array [{from_address, buy_amt}]")
.option("--snip-buy-wallets <json>", "Snipe-buy wallet config as JSON array [{from_address, buy_amt}]")
.option("--interval-seconds <n>", "Interval between multi-wallet buys in seconds", parseInt)
// CondMarket execution config + auto-sell (JSON)
.option("--buy-trade-config <json>", "Buy-side trade config for CondMarket orders as JSON (TradeParam)")
.option("--sell-trade-config <json>", "Sell-side trade config for auto-sell / pending_sell as JSON (TradeParam)")
.option("--sell-configs <json>", "Auto-sell strategy list as JSON array (CookingSellConfig[])")
.option("--raw", "Output raw JSON")
.action(async (opts) => {
if (!opts.image && !opts.imageUrl) {
@@ -58,15 +92,42 @@ export function registerCookingCommands(program: Command): void {
};
if (opts.image) params.image = opts.image;
if (opts.imageUrl) params.image_url = opts.imageUrl;
if (opts.description) params.description = opts.description;
if (opts.website) params.website = opts.website;
if (opts.twitter) params.twitter = opts.twitter;
if (opts.telegram) params.telegram = opts.telegram;
if (opts.slippage != null) params.slippage = opts.slippage;
if (opts.autoSlippage) params.auto_slippage = true;
if (opts.fee) params.fee = opts.fee;
if (opts.priorityFee) params.priority_fee = opts.priorityFee;
if (opts.tipFee) params.tip_fee = opts.tipFee;
if (opts.gasPrice) params.gas_price = opts.gasPrice;
if (opts.maxFeePerGas) params.max_fee_per_gas = opts.maxFeePerGas;
if (opts.maxPriorityFeePerGas) params.max_priority_fee_per_gas = opts.maxPriorityFeePerGas;
if (opts.antiMev) params.is_anti_mev = true;
if (opts.antiMevMode) params.anti_mev_mode = opts.antiMevMode;
if (opts.raisedToken != null) params.raised_token = opts.raisedToken;
if (opts.devWalletBps != null) params.dev_wallet_bps = opts.devWalletBps;
if (opts.devGas) params.dev_gas = opts.devGas;
if (opts.devPriority) params.dev_priority = opts.devPriority;
if (opts.devTip) params.dev_tip = opts.devTip;
if (opts.devMaxFeePerGas) params.dev_max_fee_per_gas = opts.devMaxFeePerGas;
if (opts.approveVision) params.approve_vision = opts.approveVision;
if (opts.source) params.source = opts.source;
if (opts.isMayhem) params.is_mayhem = true;
if (opts.isCashback) params.is_cashback = true;
if (opts.isBuyBack) params.is_buy_back = true;
if (opts.pumpFeeShareList) params.pump_fee_share_list = JSON.parse(opts.pumpFeeShareList);
if (opts.flapRateConf) params.flap_rate_conf = JSON.parse(opts.flapRateConf);
if (opts.fourmemeRateConf) params.fourmeme_rate_conf = JSON.parse(opts.fourmemeRateConf);
if (opts.bagsFeeShareList) params.bags_fee_share_list = JSON.parse(opts.bagsFeeShareList);
if (opts.bonkModel) params.bonk_model = opts.bonkModel;
if (opts.buyWallets) params.buy_wallets = JSON.parse(opts.buyWallets);
if (opts.snipBuyWallets) params.snip_buy_wallets = JSON.parse(opts.snipBuyWallets);
if (opts.intervalSeconds != null) params.interval_seconds = opts.intervalSeconds;
if (opts.buyTradeConfig) params.buy_trade_config = JSON.parse(opts.buyTradeConfig);
if (opts.sellTradeConfig) params.sell_trade_config = JSON.parse(opts.sellTradeConfig);
if (opts.sellConfigs) params.sell_configs = JSON.parse(opts.sellConfigs);
const client = new OpenApiClient(getConfig(true));
const data = await client.createToken(params).catch(exitOnError);
printResult(data, opts.raw);