Docs
Terms
The seven official Terms, their parameters, what they read on testnet and on mainnet.
What a Term is
A Term is a small contract that answers one question about a Deal: is the condition true right now. Every Term implements:
function check(address deal, bytes calldata data) external view returns (bool);
function describe(bytes calldata data) external pure returns (string memory);
check is a read. A Term never holds funds and cannot move them. The Deal calls it and decides what to do with the answer. A Term that reverts is read as false.
Terms that measure over time also implement an observe hook. It records the Term's own bookkeeping, keyed by the deal and its parameters. Observations happen at deal creation, at every settle and claim, and whenever anyone calls observe(trancheIndex) on the Deal.
The seven official Terms are immutable and have no admin. Their live addresses are on the Contracts page and the Terms catalog.
Graduated
True when the launchpad reports the token as graduated.
| Parameter | Type | Meaning |
|---|---|---|
| token | address | The token to check |
- Testnet: reads
MockLaunchpad.isGraduated(token). Anyone can callgraduate(token)on the mock. - Mainnet: reads the launchpad the token was created on.
Market cap
True when the token's market cap has stayed at or above a threshold for a hold period, and pool liquidity is above a floor.
| Parameter | Type | Meaning |
|---|---|---|
| pool | address | Pool that prices the token |
| minMcapHype | uint256 | Market cap threshold, in HYPE |
| holdSeconds | uint32 | How long the threshold must hold |
| minLiquidityHype | uint256 | HYPE-side liquidity floor |
Market cap is the pool's 30 min TWAP times the token's total supply. The hold timer starts at the first observation above the threshold and resets at any observation below it. With holdSeconds set to 0 the Term is true whenever the threshold and floor are met.
- Testnet: reads
MockTwapPool, whose price, liquidity and volume anyone can set. - Mainnet: reads the token's pool on Elysium.
Volume
True when the pool has traded at least a given amount since the deal was created.
| Parameter | Type | Meaning |
|---|---|---|
| pool | address | Pool to read |
| minVolumeHype | uint256 | Volume required, in HYPE |
The baseline is the pool's cumulative volume at the first observation. The factory records it in the transaction that creates the deal, so volume before creation never counts.
- Testnet:
MockTwapPool.cumulativeVolume(). - Mainnet: the pool's cumulative volume counter.
Liquidity
True when pool liquidity has stayed at or above a floor for a hold period.
| Parameter | Type | Meaning |
|---|---|---|
| pool | address | Pool to read |
| minLiquidityHype | uint256 | HYPE-side liquidity floor |
| holdSeconds | uint32 | How long the floor must hold |
Same observation model as Market cap.
Listed
True when the token is listed on HyperCore spot.
| Parameter | Type | Meaning |
|---|---|---|
| token | address | The token to check |
- Testnet: reads
MockListingOracle.isListed(token). Anyone can callsetListed. - Mainnet: reads the HyperCore spot universe through the L1Read precompiles, or the Symbolon listing event, behind the same interface.
Oath
True when the token's oath score is at least a minimum.
| Parameter | Type | Meaning |
|---|---|---|
| token | address | The token to check |
| minScore | uint16 | Minimum score, 0 to 100 |
- Testnet: reads
MockOath.getOath(token). Anyone can set a score. - Mainnet: reads Horkos.
Clock
Linear vesting between a start and an end, paused while another Term is false.
| Parameter | Type | Meaning |
|---|---|---|
| start | uint64 | Vesting start, unix seconds |
| end | uint64 | Vesting end, unix seconds |
| pauseTerm | address | Term that must be true for vesting to run. Zero address: never paused |
| pauseData | bytes | Parameters for the pause Term |
Clock is a partial Term. Settling its tranche releases the vested share only. Paused time pushes the schedule back: 10 days paused means full vesting arrives 10 days after end. Pause state is sampled at observations. When the deal deadline passes, the vested share is released and the remainder is refunded.
A common pairing: Clock over 60 days, paused while Liquidity at least 50 000 HYPE is false. The market maker is paid as time passes, but only while they keep the book.
Why TWAP and hold time
Spot prices on young pools are easy to move. A single large buy can lift the price for one block, long enough to satisfy a naive market cap check. Arrha uses three defenses together:
- TWAP. The market cap is priced on a 30 min time-weighted average. A spike of one minute moves it by a few percent, not by the size of the spike.
- Hold time. The threshold must hold across observations for the full period. A 24 h hold means 24 h of sustained capital, not one block.
- Liquidity floor. A thin pool with a high price is not a real market cap. The floor rejects it.
See Risks for what remains.
Custom Terms
Anyone can write a Term. A Deal accepts any address that implements check. The TermRegistry lists official Terms and any custom Term registered by anyone. Registration is a listing, not an endorsement.
Registration is free on testnet. On mainnet it will burn 1,000 $ARRHA. $ARRHA is not launched. No contract address.
A custom Term can return anything. Read its code before you lock earnest against it, or use an official Term.