BaseLaunchBuybackVault
Holds every coin's bought-back supply and releases it linearly over five years, splitting each release between the creator recipient and the protocol on the coin's frozen protocol share.
Holds every launch's bought-back memecoin supply and releases it linearly over five years instead of burning it immediately, splitting every release between the creator and the protocol on the launch's recorded fee shares. One shared deployment serves every launch, the same "single deployment for every token" pattern BaseLaunchFeeEscrow already uses. Note that the split applies to the release, not to the funding. Both the curve and the hook carve the buyback slice out of the creator's share of the fees alone, so the creator funds the entire lock and then receives only their fee share of it back. Enabling a buyback therefore moves value from the creator to the protocol relative to taking the fees directly, by an amount that grows with buybackBurnBps. Deposits use a weighted-average vesting clock instead of per-deposit tranches: a launch's fee sweep can add to its lock on every single sweep, and tracking an unbounded array of tranches would make release()'s gas cost grow forever. Instead, each new deposit shifts the launch's single vestingStart forward by an amount proportional to the deposit's share of the new total, so a large existing lock is barely disturbed by a small top-up, and a small existing lock is pulled close to the new deposit's own clock. vestedAmount at any time reflects a fair, size-weighted blend across every deposit made so far.
Part of the contract reference.
Deployed at
Read functions (13)
| Function | What it does |
|---|---|
factoryfactory() view returns (address)selector 0xc45a0155Anyone | The launch factory, used to recognise each coin's curve as an allowed locker. Wired once. |
feeEscrowfeeEscrow() view returns (address)selector 0xc4b7de97Anyone | The fee escrow releases are credited to. |
feePolicyfeePolicy() view returns (address)selector 0x82589038Anyone | The hook: an allowed locker, and the source of the live protocol fee recipient. |
ownerowner() view returns (address)selector 0x8da5cb5bAnyone | Returns the address of the current owner. Inherited from Ownable. |
pendingOwnerpendingOwner() view returns (address)selector 0xe30c3978Anyone | Returns the address of the pending owner. Inherited from Ownable2Step. |
releasablereleasable(address token) view returns (uint256)selector 0xa3f8eaceAnyone | Amount of |
renounceOwnershiprenounceOwnership() pureselector 0x715018a6Anyone | Permanently disabled. Ownership here exists only to perform the one-time factory wiring, and renouncing before that wiring would strand every future buyback lock. |
totalLockedtotalLocked(address token) view returns (uint256)selector 0xd8fb9337Anyone | Total amount of |
totalReleasedtotalReleased(address token) view returns (uint256)selector 0xd79779b2Anyone | Total amount of |
vestedAmountvestedAmount(address token) view returns (uint256)selector 0x384711ccAnyone | Amount of |
VESTING_DURATIONVESTING_DURATION() view returns (uint256)selector 0x4cfc4d30Anyone | The vesting period of every lock: 5 x 365 days. |
vestingStartvestingStart(address token) view returns (uint256)selector 0x032bbf4fAnyone | The launch's current weighted-average vesting start time. Reporting only. Vesting is accounted from |
vestingTermsvestingTerms(address token) view returns (address creatorRecipient, uint16 protocolFeeShareBps)selector 0xb224cf64Anyone | Returns the immutable terms for the token's active vesting epoch. |
Write functions (6)
| Function | What it does |
|---|---|
acceptOwnershipacceptOwnership()selector 0x79ba5097Pending owner | The new owner accepts the ownership transfer. Inherited from Ownable2Step. |
locklock(address token, uint256 amount, address creatorRecipient, uint16 protocolFeeShareBps)selector 0xe73e6069The hook, or the coin's own bonding curve | Locks |
releaserelease(address token) returns (uint256 released)selector 0x19165587The coin's vest creator recipient or the protocol fee recipient | Releases every currently vested, not-yet-released token for Restricted to the two parties a release pays. Letting anyone choose when value leaves the vest is harmful in two ways. A caller can time a release inside the protocol owner's creator-recipient recovery window, flushing vested tokens to the very address the recovery exists to abandon. A caller can also advance the checkpoint every second, so each step rounds its newly vested amount down to zero and the vest stalls without ever paying out. |
setFactorysetFactory(address factory_)selector 0x5bb47808Owner | One-time wiring of the launch factory, set after both are deployed, used to authorize each launch's bonding curve as a locker. |
transferOwnershiptransferOwnership(address newOwner)selector 0xf2fde38bOwner | Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting Inherited from Ownable2Step. |
updateCreatorRecipientupdateCreatorRecipient(address token, address newRecipient)selector 0x5ad7fc17Factory only | Redirects a launch's buyback vest to a new creator recipient. Restricted to the factory, which forwards both self-service creator transfers and protocol-owner recovery overrides here, so vested buyback tokens track the same recipient as immediate creator fees rather than remaining stranded on the launch-time address. Vested but not-yet-released tokens follow the new recipient too, matching the intent of wallet recovery. Only the protocol split terms stay bound to the launch snapshot; the creator identity is managed here instead. |
Events (7)
| Event | What it means |
|---|---|
CreatorRecipientUpdatedCreatorRecipientUpdated(address indexed token, address indexed previousRecipient, address indexed newRecipient)topic0 0x38f9c71383b6e3fe639172c6b3a3d4418fa722b4abf99bfd8e31f92bd5ea23f0 | A coin's vest moved to a new creator recipient, following its creator fee recipient. Emitted by updateCreatorRecipient |
FactorySetFactorySet(address factory)topic0 0x1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b1 | The factory was wired (once). Emitted by setFactory |
LockedLocked(address indexed token, address indexed depositor, uint256 amount, uint256 newVestingStart)topic0 0x967ad762aa9070ada8db64577288e214771e89667066ae38e8750cb8a86c5429 | Coins were added to a coin's vest; newVestingStart is the new weighted-average start. Emitted by lock |
OwnershipTransferredOwnershipTransferred(address indexed previousOwner, address indexed newOwner)topic0 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | Ownership moved to a new owner (at deployment, or when a pending owner accepted). Emitted by acceptOwnership, |
OwnershipTransferStartedOwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)topic0 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | The owner named a pending owner; ownership moves when that account accepts. Emitted by transferOwnership |
ReleasedReleased(address indexed token, uint256 creatorAmount, uint256 protocolAmount)topic0 0x82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd | Vested coins were credited to the creator recipient and the protocol in the fee escrow. Emitted by release |
VestingTermsSnapshottedVestingTermsSnapshotted(address indexed token, address indexed creatorRecipient, uint256 protocolFeeShareBps)topic0 0xbfa0be16ef69ae0ef2c028536ba1e255e95e89e2519ee503c0f3d69f028f2ce3 | A new vesting epoch for a coin fixed its creator recipient and protocol share. Emitted by lock |
Addresses are listed for launcher 2.1.0, where new coins launch, and for launcher 2.0, which keeps serving the coins launched before the cutover. A coin stays on the set that launched it. The functions and events are the 2.1.0 contracts'; the 2.0 contracts are an earlier version of the same code and have no interface registry, so check a 2.0 contract's verified source on Basescan before relying on a detail listed here.