Перейти к содержимому
Anon Wallet

Пакетные транзакции

Anon поддерживает wallet_sendCalls из EIP-5792: несколько вызовов за одно одобрение и, при необходимости, использование средств приватного пула.

Базовое использование

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. Исполнение пакета

Пользователь одобряет одно окно с деэкранированием и вызовами.

Интеграция пеймастера

Для спонсирования газа в wallet_sendCalls:

const result = await window.ethereum.request({
  method: "wallet_sendCalls",
  params: [{
    version: "1.0",
    chainId: "0x1",
    calls: [...],
    capabilities: {
      paymasterService: {
        url: "https://paymaster.anon.inc/v1",
      }
    }
  }],
});

Пеймастер оплачивает газ пакета, а комиссия списывается с экранированного баланса в настроенном токене.

Источники со стелс-адресом

Источник привязан к стелс-адресу, когда пользователь подключил его вместо основного публичного EOA:

  • Включён auxiliaryFunds, доступен экранированный баланс
  • Включён paymasterService, газ можно оплатить из пула
  • eth_getBalance возвращает сумму баланса в блокчейне, приватного WETH и резерва газа
  • eth_call для balanceOf возвращает сумму публичного и приватного экранированного балансов

DApp видит полный эффективный баланс и действует соответственно; информация об этом балансе раскрывается подключённому DApp.

Совместимость

  • wallet_sendCalls с atomicBatch доступен в сетях с развёрнутым исполнителем пакетов Anon
  • Для auxiliaryFunds нужен активный экранированный баланс запрошенного токена
  • DApp без EIP-5792 могут продолжать использовать eth_sendTransaction