AppKit integrates with EIP-5792 to interact with embedded Wallets (smart accounts) through wallet capabilities. It focuses on three primary methods: wallet_getCapabilities, wallet_sendCalls, and wallet_getCallsStatus. It shows how to check if atomic batch transactions are supported and how to use them.

wallet_getCapabilities

Appkit checks the atomic capability from wallet_getCapabilities of the wallet in order to know if a wallet required to handle the batch of calls atomically or not. Wallets should include the EIP-5792 capabilities in CAIP-25.

wallet_sendCalls

Depending on the 3 different values from the atomic capability, AppKit will trigger the wallet_sendCalls:

  • supported means that the wallet supports atomic batch transactions for the account and chain ID. The wallet executes calls atomically and contiguously
  • ready means that the wallet can upgrade to support atomic execution, pending user approval.
  • unsupported means that the wallet does not provide any atomicity or contiguity guarantees, and it will not suggest an upgrade to the user. The dApp should fallback to eth_sendTransaction instead of wallet_sendCalls, and eth_getTransactionReceipt instead of wallet_getCallsStatus

Request Example

{
    "from": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
    "chainId": "0x01",
    "atomicRequired": true,
    "calls": [
      {
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x9184e72a",
        "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"
      },
      {
        "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
        "value": "0x182183",
        "data": "0xfbadbaf01"
      }
    ]
  }
  • atomicRequired -  can be set to either true or false.
    • If the atomic capability is not supported set to false
    • If the atomic capability is supported set to true

wallet_getCallsStatus

Call this function to get the information about the batch execution.

  • The batchId field, returned from the wallet_sendCalls will be used to identify the batch call.

  • The atomic field specifies how the wallet handled the batch of calls, which affects the structure of the receipts field.

Response Example

{
  "chainId": "0x01",
  "id": "0x00000000000000000000000000000000000000000000000000000000000000000e670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
  "status": 200,
  "atomic": true,
  "receipts": [
    {
      "logs": [
        {
          "address": "0xa922b54716264130634d6ff183747a8ead91a40b",
          "topics": [
            "0x5a2a90727cc9d000dd060b1132a5c977c9702bb3a52afe360c9c22f0e9451a68"
          ],
          "data": "0xabcd"
        }
      ],
      "status": "0x1",
      "blockHash": "0xf19bbafd9fd0124ec110b848e8de4ab4f62bf60c189524e54213285e7f540d4a",
      "blockNumber": "0xabcd",
      "gasUsed": "0xdef",
      "transactionHash": "0x9b7bb827c2e5e3c1a0a44dc53e573aa0b3af3bd1f9f5ed03071b100bb039eaff"
    }
  ]
}
  • if atomic is true, the batch was executed atomically by a wallet

  • if atomic is false, the batch was executed non-atomically by a wallet