{"id":"ERC-5725","name":"Transferable Vesting NFT","status":"Final","chain":"both","category":{"id":"defi","name":"DeFi Patterns","description":"Vaults, bonds, and financial primitives"},"journeyStages":[{"id":"management","name":"Asset Management","description":"Managing assets over time"}],"uxImpact":"Users hold NFTs representing vesting schedules that can be traded — unlocking liquidity for locked tokens. Design implications: show vesting curve visualization (linear/cliff/exponential), display claimable vs locked amounts, add 'Claim' action for vested tokens, show vesting end date and total allocation, enable NFT transfer/listing while maintaining vesting data. Design decisions: pricing display for secondary markets (discount to fully-vested value), whether to show implied discount rate, how to communicate that buying a vesting NFT means inheriting the vesting schedule.","hasDetailedContent":true,"content":{"id":"ERC-5725","summary":"ERC-5725 turns vesting schedules into tradeable NFTs. Your employee token grant, investor allocation, or airdrop vesting becomes a transferable position—sell your future tokens now at a discount, or buy someone's unvested allocation for a deal.","applicability":{"whenToUse":["Your product addresses: vesting tokens locked until schedule complete.","Your product must handle: can't trade unvested allocations.","The flow should deliver: sell vesting NFT for immediate liquidity.","You are designing a vesting nft dashboard experience with visible states and recovery paths."],"whenToAvoid":["Clearly show cliff date and whether it's passed.","Show both: \"Vested: X | Claimable: Y\".","Show market value and % discount.","No token balances, swaps, lending, or yield flows appear in the product."]},"designerTakeaways":["You can design UI that delivers sell vesting NFT for immediate liquidity.","You can design UI that delivers secondary market for vesting positions.","You can design UI that delivers nFT shows total, vested, claimable clearly."],"problemsSolved":[{"problem":"Vesting tokens locked until schedule complete","oldWay":"Wait 4 years to access full allocation","newWay":"Sell vesting NFT for immediate liquidity","impact":"critical"},{"problem":"Can't trade unvested allocations","oldWay":"No market for future tokens","newWay":"Secondary market for vesting positions","impact":"critical"},{"problem":"Vesting progress not visible","oldWay":"Check protocol, do math for unlocked amount","newWay":"NFT shows total, vested, claimable clearly","impact":"high"},{"problem":"Early employees need liquidity","oldWay":"Wait or borrow against promise","newWay":"Sell portion of vesting NFT","impact":"high"},{"problem":"Vesting terms not standardized","oldWay":"Each protocol different interface","newWay":"Standard functions: claimable, vested, claim","impact":"medium"}],"uxPatterns":[{"name":"Vesting NFT Dashboard","description":"View all vesting positions as NFTs","mockup":"concept/nft-gallery","userFlow":["User views vesting dashboard","Sees all vesting NFTs they own","Progress bar shows vested portion","Claimable amount shown in tokens and USD","Can claim vested or sell entire position"]},{"name":"Vesting Schedule Visualization","description":"Show unlock schedule over time","mockup":"generic/vault-deposit","userFlow":["User opens vesting details","Sees visual unlock curve","Current position marked","Key milestones highlighted","Daily unlock rate shown"]},{"name":"Sell Vesting Position","description":"List vesting NFT for sale","mockup":"concept/nft-gallery","userFlow":["User selects vesting NFT to sell","Sees current vesting state","Market value calculated","Sets asking price","Discount from market shown","Lists for sale"]},{"name":"Buy Vesting Position","description":"Purchase someone's vesting NFT","mockup":"concept/nft-gallery","userFlow":["User browses vesting marketplace","Selects interesting position","Sees exactly what they get","Analyzes discount and break-even","Understands time risk","Purchases vesting NFT"]},{"name":"Claim Vested Tokens","description":"Withdraw unlocked tokens","mockup":"generic/vault-position","userFlow":["User views claimable amount","Sees when they last claimed","Chooses amount to claim","Selects destination","Claims tokens to wallet"]}],"uiComponents":[{"name":"VestingProgressBar","description":"Visual progress of vesting schedule","states":["before-cliff","vesting","fully-vested"],"props":["total","vested","claimed","cliffDate","endDate"]},{"name":"VestingNFTCard","description":"Card displaying vesting position","states":["loading","active","fully-vested","transferred"],"props":["vestingNFT","currentPrice","onClaim","onTransfer","onSell"]},{"name":"UnlockScheduleChart","description":"Graph showing tokens unlocking over time","states":["loading","ready"],"props":["schedule","currentDate","milestones[]"]},{"name":"VestingMarketplace","description":"Buy/sell vesting positions","states":["loading","listings","no-listings"],"props":["token","listings[]","onBuy","onList"]},{"name":"ClaimInterface","description":"Interface for claiming vested tokens","states":["nothing-claimable","claimable","claiming","claimed"],"props":["claimableAmount","onClaim","destinationOptions[]"]}],"antiPatterns":[{"pattern":"Not showing cliff status","why":"User thinks they can claim but cliff hasn't passed","instead":"Clearly show cliff date and whether it's passed","severity":"critical"},{"pattern":"Confusing vested vs claimable","why":"Vested might not equal claimable in some schedules","instead":"Show both: \"Vested: X | Claimable: Y\"","severity":"high"},{"pattern":"No sell discount context","why":"Seller doesn't know if their price is reasonable","instead":"Show market value and % discount","severity":"high"},{"pattern":"Hiding time risk for buyers","why":"Buyer doesn't understand they're taking price risk","instead":"Explicit warning: \"Token may decrease during vesting\"","severity":"high"},{"pattern":"No daily/hourly unlock rate","why":"User doesn't know how fast tokens vest","instead":"Show \"~68 PROTO unlock per day\"","severity":"medium"}],"onMonad":[{"aspect":"Claim Frequency","ethereum":"Claiming costs gas, so users batch claims","monad":"Cheap claims enable daily/hourly claiming","designImplication":"Can show \"Claim\" button always enabled"},{"aspect":"Real-time Vesting","ethereum":"Vested amount updates per block (~12s)","monad":"Sub-second blocks show near-continuous vesting","designImplication":"Progress bar can animate smoothly"},{"aspect":"Marketplace Trading","ethereum":"High gas discourages small trades","monad":"Active trading market viable","designImplication":"Can have liquid vesting marketplaces"},{"aspect":"Partial Claims","ethereum":"Claiming partial amounts costs same gas","monad":"Cheap partial claims for DCA-style withdrawal","designImplication":"Offer flexible claim amounts"}],"keyTakeaways":["ERC-5725 = vesting schedules as tradeable NFTs","Show vested, claimable, and claimed separately","Cliff date must be prominent","Help sellers and buyers understand discount/risk","Display unlock rate (daily/hourly)"],"technicalNotes":"ERC-5725 extends ERC-721 with vestedPayoutAtTime(tokenId, timestamp), pendingPayout(tokenId), and claimablePayout(tokenId). The payoutToken() specifies what's vesting. claim() withdraws to owner. Transfers move entire position. Standard enables secondary markets for unvested allocations."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-5725","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5725","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5725","markdown":"https://www.eipsfordesigners.com/standards/ERC-5725/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5725/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5725","official":"https://eips.ethereum.org/EIPS/eip-5725","discussion":"https://ethereum-magicians.org/search?q=ERC-5725"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}