# Account Abstraction Overview

*The purpose of this document is to accelerate the on-boarding process for developers looking to build advanced applications that require directly interacting with lower level functions within RAILGUN, there are less guardrails in place when building these applications. If your application can be implemented as a multicall you should instead go to the* [*cookbook overview*](https://docs.railgun.org/developer-guide/cookbook/cookbook-overview)*.*

RAILGUN private balances are a form of ZK based Account Abstraction that pre-dates ERC-4337.

Rather than requiring users to sign transactions with their own wallet and revealing addresses, transaction verification happens through a SNARK Proof verifying against a shielded Merkle Tree of balances. This enables interesting utility like RAILGUN [gasless transactions](https://docs.railgun.org/wiki/learn/using-shielded-tokens/gasless-transactions), where private transactions can be sent using stablecoins or any other token accepted by Relayers as opposed to the chain’s native gas token like ETH.

This utility from ZK Account Abstraction can be extended in even more interesting directions than just gasless transactions such as:

* Private voting using RAILGUN balances, enabling anonymous voting based on ERC-20s or NFTs
* ZK Payments infrastructure to support use cases like private bounty or salary payments
* Sealed transfer of tokens between 2 users at a pre-agreed upon price or condition


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.railgun.org/developer-guide/engine-1/account-abstraction-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
