Chapter 04
Launching a token
A launch is one transaction. It is permissionless, it is not reviewed by anyone, and nothing about it can be undone — which is the reason this chapter spends most of its length on what becomes immutable.
The call
function launch(
string calldata name,
string calldata symbol,
string calldata modelId
) external payable returns (address token, address vault);Part of the value is the factory fee, if the factory was deployed with one. It is forwarded in the same transaction; the factory holds no balance between calls, which is deliberate — a contract that never has a balance is a contract nobody has a reason to attack.
- name
- Display name, for example “DeepSeek R1”
- symbol
- Ticker, uppercase, no leading dollar sign
- modelId
- The provider identifier, verbatim
- msg.value
- The factory fee, in ETH
What comes out
ModelToken
A standard ERC-20 with one addition: the model id is stored at construction and exposed as a getter. There is no setter and no owner, so the link between token and model is as permanent as the token itself.
RevenueVault
Deployed in the same transaction, holding a reference to the token and to the Uniswap router. It accepts ETH from the trade router and from anyone who sends it some, and exposes one state-changing function that anyone may call. It cannot transfer ETH out to an arbitrary address.
Supply, and who holds it
One billion units are minted once, in the constructor, to the launching wallet. That is the whole supply forever. The protocol does not lock it, vest it, or take any of it.
- Whether a pair exists at all is the creator's decision — the factory does not create one and does not seed liquidity.
- The price preview shown on any launch form is arithmetic on numbers you typed. It is not a quote, not a commitment, and no ETH is moved by it.
- A creator who keeps the supply can sell it into whatever liquidity later exists. There is no mechanism here that prevents this, and you should assume it is possible for every token you look at.
Metadata
Image, description and social links are stored off-chain and served by the interface. They are not on the token, they are not consensus, and two interfaces can disagree about them. The only fields a contract will ever confirm are name, symbol, decimals, totalSupply and the model id.