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

Возможности кошелька

Метод wallet_getCapabilities из EIP-5792 сообщает DApp расширенные возможности для данной сети и источника.

Вызов wallet_getCapabilities

const capabilities = await window.ethereum.request({
  method: "wallet_getCapabilities",
  params: [accounts[0]],
});

Ответ сопоставляет ID сетей объектам возможностей.

Формат ответа

{
  "0x1": {
    "auxiliaryFunds": {
      "supported": true,
      "assets": [
        {
          "chainId": "0x1",
          "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
        }
      ]
    },
    "paymasterService": {
      "supported": true,
      "url": "https://paymaster.anon.inc/v1"
    },
    "atomicBatch": {
      "supported": true
    }
  }
}

auxiliaryFunds (ERC-7682)

auxiliaryFunds означает, что для wallet_sendCalls доступны средства вне обычного публичного баланса, а именно экранированный баланс Railgun.

Включено только для источников с подключённым стелс-адресом и сообщает DApp:

У кошелька есть дополнительные средства в приватном пуле для этой транзакции; не нужно полагаться только на достаточность видимого баланса в блокчейне.

Поведение

При wallet_sendCalls от источника, подходящего для auxiliaryFunds:

  1. Anon проверяет нужные активы в экранированном балансе
  2. При достаточности деэкранирует сумму для вызовов; публичные назначение и сумма видны
  3. DApp получает подтверждение, не управляя внутренним деэкранированием

Список активов

Массив assets перечисляет доступные токены пула:

  • WETH, основной актив для операций в ETH
  • Все токены экранированного баланса пользователя в этой сети

paymasterService

При поддержке paymasterService можно спонсировать газ в wallet_sendCalls:

{
  "version": "1.0",
  "capabilities": {
    "paymasterService": {
      "url": "https://paymaster.anon.inc/v1"
    }
  }
}

URL пеймастера принимает совместимые с ERC-4337 запросы.

atomicBatch

atomicBatch: { supported: true } означает атомарное исполнение wallet_sendCalls: успех всех вызовов либо общий откат. Anon использует пакетирование смарт-контрактом.

DApp вроде Uniswap проверяют atomicBatch перед сценарием смарт-кошелька.

Проверка во время выполнения

const caps = await window.ethereum.request({
  method: "wallet_getCapabilities",
  params: [accounts[0]],
});

const chainCaps = caps[chainId];

if (chainCaps?.auxiliaryFunds?.supported) {
  // Can use private funds in wallet_sendCalls
}

if (chainCaps?.atomicBatch?.supported) {
  // Can use wallet_sendCalls with atomic execution
}