exchange.IO("pump.*", ...)
在pump.fun的联合曲线上发现新币、查看曲线状态、报价与买卖,币毕业后自动改走Jupiter兑换。
exchange.IO(k)
exchange.IO(k, options)
exchange.IO(k, mint)
exchange.IO(k, mint, side, amount)
exchange.IO(k, mint, solAmount)
exchange.IO(k, mint, solAmount, options)
exchange.IO(k, mint, amount, options)
exchange.IO(k, wallet)示例
-
发现新币并在曲线上报价(只读)。
javascriptfunction main() { var coins = exchange.IO("pump.new", {limit: 10}) if (!coins) { Log("查询失败:", GetLastError()) return } for (var i = 0; i < coins.length; i++) { var c = coins[i] if (c.quote != "SOL") { continue } var info = exchange.IO("pump.info", c.mint) var q = exchange.IO("pump.quote", c.mint, "buy", 0.1) if (!info || !q) { continue } Log(_D(c.time), c.symbol, c.mint, "进度", info.progress.toFixed(2) + "%", "市值", info.marketCap.toFixed(2), "SOL", "0.1 SOL可买", q.amountOut, "冲击", q.priceImpactPct.toFixed(2) + "%") } } -
轮询新币,报价合适就买入,查看持仓后全部卖出。
javascriptfunction main() { var since = Date.now() var seen = {} while (true) { var coins = exchange.IO("pump.new", {limit: 20, since: since}) || [] for (var i = 0; i < coins.length; i++) { var c = coins[i] if (seen[c.mint] || c.quote != "SOL" || c.mayhem || c.cashback) { continue } seen[c.mint] = true if (c.devBuy && c.devBuy.quoteAmount > 1) { continue // 创作者首买过大,跳过 } var q = exchange.IO("pump.quote", c.mint, "buy", 0.01) if (!q || q.priceImpactPct > 5) { continue } var r = exchange.IO("pump.buy", c.mint, 0.01, {slippage: 0.2, priorityFee: 0.0005}) if (!r) { Log("买入失败:", GetLastError()) continue } Log("买入", r.tokenAmount, c.symbol, "花费", r.solAmount, "SOL", r.txHash) Sleep(30 * 1000) var h = exchange.IO("pump.holdings") || [] h.forEach(function(x) { Log("持有", x.mint, x.amount, "估值", x.value, "SOL") }) var s = exchange.IO("pump.sell", c.mint, "all", {slippage: 0.2}) Log("卖出:", s ? s.solAmount + " SOL " + s.txHash : GetLastError()) return } Sleep(1000) } } -
只模拟买入,不签名不发送。
javascriptfunction main() { var coins = exchange.IO("pump.new", {limit: 5}) if (!coins || coins.length == 0) { Log("没有新币:", GetLastError()) return } var r = exchange.IO("pump.buy", coins[0].mint, 0.01, {dryRun: true}) if (!r) { Log("模拟出错:", GetLastError()) return } Log("模拟", r.ok ? "成功" : "失败", r.simulationError || "", "预计", JSON.stringify(r.expected), "计算单元", r.unitsConsumed) }
返回值
| 类型 | 描述 |
object / array / 空值 |
|
参数
| 名称 | 类型 | 必填 | 描述 |
k | string | 是 | 指令名: |
mint | string | 否 | 币的mint地址( |
side | string | 否 |
|
amount | number / string | 否 |
|
solAmount | number | 否 |
|
options | object | 否 |
|
wallet | string | 否 |
|
参考
Jupiter exchange.IO exchange.IO("route") exchange.IO("dexes") exchange.IO("priorityFee") exchange.IO("receipt") exchange.Buy
备注
指令一览
| 指令 | 参数 | 作用 |
|---|---|---|
pump.new | [options] | 从链上发现最近新建的币 |
pump.info | mint | 联合曲线的状态:储备、价格、市值、毕业进度、费率 |
pump.quote | mint, side, amount | 本地报价(不发交易) |
pump.buy | mint, solAmount[, options] | 花solAmount SOL买入 |
pump.sell | mint, amount[, options] | 卖出amount个币或all |
pump.holdings | [wallet] | 钱包持有的pump.fun币与按曲线的估值 |
这些指令直接交易pump.fun程序(6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P)联合曲线上的币,不经过Jupiter:连接器自己构造、模拟、签名交易,报价公式与费用同链上程序。
pump.new
查pump.fun mint authority(TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM,只出现在创建交易里)的最近签名,逐笔解析创建交易的CreateEvent,新的在前。options.limit为查看的创建交易笔数(默认20,最多100),options.since为毫秒时间戳,只返回在它之后创建的币。解析过的交易在进程内缓存,轮询时每次只取新交易(1次getSignaturesForAddress加新交易笔数次getTransaction)。链上执行失败的创建交易不列出。
每项为{signature, slot, time, mint, name, symbol, uri, creator, user, bondingCurve, tokenProgram, quote, quoteMint, mayhem, cashback, holderReward, devBuy}:time为区块时间(毫秒);user为发起创建的钱包(一般就是creator);tokenProgram为spl-token或token-2022;quote为SOL、USDC或报价代币的mint;devBuy为同一笔交易里的首买{tokens, quoteAmount}(quoteAmount含费),没有首买为null。name、symbol、uri由创建者随意填写,请以mint地址为准。
pump.info
一次getMultipleAccounts读曲线、mint、全局配置与费率表,返回{mint, bondingCurve, creator, tokenProgram, decimals, quote, quoteMint, complete, migrated, virtualTokenReserves, virtualQuoteReserves, realTokenReserves, realQuoteReserves, tokenTotalSupply, price, marketCap, progress, fees, mayhem, cashback, holderReward}:储备与供应量为可读单位;price为1个币值多少报价币(SOL),marketCap为price乘总供应量;progress为曲线已卖出的比例(%),到100时曲线完成(complete),随后迁移到PumpSwap(migrated,储备清零,price、marketCap、fees为null);fees为当前费率{protocolBps, creatorBps}(万分之几)。不是pump.fun的币时报错。
pump.quote
按链上程序的公式与费用在本地报价,返回{venue, mint, side, quote, amountIn, amountOut, price, spotPrice, priceAfter, priceImpactPct, fees, protocolFeeBps, creatorFeeBps, crossesCurve}:venue为pump;amountIn、amountOut为付出与得到的数量(买入为SOL与币,卖出为币与SOL);price为含费成交均价(SOL/币),spotPrice为现价,priceAfter为成交后的价格;priceImpactPct为不含费均价相对现价的偏离(%);fees为协议费加创作者费(SOL);crossesCurve为true表示买穿曲线(见下)。卖出数量要用曲线上现有的SOL(realQuoteReserves)支付,超过时报错。
曲线已完成(毕业)的币改用Jupiter报价(精确输入、交易对MINT_SOL),venue为jupiter并带route(经过的流动性来源),priceImpactPct为Jupiter估算的价格冲击(%),spotPrice、priceAfter、fees、protocolFeeBps、creatorFeeBps为null;Jupiter没有路由时报错。
pump.buy与pump.sell
- 买入是精确输入:花
solAmountSOL(含费),先幂等地建钱包的代币账户,再发buy_exact_quote_in_v3,最少到手 = 本地报价 × (1 −slippage)。卖出发sell_v3,最少收回的SOL = 本地报价 × (1 −slippage);超过余额时报错,不发送。两者都由链上程序强制执行,达不到时整笔失败,只扣网络费。 - 发送前用节点模拟,模拟失败不发送并报出原因(pump.fun的错误码附名字,如
BuySlippageBelowMinTokensOut)。等确认的规则同集中流动性:定不下来时报outcome is unknown并附签名。 - 返回
{txHash, venue, mint, side, solAmount, tokenAmount, price, fee, slot}:买入时solAmount为付出的SOL(含协议费与创作者费,不含网络费与账户押金),卖出时为到手的SOL(已扣费);tokenAmount为成交的币数,按链上事件计算;fee为网络费(SOL)。wait为false时返回{txHash, venue, mint, side, pending, lastValidBlockHeight, expected}(expected为本地报价);dryRun时返回{dryRun, venue, mint, side, payer, ok, simulationError, logs, unitsConsumed, txBytes, solAmount, tokenAmount, price, expected},成交数量取自模拟的链上事件。
| 下单选项 | 说明 |
|---|---|
slippage | [0, 1),默认0.05 |
priorityFee | 这笔交易的优先费总额(SOL,0到1);不给时取最近写这些账户的交易费率第75百分位,不超过exchange.IO("priorityFee")的上限 |
computeUnitLimit | 计算单元上限;不给时按模拟用量加余量 |
dryRun | 为true时只模拟,不签名、不发送 |
payer | 只能与dryRun一起用:以这个钱包付款模拟 |
wait | 默认true等确认并按链上事件回报成交;false广播后立即返回 |
closeAccount | 只用于pump.sell:卖all时默认在同一笔交易里关掉钱包的代币账户、退回押金,false为保留 |
pump.holdings
钱包代币余额里有联合曲线的那些币,返回[{mint, amount, quote, complete, price, value}]:value为现在按曲线全部卖出可得的报价币(已扣费);曲线已完成或余额超出曲线能买回的量时price、value为null(已毕业的币用exchange.IO("route")估值)。
限制与毕业
- 只交易以SOL报价的币:以USDC或其它代币报价的币(
pump.new的quote)与cashback币,pump.buy、pump.sell报错;cashback币可以用exchange.Buy、exchange.Sell在MINT_SOL上经Jupiter交易。 - 买穿曲线:买入预算超过曲线剩余可卖量时(mayhem币除外),超出部分按迁移后PumpSwap池子的价格成交,
crossesCurve为true;之后到迁移完成前曲线不能再交易。mayhem币买入超过剩余量时报错。 - 毕业:曲线完成的币,
pump.buy、pump.sell改用本交易所对象的Jupiter市价兑换(交易对MINT_SOL,价格保护用本单的slippage,Jupiter要求小于0.5),返回的venue为jupiter并带route;这时priorityFee、computeUnitLimit选项报错(优先费上限按exchange.IO("priorityFee")),dryRun也不支持(用pump.quote询价)。曲线刚完成、还没迁移的短时间内两条路都可能失败。 - 费用:协议费与创作者费按Pump Fees程序的费率表随市值分档(
pump.info、pump.quote返回实际费率),另有网络费与优先费。第一次买某个币要建代币账户(押金约0.002 SOL);钱包第一次在pump.fun交易时程序还会建它的成交量账户(约0.0018 SOL,不退)。 - 公共节点按秒限流、延迟高,抢新请在「节点地址」里配置自己的付费节点,并给足
priorityFee,否则拥堵时交易可能过期不上链。
风险
- 绝大多数新币很快归零;创作者或与它捆绑的钱包常在创建同笔或随后几个区块里买入,随时砸盘跑路。
- 抢新机器人与MEV竞争激烈:滑点设得大会被三明治夹击,按最差价成交。
- 名称、符号、元数据链接可以冒充知名项目;请以mint地址为准。
- 协议费、创作者费、网络费与优先费在每次买卖都要付,频繁进出的成本很高。