Now You See Me: 抽象钱包是如何隐藏真实链上操作的
首先声明,这里有些标题党,并不是完全隐藏,而是加大了溯源难度。在文章后半段,我会给出可操作的溯源方法。 你有没有遇到过这样的情况:在一些扫链工具里,没看到巨鲸大额砸盘,但自己买的土狗代币价格却已经直线下跌。从链上看,也没发现哪个地址进行了大额卖出。 本文用一个例子解释AA 钱包会让授权/发起者/资金流彼此分离,从而让部分传统扫链规则失效,并给出可操作的溯源方法。
背景介绍
先来简单复习一下以太坊的地址种类:
- EOA地址:外部账户地址,由私钥控制。
- 智能合约地址:由合约代码控制,这类地址没有私钥,只有合约代码。
从日常链上交互的视角来看,我们可以大致地把链上买币/卖币分为以下几个步骤:
- 授权:授权智能合约使用你的代币。
- 交易:智能合约扣减你的代币,执行卖出。
- 转账:把卖出得到的代币转到收款人地址。
这里,通常1可以提前做,3则是一个可选项。这里可能会出现很多变体,比如:
- Binance / OKX DEX 以及其他路由,可能会先把买的币转到一个中间地址,然后在一个交易内把你买到的代币转给你。
- 卖出的代币转到指定收款人。
一笔典型的交易如下图所示:
在这里,地址 0x5c6C6BD98573030206E9dfb70F6266FE5892Dbd0 与 Dex Router 交互,是交易的发起人、gas 支付人、收款人。
Dex Router 扣掉 BNB 后,把买的 TST 转给0x5c6C6BD98573030206E9dfb70F6266FE5892Dbd0.
上述基础的链上交互流程,大家应该都比较熟悉,接下来,我们来看一个可能的情况:
- 你持有 1000 USDC,想买 TST。
- 你通过混币的方式(跨链/交易所提取等)把 1000 USDC 转账给一个中间地址。
- 中间地址等待你的指令,当你执行买入,卖出或转账时,中间地址会执行相应的操作。
与上面提到的基础链上交互流程相比,这里直接参与的地址,即:交易发起人、交易 gas 支付人、收款人,都不是代币实际持有者的EOA地址。
此外,收到的代币,在控制人发起转账之前,代币还是放在中间地址的。
这正是 EIP-4337(账户抽象,AA)的工作方式。AA 钱包本质上是一个可充当钱包的智能账户,它允许“签名者、交易发起者、gas 支付者与资金持有者”分离。AA 最初的目标是提升可用性(如无原生 gas 也能交易),并非“隐藏交易”,但也确实增加了解析难度。
一开始是为了即使不在链上持有gas token时也能执行交易,但因为链上解析的复杂性,目前很多链上信息工具,均没有解析这一环节。
这就导致,虽然你在链上没有看到大额卖出,但是价格却已经直线下跌,本质上是因为你盯的是 EOA 的授权与资金流,但真正的卖出发生在一个智能账户里,让传统的扫链规则失效。
一笔典型的 AA 钱包交易在这里:
为什么会看不到大额卖出?
回到开头的问题:为什么价格在跌,却在链上看不到“大额卖出”?
传统流程:
EOA地址 0x5c6C6B... ──[1) 调用 Swap 交易]──> DEX Router ──────────> AMM Pool (BNB/TST)
^ │ │
| │ │
└────────────────[2) 买到的币转回去给EOA地址 ]───────┴─────────────────────────┘
AA流程:
主私钥持有者 ──[签名 UserOperation (离线)]──> Bundler ──> EntryPoint.handleOps ──[校验签名/费率 + Paymaster 检查]──> Smart Account (AA)
(私钥/主身份) │ │
│ ├─> (1) Permit/授权
│ ├─> (2) Swap:调用 DEX Router
│ └─> (3) Transfer:转给收款人 0xB8aa6c...
│
Paymaster ─────> Gas 支付:扣押金/代币结算
传统扫链工具的监控逻辑
传统扫链规则隐含了一个前提:授权者=发起者=gas 支付者=资金持有者=同一 EOA。于是“授权→交易→转账”都能在同一地址时间线上被看见。
- 监控 EOA 地址的授权交易:当一个地址发起
approve
交易时,标记为”准备交易” - 追踪资金流动:监控代币从哪个地址转出、转到哪里
- 识别交易发起者:通过
from
字段识别是谁发起了交易 - 关联 gas 支付者:通过谁支付 gas 来辅助判断真实的操作者
这套逻辑对于普通的 EOA 地址交易非常有效,因为:
- 授权者 = 交易发起者 = gas 支付者 = 代币持有者 = 同一个 EOA 地址
- 所有操作都会显示在该地址的 Transaction 列表中
- 资金流向清晰可见
更进一步地说,回到开头,买卖本质就是交易、转账两个步骤的组合,如果扫链工具能正确解析到这两个步骤,就能正确识别出真实的操作者。
AA 钱包如何间接隐藏操作
AA 将“签名/发起/gas/资金归属”拆散:授权可通过 permit
与交易合并,调用经 EntryPoint
内部执行,发起者可能是 Bundler,gas 由 Paymaster 结算,资金暂存在 AA 钱包中并直达另一个收款地址,传统的可见性与归因链条因此断裂。
- 没有独立的授权交易:通过 Permit 或批处理,授权和交易合并在一次执行中,扫链工具抓不到”准备卖出”的信号
-
交易不出现在 Transaction 列表:AA 钱包的操作是通过 EntryPoint 合约的内部调用执行的,只会出现在 Internal Transactions 中,大多数人不会专门去查看这个标签页
- 发起者≠控制者:
- 链上看到的发起者可能是 Bundler 的地址
- 真正的控制者只是签了一个 UserOp,不会直接出现在链上
- Gas 由 Paymaster 支付,与实际控制者无关
- 资金流特征被打散:
- 代币放在智能合约地址(AA 钱包)中,而不是 EOA 地址,这里通常会被直接过滤掉
- 卖出操作在合约内部完成
- 收款可以直接到另一个地址,不经过原地址
一个具体的例子
以这笔交易为例: https://bscscan.com/tx/0xb12ce0488c5689a6c5ea2582a9bef4259723e57618893f1a32c9a0327c00a7a0 0x4Ed01522D6d4193f98F2be67460cB38078adCaaB 虽然是交易发起者,但他只负责支付gas fee。 在该交易中,链上“发起者”仅是 Bundler/gas 支付相关地址;真正的操作者通过 UserOperation 间接完成了授权与卖出,这些关键信息多出现在“Internal Transactions/Logs”,而非“Transactions”列表。
- 监控不到任何的授权(没有独立的 approve 交易)
- 在 0xB8aa6c1042F7DA2eA6399fA53b0D58894c754F95 的 Transaction 列表里看不到任何记录
- 0xB8aa6c1042F7DA2eA6399fA53b0D58894c754F95 的操作在 Internal Transactions 中,容易被忽略
- 即使看到了链上可见的交易,执行方是 Paymaster,也很难直接关联到对应持有者,除非转账。
这就是为什么看到价格在跌,却找不到是谁在砸盘——因为传统的监控规则失效了。 市面上扫链工具的解析逻辑,很多都没解析到这一个环节。
怎么查出是谁在砸盘?
回到最初的问题,怎么查出是谁在砸盘?
一个最基本的想法是,直接从 Token 的 Transfer 事件出发,逐一排查转账。
然后从浏览器中直接看, bscscan 、debank 跟 oklink 等均能较好直接语义化解析到对应交易,前提是你能找到对应的交易 hash。
但更好的办法是直接从支持的扫链工具入手: 能正确解析 AA 的工具(举例,非推荐,调研时间为 2025/10/18):
- OKX DEX
- Axiom
- BullX
以下工具暂时无法正确解析到 AA 相关交易:
- gmgn
- AveAI
- Photon
- Binance Web3 DEX
总结
本文从”看不到砸盘者”这一实际问题出发,揭示了账户抽象钱包的工作原理:
- AA 钱包本质:用智能合约代替 EOA 进行链上操作
- 隐藏效果:部分扫链工具依赖 EOA 交易记录,无法追踪 AA 内部操作
- 解决方案:使用支持 AA 解析的工具,或直接追踪 Token Transfer 事件
需要强调的是,AA 钱包的设计初衷是改善用户体验(无需持有 gas token、批量操作等), 并非刻意隐藏交易。但客观上确实增加了链上监控的难度。
撰文时发现,很遗憾的是, OKX Wallet 去年6月就把 AA 钱包创建功能给关了(也许是因为快人两步导致没人用🤷),虽然不知是什么原因,但比较可惜。 上述所有操作均可以通过 Coinbase Wallet 直接创建 Smart Account 直接复现。
附录
- AA 钱包发起的 Swap: 0xb12ce0488c5689a6c5ea2582a9bef4259723e57618893f1a32c9a0327c00a7a0
- EOA 钱包发起的 Swap:0xf3660c31d65e21912edc3aa5b2aee18ddf6304ce87bd97f8c7d609c6a693af5f