
StakePort
Trustless secondary market for native ETH validator stake, settled by beacon-chain proofs
Demo
About
StakePort is a trustless secondary market for native Ethereum stake. Today, a solo staker or institution that wants to exit a validator has to wait in the exit queue (days to weeks), and a buyer who wants staked ETH has to wait in the entry queue. StakePort lets them trade the validator position directly: the seller's stake is moved into the buyer's validator via an EIP-7251 consolidation, and the buyer's payment is released only once the beacon chain itself proves the stake arrived. There are no custodians, no LST wrapper, and no trusted oracle. How a trade works: 1. The seller delegates their validator's withdrawal EOA to a small EIP-7702 contract and lists an order (fixed price or priced relative to wstETH). 2. The buyer fills the order and pays in WETH, native ETH, or any token routed through Uniswap v4. Payment is held in escrow, and the same transaction submits the consolidation request (source validator -> buyer's 0x02 validator) through the seller's delegated EOA. 3. Checkpoint 1: an SSZ Merkle proof against an EIP-4788 beacon block root shows the request is in the beacon state's pending_consolidations queue. 4. Checkpoint 2: a later proof shows the source validator was processed (withdrawable, balance drained, not slashed). The escrow then pays the seller. If the request is ignored, the source is slashed, or nobody proves acceptance in time, the buyer is refunded. Anyone can relay the proofs, so settlement is permissionless. Pricing reflects queue economics. A buyer who skips the entry queue earns rewards sooner, so the seller can charge a premium: fair value = amount x (1 + APR x queue-time saved), with APR taken from Lido's public stETH APR feed. The UI shows live entry/exit queue lengths and this fair value. Liquidity venues: - Uniswap v4 hook: buy stake with any token in one swap. The hook takes the input, swaps it into ETH in the canonical pool, and fills the order. A v3 wstETH/WETH TWAP prices LST-relative orders. - 1inch Aqua + SwapVM: buyers post standing bids (fixed or Dutch auction) backed by Aqua virtual balances, and sellers match their stake into the best bid. - World ID: sellers can restrict an order to buyers verified with a World ID NFC document credential (passport / My Number Card). The aim is to keep sanctioned jurisdictions out while preserving privacy. It is not KYC: no identity data reaches the app or the chain. The demo runs on a mainnet fork one block before a real mainnet consolidation. Checkpoint 1 uses the real beacon state and a real proof; checkpoint 2 is simulated because it would take ~27 hours.
How it's made
Contracts (Solidity 0.8.30, Foundry, EVM Prague; about 130 tests, including mainnet-fork tests): - NativeStakeMarket: order book (EIP-712 or onchain listing), escrow, and a two-checkpoint settlement state machine. - Stake7702Delegate: the seller's EOA runs this code via EIP-7702. It can only call the EIP-7251 consolidation predeploy on behalf of the market. - BeaconOracle + BeaconProofs: SSZ Merkle verification against EIP-4788 roots. The generalized indices are derived by hand for the Fulu BeaconState (38 fields): validators, balances, slot and pending_consolidations. They are cross-checked against Lodestar's SSZ types. Proofs: a TypeScript proof generator (Lodestar ssz and persistent-merkle-tree) builds the proofs. On real networks we don't download the ~250 MB beacon state. Instead we use the Lodestar proof API exposed by ChainSafe's public nodes to fetch compact multiproofs. Those nodes are not trusted: every proof is rebuilt locally and checked against the block header's state root, which the contract checks against EIP-4788. A relayer settles trades automatically, and an event indexer serves the frontend.