# Prohairesis contract reference

> Generated from the checked-in NFT ABI. Use the live deployment configuration to select a chain and address.

[Agent guide](/agents/index.md) · [NFT ABI](/agents/abi.json) · [Deployment configuration](/prohairesis-deployment.json)

## Deployment details

Network: Ethereum mainnet (chain ID 1). Mint, evolve, and freeze all use the NFT contract below.

Connected contract: Prohairesis-test (PROH-test). Prohairesis has not launched. This is a testing connection; transactions on Ethereum mainnet use real ETH.

- Prohairesis (NFT): [0xDcc3E1ba202EDfCCB458dbff9C6d4F762C17623a](https://etherscan.io/address/0xDcc3E1ba202EDfCCB458dbff9C6d4F762C17623a).
- ProhairesisMetadata: [0x3fCAB09b0B316E46285EF9F86cd385abd7917189](https://etherscan.io/address/0x3fCAB09b0B316E46285EF9F86cd385abd7917189).
- ProhairesisRenderer: [0x2355734606eF0338f6745176087D514993F10fE4](https://etherscan.io/address/0x2355734606eF0338f6745176087D514993F10fE4).
- RoundedMachineKernel: [0x2876A946279077Ef82B75cB4d9eE7BdC48F27885](https://etherscan.io/address/0x2876A946279077Ef82B75cB4d9eE7BdC48F27885).
- AtlasRenderer: [0x90e6914516Ac7D1831079BeE0ac32A1651f6500B](https://etherscan.io/address/0x90e6914516Ac7D1831079BeE0ac32A1651f6500B).

Mint price: 0.004 ETH per piece, plus network fees. Mint 10 pieces maximum per transaction.

- Mint opens: 2026-10-07 20:30:11 UTC.
- Mint closes: 2026-10-08 20:30:11 UTC.
- Freeze deadline: 2026-10-14 20:30:11 UTC; transactions must confirm before this time.

History starts at NFT deployment block 26142910. These are deployment facts, not a statement that minting is currently open; compare the dates with current chain time. [Refresh the deployment configuration](/prohairesis-deployment.json) and read current contract state before acting.

Transfer cooldown: 6 blocks after each evolution or freeze. Read `TRANSFER_LOCK_BLOCKS()` from the target contract.

## Read methods

- `function FREEZE_WINDOW() view returns (uint64)` — selector `0x0c014f10`.
- `function MAX_BATCH() view returns (uint8)` — selector `0x950bff9f`.
- `function MAX_EVOLUTIONS() view returns (uint8)` — selector `0xefc3365b`.
- `function MAX_FREEZE_BATCH() view returns (uint8)` — selector `0x78ab494f`.
- `function MAX_ROYALTY_BPS() view returns (uint96)` — selector `0x3dca40e6`.
- `function MINT_DURATION() view returns (uint64)` — selector `0x62bc5f7b`.
- `function MINT_PRICE() view returns (uint256)` — selector `0xc002d23d`.
- `function TRANSFER_LOCK_BLOCKS() view returns (uint256)` — selector `0xdc47935c`.
- `function animation(uint256 tokenId) view returns (uint8 kind, uint256 key)` — selector `0x19d735fe`.
- `function balanceOf(address owner) view returns (uint256)` — selector `0x70a08231`.
- `function canManage(uint256 tokenId, address operator) view returns (bool)` — selector `0x5cbdeea6`.
- `function candidate(uint256 tokenId, uint8 lane, uint64 atBlock) view returns (int32[198])` — selector `0xe998b193`.
- `function contractURI() view returns (string)` — selector `0xe8a3d485`.
- `function environment() view returns ((uint64 atBlock, int32[6] position, int32[6] velocity, int32[6] target))` — selector `0x74e2b63c`.
- `function environmentAnchor(uint256 tokenId) view returns (int32[6])` — selector `0x6c4c7661`.
- `function expression(uint256 tokenId) view returns (int256[12])` — selector `0x7588f2a6`.
- `function freezeDeadline() view returns (uint64)` — selector `0x3ebc81eb`.
- `function genome(uint256 tokenId) view returns (int32[198])` — selector `0xd8470576`.
- `function getApproved(uint256 tokenId) view returns (address)` — selector `0x081812fc`.
- `function isApprovedForAll(address owner, address operator) view returns (bool)` — selector `0xe985e9c5`.
- `function learningModel() view returns (int32[24][2])` — selector `0x99baa246`.
- `function managerOf(address) view returns (address)` — selector `0x7f41826b`.
- `function metadataRenderer() view returns (address)` — selector `0x70319970`.
- `function mintEnd() view returns (uint64)` — selector `0xea2b4ab2`.
- `function mintStart() view returns (uint64)` — selector `0x255e4685`.
- `function name() view returns (string)` — selector `0x06fdde03`.
- `function nextTokenId() view returns (uint256)` — selector `0x75794a3c`.
- `function owner() view returns (address)` — selector `0x8da5cb5b`.
- `function ownerOf(uint256 tokenId) view returns (address)` — selector `0x6352211e`.
- `function pendingOwner() view returns (address)` — selector `0xe30c3978`.
- `function royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 amount)` — selector `0x2a55205a`.
- `function state(uint256 tokenId) view returns (bytes32 seed, uint32 generation, uint64 anchor, bool frozen, bytes32 genomeHash)` — selector `0x3e4f49e6`.
- `function supportsInterface(bytes4 id) view returns (bool)` — selector `0x01ffc9a7`.
- `function symbol() view returns (string)` — selector `0x95d89b41`.
- `function tokenHTML(uint256 tokenId) view returns (string)` — selector `0xb79bebaf`.
- `function tokenURI(uint256 tokenId) view returns (string)` — selector `0xc87b56dd`.
- `function totalSupply() view returns (uint256)` — selector `0x18160ddd`.
- `function transferStatus(uint256 tokenId) view returns (bool transferable, bool frozenInTime)` — selector `0x927e9742`.
- `function transferUnlockBlock(uint256) view returns (uint256)` — selector `0x0b01554d`.
- `function treasury() view returns (address)` — selector `0x61d027b3`.
- `function withdrawable() view returns (uint256)` — selector `0x50188301`.

## Write methods

These require explicit wallet authorization; inclusion here grants no permission. See the [transaction guide](/agents/transactions.md).

- `function acceptOwnership()` — selector `0x79ba5097`.
- `function approve(address to, uint256 tokenId)` — selector `0x095ea7b3`.
- `function freeze(uint256 tokenId)` — selector `0xd7a78db8`.
- `function freezeBatch(uint256[] tokenIds)` — selector `0x74b743e3`.
- `function mint(uint8 quantity) payable` — selector `0x6ecd2306`.
- `function renounceOwnership()` — selector `0x715018a6`.
- `function safeTransferFrom(address from, address to, uint256 tokenId)` — selector `0x42842e0e`.
- `function safeTransferFrom(address from, address to, uint256 tokenId, bytes data)` — selector `0xb88d4fde`.
- `function select(uint256 tokenId, uint8 lane)` — selector `0xd31f8544`.
- `function setApprovalForAll(address operator, bool approved)` — selector `0xa22cb465`.
- `function setDefaultRoyalty(address recipient, uint96 basisPoints)` — selector `0x04634d8d`.
- `function setManager(address manager)` — selector `0xd0ebdbe7`.
- `function transferFrom(address from, address to, uint256 tokenId)` — selector `0x23b872dd`.
- `function transferOwnership(address newOwner)` — selector `0xf2fde38b`.
- `function withdraw()` — selector `0x3ccfd60b`.

## Events

- `event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)` — topic0 `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925`.
- `event ApprovalForAll(address indexed owner, address indexed operator, bool approved)` — topic0 `0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31`.
- `event ArtworkFrozen(uint256 indexed tokenId, uint32 generation, bytes32 genomeHash)` — topic0 `0x1b83646eee9c9032459865c0f1ad8d35db9723c6dd1ea11c03e97682b5b4ac70`.
- `event ArtworkRecorded(uint256 indexed tokenId, uint32 indexed generation, uint8 indexed action, uint8 lane, uint64 sourceBlock, uint64 anchorBlock, bytes32 seed, bytes32 genomeHash, bytes packedGenome, int32[6] environmentAnchor)` — topic0 `0x7537c5c181d4f1cfbaa9f44a0fba550bf5a47913ffd48d4b1c1d663ee4f7beb8`.
- `event BatchMetadataUpdate(uint256 fromTokenId, uint256 toTokenId)` — topic0 `0x6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c`.
- `event DefaultRoyaltyUpdated(address indexed recipient, uint96 basisPoints)` — topic0 `0xe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf4`.
- `event EnvironmentUpdated(uint256 indexed tokenId, uint8 indexed action, uint64 checkpointBlock, int32[6] position, int32[6] velocity, int32[6] target, int32[6] signal, uint16 strength)` — topic0 `0x691849c4a8b8785e42e5f65db14a24a89930f1ce1b2c78acbe0ac9295f31a3a0`.
- `event LearningUpdated(uint256 indexed tokenId, uint8 indexed expert, uint16 strength, bytes32[2] coefficients)` — topic0 `0x0ebe40a5b0f64f71a414e4b7d6f303940d56ac3036529fe159a3a8308f230519`.
- `event ManagerUpdated(address indexed owner, address indexed manager)` — topic0 `0xdac3632743b879638fd2d51c4d3c1dd796615b4758a55b50b0c19b971ba9fbc7`.
- `event MetadataUpdate(uint256 tokenId)` — topic0 `0xf8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7`.
- `event Minted(address indexed buyer, uint256 indexed firstTokenId, uint8 quantity)` — topic0 `0xdcb23284f3935b5557998e99dcc286e29744c5000723d99eecd5d6f5694f6e11`.
- `event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)` — topic0 `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700`.
- `event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)` — topic0 `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`.
- `event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)` — topic0 `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`.
- `event TransferLockUpdated(uint256 indexed tokenId, uint256 unlockBlock)` — topic0 `0x0e5978e6d09441a8d874ad152af3ba04b25344f4a9f015f735dc11334dfa5e38`.

## Renderer discovery

Call the NFT’s `metadataRenderer()` getter. On that address, use `function renderer() view returns (address)` to find the SVG renderer. The metadata contract offers `function animationHTML(int256[12] traits,uint8 kind,uint256 motionKey) view returns (string)`; the SVG renderer offers `function render(int256[12] traits) view returns (string)`. Prefer the NFT’s `tokenURI` and `tokenHTML` methods for authoritative current artwork output.
