HIP-4 documentation

Testnet · Exploratory documentation — not official Hyperliquid documentation.

HIP-4 Contest Contract

Third-party EVM (testnet)
V10x4fd772e5708da2a7f097f51b3127e515a72744bd
V20x6d86b21e853758f5719408633e6bcb2cfd50cf07
Balance
94.37 HYPE
Active deposited balance
Platform fee
0.9% / implicit
V1: 90 bps view · V2: from pools
Active contests
4
IDs: 595, 596, 604, 608
Ownership
0xe21c…0d135
Renounce disabled
Mainnet
Not deployed
Testnet only
Versions
2
V1 reverse-engineered · V2 source + bytecode

V1 vs V2 — summary

AspectV1V2
SourceBytecode onlyShipped HIP4Contest.sol
depositdeposit(uint256,uint256)deposit(uint256,uint256,uint256) + deadline
claim shapeHistorical / reconstructedclaim(contestId,index,recipient,amount,proof[])
Platform feeplatformFeeBps() viewSpread + withdrawPlatformFee
EventsDepositReceivedDeposit, FeesWithdrawn
GuardsCustomPausable, ReentrancyGuard, Ownable2Step

V2 mystery selector 0xb2447e34 is withdrawPlatformFee(uint256,uint256) on the shipped source.

Full ABI JSON

HIP4Contest.v1.abi (bundled)
[
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "platformFeeBps",
    "outputs": [
      {
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      }
    ],
    "name": "getContestPool",
    "outputs": [
      {
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      }
    ],
    "name": "getMerkleRoot",
    "outputs": [
      {
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      },
      {
        "name": "entryFee",
        "type": "uint256"
      }
    ],
    "name": "createContest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      }
    ],
    "name": "finalizeContest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      },
      {
        "name": "merkleRoot",
        "type": "bytes32"
      },
      {
        "name": "rewardPool",
        "type": "uint256"
      }
    ],
    "name": "publishMerkleRoot",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      },
      {
        "name": "sideId",
        "type": "uint256"
      }
    ],
    "name": "deposit",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      },
      {
        "name": "sideId",
        "type": "uint256"
      },
      {
        "name": "user",
        "type": "address"
      }
    ],
    "name": "refund",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      }
    ],
    "name": "sweepUnclaimed",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "contestId",
        "type": "uint256"
      },
      {
        "name": "sideId",
        "type": "uint256"
      },
      {
        "name": "proof",
        "type": "bytes32[]"
      }
    ],
    "name": "claim",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "name": "",
        "type": "uint256"
      },
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "contestExists",
    "outputs": [
      {
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "contestId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "name": "sideId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "name": "depositor",
        "type": "address"
      },
      {
        "indexed": false,
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "DepositReceived",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "contestId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "name": "sideId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "name": "claimer",
        "type": "address"
      },
      {
        "indexed": false,
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Claimed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "contestId",
        "type": "uint256"
      }
    ],
    "name": "ContestFinalized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "contestId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "name": "root",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "name": "rewardPool",
        "type": "uint256"
      }
    ],
    "name": "MerkleRootPublished",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "name": "contestId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "name": "entryFee",
        "type": "uint256"
      }
    ],
    "name": "ContestCreated",
    "type": "event"
  }
]