Meridian is a non-custodial liquidity protocol enabling autonomous yield optimization across concentrated positions. Capital efficiency, maximized. Risk, parametrized.
Showing 5 of 127 active pools · Updated 12s ago
Meridian is a non-custodial concentrated liquidity protocol deployed on Ethereum mainnet, Arbitrum, and Optimism. It enables liquidity providers to deploy capital within custom price ranges, maximizing fee generation per unit of capital relative to traditional AMM designs.
The protocol introduces autonomous position management — an on-chain keeper network that rebalances LP positions in response to price drift, ensuring liquidity remains in-range and generating fees continuously. LPs receive an ERC-1155 receipt token representing their position, tradeable and composable across DeFi.
Capital Efficiency. Concentrated liquidity allows LPs to provide depth within specific price ranges, achieving up to 4,000× the capital efficiency of constant-product AMMs for stable pairs, and 100–500× for volatile pairs with reasonable range selection.
Composability. Every position mints a portable ERC-1155 token. These receipts can be used as collateral in lending markets, transferred between wallets, or managed by smart contract operators through the operator delegation system.
Permissionless Pool Creation. Any address may create a liquidity pool for any ERC-20 pair at any of the three supported fee tiers: 0.01%, 0.05%, or 0.30%. Pool creation requires no governance vote and takes effect in a single transaction.
The Meridian protocol is composed of three distinct contract layers: the Core, the Router, and the Keeper Network. This separation ensures that critical invariant logic is isolated from peripheral routing and automation concerns.
The MeridianCore contract implements the AMM invariant and manages tick-indexed liquidity positions. It is intentionally minimal — containing no upgradeability, no admin keys, and no protocol fee switches that require governance approval to activate. The design philosophy is immutability-first: if it can't be changed, it can't be exploited by governance capture.
The PoolFactory deploys new pool instances via CREATE2, enabling deterministic pool address computation. Pool addresses can be derived off-chain from the two token addresses and fee tier alone, allowing efficient transaction batching.
The PositionManager wraps core pool interactions into the ERC-1155 receipt token system. Each position token encodes the pool address, price tick range, and liquidity amount in its token ID, enabling fully off-chain position decoding without requiring on-chain state reads.
Security is a first-order concern at Meridian. The core contracts have been reviewed by four independent audit firms — Trail of Bits, Spearbit, Sherlock, and Code4rena — with a combined total of eleven senior auditors across twelve weeks of engagement. All critical findings have been remediated; no high-severity issues remain open.
All audit reports are publicly available in the meridian-protocol/audits repository on GitHub. Findings are tracked with their severity classification, remediation commit hash, and auditor sign-off confirmation. The repository is maintained by the security committee and updated with each new engagement.
Meridian collects a protocol fee of 10–20% of swap fees generated by each pool, configurable by governance within this range. The default is 15%. Protocol fees accrue to the FeeCollector contract and are claimable by MRD token stakers proportional to their staking weight.
LP fees — the remaining 80–90% of swap fees — accrue in-range to all active liquidity positions and are claimable at any time without closing the position. Unclaimed fees compound automatically when a position is rebalanced by the keeper network, improving effective yield for passive LPs.
The Meridian protocol is governed by MRD token holders through an on-chain governance system based on Governor Bravo. Proposals require a minimum of 100,000 MRD to submit and a quorum of 4% of circulating supply to pass.
A 48-hour timelock separates proposal passage from execution, giving the community time to respond to any proposal deemed adversarial. The timelock admin key is held by a 5-of-9 multisig composed of publicly-identified contributors with disclosed identities and reputational stakes.
Full-stack developer tooling. TypeScript SDK, REST API, and direct contract ABIs — integrate in minutes, deploy to production.
# Install the Meridian SDK npm install @meridian/sdk # or with yarn yarn add @meridian/sdk
import { Meridian } from '@meridian/sdk' import { parseEther, parseUnits } from 'viem' // Initialize the client const client = new Meridian({ apiKey: process.env.MERIDIAN_API_KEY, network: 'mainnet', rpcUrl: process.env.ETH_RPC_URL }) // Fetch top pools sorted by APY const pools = await client.pools.list({ sortBy: 'apy', order: 'desc', limit: 10, minTvl: 1_000_000 }) // Open a concentrated liquidity position const position = await client.positions.create({ pool: 'ETH/USDC', amount0: parseEther('1.0'), amount1: parseUnits('2800', 6), rangeLower: 2600, // Lower price bound (USDC per ETH) rangeUpper: 3200, // Upper price bound (USDC per ETH) autoRebalance: true }) console.log(`Position minted: tokenId #${position.tokenId}`)
# Fetch pools sorted by APY curl https://api.meridian.finance/v2/pools \ -H "Authorization: Bearer YOUR_API_KEY" \ -G \ --data-urlencode "sortBy=apy&limit=5"
{ "data": [ { "address": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8", "pair": "ARB/USDC", "feeTier": 3000, "tvl": "87421048.32", "volume24h": "134621893.18", "apy": "22.14", "apyBase": "14.82", "apyReward": "7.32", "sqrtPriceX96": "1429280024900000000000000000000" } ], "meta": { "total": 127, "page": 1, "updatedAt": "2026-03-22T14:08:31Z" } }
// SPDX-License-Identifier: MIT // Meridian Protocol — Direct Contract Integration Example pragma solidity ^0.8.20; import "@meridian/contracts/interfaces/IMeridianCore.sol"; import "@meridian/contracts/interfaces/IPositionManager.sol"; contract MyDeFiIntegration { IMeridianCore public immutable core; IPositionManager public immutable pm; constructor(address _core, address _pm) { core = IMeridianCore(_core); pm = IPositionManager(_pm); } function openPosition( address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amount0, uint256 amount1 ) external returns (uint256 tokenId) { tokenId = pm.mint( IPositionManager.MintParams({ token0: token0, token1: token1, fee: fee, tickLower: tickLower, tickUpper: tickUpper, amount0Desired: amount0, amount1Desired: amount1, recipient: msg.sender }) ); } }