输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所

在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)

示例

  • 发现新币并在曲线上报价(只读)。

    javascript
    function 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) + "%") } }
  • 轮询新币,报价合适就买入,查看持仓后全部卖出。

    javascript
    function 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) } }
  • 只模拟买入,不签名不发送。

    javascript
    function 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 / 空值

pump.new、pump.holdings返回数组,其余返回对象,字段见备注各节。参数错误、不是pump.fun的币、模拟失败(不是dryRun时)、交易失败时返回空值,GetLastError()中有原因。

参数

名称类型必填描述

k

string

是

指令名:pump.new、pump.info、pump.quote、pump.buy、pump.sell或pump.holdings。

mint

string

否

币的mint地址(pump.info、pump.quote、pump.buy、pump.sell)。

side

string

否

pump.quote的方向:buy或sell。

amount

number / string

否

pump.quote:买入时为要花的SOL(含费),卖出时为要卖的币数;pump.sell:要卖的币数,或all(全部余额)。

solAmount

number

否

pump.buy要花的SOL,含协议费与创作者费。

options

object

否

pump.new为{limit, since};pump.buy、pump.sell为下单选项{slippage, priorityFee, computeUnitLimit, dryRun, payer, wait, closeAccount}。见备注。

wallet

string

否

pump.holdings查看的钱包地址,缺省为本交易所对象的钱包。

参考

备注

指令一览
指令参数作用
pump.new[options]从链上发现最近新建的币
pump.infomint联合曲线的状态:储备、价格、市值、毕业进度、费率
pump.quotemint, side, amount本地报价(不发交易)
pump.buymint, solAmount[, options]花solAmount SOL买入
pump.sellmint, 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
  • 买入是精确输入:花solAmount SOL(含费),先幂等地建钱包的代币账户,再发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地址为准。
  • 协议费、创作者费、网络费与优先费在每次买卖都要付,频繁进出的成本很高。