For the complete documentation index, see llms.txt. This page is also available as Markdown.

Smart Contract

veLISTA is being retired under LIP-024. The on-chain switch is freePenaltyStartTime = 2026-04-07 08:20 UTC. From that moment lock, relockUnclaimed, increaseAmount / increaseAmountFor and extendWeek all revert with free penalty period start, and getPenalty(address) returns 0 for every account while block.timestamp is within [freePenaltyStartTime, freePenaltyEndTime] — see the bounded-window caveat below before relying on it past that. enableAutoLock / disableAutoLock remain callable on existing positions. Governance voting has moved to plain LISTA on Snapshot, and protocol revenue previously distributed to veLISTA stakers now funds LISTA buybacks.

Existing locks can still be exited without penalty. There is no withdraw function, and the two exits are mutually exclusive:

  • claim() — only once the lock term has elapsed and the position is not auto-locked. Otherwise it reverts no claimable tokens.

  • earlyClaim() — only while the position is still locked or auto-locked. Otherwise it reverts cannot claim with penalty.

Two caveats. The penalty-free period is a bounded window that a MANAGER can change — read freePenaltyEndTime before relying on it. And earlyClaim checks an independent earlyClaimBlacklist before anything else. A blacklisted auto-locked position therefore cannot use earlyClaim(), and claim() is blocked while auto-lock is on — but the exit is delayed, not removed: disableAutoLock() is not gated by the penalty-free modifier and carries no blacklist check, and it converts the position to a fixed term ending lockWeeks weeks later, after which claim() works penalty-free. Worst case is a 52-week wait.

The veLista* contracts below stay readable on-chain and existing positions can still be exited through them, but they should not be used for new integrations.

Main

Name
Contract Address

LP Staking

LISTA emissions reach staking pools through per-pool distributor contracts fed by ListaVault. The set of distributors is on-chain and changes over time, so read it from the vault rather than from a list here:

Ids are issued sequentially from 1 and never reused, so idToDistributor(i) for i in 1..distributorId() is the complete registry. A distributor's registration does not mean it is being funded — check getDistributorWeeklyEmissions(id, getWeek(block.timestamp)) for the week you care about; a 0 there means no emission was allocated to it that week. claimableList(account, distributors) returns a user's claimable amount per distributor in one call.

Staking and vault infrastructure

Name
Address

PancakeStaking

0xE31f0BcE1F825A8e27f2Cc30B54af19DA2978f10

ThenaStaking

0xFA5B482882F9e025facCcE558c2F72c6c50AC719

PancakeVault

0x62DfeC5C9518fE2e0ba483833d1BAD94ecF68153

ThenaVault

0xF40D0d497966fe198765877484FFf08c2D2004ad

LpProxy

0x5A0E3291514F5F1797A0C7eFefdac81eeC70ec01

Last updated

Was this helpful?