做了个 Chrome 扩展,专门用来看 DApp 和钱包之间的 RPC 通信 - V2EX
爱意满满的作品展示区。
beilun

做了个 Chrome 扩展,专门用来看 DApp 和钱包之间的 RPC 通信

  •  
  •   beilun
    beilunyang 5 days ago 980 views

    平时调 dapp 的时候经常遇到这种事:网页那边一点按钮,钱包就跳出来要签名,但页面 没说清楚到底签的是啥、传了哪些参数、返回了什么。自己写的 dapp 还好,加几行 console.log 就完事;要是想看别人家合约的调用流程、或者复现一个用户反馈的奇怪报错,就得跑去 MetaMask 设置里翻 activity log ,还看不全 只能看自己钱包发出去的,看不到 dapp 那一侧的时序、参数、错误。

    以前一直靠在 window.ethereum 上猴补丁打日志,每次都要写一遍,挺烦的。索性做成了一个 Chrome 扩展。装上之后 F12 里会多一个面板叫 DApp Inspector,当前 tab 所有 window.ethereum.request 的调用都按时间顺序列出来:

    • 方法名(eth_sendTransaction / eth_signTypedData_v4 / personal_sign …),自动分类成 read / write / sign / subscribe
    • 完整的入参、返回值、错误对象
    • 时延分解:dapp 发起 → 扩展排队 → throttle → 钱包审批 → RPC 往返 → 回到 dapp ,每一段单独算
    • 当前 chainId 、来源 origin
    • 合约调用会自动 decode calldata 内置 ERC-20/721/1155/Permit2 选择器,识别不到再去 Sourcify 、4byte 拉,拉到的 ABI 本地缓存 7 天

    顺手加了几个调试用的规则引擎:

    • Block 按方法名/origin 匹配,拒掉某些请求,自定义错误码和消息,看 dapp 的错误分支处理得对不对
    • Throttle 给匹配的请求加延迟,验证慢网络 / loading state / 超时分支
    • Mock 用预设结果短路掉某个调用,比如假装某个 eth_call 返回特定数据,不用真上链
    • Replay 任何捕获到的调用都能重放一次,JSON 参数可以现场改,钱包会按原流程再弹一次

    全部本地运行,没有 telemetry 、没有账号、没有外部服务器( Sourcify / 4byte 是按需才请求 ABI ,可以理解为和你打开网页加载图片是一个性质的)。技术栈是 MV3 + TS + React 18 + Vite ,Apache-2.0 开源。

    目前只支持 EVM ,Solana / Sui 还在规划。如果你也是 dapp 、钱包、或者安全审计方向的,欢迎装来玩玩,bug / 需求直接提 issue 。

    另外有个不情之请:目前插件 logo 还是粗糙了一些,想找设计师朋友帮忙画个更精致的版本,README 末尾写了贡献方式,会在 release notes 里署名致谢 有兴趣的求支援

    预览图

    https://pic.otaku.ren/20260521/AQADKRlrG2OjeVR-.jpg

    https://pic.otaku.ren/20260521/AQADKhlrG2OjeVR-.jpg

    https://pic.otaku.ren/20260521/AQADKxlrG2OjeVR-.jpg https://pic.otaku.ren/20260521/AQADLBlrG2OjeVR-.jpg

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     2809 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:30 PVG 23:30 LAX 08:30 JFK 11:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86