> For the complete documentation index, see [llms.txt](https://hyperliquid-names.gitbook.io/hyperliquid-names/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hyperliquid-names.gitbook.io/hyperliquid-names/smart-contracts/technical-details.md).

# Technical Details

The protocol at launch comprises contracts: `HLN_Minter`, `HLN_Router`, `HLN_RegistratorV1`, `HLN_Auction`, and `HyperliquidNames`.

### Standard Flow

1. Either an auction is initiated on the `Auction` contract, which calls to the `HLN_Minter` at auction close or the `HLN_Minter` is called via another issuance or sale mechanism.
2. The `HLN_Minter` contract verifies the relevant payment or permission properties and calls the `HLN_Router` to ask for the current Registrator version.
3. `HLN_Router` contract responds to calls for the `currentVersion` index with a corresponding Registrator address ( as of launch:`HLN_RegistratorV1`).
4. The `HLN_Minter` calls the given `HLN_RegistratorV1` , which in turn creates a new name and issues a corresponding token via the `HyperliquidNames` to the new ownership.

### EOA Permissions Assumptions

* `Deployer`: has the highest level of permission for each contract. This party set the initial state of the protocol, specifying the version of the `HLN_RegistratorV1` contract and the signer for the `HLN_Minter` contract.
* `Signer`: a specific address, whose corresponding private key has sole authorization to sign minting calls. This ensures minting can only occurr through the authorized dApp and not direct on contract, which would allow bypassing name validation (normalization and whitelist).
* `NameOwner`: The owner of a name has the ability to transfer the token or renew (extend) the name expiry. They can also set primary and subdomain controllers for the name.
* `Controller`: The controller of the primary or subdomain name have the ability to set resolution addresses and Text Records for their corresponding level.
