# Halowerk AA UserOperation Simulator

> Halowerk AA UserOperation Simulator is a paid API for AI agents from ident.halowerk.com, paid per call via x402, $0.005/call, status unknown (last checked 2026-09-14).

Validates an ERC-4337 UserOperation structurally and against live chain state, checking funding, nonce freshness, paymaster stake, and gas limits before submission.

## Facts

- Endpoint: POST https://ident.halowerk.com/v1/aa-simulate
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/halowerk-aa-useroperation-simulator-91a40cf6
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_mY8Cqvb8PBcWsateGjUc0

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability halowerk-aa-useroperation-simulator-91a40cf6 -d '<json body>'
```

Example prompt: Before I submit this UserOperation to the bundler, check it against the EntryPoint on chain — verify the sender deposit covers the prefund, confirm the paymaster is staked and funded, and tell me if the nonce is still fresh.

## When to prefer this

Use this endpoint when you need to pre-flight validate an ERC-4337 UserOperation before submitting it to a bundler — especially when you want to catch funding shortfalls, stale nonces, or paymaster issues without spending gas on a failed transaction. Prefer this over manual simulation when you need a single call that checks sender deposit, paymaster stake/deposit, nonce freshness, and prefund computation together in one plain-language verdict.

## Known failure modes

- Stale nonce: supplied nonce does not match EntryPoint state, operation rejected
- Insufficient sender deposit: sender's EntryPoint balance does not cover required prefund
- Underfunded paymaster: paymaster deposit insufficient for the operation's gas costs
- Unstaked paymaster: paymaster does not meet minimum stake requirements
- Malformed UserOperation: structural validation fails due to missing or invalid fields
- RPC/chain connectivity error: unable to read live state from the EntryPoint contract
- Unsupported chain: target chain or EntryPoint address not supported by the service

## How this service works

Validates a UserOperation structurally and against chain state. It computes the required prefund from the gas limits and fee fields, reads the sender deposit on the EntryPoint and, when a paymaster is set, that paymaster deposit and stake, and says plainly whether the operation is funded. The nonce is read from the EntryPoint and compared with the one supplied, so a stale nonce is caught before submission.

## Output

Returns a structured validation result indicating whether the UserOperation is valid and funded, including: the computed required prefund derived from gas limits and fee fields, the sender's current deposit balance on the EntryPoint, the paymaster's deposit and stake (if applicable), the expected vs supplied nonce, and a plain-language verdict on whether the operation is ready for bundler submission.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "chain": {
   "enum": [
    "ethereum",
    "base"
   ],
   "type": "string",
   "default": "base",
   "description": "Which chain to check against."
  },
  "entry_point": {
   "type": "string",
   "maxLength": 64,
   "description": "EntryPoint address. Defaults to v0.7."
  },
  "simulate_call": {
   "type": "boolean",
   "default": true,
   "description": "Execute the inner call with eth_call to surface a revert."
  },
  "user_operation": {
   "type": "object",
   "properties": {
    "nonce": {
     "type": "string",
     "description": "Nonce as hex or decimal."
    },
    "sender": {
     "type": "string",
     "description": "Smart account address."
    },
    "factory": {
     "type": "string"
    },
    "callData": {
     "type": "string",
     "description": "The call the account should make."
    },
    "initCode": {
     "type": "string",
     "description": "v0.6 style; the first 20 bytes are read as the factory."
    },
    "paymaster": {
     "type": "string",
     "description": "Paymaster address, v0.7 style."
    },
    "callGasLimit": {
     "type": "string"
    },
    "maxFeePerGas": {
     "type": "string"
    },
    "paymasterAndData": {
     "type": "string",
     "description": "v0.6 style; the first 20 bytes are read as the paymaster."
    },
    "preVerificationGas": {
     "type": "string"
    },
    "maxPriorityFeePerGas": {
     "type": "string"
    },
    "verificationGasLimit": {
     "type": "string"
    }
   },
   "description": "The UserOperation. EntryPoint v0.7 field names; v0.6 style is accepted and mapped."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/halowerk-aa-useroperation-simulator-91a40cf6/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from ident.halowerk.com](https://www.zero.xyz/host/ident.halowerk.com/llms.txt)
