# Nullifiers

The nullifier is a unique value calculated on the transaction *input* account. It is included in the public transaction portion. The nullifier depends on the input account, the intermediate key $$\eta$$ and the account position in the Merke tree ($$path$$):

$$Nullifier(Acc^\text{in}) = Hash\_{nullifier}(Hash\_{account}(Acc^\text{in}), I)$$

where $$I$$is intermediate nullifier hash calculated as:

$$I = Hash\_{inh}(Hash\_{account}(Acc^{in}), \eta, path)$$

$$Hash\_{nullifier}$$, $$Hash\_{inh}$$ and $$Hash\_{account}$$ is a[ $$Poseidon$$ hash functions](/implementation/untitled/the-poseidon-hash.md)

There is an archive on the contract side which holds nullifiers. In the case of account double-spending the nullifiers for the same accounts will equal one another. In this case the contract will reject a second transaction with the repeated nullifier value.

A nullifier pre-image could be safely disclosed without opening any sensitive data, like an intermediate key $$\eta$$ used for encryption and decryption. For example the nullifier disclosure could be useful in compliance reports to prove account-chain linkage.


---

# 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.zkbob.com/implementation/transaction-overview/the-nullifiers.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.
