XERISLOCKSECURE TOKEN VESTING
YOUR LOCKS:0
CLAIMABLE:0
NEXT UNLOCK:
CLIFF ✓ LINEAR ✓ LP ✓ MULTI-RECIPIENT ✓
Documentation

XerisLock Docs

How the locker contract works, the schedule shapes you can pick, and what happens after you sign.

Overview

XerisLock is a non-custodial token escrow vault on the Xeris Network. You send tokens to the locker contract along with a schedule describing how they should release; the contract holds custody and emits tokens to the beneficiary when each cliff/segment vests. Once tokens are escrowed, nothing — including the team behind XerisLock — can pull them out except the beneficiary, per the schedule you signed.

Schedule kinds

Time lock

time

Amount unlocks atomically at a single moment. Useful for partner payouts, delayed transfers and team commitment windows.

Linear vesting

linear

Amount unlocks continuously between startAt and endAt. Vested = total × (now − start) / (end − start). Common for treasury releases.

Cliff schedule

cliff

Nothing unlocks before cliffAt. At the cliff, the proportion that would have vested linearly between start and cliff releases all at once, then linear from there to endAt. Standard equity-style 4y / 1y schedule fits here.

LP lock

lp

Same shape as time, but the token is expected to be a XerisDex LP token. Used to prove pool liquidity is committed for a fixed window.

Contract interface

The locker contract id is lock_program. All transactions are submitted as ContractCall instructions — the same opcode XerisDex uses.

create_lock(token_id: String, beneficiary: String, amount: u64, schedule: bytes, revocable: u8, title: String, note: String)

Escrows tokens from the caller and creates a Lock record. Schedule bytes: u8 kind + four u64 LE timestamps (unix seconds).

claim(lock_id: String)

Releases vested-but-unclaimed amount to the beneficiary. Idempotent — calling again with nothing claimable is a no-op.

revoke(lock_id: String)

Owner-only, only if revocable. Returns unvested tokens to the owner. Already-vested tokens remain claimable by the beneficiary.

transfer_beneficiary(lock_id: String, new_beneficiary: String)

Owner-only. Reassigns who can claim future vesting and unclaimed past vesting.

Public read endpoint

State is exposed at /api/node/contract/lock_program and the canonical shape is { contract: { state: { Lock: { locks: LockRecord[] } } } }. Every lock is public by design — this powers the explorer, embed widgets and per-token aggregation pages.

Embedding a lock

Every lock has a portable proof URL at /embed/[id]. Drop the iframe on your landing page and it renders a live card that updates as the schedule progresses. The snippet is generated for you from the lock detail page → Embed button.

<iframe src="https://lock.xerisweb.com/embed/<LOCK_ID>"
        width="100%" height="240" frameborder="0"
        style="border-radius:2px;border:1px solid rgba(255,255,255,0.1)"></iframe>

Fees & audit

XerisLock is currently unaudited and free to use on the Xeris testnet. Once the locker contract clears its audit, this page will list the audit firm, the report URL and the live contract id.