# BaseLaunchHoldersDistributorFactory

Creates one holders distributor per holders-mode launch as a clone of a single implementation whose code cannot change, and holds the publisher key every distributor trusts to post reward epochs.

Creates one holders distributor per launch as an EIP-1167 clone of a fixed implementation deployed with this factory. Clones are not upgradeable, so a distributor's code is fixed for its whole life. The owner's only power is rotating `publisher`, the key allowed to post reward epochs on every distributor. A publisher can allocate a distributor's `available()` balance but can never reach an allocation that is already published and still claimable.

Part of the [contract reference](https://baselaunch.app/docs/reference).

### Deployed at

BaseLaunchHoldersDistributorFactory (2.1.0)`0xB7464E790e2A3083FeF8a842d730a49242846ACA`[](https://basescan.org/address/0xB7464E790e2A3083FeF8a842d730a49242846ACA)

BaseLaunchHoldersDistributorFactory (2.0)`0xe161531B9296029De5f274892a4Dc4D945649224`[](https://basescan.org/address/0xe161531B9296029De5f274892a4Dc4D945649224)

### Read functions (7)

| Function | What it does |
| --- | --- |
| [feeEscrow](#feeEscrow) `feeEscrow() view returns (address)` selector 0xc4b7de97 Anyone | The fee escrow distributors harvest creator fees from. |
| [implementation](#implementation) `implementation() view returns (address)` selector 0x5c60da1b Anyone | The code every distributor clone runs. |
| [launchFactory](#launchFactory) `launchFactory() view returns (address)` selector 0x536dac9b Anyone | The launch factory every distributor binds against. |
| [owner](#owner) `owner() view returns (address)` selector 0x8da5cb5b Anyone | Returns the address of the current owner. Inherited from Ownable. |
| [pendingOwner](#pendingOwner) `pendingOwner() view returns (address)` selector 0xe30c3978 Anyone | Returns the address of the pending owner. Inherited from Ownable2Step. |
| [publisher](#publisher) `publisher() view returns (address)` selector 0x8c72c54e Anyone | The key allowed to publish reward epochs, read live by every distributor. |
| [renounceOwnership](#renounceOwnership) `renounceOwnership() pure` selector 0x715018a6 Anyone | Permanently disabled, so the publisher key always stays rotatable. |

### Write functions (4)

| Function | What it does |
| --- | --- |
| [acceptOwnership](#acceptOwnership) `acceptOwnership()` selector 0x79ba5097 Pending owner | The new owner accepts the ownership transfer. Inherited from Ownable2Step. |
| [create](#create) `create(address creator) returns (address distributor)` selector 0x9ed93318 Anyone | Deploys a new distributor. Permissionless: a distributor only ever receives the fees of a launch that names it as recipient. |
| [setPublisher](#setPublisher) `setPublisher(address publisher_)` selector 0xcab63661 Owner | Rotates the epoch publisher for every distributor. |
| [transferOwnership](#transferOwnership) `transferOwnership(address newOwner)` selector 0xf2fde38b Owner | 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 `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer. Inherited from Ownable2Step. |

### Events (4)

| Event | What it means |
| --- | --- |
| [DistributorCreated](#event-DistributorCreated) `DistributorCreated(address indexed distributor, address indexed creator)` topic0 0xbefdb281bf53f234496ee0b37711bf32704eb91833f0c05e3020581720dea7be | A distributor clone was created; creator is recorded for attribution only. Emitted by [create](#create) |
| [OwnershipTransferred](#event-OwnershipTransferred) `OwnershipTransferred(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](#acceptOwnership), `constructor` |
| [OwnershipTransferStarted](#event-OwnershipTransferStarted) `OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)` topic0 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | The owner named a pending owner; ownership moves when that account accepts. Emitted by [transferOwnership](#transferOwnership) |
| [PublisherSet](#event-PublisherSet) `PublisherSet(address indexed publisher)` topic0 0xc0166530abaec0a0e410fc382bffc2e81e6bfb689a714c74da47586f936d20fa | The epoch publisher for every distributor was set or rotated. Emitted by `constructor`, [setPublisher](#setPublisher) |

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](https://baselaunch.app/fees), what the owner can and cannot change is on [security](https://baselaunch.app/security), and short answers are in the [FAQ](https://baselaunch.app/faq).

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

Last updated 2026-10-21.

Canonical page: https://baselaunch.app/docs/reference/distributor-factory
