不看仪表盘:自己从 RPC 和 MCP 读链上数据
快照不是真相:$31k 策略状态可以 curl 读,回购回执能用 JSON-RPC 逐 wei 重算,你本地数据库里的余额只是缓存。一份"自己读链"的核对清单。
一句话结论:DeFi 世界里大多数"数据"其实是一张带数字的截图——你读了、信了,但没有办法查。2026 年 10 月的四份材料提供了四种把数字变成"可调用、可重算、可核对"的做法:一个 Solana 策略把自己的状态用免费 MCP 暴露出来,任何人都能用一条 curl 拉到和团队相同的数字(快照时 $31,195);一笔 BNB 链上的每日回购被用普通 JSON-RPC 逐字段重算到 wei,连收据里写错的那一行都被指了指出来;一个交易调度器的作者论证了"你自己的数据库不是链上事实,只是缓存";以及一次对 x402 生态的扫描——20,462 个资源里抽 600 个,0 个声明签发收据,说明"签名 ≠ 真相"仍然是个未解决的问题。四份材料合起来是一句话:别信仪表盘,去读那个能重放的最小事实。
披露:第一份 Mycelium 快照来自 @innerozma(dev.to,2026-10-15;作者注明为 AI Agent 为 Taskmarket 赏金所作);同一批 Mycelium 数据在 10-15 当天被多个账号以近乎相同的标题发布,属于推广投放,应作为一份快照引用、不得当多个独立信源。第二份 FlapJax 审计来自 @imapphelp(dev.to,2026-10-15;同样为赏金任务,所有读取均为公开只读,作者附了 BSC 收款地址与可复现命令)。第三份调度器文章来自 @tradevodata(dev.to,2026-10-15;作者自述开发 Tradevo,文内已披露)。第四份 x402 扫描来自 @holistis(dev.to,2026-10-15;作者自建 tokenizen,代码开源)。所有数字按"方法与口径"引用,未做独立复测;本文不构成投资建议。
一、把"数字"换成"调用":一条 curl 就能读的策略快照
DeFi 分析最常见的形态是"截图加一个数字":你读它、信它,没有任何办法核对。Mycelium Finance 做了一件更简单也更有用的事——把自己的策略状态通过 MCP 暴露出来,任何人可以拉到与团队看到的相同的数字。关键不是它的代币,而是数据是可调用的。
https://www.myceliumfinance.com/api/mcp 提供免费工具,不需要 key、不需要注册、不需要 SDK,一个 curl 循环就够了:
curl -s https://www.myceliumfinance.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_mycelium_allocation","arguments":{}}}'
三个工具回答新人最关心的三类问题:
get_mycelium_allocation:策略资产按币种拆分,每个头寸给出底层的 Raydium 池;get_mycelium_distribution:$MYC全量供应,拆成交易流动性、锁定/未锁定 LP、锁定供应与已销毁;get_solana_top_performers:Solana 七日涨跌榜,用来看流动性正流向哪里。
它们返回纯 JSON。在 2026-10-15T05:39 UTC 的快照里,策略持有 $31,195,分布在 10 个资产、12 个池;$MYC 供应 9.986 亿 / 10 亿,其中 55.1% 是锁定供应、23.5% 是未锁定 LP——也就是大部分流通量要么锁着、要么已配对进池,而不是散在市场里;USDC 只占账面 0.36%,策略几乎全部部署在合作方资产中(设计如此:为伙伴提供深度,为池子获得敞口)。集中度从头部递减:Knots 18.9%、Parcl 15.2%、Kintara 11.9%,之后是 Solana、Gable、Streamflow、Guac、Dreams、Jubjub——12 个池分布在 9 个合作代币上,是刻意分散,不是霰弹枪。

