Contracts
Two contracts on Robinhood Chain, written in Solidity 0.8.26, no proxy upgrade. They are the on-chain half of Glint. The Solana half has no custom program: it uses pump.fun's own program and fee sharing. Source in contracts/src/.
| Contract | Role |
|---|---|
GlintLauncher | The keeper calls launch to launch the coin on Pons with a dedicated vault as creator fee recipient. Keeps the list of coins. |
GlintVault | One per coin, a minimal proxy. Holds the coin's ETH cash and Pons inventory for the maker, receives the Pons creator fees, and lets the keeper trade the Pons curve. |
Launcher
struct LaunchParams {
string name;
string symbol;
string logoIpfs; // ipfs:// URI
string description;
string twitter;
string website;
uint16 creatorFeeBps; // Pons creator tax, 0..1000
address creatorEvm; // optional Robinhood payout address
uint16 creatorShareBps; // share of Pons creator fees for creatorEvm
bytes32 salt;
}
function launch(LaunchParams calldata p) external payable
returns (address token, address curve, address vault); // only the keeper
msg.value is the Pons launch fee plus the cash the vault starts with. The launcher exempts itself and the vault from the 99 % snipe tax so the first buys are not taxed.
Vault
// keeper only
function buy(uint256 ethIn, uint256 minTokensOut) external returns (uint256);
function sell(uint256 tokensIn, uint256 minEthOut) external returns (uint256);
function sweep(uint256 ethAmount, uint256 tokenAmount) external; // to the pool address only
function retire() external; // after Pons graduation, to the pool
// public
function collect() external; // pull the Pons creator fees into the vault
function split() external; // creatorShareBps to creatorEvm, the rest to the pool
function price() external view returns (uint256);
function cash() external view returns (uint256);
function inventory() external view returns (uint256);
buycannot spend more thancash: the subtraction reverts on underflow.sweepandretiresend funds only to the pool address fixed at deployment.- A reentrancy lock covers
buy,sell,sweep,retireandsplit. initializecan only be called once, by the launcher.
Deployment
script/Deploy.s.sol deploys the launcher, which deploys the vault implementation. It needs two addresses: KEEPER, the only address that can launch and trade, and POOL, which receives swept funds and the pad's share of fees. Both are immutable afterwards.
What is not on-chain
The maker's decisions, the alignment, the pump.fun trades and the pool's cash on Solana are run by the keeper from its own wallets. See the keeper and the operator and the trust model.