# Doma Smart Contracts API

## Protocol Overview

Below is a brief overview of the Smart Contracts that form Doma Protocol.

<figure><img src="/files/e2MRd1Nar0GZfIhNWHAL" alt=""><figcaption></figcaption></figure>

* **Doma Record:** Main contract that holds information about a domain and issues Name Tokens. Serves as a coordination point for cross-chain operations. Exposes a Registrar-facing API that provides a full suite of operations to manage domains.
* **Doma Forwarder:** [EIP-2771](https://eips.ethereum.org/EIPS/eip-2771) Trusted Forwarder, that relays meta transactions from a Registrar to Doma Record contract. Optional, since Registrars can submit transactions directly to the Doma Record contract.
* **Doma Gateway:** [ERC-7786](https://erc7786.org/) Gateway Sourc&#x65;**,** deployed on each supported chain. This contract allows sending messages to contracts on other chains.
* **Proxy Doma Record:** Supporting contract, facilitates communication between users and contracts on each tokenization chain with the Doma Record contract. Used to abstract Doma Chain from end-users and provides core domain-management operations (like claiming and bridging).
* **Ownership Token:** Regular [ERC-721 ](https://eips.ethereum.org/EIPS/eip-721)NFT contract (or equivalent on non-EVM chains), with some modifications to support expiration and compliance operations:
  * Additional `expirationOf` function is provided to check expiration date. After expiration, token will become non-transferrable, and could either be renewed or deleted by the Registrar.
  * Additional `registrarOf` function is provided to get sponsoring Registrar's IANA ID.
  * Token could be burned by the Registrar, if conditions are met (domain is claimed by a current token owner).
  * Registrar retains the right to burn the token even if conditions are not met (domain is not claimed by a current token owner) for compliance reasons (e.g. in case of lost UDRP dispute over the domain).
  * Registrar can lock token transfer for compliance reasons (e.g. in case of UDPR dispute in progress).
  * [ERC-2981](https://eips.ethereum.org/EIPS/eip-2981) standard is used to configure royalties information.

## EVM-compatible chains

* [Proxy Doma Record Contract API](/api-reference/doma-smart-contracts-api/evm-proxy-doma-record-api.md) - documentation for user-facing methods.
* [Name Token Contract API](#ownership-token-contract) - documentation for non-standard methods of Ownership Token Contract.

## Solana

On Solana, Doma Protocol operates as Solana Records Service ([SRS](https://records.solana.com/)) program to issue and tokenize domains.

<figure><img src="/files/el8Brcdv47HwAoL6q1gk" alt=""><figcaption></figcaption></figure>

* Doma Protocol owns a Permissioned Class on the SRS program, which is used to issue and manage tokenized domains.
* [Token 22](https://spl.solana.com/token-2022) is used as an underlying NFT standard.
* SRS Program retains full control over minted NFTs (since it can sign on behalf of mint account, which has full authority delegation), so compliance operations are performed through SRS, using Proxy Doma Record PDA as a Class Authority to authorize operations.
* Doma Gateway exists as part of Proxy Doma Record Program.


---

# 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.doma.xyz/api-reference/doma-smart-contracts-api.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.
