PT721 — Principal NFT (arbitrary maturity)
PT721 is the non-fungible sibling of PT20. Each NFT represents one (principal, maturity) position, where maturity can be any future date (not restricted to month boundaries).
- Standard: ERC-721
- Symbol: PT721 (collection: "Kairence PT-721 kDIEM")
- Exchange rate: Fixed 1:1 —
principalDIEM at maturity, no fees. - Cardinality: One singleton contract for the whole Venice path — every PT721 lives in the same collection.
How you get a PT721
By calling Locker.lockPT721(amount, maturity, recipient). The Locker:
- Stakes your DIEM into the vault.
- Mints a new PT721 tokenId to
recipient, recording_positions[tokenId] = (amount, maturity).
You receive a unique NFT representing your position. You can read the position back at any time:
pt721.position(tokenId) → (principal, maturity)How you redeem
After your position's maturity, call Redeemer.redeemPT721AndRequestUnstake(tokenId, beneficiary).
This burns the NFT and queues principal DIEM for unstake. After Venice cooldown + sync, you claim DIEM from the queue.
When to use PT721 vs PT20
| Need | Use |
|---|---|
| Maturity on the 1st of a month, want DEX liquidity | PT20 |
| Maturity on any specific date | PT721 |
| Concentrated DEX liquidity, fungible with other lockers | PT20 |
| Per-position metadata, NFT-marketplace listing | PT721 |
See PT20 vs PT721 for a longer discussion.
Tradeable on NFT marketplaces
PT721 is a standard ERC-721. You can list it on OpenSea, Blur, etc., or use it as collateral in NFT lending protocols. The position data (principal, maturity) is readable from the contract, so marketplaces can display "principal: 10 DIEM, matures Aug 15 2026" alongside the listing.
Locker binding
PT721's locker is a single mutable address, set initially by setLockerInitial and rotated via a 7-day timelock (proposeLocker / activateLocker). Only the current Locker can call PT721.deposit — this enforces the invariant that every PT721 corresponds to a Locker-issued lock with paired DD emission.
Unlike PT20 (where each PT20 contract has an immutable Locker), PT721 shares one Locker across all positions because PT721 is a singleton — there's no per-maturity deploy.
DD issuance for PT721
DD minted on PT721 lock uses the same formula as PT20:
DD = principal × floor(seconds_to_maturity / 86400) (min 1 day)The floor (vs ceiling) closes an attacker-friendly rounding where locking 1 second before a UTC day boundary would have issued 2 × amount DD. With floor + minimum 1 day:
- Sub-day lock → 1 DD per principal.
- 1 day exact → 1 DD per principal.
- 1 day + 1 second → 1 DD per principal.
- 2 days → 2 DD per principal.
No way to game the timestamp for extra DD.
Why not just per-day fungible PT20?
Per-day PT20 means 365 ERC-20 contracts per year. Liquidity would shatter into dust pools. PT721 preserves the arbitrary-maturity functionality without fragmenting fungible markets.
Limits
principalisuint128, allowing positions up to ~3.4 × 10^38 DIEM.maturityisuint64, valid through year ~2554.tokenIdstarts at 1 and increments forever.