> For the complete documentation index, see [llms.txt](https://docs.catalog.cat/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.catalog.cat/technical-manual/catalog.md).

# CATalog

CATalog is, at a high level, a registry that allows non-expiring registrations of data hashes. Each registration creates an NFT representing the registration. By social convention, TAILs are the data being registered, and the returned NFTs are used to store and update CAT details such as name or image.

The CATalog registry's state is `(cat_maker_puzzle_hash . registration_price)`, where the first argument is the CAT maker for the payment CAT, while the second variable holds the amount of the CAT to be paid for a registration (in CAT mojos). The current on-chain values should always be read from registry state rather than assumed from documentation.

### Registry Constants

Launch-time constants are stored in [`CatalogRegistryConstants`](https://github.com/xch-dev/chia-wallet-sdk/blob/main/crates/chia-sdk-driver/src/primitives/action_layer/catalog_registry_info.rs):

| Field                          | Purpose                                             |
| ------------------------------ | --------------------------------------------------- |
| `launcher_id`                  | CATalog registry singleton launcher id              |
| `royalty_address`              | NFT royalty puzzle hash                             |
| `royalty_basis_points`         | NFT trade royalty (basis points)                    |
| `precommit_payout_puzzle_hash` | Where precommit funds go on successful registration |
| `relative_block_height`        | Blocks before a precommit coin is spendable         |
| `price_singleton_launcher_id`  | State scheduler / price singleton launcher id       |

### NFT Registratio

For each registration, the registry asserts an NFT was minted through:

1. **Uniqueness prelauncher** - 0-amount coin whose puzzle commits to the TAIL hash ([`uniqueness_prelauncher.rue`](https://github.com/Yakuhito/slot-machine/blob/master/rue-puzzles/nft/uniqueness_prelauncher.rue))
2. **Launcher coin** - standard singleton launcher
3. **Eve NFT** - asserted to be spent at launch

Uniqueness prelaunchers allow APIs and other dApps to efficiently verify that an NFT genuinely represents a given TAIL hash.

### Announcements and SDK

Generally, announcements and messages from the main registry are sent using a one-byte prefix followed by a hash of the actual message contents. To prevent collisions, the prefixes and message structures are defined in [`catalog_registry_prefix.rs`](https://github.com/xch-dev/chia-wallet-sdk/blob/main/crates/chia-sdk-driver/src/primitives/action_layer/catalog_registry_prefix.rs).

The high-level driver primitive is [`CatalogRegistry`](https://github.com/xch-dev/chia-wallet-sdk/blob/main/crates/chia-sdk-driver/src/primitives/action_layer/catalog_registry.rs).

*Written by* [*yakuhito*](https://x.com/yakuhito) *from* [*FireAcademy.io*](https://fireacademy.io/) *on Feb 11th, 2025.*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.catalog.cat/technical-manual/catalog.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
