Protocol

Contracts

The eight Phase 1 contracts, what each does, and their addresses.

Source: pinarc-contracts (Foundry). Fork tests run against Robinhood Chain mainnet with the real Uniswap V2 deployment.

ContractRole
PinarcConfigPlatform parameters (curve shape, fees, guards) and the guardian. Owned by the admin. Curves snapshot values at creation, so changes only affect new launches.
PinarcFactorycreateToken(CreateParams): deploys the token and a curve clone, collects the launch fee, escrows bond and dev buy, registers the launch. allTokens, curveOf(token).
PinarcTokenFixed-supply ERC-20 (burnable, permit) with a creator-editable metadataURI.
BondingCurveOne minimal-proxy clone per token. Batch auction, anti-sniper window, constant-product trading, graduation.
CreatorBondUSDG escrow per token; released after graduation + lock, or slashed by the guardian into the floor reserve.
FloorReserveUSDG per token; redeem burns tokens for reserve / totalSupply each.
VestingVaultCliff + linear schedules; team allocation at launch, standalone for anyone.
LPLockerTime-locks any ERC-20; lock id = certificate.

Addresses (Robinhood Chain mainnet, chain id 4663)

Deployed from pinarc-contracts (deployments/4663.json); the indexer starts at block 65,381,613. All seven contracts are verified on Sourcify (exact match) — each address links to its Blockscout page, where the Sourcify verification is picked up.

ContractAddress
PinarcFactory0x0cF1cdf2e85b324Ea422AeA5Bd16764217703c5E
PinarcConfig0xE2B2aF83537C56995294d189a5E80b281c3B2F7e
BondingCurve implementation0xcf6D0a9D28A44200C862774Cb4F0fe528564706b
CreatorBond0xFe16E9e6FA0F95F6b3a1d4849Af0e66AA1A25390
FloorReserve0x02c2e0460B75A68C9E76F3015A378dfFA8Ef4F42
LPLocker0xC49ade379b89F0bD1Cb08D21eE6440B12Ad9894d
VestingVault0x380b3D5fafbfDaC70108d3A1D4208d6f4b4BBf88
USDG (Global Dollar)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Uniswap V2 Router020x89e5DB8B5aA49aA85AC63f691524311AEB649eba
Uniswap V2 factory0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f

Every launched token gets its own PinarcToken and a BondingCurve clone of the implementation above; PinarcFactory.curveOf(token) maps one to the other.

RoleAddress
Treasury (platform fees)0x4db8587bb156FA02501b23800cC302D0Ba3e656E
Guardian (may slash bonds into the floor)0x4db8587bb156FA02501b23800cC302D0Ba3e656E
PinarcConfig ownerDeployer 0x595EDF40d3400eE8506b705d29deA38E418F7f34 until the pending two-step transfer to the treasury address is accepted

Verification: Sourcify (exact match for all seven).

Key functions

// PinarcFactory
function createToken(CreateParams calldata p) external returns (address token, address curve);
struct CreateParams { string name; string symbol; string metadataURI; uint16 floorBps; uint32 lpLockSeconds;
                      uint16 teamBps; uint64 teamCliff; uint64 teamDuration; uint128 bond; uint128 devBuyUsdc; }

// BondingCurve
function commitBatch(uint256 usdcIn) external;               function settleBatch() external;
function claimBatch() external returns (uint256 tokensOut, uint256 refund);
function buy(uint256 usdcIn, uint256 minTokensOut, address to) external returns (uint256 tokensOut);
function sell(uint256 tokensIn, uint256 minUsdcOut, address to) external returns (uint256 usdcOut);
function quoteBuy(uint256 usdcIn) external view returns (uint256 tokensOut, uint256 usdcUsed, uint256 fee);
function quoteSell(uint256 tokensIn) external view returns (uint256 usdcOut, uint256 fee);
function price() external view returns (uint256);            // 18-dec USDG per whole token
function progressBps() external view returns (uint256);      function isGraduated() external view returns (bool);

// CreatorBond            // FloorReserve                                 // VestingVault                 // LPLocker
function release(address token);   function redeem(address token, uint256 amount);   function release(uint256 id);   function withdraw(uint256 id, address to);
function slash(address token, string calldata reason);  // guardian only

Events the indexer follows

TokenCreated, Launched, BatchCommitted, BatchSettled, BatchClaimed, Trade, Graduated, token Transfer and MetadataUpdated, Locked / Extended / Withdrawn / LockTransferred, ScheduleCreated / Released, Posted / Released / Slashed, Deposited / Redeemed, and Uniswap pair Swap / Sync for graduated tokens.

Trust model

  • Curves, the vault, the locker and the floor have no admin functions.
  • PinarcConfig owner sets parameters for future launches and the guardian address.
  • The guardian can only move a bond into that token's floor reserve.
  • Metadata is the only thing a creator can change after launch.