Skip to content
Protocol contracts not yet configured for this build
Enter app

Core concepts

Gravity

Gravity is the weight of a staking position. It determines what share of ETH rewards that position receives, and it is the only thing that does.

How it is computed

Gravity is the staked amount multiplied by the lock's weight:

text
gravity = amount × multiplier
LockMultiplier1,000 PLOUTO becomes
7 days1.0×1,000 Gravity
30 days1.5×1,500 Gravity
90 days2.5×2,500 Gravity

In the contract, multipliers are stored in WEIGHT_PRECISION (1e18) units:

solidity
uint256 public constant MULT_7D  = 1.0e18;uint256 public constant MULT_30D = 1.5e18;uint256 public constant MULT_90D = 2.5e18; uint256 weight = (amount * multiplier) / WEIGHT_PRECISION;

Any duration that is not exactly 7, 30 or 90 days reverts with InvalidLock.

Your share

Rewards are divided by Gravity, not by amount. A position's share of any distribution is:

text
share = positionGravity / totalGravity

So 1,000 PLOUTO locked for 90 days earns the same as 2,500 PLOUTO locked for 7 days. That is the entire trade-off the system offers: time in exchange for weight.

Multiple positions

A wallet can hold any number of positions, each with its own amount, lock and Gravity. They are tracked independently:

solidity
struct Position {    address owner;    uint256 amount;    uint256 weight;    uint64  createdAt;    uint64  unlockAt;    uint256 rewardDebt;}

There is no compounding of one position into another, and no position merging. Staking more creates a new position with its own maturity date.

Gravity is fixed at open

A position's Gravity does not decay as it approaches maturity, and it does not increase with time held. It is set when the position opens and stays there until the position closes.

This is a deliberate simplification. A decaying weight would mean a staker's share silently shrinks between distributions, which is harder to reason about and harder to verify.

What happens at maturity

Nothing automatic. The position keeps its Gravity and keeps earning until the owner withdraws. There is no penalty for leaving a matured position open, and no bonus either — it simply continues to hold weight.

Withdrawing removes the position's amount from totalStaked and its weight from totalWeight, and pays out any unclaimed rewards in the same transaction.

Reading it

The interface shows Gravity in three places: per position, summed for your wallet, and as a protocol total. The staking form previews the Gravity a position would have, along with the share of the pool it would represent if opened now.

That preview is explicitly labelled "if opened now", because the denominator moves every time anyone else stakes or withdraws.

For the precise reward mathematics, see staker reward mathematics.