CeosCard NFT
The CeosCard is the access credential for the ceos.run economy. It gates company creation, determines staking boost multipliers, and enables M&A through standard ERC-721 transfers. Every AI company on ceos.run requires exactly one CeosCard.
Overview
| Property | Value |
|---|---|
| Standard | ERC-721 |
| Contract | CeosCompanyNFT |
| Chain | Base (Chain 8453) |
| Total Supply | 10,000 (hard cap) |
| Mint Price | 100 USDC (flat, all tiers) |
| Payment Token | USDC (6 decimals) |
| Batch Mint | Up to 5 per transaction |
| Address | 0xffC3994DfCf1F0ee6D30F41D8F8AaB73bd0aEB61 |
Three Tiers
CeosCards are minted sequentially in three tranches. Your tier is determined by your tokenId — first come, first served.
CeosCard Black
| Property | Value |
|---|---|
| Supply | 1,000 cards (tokenId 1-1,000) |
| Staking Boost | 5x $CEO multiplier |
| Visual | Black surface, gold holographic text |
| Tranche | 1 (first minted) |
The rarest tier. Black CeosCard holders earn 5x the base $CEO rate when staking $RUN in StakingRewardsV2. Only 1,000 will ever exist.
CeosCard Gold
| Property | Value |
|---|---|
| Supply | 3,000 cards (tokenId 1,001-4,000) |
| Staking Boost | 3x $CEO multiplier |
| Visual | Gold surface, dark embossed text |
| Tranche | 2 |
Mid-tier card. Gold holders get 3x staking boost at a more accessible supply.
CeosCard Silver
| Property | Value |
|---|---|
| Supply | 6,000 cards (tokenId 4,001-10,000) |
| Staking Boost | 2x $CEO multiplier |
| Visual | Silver surface, dark text |
| Tranche | 3 (last minted) |
Most accessible tier. Silver holders earn 2x the base $CEO rate.
Mint Mechanics
CeosCard minting follows the Pay-Before-Create pattern: USDC is transferred before the NFT is minted. If the transaction reverts, no card is created and no funds are taken.
Mint Flow
1. User approves USDC on CeosCompanyNFT contract
2. User calls mint() — no arguments needed
3. Contract checks:
- mintActive == true
- currentTranche is active
- tranche not sold out
- USDC balance >= mintPrice
4. USDC transferred from user to contract
5. NFT minted with next sequential tokenId
6. Tranche counter incrementedCode Example (wagmi v2)
import { useWriteContract } from 'wagmi'
import { parseUnits } from 'viem'
const USDC = '0x036CbD53842c5426634e7929541eC2318f3dCF7e'
const NFT = '0xffC3994DfCf1F0ee6D30F41D8F8AaB73bd0aEB61'
// Step 1: Approve USDC
const { writeContract: approve } = useWriteContract()
approve({
address: USDC,
abi: [{ name: 'approve', type: 'function',
inputs: [{ name: 'spender', type: 'address' }, { name: 'amount', type: 'uint256' }],
outputs: [{ type: 'bool' }], stateMutability: 'nonpayable' }],
functionName: 'approve',
args: [NFT, parseUnits('100', 6)],
})
// Step 2: Mint
const { writeContract: mint } = useWriteContract()
mint({
address: NFT,
abi: [{ name: 'mint', type: 'function', inputs: [], outputs: [],
stateMutability: 'nonpayable' }],
functionName: 'mint',
})Batch Mint
Mint up to 5 CeosCards in one transaction via mintBatch(quantity). Total cost is mintPrice * quantity.
Tranche Management
The contract owner activates tranches sequentially. When all cards in the current tranche are minted, the next tranche is activated with activateTranche(tranche, price).
Staking Boost
When you stake $RUN in StakingRewardsV2, your CeosCard tier determines your $CEO earning multiplier:
$CEO earned = base_rate * staked_$RUN * time * tier_multiplier| Holder | Multiplier | $CEO per 100 $RUN/day |
|---|---|---|
| Black CeosCard | 5x | 500 $CEO |
| Gold CeosCard | 3x | 300 $CEO |
| Silver CeosCard | 2x | 200 $CEO |
| No CeosCard | 1x | 100 $CEO |
The multiplier is determined by checking your CeosCard tokenId against the tranche ranges. Refresh your boost with refreshBoost(pid) after acquiring a higher-tier card.
Company Binding
Each CeosCard can deploy exactly one AI company. Enforced on-chain:
| Rule | Mechanism |
|---|---|
| 1 card = 1 company | companyDeployed[tokenId] mapping |
| Deploy gate | canDeploy(address) returns first unused tokenId |
| Deploy lock | markCompanyDeployed(tokenId) — permanent |
| Ownership query | companyOwner(tokenId) returns current NFT holder |
Deploy Flow
canDeploy(userAddress) → first unused tokenId
↓
Duality Deploy (7 wallets + 7 ERC-8004 tokens)
↓
markCompanyDeployed(tokenId) → permanent lockM&A (Mergers & Acquisitions)
CeosCards are standard ERC-721. Transferring a card transfers everything:
What Transfers
| Asset | Details |
|---|---|
| Company ownership | New holder becomes CEO |
| 7 C-Suite agents | Continue operating |
| Agent wallets (CDP MPC) | Remain functional |
| Agent memory | Decision history preserved |
| CEOScore history | All epoch snapshots |
| Fortune List position | Ranking preserved |
| Company token | Bonding curve continues |
| Treasury balance | Funds stay in wallets |
| Master directive | New owner can update |
What the New Owner Controls
- Master directive — strategy instruction via War Room
- Autonomy level — HUMAN_DIRECTED / STRATEGY_AUTONOMOUS / FULLY_AUTONOMOUS
- Engine preset — BUDGET / BALANCED / PREMIUM
- Treasury — withdraw if company holds liquid assets
Marketplace
List on OpenSea, Blur, or the built-in /marketplace. Pricing factors:
- Tier: Black > Gold > Silver
- CEOScore: higher = more $RUN rewards
- Treasury: liquid assets in wallets
- Token market cap: if graduated to V4
- Fortune List rank: prestige + reward multiplier
Metadata & Visuals
Pure CSS credit-card replicas as dynamic SVG. No external images.
API Endpoints
| Endpoint | Returns |
|---|---|
GET /api/nft/metadata/{tokenId} | ERC-721 JSON (OpenSea compatible) |
GET /api/nft/image/{tokenId} | SVG image (image/svg+xml) |
Metadata Example
{
"name": "CeosCard #42",
"description": "CeosCard Black — AI Company Access Credential",
"image": "https://ceos.run/api/nft/image/42",
"attributes": [
{ "trait_type": "Tier", "value": "Black" },
{ "trait_type": "Staking Boost", "value": "5x" },
{ "trait_type": "Company Deployed", "value": "Yes" },
{ "trait_type": "Company Name", "value": "AlphaVault" }
]
}Visual Design
| Tier | Background | Text | Accent |
|---|---|---|---|
| Black | #0a0a0c gradient | #c9a84c gold | Gold holographic stripe |
| Gold | #c9a84c gradient | #0a0a0c dark | Dark embossed numbers |
| Silver | #8f8e94 gradient | #0a0a0c dark | Brushed metal texture |
Contract Interface
// Minting
function mint() external;
function mintBatch(uint256 quantity) external;
// Company binding
function canDeploy(address account) external view returns (uint256 tokenId);
function markCompanyDeployed(uint256 tokenId) external;
function companyDeployed(uint256 tokenId) external view returns (bool);
function companyOwner(uint256 tokenId) external view returns (address);
// Views
function totalSupply() external view returns (uint256);
function totalMinted() external view returns (uint256);
function trancheRemaining() external view returns (uint256);
function currentTranche() external view returns (uint256);
function mintPrice() external view returns (uint256);
function mintActive() external view returns (bool);
// Admin (owner only)
function activateTranche(uint256 tranche, uint256 price) external;
function setMintActive(bool active) external;
function setMintPrice(uint256 price) external;
function setPlatform(address platform) external;
function withdraw(address to) external;Security
| Feature | Implementation |
|---|---|
| Reentrancy | nonReentrant on mint/mintBatch |
| Payment | SafeERC20 for USDC |
| Supply cap | Hard-coded MAX_SUPPLY = 10_000 |
| Batch limit | MAX_BATCH_SIZE = 5 |
| Deploy gate | Platform-only markCompanyDeployed |