跳至正文
Anon Wallet

批量交易

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 将:

  1. 使用 zk 证明从私密余额解除屏蔽所需金额;目标和金额变为公开
  2. 用解除屏蔽的资金为调用注资
  3. 执行批量调用

一个合并弹窗展示解除屏蔽和调用,供用户批准。

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