Contracts

Two contracts on Robinhood Chain, written in Solidity 0.8.26, no proxy upgrade. They are the on-chain half of Hinge. The Solana half has no custom program: it uses pump.fun's own program and fee sharing. Source in contracts/src/.

ContractRole
HingeLauncherThe keeper calls launch to launch the coin on Pons with a dedicated vault as creator fee recipient. Keeps the list of coins.
HingeVaultOne per coin, a minimal proxy. Receives the Pons creator fees and splits them between the creator's address and Hinge. It also has keeper-only buy and sell functions on the Pons curve, which Hinge does not use: the vault starts with no cash.

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. The vault starts with no cash. 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);

// keeper or pool
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);

In the contract, pool is simply the Hinge address: it receives Hinge's share of the Pons creator fees. It is not a pool of money used to prop up a price.

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.

Deployment status

HingeLauncher is not deployed yet. The contracts are written, tested on a fork and ready: script/Deploy.s.sol takes the two addresses it needs and deploys the launcher and the vault implementation in one transaction. The addresses will be published here, on the token page and in site.js the day it is deployed. The cost of a deployment is a few cents of gas.

What is not on-chain

The pump.fun creation and the order of the launch are run by the keeper from its own wallets. See the keeper and the operator and the trust model.

NoteThe contracts are tested on a fork of Robinhood Chain against the real Pons (see test results). They are not audited and no coin has used them yet. An independent audit comes before real funds go in.