A token is dead when it has had no trade for a set duration, or when its price has stayed at or below 5% of its all-time high for that duration.
Definition#
FareMarket.openFare asks a death oracle, IDeathOracle.isDead(token), and refuses the Fare with TargetNotDead if the answer is no. The testnet oracle, CurveDeathOracle, reads the token's curve on the demo launchpad:
- Inactivity.
lastTradeAt + DEAD_AFTERhas passed: no buy or sell forDEAD_AFTER. - Drawdown. The spot price has stayed at or below 5% of the all-time high (
price × 20 <= athPrice) sincebelowSince, andbelowSince + DEAD_AFTERhas passed. Any trade that brings the price back above 5% of the high resetsbelowSince.
deadAt(token) returns the time at which the token is, or will be, dead if nothing changes: the earlier of the two. The app uses it for countdowns. Tokens unknown to the oracle are never dead.
Thresholds#
| Mainnet target | Testnet value | |
|---|---|---|
DEAD_AFTER | 7 days | 10 minutes |
| Drawdown threshold | 95% below the all-time high | 95% below the all-time high |
DEAD_AFTER is a constructor parameter of the oracle.
Time, not blocks#
Elysium blocks are about 100 ms apart, and on this Arbitrum Orbit chain block.number inside Solidity returns the parent chain's block number, not the Elysium block. We observed about 68.9M from inside a contract while the Elysium block was about 24.4M. All durations are therefore measured with block.timestamp.
The demo rug#
On testnet the demo curve has a rug() function that only the token's creator can call, once. It removes 99% of the real HYPE reserve and cuts the virtual reserve by 99% too, so the price falls by 99% like after a real rug. From that moment belowSince is set, and the token is dead DEAD_AFTER later. This exists only to produce dead tokens on testnet.
Why v1 refuses Fares on live tokens#
- A loss on a live token is not final. The price can recover. Paying for it would pay for a loss that may not exist tomorrow.
- It would be an attack on a living project. A Fare on a live token pays its holders to burn and leave. Danake is for carrying holders away from tokens that are already dead, not for draining ones that are alive.
- It invites manipulation. On a live token, a payer could push the price down before a snapshot to create losses. On a dead token, the history is settled.