批量交易
Anon 支持 EIP-5792 的 wallet_sendCalls,DApp 可通过一次授权提交多个调用,并可选择用私密池资金完成交易。
基本用法
const result = await window.ethereum.request({
method: "wallet_sendCalls",
params: [{
version: "1.0",
chainId: "0x1",
calls: [
{
to: "0xTokenAddress...",
data: "0x095ea7b3...", // approve(spender, amount)
},
{
to: "0xDexRouter...",
data: "0x...", // swap call
value: "0x0",
},
],
}],
});
// result.id is a job ID for status polling
用户看到汇总全部调用的授权弹窗。若支持 atomicBatch,所有调用在一笔交易中执行,任一失败则全部回滚。
检查状态
const status = await window.ethereum.request({
method: "wallet_getCallsStatus",
params: [result.id],
});
// status.status: "PENDING" | "CONFIRMED" | "FAILED"
// status.receipts: array of transaction receipts when confirmed
持续轮询,直到 status.status 不再为 "PENDING"。
使用辅助资金
连接来源有隐身地址及屏蔽余额时,Anon 报告 auxiliaryFunds,DApp 可请求使用:
const result = await window.ethereum.request({
method: "wallet_sendCalls",
params: [{
version: "1.0",
chainId: "0x1",
calls: [...],
capabilities: {
auxiliaryFunds: {
// Optional: specify the asset and amount needed
assets: [
{
address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
amount: "0xDE0B6B3A7640000", // 1 WETH
}
]
}
}
}],
});
Anon 将:
- 使用 zk 证明从私密余额解除屏蔽所需金额;目标和金额变为公开
- 用解除屏蔽的资金为调用注资
- 执行批量调用
一个合并弹窗展示解除屏蔽和调用,供用户批准。
Paymaster 集成
在 wallet_sendCalls 中使用 gas 赞助:
const result = await window.ethereum.request({
method: "wallet_sendCalls",
params: [{
version: "1.0",
chainId: "0x1",
calls: [...],
capabilities: {
paymasterService: {
url: "https://paymaster.anon.inc/v1",
}
}
}],
});
Paymaster 支付批量交易 gas,并按配置的费用代币从屏蔽余额扣费。
绑定隐身地址的来源
用户将隐身地址而非主公开 EOA 连接至 DApp 时,来源即绑定隐身地址:
- 启用
auxiliaryFunds,可使用屏蔽余额 - 启用
paymasterService,可从屏蔽余额支付 gas eth_getBalance返回链上余额、私密 WETH 余额及 gas 缓冲的合计balanceOf的eth_call返回链上和私密屏蔽余额合计
DApp 因而能按完整有效余额操作,同时也获知该有效余额信息。
兼容性说明
- 具备已部署批量执行合约的链支持带
atomicBatch的wallet_sendCalls auxiliaryFunds要求所请求代币有可用屏蔽余额- 不支持 EIP-5792 的 DApp 仍可使用标准
eth_sendTransaction