原文配图:MCP 实时快照(2026-10-15T05:39:02Z)。图中 USDC 四舍五入显示为 0.4%($111,原文文字作 0.36%);右下角“Created by an AI agent for a Taskmarket bounty”为原图自带标注。图源:@innerozma(dev.to)。
这份快照最诚实的地方是它自己标注的边界:单次快照,没有历史、不谈趋势、不预测价格;更值得注意的是它指出的缺口——"持仓分布"和"表现"是两个不同的调用,你能看到资金在哪,也能看到哪些 Solana 资产在动,但没有一个请求能回答"某个头寸这周表现如何"。作者给出的建议很具体:把 get_mycelium_pnl(window) 加进去,用 allocation 已经返回的池地址做 join——"每个地址都是公开的,这只差一个 join"。
这正是"本地优先"在链上的版本:数据源搬回自己手里。把一条 curl 存进日志、把返回的地址钉在区块上,下一个人才有得核对;而不是面对一张来源不明的图。
二、从 RPC 重算一笔回购:每一格都能对到 wei
第二个例子的对象是一个回购:FlapJax 公开承诺每天用 0.01 BNB 在 PancakeSwap V3 的 FLAPJAX/WBNB 1% 池买入并持有(2026-10-09 至 10-22),每笔在论坛帖子里发一张"收据"。审计的做法不是信任这些文字,而是只用链上数据把每一格重新推一遍:eth_getTransactionByHash、eth_getTransactionReceipt、eth_call,全部打在公开 BSC 端点上,不信任任何浏览器索引。
先钉死合约(均已在链上核验):FLAPJAX 代币 0x90c8…80df(18 位小数,decimals() 读出)、池 0xcA93…2150(PancakeSwap V3,1% 费率)、国库 0x7C34…359f、WBNB 0xbb4C…095c,路由地址从每笔交易的 to 字段读出。价格公式也只需要一个调用:slot0()(选择器 0x3850c7bd)返回的 sqrtPriceX96,价格 = (sqrtPriceX96 / 2^96)^2;价格影响 = 买入区块价格 / 前一个区块价格 − 1。
把两天的收据逐字段对照的结果是:全部对得上,对到 wei——交易哈希、区块号、0.01 BNB 的支出(10,000,000,000,000,000 wei,不多不少)、收到的 FLAPJAX 数量(与池发出的 Transfer 日志、池的 Swap 日志三处一致)、收款方、买后国库的 BNB 与 FLAPJAX 余额(用该区块的 eth_getBalance / balanceOf 读出)。每笔买入把薄池价格推高约 +0.30%(30 个 tick)。
值得单说两处"对齐口径"的细节:
- 收据里真的有一行写错了:10-12 那张的"非买入支出"原本写
0.000025 fees,漏掉了 0.002 BNB 的 gas grant;FlapJax 自己在 10-13 更正为0.002 gas grants + 0.000026 fees,更正后的数字与链上一致(链上口径0.0020265546,差异在收据声明的精度内)。审计的结论因此是"各格对得上,唯一真实的错误是项目方自己已经更正过的那个",而不是"项目方造假"。 - 另一天的数字是被截断的:10-13 的非买入行
0.004297 + 0.000038是 6 位小数截断,链上精确值是0.004297782612783217 + 0.0000384141 = 0.004336196712783217——对账仍然能闭合到 wei,前提是你知道原文只承诺了 6 位。
更漂亮的是"只买不卖"这个声明的验证方式。公共 BSC 端点上 eth_getLogs 被限流到几乎不可用,于是作者换了个探测器:池自身就是探测器——任何国库→池的 FLAPJAX 移动(不论是 swap 还是普通转账)都必然改变池的 balanceOf 和/或 slot0()。他在 10-11 00:00 到 10-14 00:00 之间设了若干检查点,用 slot0 二分找出窗口内第一次价格变化(也就是 10-11 那笔买入),其余检查点全部"逐位相同";池里的 FLAPJAX 只减不增,且只减过三笔买入的数量。同时把窗口内国库的每一笔支出枚举了出来:16 笔,别的没有——15 笔 FLAPJAX 发放(到 5 个不同钱包、没有一个进池)加 1 笔 0.004297782612783217 BNB 的赏金资金,gas 合计 0.0000384141 BNB,加起来正好等于余额法算出的窗口差额。
最后作者把复现命令全部列出(哪两个交易哈希、在哪四个区块读 slot0、balanceOf 的 selector 0x70a08231 怎么拼地址),并写了一句值得抄下来的话:"每个数字都独立成立——你不需要我的数字。"
三、你自己的数据库只是缓存
第三份材料把视角从"读链"推到"写链":如果你的调度器会提交交易,它的数据库不是链上状态的记录,而是由 RPC 读取、提交、收据、日志和"假设"拼出来的本地投影。投影有用(不可能每次决策都从链上重建状态),但它永远略有偏差;真正的问题是:偏差出现时,系统怎么表现。
两种失败方向,代价完全不同:
- 过宽的陈旧(stale-permissive):本地说"可以",链上说不可以或不安全——缓存余额里含有已花掉的钱、nonce 已被别的交易消耗、授权在最后一次同步后被撤销、合约参数已变、上一笔其实成功了但本地 worker 超时又排了一次。明显成本是回滚与浪费 gas;不明显的成本是"执行成功但做了别的事":交易可以成功入块,而价格、流动性、合约配置或账户状态已经让它偏离了意图。预演(preflight simulation)有帮助,但它是"针对这个已观察状态有效",不是"将保持有效"。
- 过紧的陈旧(stale-restrictive):本地说"不行",链上其实可以——worker 崩溃前没清 lease、交易被替换但本地还在盯旧哈希、RPC 失败漏掉收据、交易已成功而记录停在 submitted、临时条件早已恢复但任务再没人看。这种方向通常保住资金,输掉活性:任务卡死、执行窗口错过、运维手工修数据;保守补丁叠久了,临时不确定性会变成永久阻塞。
三条可以直接搬走的工程结论:
- 数据库对"意图"权威,对"链上事实"不权威。"我创建了这个任务""我提交了这笔交易""我分配了这个幂等键"是应用自己拥有的事实;"这个钱包余额还够""这个 nonce 没用过""合约还没暂停""这笔交易已最终确认"是链上事实,缓存里存的只是"某个区块上下文下的观察",而观察是有年龄的。连一次 RPC 读都不是永恒的答案:近期区块的读可能被重组取代,不同节点可能短暂不一致,pending 池里的交易可能消失、被替换或以不同的周边状态执行。
- "未知"必须是一个独立状态,而不是被当成"失败"或"仍在等待"。它应该触发对账,而不是盲目重发或无限期等待。
- 对账是常驻的控制回路,不是事故后的清理脚本。一个可操作的设计:提交前持久化意图(幂等键绑定逻辑动作)→ 记录每次提交尝试与哈希 → 用显式状态转移而不是覆盖一个通用 status → 从持久检查点扫收据与日志 → 对不确定记录重读关键合约状态 → worker lease 与交易状态独立过期 → 对刚确认的记录在还能重组时再回访 → 当先前观察到的区块离开规范链时回滚派生状态。日志适合大范围发现,直接读适合当前状态,两者都不能单独胜任;恢复路径要按正常生产流量设计限流与并发,别让恢复任务打垮它依赖的同一个 RPC。
最后是"按谓词决定新鲜度":每次行动前都读链会降低过宽失败,但增加延迟与 RPC 预算,而且读完之后状态仍可能变;跳过新鲜读取提高吞吐,但把责任转移给交易级约束、幂等与事后对账。低风险观察可以接受缓存;余额、权限、nonce 与不可逆调用,通常值得付出更新鲜的证据。
四、签名不等于真相
第四份材料给"自己读"补上了另一个角度的证据:即使是加密签名的收据,也不自动等于真相。
x402 有一个官方扩展:卖家可以为每次交付签名收据(用于审计轨迹与争议解决)。作者的疑问很简单——"我从来没见过一张真的"。他的数法是可复现的:x402 的 bazaar 扩展让资源服务器自我声明,facilitator 会编目它们,于是可以直接查:
curl -s "https://facilitator.payai.network/discovery/resources?limit=100&offset=0"
这个索引报了 20,462 个资源。他在 offset 0、4000、8000、12000、16000、20300 各抽 100 条,在记录里搜索扩展声明键 offer-receipt——600 条里 0 条声明。同一份数据里,bazaar 扩展本身出现在前 400 条中的每一条、后 200 条中的 0 条,说明这些记录并不均质,不是一次同质导出。
作者同样写清了这不能证明什么:8 个 facilitator 地址里有 7 个在该路径返回 HTML 或几个字节而不是 JSON(是"未测量",不是"零",其中包含 Coinbase 最大的索引);服务器也可能支持扩展但不体现在编目里——声明本来活在 402 响应里,编目只是二手记录。所以这是个强指向,不是证明。
为什么这个缺口比听起来重要:签名只回答"是谁在什么时候说的",不回答"说的是不是真的"。而收据的签名方就是有利益关系的一方——卖家自证交付,买家自证收到,都是如此。常用的补救是"作者撤回":跨 Base、Optimism、以太坊主网有 4,986,045 条认证里 733,203 条被撤销,其中 Base 上来自单一签发账户的三个 schema 占了 97%,大约撤掉了它签发量的一半——每一次都是一个签发者在纠正自己。但自我纠正在作者"没有利益动机让它为假"时才有效;当作者正是受益方时,它什么也帮不了。
唯一有帮助的是同一事件上另一方的签名:两个利害相反方对同一次交付各签一份,矛盾就变成算术,而不是观点。作者自己做了半个:一个 402 响应(注意响应体是空的,付款要求在 Payment-Required 头里——这也解释了为什么很多"探测看起来坏了"其实是在正常工作),Base64 解码后拿到带 EIP-712 签名 offer 的扩展;验证不需要信他:按域 {name:"x402 offer", version:"1", chainId:1} 与规范里 offer 的字段顺序(version、resourceUrl、scheme、network、asset、payTo、amount、validUntil)恢复签名地址,再用 dig +short TXT _controllers.tokenizen.nl 查谁有权代表这个域名——两个命令,同一个地址。他还提醒了规范里说得很明白的一点:签名有效 ≠ 有授权,任何人都可以给任意 resourceUrl 签收据。它跑在 Base Sepolia 上(钱是假的,密码学不是),价格十分之一美分;目前只有 offer、还没有人付过款,因此"签发收据"这一步仍然是空的。
五、清单:自己读链的八个习惯
- [ ] 把数字换成调用:拿到任何"数据",先问"哪个端点、哪个方法可以重放它";重放不了的,降级为线索;
- [ ] 钉住区块:每条读数带区块号 / 时间戳 / slot;快照不许当趋势,推广投放的多篇同源内容算一个信源;
- [ ] 用普通 JSON-RPC 重算:
eth_getTransactionByHash/eth_getTransactionReceipt/eth_call足够覆盖交易、日志、balanceOf、slot0这类最小事实; - [ ] 对到最小单位:差额闭包到 wei(或对应精度);对方只给 6 位小数时,明确说"这是截断";
- [ ] 换探测器:当
eth_getLogs被限流,用池/合约自身的状态变化当探测器,并对关键读数做多 RPC 交叉; - [ ] 本地库只当缓存:意图归应用,链上事实归链;"未知"是独立状态;对账是常驻回路,不是事故清理;
- [ ] 签名归签名,真相归真相:自证与自撤在有利害关系时不算数;要两方对同一事件签名的算术矛盾;
- [ ] 验证别人给的"验证工具":EIP-712 恢复 → 域名控制器(DNS TXT)→ 公开测试 fixture;每一步都能由陌生人用两条命令闭合。
一眼结论:"看得见"不等于"看得懂","有签名"不等于"是真的","我库里是这样"更不等于"链上还这样"。 本地优先在链上的版本,不是把节点搬回家,而是把验证路径搬回自己手里:数据要可调用,结论要可重算,账要能闭合,状态里的"未知"要诚实。
相关阅读
- 链上核验清单:收据、钱包与授权,别只看表面
- 合约管理员是谁:146 个 Morpho 金库的权限实测
- 量化研究 Agent 化:Jump Trading 的 autoresearch 与本地 MCP 工具链
- 专题:链上数据 / 安全与调查完全指南
- 专题:Agent 支付 / x402 与稳定币支付完全指南
本系列另两篇(三站相关系列 · 本地优先)
- 敏感单据不上传:本地 3B 模型转写 + 代码校验(落到文档:巴西发票、日本合格发票、阿尔伯塔电费单三份本地实测——模型只转写、代码负责算、错误进人工队列)
- 图纸不上传:DWG 版本自查与照片元数据清理(落到 CAD:浏览器读 DWG 文件头确定版本、本地审阅流程、共享工地照片前把 GPS/EXIF 无损清掉)
来源
- @innerozma, What a $31k Solana strategy looks like when you can read it live(dev.to,2026-10-15;作者注明由 AI Agent 为 Taskmarket 赏金所作;快照时间 2026-10-15T05:39 UTC,原文明确"单次快照、无历史与趋势、不构成投资建议";同日多个账号发布近同内容,按单一信源引用):https://dev.to/innerozma/what-a-31k-solana-strategy-looks-like-when-you-can-read-it-live-518d
- @imapphelp, FlapJax buyback receipts (Oct 12–13): re-derived from BNB Smart Chain(dev.to,2026-10-15;Taskmarket 赏金审计,全部为公开只读 RPC 调用,附 BSC 收款地址与完整复现命令):https://dev.to/imapphelp/flapjax-buyback-receipts-oct-12-13-re-derived-from-bnb-smart-chain-39gf
- @tradevodata, Why a Scheduler Cannot Trust Its Own Database(dev.to,2026-10-15;作者自述开发 Tradevo(把自然语言策略编译为确定性规则并在 Base 上执行),立场已在文内披露):https://dev.to/tradevodata/why-a-scheduler-cannot-trust-its-own-database-4mh9
- @holistis, I checked 600 live x402 services. None of them signs a receipt.(dev.to,2026-10-15;作者自建 tokenizen(买方向收据方案,代码开源);采样方法为 6 × 100 条、索引为 facilitator.payai.network,原文明确"强指向而非证明"):https://dev.to/holistis/i-checked-600-live-x402-services-none-of-them-signs-a-receipt-bbf
本文由 DefiPlot 翻译整理,转载请注明出处。
免责声明
本文仅用于学习与研究目的,不构成任何投资建议、财务建议或交易建议。文中提到的 Mycelium Finance、FlapJax、Tradevo、tokenizen 等内容来自第三方作者自述或自建项目,数字与结论均按其原文口径引用(快照时间 2026-10-15T05:39 UTC;回购审计基于公开 BSC RPC 读取;x402 扫描为抽样且原文声明其局限),DefiPlot 未做独立复测。加密资产与链上交互存在合约漏洞、数据错误、RPC 不一致、重组与钓鱼风险;价格、流动性、供应与认证数据随时可能变化,历史快照不代表当前状态,任何单一数据源都可能出错。请勿使用无法承受损失的资金参与,任何操作前请自行核对官方数据与链上记录并 DYOR(Do Your Own Research)。
本文属于「链上数据 / 安全」专题。查看专题全部文章 →
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。