baselaunchCreate

BaseLaunchHoldersDistributor

One per holders-mode coin (a clone of the implementation): the coin's creator fee recipient, set at launch, which pays those fees to holders through published Merkle epochs, each claimable for 90 days. The creator cannot move it; the protocol owner can redirect it after a 3-day notice.

Creator fee recipient for a launch in holders mode. Every creator fee the launch earns is credited here through the fee escrow, harvested by anyone, and paid out to the token's holders through Merkle epochs that the distributor factory's current publisher posts. Deployed as an EIP-1167 clone of a fixed implementation, so its code can never change. There is no owner, no sweep and no way to move a recipient: funds leave only as claims against a published epoch, to the account the epoch's tree names. Known publisher power: the publisher decides how available() is split, so a malicious publisher could allocate it to arbitrary accounts. It can never exceed available(), and it can never touch an allocation already published and still inside its claim window, because those amounts are held in reserved until claimed or expired.

Part of the contract reference.

Deployed at

BaseLaunchHoldersDistributor implementation (2.1.0)0x7cC41c9bb4c3831CfdE3E72067d1A848A5535068
BaseLaunchHoldersDistributor implementation (2.0)0xf8049DEcBE32bACD3E239Ba5Ff625FC32366a287

Each holders-mode coin gets its own clone of this implementation, created by the distributor factory in the launch transaction. The clone's address is the coin's creator fee recipient and appears in the router's LaunchedWithBuy event.

Read functions (9)

FunctionWhat it does
availableavailable() view returns (uint256)selector 0x48a0d754Anyone

Quote held here and not yet promised to any epoch.

CLAIM_WINDOWCLAIM_WINDOW() view returns (uint256)selector 0x9f34fc80Anyone

How long an epoch stays claimable after it is published.

claimedclaimed(uint256 epoch, address account) view returns (bool)selector 0x120aa877Anyone

Whether an account has claimed its allocation in an epoch.

epochCountepochCount() view returns (uint256)selector 0x829965ccAnyone

Number of published epochs.

factoryfactory() view returns (address)selector 0xc45a0155Anyone

The distributor factory that cloned this contract. Immutable in the implementation's code, so every clone reads the same value.

getEpochgetEpoch(uint256 epoch) view returns (Epoch)selector 0xbc0bc6baAnyone

One published epoch.

quotequote() view returns (address)selector 0x999b93afAnyone

The launch's quote asset; zero for native ETH.

reservedreserved() view returns (uint256)selector 0xfe60d12cAnyone

Amount published to epochs and not yet claimed or expired.

tokentoken() view returns (address)selector 0xfc0c546aAnyone

The launch token whose creator fees this distributor receives.

Write functions (7)

FunctionWhat it does
claimclaim(uint256 epoch, address account, uint256 amount, bytes32[] proof)selector 0x2e7ba6efAnyone

Pays account its allocation in epoch. Anyone may submit it; the payment always goes to account.

claimManyclaimMany(uint256[] epochs, address account, uint256[] amounts, bytes32[][] proofs)selector 0xfae68828Anyone

Batched claim for one account across several epochs.

expireexpire(uint256 epoch)selector 0xbf81bf43Anyone

Releases an epoch's unclaimed remainder back to available() once its claim window has closed. Permissionless.

harvestharvest() returns (uint256 amount)selector 0x4641257dAnyone

Pulls this distributor's escrow balance in the quote asset. Permissionless, and a no-op when there is nothing to pull.

initializeinitialize(address token_)selector 0xc4d66de8Anyone

Binds this distributor to token_, once. Anyone may call it, but only for a launch whose creator fee recipient is this contract, so a distributor can never be bound to a launch whose fees it does not get.

publishpublish(bytes32 root, uint256 total, string uri) returns (uint256 epoch)selector 0x2460b6a3Publisher key (read live from the distributor factory)

Publishes a reward epoch. Only the distributor factory's current publisher may call it, and total must fit in available().

receivereceive() payableAnyone

Accepts native ETH; this is how the fee escrow pays a distributor of an ETH-paired coin when it harvests.

Events (5)

EventWhat it means
ClaimedClaimed(uint256 indexed epoch, address indexed account, uint256 amount)topic0 0x4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed026

An account's allocation in an epoch was paid to it.

Emitted by claim, claimMany

EpochExpiredReleasedEpochExpiredReleased(uint256 indexed epoch, uint256 released)topic0 0x5dd13dd7f5ad5f43f002aad6c9c494fb29b091f4c36a7f51611ca0bac33a00e3

An epoch's claim window closed and its unclaimed rest returned to the available balance.

Emitted by expire

EpochPublishedEpochPublished(uint256 indexed epoch, bytes32 root, uint256 total, string uri)topic0 0x99b0dcfc120cefd24844a850c4410ebf3dab1166d213a63b9312a4dfcaa75bf2

The publisher posted a reward epoch: Merkle root, total and the URI of the full table.

Emitted by publish

HarvestedHarvested(address indexed quote, uint256 amount)topic0 0x121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf

The distributor pulled its balance from the fee escrow.

Emitted by harvest

InitializedInitialized(address indexed token, address quote)topic0 0x3cd5ec01b1ae7cfec6ca1863e2cd6aa25d6d1702825803ff2b7cc95010fffdc2

The distributor was bound to its coin and pair asset.

Emitted by initialize

Structs

StructFields, in ABI order
Epochbytes32 root, uint256 total, uint256 claimed, uint64 publishedAt, bool expired
Two launcher sets on Base

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.

How the fees are split is on fees, what the owner can and cannot change is on security, and short answers are in the FAQ.

Meme coins are highly speculative and most lose their value. Nothing here is financial advice.

Last updated .