Every fact below was checked against the deployed HEX contract on 2026-07-20 (HEX day 2421) — token identity by live call, function selectors and event signatures by Keccak, cross-checked against our own production readers. This is our own explainer, written from the source; it is not a rewrite of anyone else’s document.
Why read the contract itself
HEX is fully defined by one smart contract. Everything true about it — how a stake pays, what a penalty costs, what a function returns — is settled by the deployed code, not by any article about it. Secondhand explainers drift over the years: a bit offset gets remembered wrong, a field gets renamed, an approximation hardens into a “fact.” When money rides on the answer, the contract is the only authority worth quoting.
So this guide treats the contract as the standard. Where a plain-language claim could mislead, we say what the code actually does.
Every number below carries its receipt. Citations like (EARLY_PENALTY_MIN_DAYS,
L720) point to the constant’s name and line in the verified HEX source — the same
source published on Etherscan
and PulseChain Scan.
Open either, search the constant’s name, and check us in ten seconds. You don’t have
to trust this page; that’s the point of it.
The ten numbers that govern every stake
| What | Value | Receipt |
|---|---|---|
| Smallest unit | 1 HEX = 10⁸ Hearts | HEARTS_PER_HEX, L648 |
| Day 1 begins | 1575331200 = 2019-12-03 00:00 UTC | LAUNCH_TIME, L654 |
| Stake length | 1 to 5,555 days | MIN_STAKE_DAYS L715, MAX_STAKE_DAYS L718 |
| Daily pool | allocSupply × 10000 ÷ 100448995 (3.69% per 364 days) | L1245 |
| Longer Pays Better | +(stakedDays−1)/1820, capped +200% | LPB L731, LPB_MAX_DAYS L732 |
| Bigger Pays Better | up to +10% at 150,000,000 HEX | BPB_MAX_HEX L736 |
| Early-end window | max(90, half the days, rounded up) | EARLY_PENALTY_MIN_DAYS L720, L1738 |
| Late grace | 14 days, penalty-free | LATE_PENALTY_GRACE_DAYS L723 |
| Late decay | linear to zero over 700 days | LATE_PENALTY_SCALE_DAYS L726 |
| Share-price scale | rate stored ×10⁵, ratchets up only | SHARE_RATE_SCALE L741, L1837 |
The basics
HEX is two things in one contract: an ordinary ERC-20 token and a staking
engine. The token part is unremarkable — name is HEX, symbol is HEX,
decimals is 8. The staking part is where everything interesting lives.
- The smallest unit is a Heart. 1 HEX = 100,000,000 Hearts (that’s what 8 decimals means). All internal accounting is in Hearts; the contract never rounds to whole HEX.
- The same contract runs on two chains. The address
0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39is identical on Ethereum and PulseChain, with identical code — PulseChain forked Ethereum’s state, so every balance and stake was copied to the same address. Only the network you point at differs. - HEX keeps its own calendar. Day 1 was 2019-12-03 at 00:00 UTC, and a new HEX day
begins every 00:00 UTC. The contract’s
currentDayis the anchor everything is dated against (it read 2421 the day we verified this).
Staking, in plain terms
Staking is committing HEX for a chosen number of days. While staked, those Hearts leave your spendable balance; when the stake ends, the contract returns your principal plus everything it earned.
The earning is share-based, and this is the one idea worth slowing down for:
When you stake, your Hearts are converted into Shares (the site calls a trillion shares one T-Share). Each day, the contract fills a payout pool, and your slice of that day is your shares ÷ everyone’s shares. Add up your slice across every day of your stake, and that’s your interest.
Because payout tracks shares, not Hearts, the way to earn more is to earn more shares — which is what the two bonuses below do.
Share price (why it only goes up)
How many shares you get per Heart is set by the Share Rate (also called the T-Share Rate or share price). At launch it was 1 share per Heart. Every time someone ends a stake at a gain, the rate ratchets up, so the next staker pays more Hearts per share. It is designed to only ever rise — which is why an earlier stake, at a lower rate, holds shares that later stakers can’t match cheaply.
The rate is stored as an integer scaled by 100,000 (five decimals). When we read it
live it was 467677 — i.e. 4.67677 Hearts per share, which works out to about
46,768 HEX per T-share (a T-share is a trillion shares). There is no way for a
clever restake to mint extra shares out of the mechanism; the price math closes that door.
The daily payout pool
The pool each day starts from HEX’s built-in inflation — 3.69% per 364 days (the contract’s own year), compounded daily against the allocated supply — and is topped up by penalties other stakers pay (more on those below). Your stake earns from every day it is active, drawn from that day’s pool in proportion to your shares.
The two bonuses (stated plainly, not sold)
Both bonuses increase your shares, not your Hearts:
- Longer Pays Better — a share bonus of
(stakedDays − 1) / 1820, capped at +200% from 3,641 days (~10 years) onward. At the cap your stake earns triple the shares its Hearts alone would buy — a max-length 5,555-day stake gets the full 3×. - Bigger Pays Better — up to +10% more shares, maxing out at a 150,000,000-HEX stake. The percentage caps; the bonus Hearts keep growing with size.
That’s the whole of it. There is no tier, no multiplier beyond these, and no path that beats simply staking longer and larger.
Worked example, at the live share rate (4.67677 Hearts/share, read 2026-07-20):
stake 100,000 HEX for the maximum 5,555 days. Longer Pays Better caps out (+200%);
Bigger Pays Better adds a sliver (+0.0067% at this size). The contract computes
(Hearts + bonus) × 10⁵ ÷ shareRate (L1826 uses the same math in reverse):
100,000 HEX → 3.00007 × 10¹³ effective Hearts → ≈ 6.41 T-Shares. The same
100,000 HEX staked for 1 day gets ≈ 2.14 T-Shares — exactly one third. Same
money, triple the earning power, paid for with time.
Ending a stake
This is where secondhand accounts most often go wrong, so read it from the contract. The whole life of a stake, in one picture:
On time. End on or after your stake’s end day and you receive principal plus all earned payout. You get a 14-day grace period after the end day with no penalty.
Early — the Early End Stake (EES). You can end before the committed day, but you forfeit a window of payout. The window is:
penaltyDays = max(90, ⌈stakedDays ÷ 2⌉) — half your committed days rounded up, but never fewer than 90.
How the penalty is computed depends on how far you got (the contract’s three branches, L1743-1777):
- Served past the window → the penalty is the actual daily payout summed over the
window
[day 0, penaltyDays). You keep your principal plus everything earned after the window. Ending a 1,000-day stake at day 700: window is 500; you forfeit days 0–500’s earnings, keep days 500–700’s. - Ended before serving the window → the contract extrapolates: penalty = your earned payout × penaltyDays ÷ servedDays (L1776). That ratio can exceed 1 — and then it eats principal. Same 1,000-day stake ended at day 400: penalty = payout × 500/400 = 1.25× everything you earned; you leave with principal minus a quarter of your earnings.
- Served zero days → a day’s payout is estimated and charged for the whole window (L1743-1747).
The penalty is capped at your whole stake return — you can be zeroed, never negative
(L1710-1719). Half of every penalty flows into the next day’s payout pool for
everyone else; the other half goes to the Origin Address (_splitPenaltyProceeds,
L1801; the address itself is hard-coded at L637).
Late. Leave a finished stake sitting and, after the 14-day grace, the whole return decays linearly: return × lateDays ÷ 700 (L1792-1798) — about 0.143% per day, 1% per week, principal included. At 700 late days past the grace the return is exactly zero. Ending a matured stake for someone (settling its accounting without paying them out) is what Good Accounting does; anyone can call it.
Reading a stake straight from the chain
Two read-only calls expose any address’s stakes — and this is exactly how our tools, and anyone recovering stakes, see them:
stakeCount(address)→ how many stakes that address holds.stakeLists(address, index)→ one stake, returned as seven fields:stakeId,stakedHearts(principal),stakeShares,lockedDay,stakedDays,unlockedDay(0 if still active),isAutoStake.
An important consequence: the “address” can be a contract — a Gnosis Safe, or a tokenized HSI (HEX Stake Instance) — and its stakes read back identically. That’s why stakes made through a wallet app or wrapped as an NFT are never lost or hidden; they’re just a different address to point the same call at.
The functions and events you’ll actually meet
For the exact 4-byte selectors, event topic hashes, the globalInfo() layout, and the
dailyDataRange bit-packing, we keep a separate, contract-verified reference (with the
re-runnable script that proves it). In everyday terms, the pieces are:
currentDay()— the on-chain day number, the clock everything anchors to.globalInfo()— the protocol’s own totals: share rate, total shares, latest stake id, daily-data count, and more. Our census validates itself against these.dailyDataRange(begin, end)— each day’s payout total, shares total, and unclaimed satoshis, packed into one number per day.stakeStart/stakeEnd— open and close a stake.- Events
StakeStart,StakeEnd,StakeGoodAccounting— the trail a stake leaves in the logs, which is how the full HEX stake history can be replayed and counted.
How this was verified — four layers
- The source itself. We archived the explorer-verified HEX source (solc 0.5.13, the exact compile the explorers matched against the chain) and every line number on this page cites it.
- One contract, two chains — measured.
eth_getCodereturns the byte-identical 20,989-byte runtime on Ethereum and PulseChain (same SHA-256). Not folklore; a hash. - Source ties to the deployed code. Every public function in the source, selector-derived and located in the deployed dispatcher: 30 of 30 present.
- Behavior agrees. Live reads (
name,decimals,currentDay,globalInfo,dailyDataRange) match the source’s structures bit-for-bit, cross-checked against our census pipeline and our production stake reader.
If any of this ever stops matching the chain, the chain is right and this page is wrong; re-running the checks is the tiebreaker.
Check one thing yourself — right now
Don’t take layer 4 on faith either. On
Etherscan’s Read-Contract tab
(or PulseChain Scan’s), find currentDay and press Query — no wallet needed,
it’s a free read. Compare the number with the Day chip at the top of this site.
When they match, you’ve just verified a claim against the chain itself, first-hand —
the exact habit this whole site exists to teach. Every other number on this page can
be checked the same way: search the constant’s name in the Contract → Code tab.
By hexbonds — read from the deployed HEX contract on HEX day 2421 (2026-07-20). No affiliation with the HEX project; we quote the contract, nothing more.
