Trinity is a bonding curve protocol implemented as a Uniswap V4 hook. A single hook contract serves three independent liquidity pools (USDC, WETH, $CHAOSLP), each with its own curve shape. The hook manages concentrated LP positions across price bands that approximate a bonding curve.
Because swaps route through Uniswap V4’s PoolManager and Universal Router, Trinity pools are natively visible to the entire ecosystem: aggregators, bots, GeckoTerminal, block explorers. Trading fees are asymmetric: buy-side fees go to the multisig, sell-side fees burn $TRINI.
| Allocation | Amount | % | Purpose |
|---|---|---|---|
| TRINI/USDC Pool | 450,000,000 | 45% | Deep anchor — stable pricing |
| TRINI/WETH Pool | 297,000,000 | 29.7% | ETH relay — moderate depth |
| TRINI/$CHAOSLP Pool | 153,000,000 | 15.3% | Volatility engine — thin, steep |
| Treasury (Multisig) | 100,000,000 | 10% | Team, partnerships, reserves |
One hook contract, three pools. The AMM runs normally — the hook manages WHERE liquidity sits (concentrated LP bands) and collects fees via beforeSwap. LP is seeded one-sided (TRINI only, Clanker pattern) and rebalances across bands as price moves.
+-----------------------+
| POOL MANAGER |
| (Uniswap V4 core) |
+----------+------------+
|
+----------v------------+
| TRINITY HOOK V6 |
| beforeSwap: 1% fee |
| afterSwap: rebalance |
| LP bands per pool |
+--+--------+--------+--+
| | |
+--------v--+ +---v------+ +--v-----------+
| TRINI/USDC | | TRINI/WETH| | TRINI/$CHAOSLP|
| 450M TRINI | | 297M TRINI| | 153M TRINI |
| 16 bands | | 15 bands | | 15 bands |
| Deep/flat | | Moderate | | Thin/steep |
+-----------+ +----------+ +--------------+
| | |
v v v
Buy fees --> Multisig
Sell fees --> Burn to 0xdead
Each pool has its own band schedule and curve shape. The pools share TRINI as currency0 but have independent LP positions, active bands, and fee recipients.
| Contract | Address |
|---|---|
| TRINI Token | 0x17790eFD4896A981Db1d9607A301BC4F7407F3dF |
| TrinityHookV6 | 0xe89a658e4bec91caea242aD032280a5D3015C8c8 |
| Staking Hub | 0x76F63BB9990a1afdB1c426394D3Fc2448FBe77d6 |
| WETH Gauge | 0x97F6f66d2BD30a87D6C4581390343e9cA02c7ae2 |
| Multisig (Owner) | 0xb7DD467A573809218aAE30EB2c60e8AE3a9198a0 |
All contracts verified on Basescan. Source: github.com/ipfsnut/trinity-prototype
The hook address encodes V4 permissions in its lower bits: BEFORE_ADD_LIQUIDITY, BEFORE_SWAP, BEFORE_SWAP_RETURNS_DELTA, AFTER_SWAP. Deployed via CREATE2 address mining.
Instead of a formula-based bonding curve, V6 uses discrete LP bands — concentrated Uniswap V4 positions at different tick ranges. Each band covers a price segment. Together they approximate a bonding curve with variable steepness.
The hook owns all LP positions. External LP is permanently blocked via beforeAddLiquidity. Only the hook can add or remove liquidity.
Each pool decelerates at a different rate after a shared steep ignition band:
| Pool | Bands | TRINI | Character | Total Curve |
|---|---|---|---|---|
| USDC | 16 | 450M | Fast decel → deep anchor | 327,612x |
| WETH | 15 | 297M | Medium decel → relay | 12,154x |
| $CHAOSLP | 15 | 153M | Slow decel → volatility engine | 1,045x |
The USDC curve is 327,612x deep — it effectively never finishes. ChaosLP is 1,045x — theoretically reachable, but its volatile underlying means the price oscillates rather than climbing steadily.
Every swap across all three pools incurs a 1% fee on the input amount. Extracted in beforeSwap before the AMM runs.
User buys with 1000 USDC:
- 10 USDC (1%) --> multisig (fee recipient)
- 990 USDC enters the AMM
User sells 10,000 TRINI for ETH:
- 100 TRINI (1%) --> 0x000...dead (burned permanently)
- 9,900 TRINI enters the AMM
- User receives ETH output
Every sell is deflationary. No exceptions. All three pools burn on sells.
exactOutput swaps are blocked — the hook reverts on amountSpecified >= 0. This closes a fee bypass vector found in V5.
Because the three curves have different shapes, TRINI has different prices on different pools at any given time. Arbitrage bots trade the spread:
1. Bot buys TRINI on the cheap pool (e.g., USDC -- deep, stable)
2. Bot sells TRINI on the expensive pool (e.g., ChaosLP -- just spiked)
3. Each leg pays 1% fee (2% round-trip)
4. Buy fee --> multisig. Sell fee --> burned.
5. Spread narrows -- until the next trade reopens it
ChaosLP is the engine: thin depth (153M) + slow deceleration means every trade moves the price significantly. Its micro-cap underlying (~$2,600 MC) means constant external price shocks that create new dislocations.
USDC is the anchor: deep depth (450M) + fast deceleration means organic buys barely move the price. It provides the stable reference for arb bots.
The spread never fully closes because every arb cycle costs ~2% in fees. Bots stop when the spread falls below ~2%, then the next ChaosLP price move reopens the gap.
Swaps go through Uniswap’s Universal Router with the standard V4 swap encoding (same as Clanker). No custom router needed — the hook intercepts via callbacks.
| Permission | Purpose |
|---|---|
| BEFORE_ADD_LIQUIDITY | Blocks external LP permanently. Only the hook manages positions. |
| BEFORE_SWAP | Extracts 1% fee before the AMM runs |
| BEFORE_SWAP_RETURNS_DELTA | Returns fee delta so the AMM sees reduced input |
| AFTER_SWAP | Rebalances LP bands after price moves |
For the WETH pool, native ETH is accepted: the Universal Router wraps ETH to WETH via WRAP_ETH command before the V4 swap.
Stake TRINI to earn rewards from pool fees. Uses the ChaosLPHub + RewardGauge pattern.
Multisig collects buy fees from all three pools, then distributes to gauges via notifyRewardAmount(). Staking locks TRINI, reducing circulating supply.
All contracts are owned by the multisig (0xb7DD...8a0). The multisig can:
The multisig cannot change the fee rate (hardcoded 1%), the burn mechanism, or the band configurations (set at registration).
| Parameter | Mutable? |
|---|---|
| Fee rate (1%) | No — hardcoded |
| Burn on sells | No — hardcoded |
| Band configuration per pool | No — set at registerPool |
| External LP block | No — permanent |
| Hook address & permissions | No — V4 hooks are immutable |
| Fee recipient per pool | Yes — owner only |
| LP positions | Yes — owner can emergency withdraw |
| Risk | Severity | Mitigation |
|---|---|---|
| Smart contract bug | Critical | Internal audit (6 passes), 18 tests passing, all contracts verified |
| Multisig compromise | High | Can drain hook LP, not user wallets. Timelock can be added later. |
| Low volume / no arb | Medium | Three curve shapes create persistent dislocations. ChaosLP volatility feeds the flywheel. |
| $CHAOSLP goes to zero | Low impact | That pool dies, 2/3 of liquidity unaffected |
| MEV / sandwich | Low | 1% fee + burn = ~3% attacker cost per round-trip |
| Cross-pool TRINI leakage | Accepted | Leftover TRINI auto-redistributes across pools. Quote-side tokens never cross-contaminate. |
Built by epicdylan • GitHub • All contracts verified on Basescan