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

Contract reference

Immutable settings

Everything here is fixed either at compile time (constant) or at deployment (immutable). No function can alter any of it.

Economics

solidity
// PloutoRevenueRouteruint256 public constant BUYBACK_BPS = 6000;uint256 public constant STAKER_BPS  = 3000;uint256 public constant RESERVE_BPS = 1000;uint256 public constant BPS         = 10_000;

Compiled into the bytecode. No storage slot exists to write to.

Staking terms

solidity
// GravityStakinguint64  public constant LOCK_7D  = 7 days;uint64  public constant LOCK_30D = 30 days;uint64  public constant LOCK_90D = 90 days; uint256 public constant MULT_7D  = 1.0e18;uint256 public constant MULT_30D = 1.5e18;uint256 public constant MULT_90D = 2.5e18; uint256 public constant MIN_STAKE        = 1e18;uint256 public constant WEIGHT_PRECISION = 1e18;uint256 private constant ACC_PRECISION   = 1e27;

Adding a fourth lock term would require a new contract.

Reserve governance

solidity
// PloutoReserveuint256 public constant TIMELOCK_DELAY   = 2 days;uint256 public constant EXECUTION_WINDOW = 14 days;

Retirement destination

solidity
// BuybackExecutoraddress public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;

Per-deployment immutables

Set once in a constructor and unchangeable thereafter:

ContractImmutableSource
RegistryponsFactory, ponsFeeEscrow, expectedLauncherConstructor arguments.
Routerregistry, feeEscrow, gravityStaking, buybackExecutor, reserveConstructor arguments.
StakingregistryConstructor argument.
Executorregistry, ponsFactory, poolManager, expectedChainIdConstructor arguments.
ExecutorponsMemeHookRead from factory.memeHook() at construction.

One-shot, not immutable

Three values are written exactly once after deployment, then permanently fixed:

ValueWritten byGuard
revenueRouter on staking, executor, reservesetRevenueRouterRouterAlreadySet()
The four protocol addresses on the registrywireProtocolAlreadyWired()
ploutoToken and ploutoCurvesetPloutoTokenOnceAlreadyInitialized()

These exist because of the deployment ordering problem — the router does not exist when the first three contracts are constructed. Functionally they are immutable from the moment they are set.

What is mutable

For completeness, the only adjustable values in the protocol:

solidity
// BuybackExecutor, DEFAULT_ADMIN_ROLE onlyuint256 public maxEthPerExecution;   // default 0.25 etheruint256 public maxBudgetShareBps;    // default 2500uint256 public maxPriceImpactBps;    // default 500uint256 public minEthPerExecution;   // default 0.001 ether

Plus pause state, emergency mode, and role membership.

No proxies

Plouto deliberately uses no upgradeable proxies. What is deployed is what runs. There is no implementation slot, no admin proxy and no upgrade function anywhere — so the bytecode you verify on Blockscout is the bytecode that will execute forever.