# Mint Mechanics

The MintManager itself facilitates **fixed priced public sales** in which you can add basic information like a payment recipient, a max supply, a max per wallet, etc. It also supports gated **signature-based sales**, which allows Highlight to validate gate access offchain and then process mints on chain.

But *beyond that*, developers can also write their own custom mint mechanics. Mint mechanics can be crafted to produce highly tailored sales experiences. Highlight's own ranked auction and Dutch auction formats are powered by mint mechanics. Others have produced custom mint mechanics to accomplish things like running their own off chain servers to process mint logic, use their own credit card payment system, sign transactions, and then execute mints.&#x20;

Mint mechanics have functions that are inserted as hooks into the mint managers, and are run before minting can occur. This means you can decide for yourself, in your own mechanic, what sale logic to process. Once the mechanic's mint logic is processed, the mint will proceed successfully. In these cases, the only check run in our mint manager is the check to verify that the appropriate Highlight fee of .0008 ETH has been paid.

Every custom mechanic has a [simple interface to adhere to](https://github.com/highlightxyz/hl-evm-contracts/blob/main/contracts/mint/mechanics/interfaces/IMechanic.sol), with three core methods: `createVector` (all mechanics use a global ID system, and you call createVector to create one and register it), `processNumMint` (a hook where your custom logic happens, all we do is validate that fee was paid and then we execute), `processChooseMint` (the same kind of hook but for collectors' choice series).&#x20;

Finally, note that your custom mechanic can receive arbitrary data passed in from the mint manager as the final parameter, allowing you to pass in custom data that you can process inside your mechanic.

The arbitrary data parameter in all three functions (`createVector`, `processNumMint`, `processChooseMint`) is the key to implementing highly customizable sale logic in your mechanic.

### Contracts link&#x20;

{% embed url="<https://github.com/highlightxyz/hl-evm-contracts/tree/main/contracts/mint/mechanics>" %}


---

# 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://support.highlight.xyz/knowledge-base/for-developers/minting-protocol/mint-mechanics.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.
