Jupiter要求v1却返回v0?核两个入口参数、资源配置与读回版本
链小知 · 进阶 · 核验 · 依官方文档整理
针对Swap V2交易v1的实际字段差异,排查静默忽略、路由/代付回退、空ComputeBudget与优先费单位;仅核已有集成资料。
开始前准备
- 准备脱敏的原/build或/order请求参数/响应、实际transactionVersion、原SDK/钱包版本、资源配置与失败日志,不含API Key/签名。
- 按当前Jupiter版本说明核材料;本次未调用报价、/execute、RPC或模拟,也未安装、构建、签名或测试本人钱包。
1. 按入口核正确的v1参数
/build用transactionVersion="1"强制生成v1,集成方自己组装;/order用maxSupportedTransactionVersion="1"表示可接受上限,不强制返回v1,两者默认"0"。
核原参数名与响应transactionVersion。/order会忽略transactionVersion,/build会忽略maxSupportedTransactionVersion,且无报错;不能以请求成功或参数里有1推断返回v1。
检查结果:入口、参数名与实际返回版本匹配,静默忽略能定位。
2. 解释/order的v0回退
所读版本规则仅Metis胜出且非gasless的/order可返回v1;其他router或gasless仍为v0。包括低SOL自动赞助和integrator payer,未主动申请代付也可能回退。
按原路由/代付与transactionVersion判断,不把资足测试钱包结果推广低SOL用户。/order返回已构建transaction;这里不套/build的手工组装流程。
检查结果:原路由、代付与v0结果可解释,支持上限未当强制选择。
3. 识别/build v1响应的新形状
v1的computeBudgetInstructions为空、addressesByLookupTableAddress为{},新增computeUnitPrice字符串,单位micro-lamports/CU。ALTs为空是v1结构,不等路由资料缺失。
交易字节上限从1232变4096,账户上限仍64;增大字节不等无账户限额。若原响应或序列化版本不一致,先标版本/组装问题,不为排错重发交易。
检查结果:空指令/ALT、实际版本和费用字段单位对应同一响应。
4. 核资源配置与绝对优先费
/build v1在message config设置computeUnitLimit和loadedAccountsDataSizeLimit,二者默认0会失败。优先费也在config,priorityFeeLamports是总lamports:ceil(computeUnitPrice×computeUnitLimit÷1,000,000)。
核已有资源估算/配置和整数向上舍入,不将单价直接填总费,也不硬套示例最大CU。旧clamp从computeBudgetInstructions取单价,v1为空时不生效;需按原computeUnitPrice及本人预设上限检查。缺估算就未验证,不发起模拟。
检查结果:资源非默认0,micro-lamports/CU与总lamports换算、限价检查有原资料。
5. 核签名能力与读回支持
所读文档指定@solana/kit v8+构建/反序列化/签v1;@solana/web3.js v1不能签。API接受v1参数不代表原SDK或钱包会签,钱包未支持可在签名阶段失败。
已有getTransaction等读回日志需核maxSupportedTransactionVersion:1,否则unsupported version可能只说明读回端不支持。这里不调用RPC;缺回执不视作交易未执行,缺钱包版本不猜兼容。
检查结果:生成、钱包/SDK签名和RPC读回三个能力分别有资料或待核。
6. 按实际版本保留结论与失败层
结果写参数忽略、/order正常v0回退、v1组装资源/费用不符、签名能力不足或读回版本缺失。原错误与response版本不明就停在未定位。
/order的/execute可处理两版本是方法说明,不证明原订单提交或落块。已构建transaction、签名提示和tx标识也不能代替最终回执;保留原执行层结果,不重复发送来验证。
检查结果:原版本与具体失败层对应,构建/签名/执行/读回结果未混。
怎样确认完成
- 形成入口/参数/实际版本、路由代付、资源/费用单位和签名/读回支持对照。
- documentation:只核官方方法及原材料,未验证本人API、运行配置、钱包兼容或交易。
常见错误与边界
- v1交易格式与Swap API V2版本、SDK包的v1名称不是同一版本编号。
- 自动赞助使低SOL用户仍可能返回v0;旧ComputeBudget单价clamp不保护v1新字段。