---
title: "OverlayerOG"
description: "Solidity reference for OverlayerOG, an allowlisted, non-transferable Overlayer OG collection: a 14-day paid Merkle mint, a separate free-mint Merkle root, and royalty and supply controls."
keywords:
  - "OverlayerOG"
  - "Solidity"
  - "ERC-721"
  - "Merkle mint"
  - "allowlist"
canonical_url: https://docs.overlayer.fi/developer_guide/contracts/OverlayerOG
md_url: https://docs.overlayer.fi/developer_guide/contracts/OverlayerOG.md
last_updated: 2026-10-03T17:55:49.000Z
---

# OverlayerOG

> Solidity reference for OverlayerOG, an allowlisted, non-transferable Overlayer OG collection: a 14-day paid Merkle mint, a separate free-mint Merkle root, and royalty and supply controls.

An allowlisted Overlayer OG collection that is mint-only (non-transferable, non-burnable).

_Paid Merkle mints cost `{MINT_PRICE}` during a 14-day window. A separate free-mint Merkle
     root allows zero-price claims. After minting ends, the fixed holder set is loaded onto
     spoke Liquidity farms via the same `setMerkleRoot` task used for Origin NFTs._

### MAX_SUPPLY

```solidity
uint256 MAX_SUPPLY
```

Lifetime maximum number of OG NFTs that may be minted.

### MINT_PRICE

```solidity
uint256 MINT_PRICE
```

Fixed ETH price charged to paid-allowlist minters.

### freeMintMerkleRoot

```solidity
bytes32 freeMintMerkleRoot
```

Merkle root for the scalable free-mint allowlist; zero disables proof-based free mints.

### FreeMintMerkleRootUpdated

```solidity
event FreeMintMerkleRootUpdated(bytes32 merkleRoot)
```

Emitted when the scalable free-mint allowlist root changes.

### NonTransferable

```solidity
error NonTransferable()
```

Reverts when attempting to transfer an OG NFT between accounts.

### NonBurnable

```solidity
error NonBurnable()
```

Reverts when attempting to burn an OG NFT.

### constructor

```solidity
constructor(address initialOwner_, string baseURI_, address royaltyReceiver_, uint96 royaltyFeeNumerator_, address payable feeCollector_, uint256 mintStartTime_) public
```

### setFreeMintMerkleRoot

```solidity
function setFreeMintMerkleRoot(bytes32 merkleRoot_) external
```

Replaces the Merkle root used by `{mintWithFreeMintProof}`.

_Replacing the root never resets `{hasMinted}`; set the root to zero to disable proof-based free mints._

#### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| merkleRoot_ | bytes32 | Root generated from the eligible addresses. |

### mintWithFreeMintProof

```solidity
function mintWithFreeMintProof(bytes32[] proof_) external payable returns (uint256 tokenId)
```

Mints the caller's sole primary NFT using a free-mint Merkle allowlist proof.

_The leaf encoding matches `{mintWithProof}`. The caller pays zero regardless of `{mintPrice}`._

#### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| proof_ | bytes32[] | Sorted Merkle sibling hashes proving the caller is in `{freeMintMerkleRoot}`. |

#### Return Values

| Name | Type | Description |
| ---- | ---- | ----------- |
| tokenId | uint256 | The newly minted token ID. |

### isFreeMintMerkleWhitelisted

```solidity
function isFreeMintMerkleWhitelisted(address account_, bytes32[] proof_) public view returns (bool)
```

Returns whether an address is included in the active free-mint Merkle allowlist.

#### Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| account_ | address | Address whose membership is being checked. |
| proof_ | bytes32[] | Sorted Merkle sibling hashes for the address. |

### _update

```solidity
function _update(address to_, uint256 tokenId_, address auth_) internal virtual returns (address)
```

_Mint-only: allow mint (from == 0); block peer transfers and burns (to == 0)._
