Every buy builds the floor.

ETH liquidity sits under the BEDROCK price. It only grows, only moves up, and nothing in the contract can withdraw it. Bedrock does not promise a floor. It publishes how far away the floor is.

Depth to refusalread from the contract once the pool is live

One cycle, three moves

Every buy pays 3% in ETH. That fee is split in two and put to work under the price. The picture below is the whole protocol; the rest of this page is the detail.

A black marble sea wall. A glass slab of liquidity is staged on the left, a glowing price line climbs through a buyback, and a falling line is absorbed by a slab on the right.
  1. 01   Stage Liquidity

    Half of every buy fee becomes ETH liquidity under the price: The Refusal. Nothing in the contract can withdraw it.

  2. 02   Buyback

    The other half runs a core. It buys BEDROCK back, then stages fresh ETH just under the new price, in one transaction.

  3. 03   Absorb Sells

    A sell runs into that liquidity instead of empty space. The protocol buys the dip with ETH it already placed.

The pool

One pool, one market

BEDROCK trades against native ETH in a single Uniswap v4 pool. The hook that runs it refuses to create any other BEDROCK market, and refuses liquidity from anyone but itself.

That second refusal is what makes the numbers on this page mean something. In an open pool, part of the liquidity under the price belongs to people who can pull it the moment the price starts falling. Here, everything under the price belongs to the protocol and stays.

Buyback and stage liquidity

Cores

Half of every buy fee funds cores. A core buys BEDROCK back, then immediately stages fresh ETH just under the new price. Without that second step, the first seller would take the move straight back.

Cores fire at a random interval between 0 and 10 minutes. Nobody has to be trusted to run them: anyone can call the contract once the interval has passed, and is paid a small bounty for it.

Permanent

The Refusal

The other half of every fee becomes The Refusal: ETH liquidity sitting below the price, held by the hook. When the price rises, new ETH is placed higher. When it falls, nothing moves down. The Refusal never steps back.

It cannot be withdrawn. Not by the team, not by an admin key, not in an emergency. There is no function for it, and the pool itself rejects every removal:

function beforeRemoveLiquidity(...) external view
    onlyPoolManager returns (bytes4)
{
    revert LiquidityIsPermanent();
}

The limit

Below The Refusal

A giant wave pours over a lower, cracked section of the black sea wall.

A sell larger than The Refusal's depth cuts straight through it, and the price keeps falling. The mechanism absorbs selling up to a limit. It does not remove the limit.

That is why the depth is published, block by block, from the contract: so you can size the limit yourself instead of assuming it is infinite.

Read what Bedrock does not guarantee

The fee

Where one ETH goes

The fee is taken on buys only, and always in ETH, because both of its jobs need ETH. Taking it in BEDROCK would force the protocol to sell its own token to fund its own floor. It never does.

Selling BEDROCK costs nothing beyond gas.

An emerald glass slab of liquidity set under a black marble block on top of the sea wall.
A 1 ETH buy at the planned 3% fee, in ETH
You send1.0000
Goes into the curve and comes back as your BEDROCK0.9700
Fee0.0300
Refusal reserve, then The Refusal0.0150
Core reserve, then buyback and staged liquidity0.0150

Each core takes a quarter of the core reserve. Up to half a percent of that pays whoever triggered it. Of the rest, 40% is staged as liquidity under the price and 60% buys BEDROCK back. Every BEDROCK bought back is sent to the dead address.

These amounts are asserted to the wei in the contract test suite, for both exact-input and exact-output buys, including swaps routed through the Uniswap Universal Router on a mainnet fork.

On-chain history

The log

Every core emits one event with everything needed to rebuild its history: the tick before and after, the ETH spent, the ETH staged back under the price, and the BEDROCK taken out of circulation.

This page reads those events straight from Ethereum. Nothing here comes from a Bedrock server.

A black marble slab engraved with rows of glowing emerald tally marks, standing in the sea.

No cores yet. Once the pool is live, every core appears here: the tick before and after, the ETH spent and staged, and the BEDROCK sent to the dead address.

Read this first

What this does not guarantee

A protocol that hides its limits gets judged on them the first time they show up. These are Bedrock's.

Storm waves breaking against the black marble sea wall, its glowing edge climbing to the right.
The price can fall.
The Refusal absorbs selling up to its depth. A sell larger than that cuts through and the price drops. The depth is published precisely so you can size that limit.
A core can land after a dump instead of before it.
The interval is random. Staged liquidity protects against sells that follow a buyback, not against sells that come first.
It depends on buy volume.
No buys, no fees, no top-ups, no buybacks. Bedrock does not create value; it redirects part of the buy flow into liquidity. When the flow stops, the wall stops growing. It does not disappear.
Buyback timing is hard to predict, not unpredictable.
The interval comes from block randomness that a validator can nudge by skipping a block. What protects each core is its capped size, a hard price limit, and a buy fee larger than that limit.
There is no kill switch.
No pause, no upgrade, no rescue. A bug found after deployment cannot be patched. That is a commitment and a limitation at the same time.

Bounded in the contract

Parameters

Every changeable value is bounded inside the contract, checked when it is set, and delayed by two days so anyone can react before it applies. Ownership will be renounced once the values are calibrated in production; the date is announced at launch. After that, nothing on this list can change.

ParameterPlanned at launchHard boundWho can change it
Buy fee3.00%2.00% to 5.00%Owner, after a 2-day timelock
Sell fee0%at most 5.00%Owner, after a 2-day timelock
Share of the fee to The Refusal50%20% to 80%Owner, after a 2-day timelock
Core size, share of the core reserve25%5% to 100%Owner, after a 2-day timelock
Share of a core staged as liquidity40%at most 80%Owner, after a 2-day timelock
Keeper bounty0.50%, cappedat most 2.00%, cap at most 1 ETHOwner, after a 2-day timelock
Largest price move a core can cause2.00%fixedNobody
Interval between cores0 to 10 min, randomfixedNobody
Smallest coreset by simulationfixedNobody
Largest coreset by simulationfixedNobody
Withdraw liquidity or reservesimpossibleno code pathNobody