TENOR

TENOR

Circular of offering

Security
ERC-20, fixed supply 1,000,000,000
Venue
Uniswap v4, TENOR/ETH, Ethereum mainnet
Status
Not deployed
Elsewhere
x.com/Tenor_v4

A Uniswap v4 pool earns fees forever. TENOR sells those fees before they arrive — and spends what it raises buying its own supply back and burning it.

Every swap fee goes into a sinking fund. Nothing else touches it: no treasury, no owner, no withdrawal. There is no function anywhere in the structure that could send that ETH to a person.

Against that future income the protocol sells zero-coupon claims. Pay ETH now, receive a fixed face later, paid in strict issuance order as fees arrive. A continuous Dutch auction discovers the yield.

The proceeds buy TENOR off the pool and burn it. So the protocol borrows against income it has not earned and retires equity with the loan. That is leverage, and Schedule C says who carries it.

The term structure of a claim on this pool's fees Price of one unit of face against the wait. At a zero wait a claim prices at face. At a two-year wait — the longest the issuance rail permits — it prices at 0.2941, a discount of just over seventy per cent. 1.00 0.75 0.50 0.25 0 today 1 year 2 years — the rail price of 1.0000 face 0.2941 at the rail 1.0000 — no wait, no discount

The term structure, drawn to the contract's own arithmetic: price = face ÷ (1 + r·t), with r walking from 8.00% at a zero wait to 120.00% at the two-year issuance rail.

Every figure on this page is taken from tenor/*.sol, econ_tenor.js, or a measurement written by gas_tenor.js on an Ethereum mainnet fork. Nothing is deployed; no address here is live. The preamble those contracts open with is worth reading before any of this — it is at the top of Tenor.sol.

Schedule A

The security

A.1
One billion TENOR, minted once in the constructor. No mint function exists to be called, guarded or renounced.
A.2
Ordinary ERC-20. No transfer fee, no rebase, no blacklist, no maximum holding, no pause.
A.3
burn is permissionless and irreversible, and the protocol burns on every buyback — so supply is a monotonically non-increasing series.
A.4
No administration after openTrading. The launcher role exists so the pool can be seeded before anyone trades against it, and it deletes itself in the same transaction that opens trading.
A.5
TENOR is the equity of this structure. It has no claim on the sinking fund. The instrument with a claim on the fund is the CLAIM, and it ranks ahead of TENOR in every respect.

Source: tenor/Tenor.sol, Schedule A.

Schedule B

The sinking fund, and the buyback

B.1
A skim in ETH on both sides of every swap, opening at 4.00% and decaying once to 1.25% over a day. The clock starts at the first swap, not at deployment, so an idle pool cannot be used to wait the opening rate out.
B.2
It goes to the register, and nowhere else — taken from the PoolManager straight to the register's own address. The hook never holds it, so there is no balance a withdrawal function could have been written against.
B.3
Permissions are 0x20CC. The six liquidity bits are clear: anyone may add or remove liquidity and the hook is never consulted, so no exit can be blocked, taxed or delayed. Measured at +240 gas on an LP add against a hookless control.
B.4
Everything the offering prices depends on how fast the fund fills, so that rate is measured across a rolling window of at least seven days using two anchors rolled one into the other. A burst of wash trading has to be sustained for a real fraction of a week before it moves anything.
B.5
Proceeds from selling claims buy TENOR off the pool and burn it.
B.6
Anyone may run the buyback. sweep is permissionless and the caller names the minimum they will accept, so a sandwich costs the sandwicher rather than the fund. A 0.50% bounty pays for the gas and the attention.

Source: tenor/TenorHook.sol, Schedule B.

Schedule C

The claim

C.1
A zero-coupon right to receive a fixed FACE of ETH out of the sinking fund. No coupon and no maturity date. It is paid when the fund reaches it.
C.2
Strictly by issuance. Every claim records a watermark — the cumulative face issued up to and including itself — and becomes payable the moment cumulative funding reaches that mark. Claim 1 is paid before claim 2 whatever either holder does, and no fee, bribe or transaction ordering changes it.
C.3
Because it is a watermark and not a list, there is no loop. Redemption is one comparison and one transfer. Measured from a single fork snapshot: claim #1 costs 52,779 gas, claim #500 costs 52,788 — a difference of nine gas.
C.4
ERC-721, transferable from the moment it is issued, with its terms written on chain in tokenURI. The secondary market prices the wait continuously.
C.5
NO RECOURSE. A claim is not a deposit, not a loan against collateral, and not insured. If trading stops the fund stops filling and the claim waits. It cannot be accelerated and cannot be called, and there is no liquidation to trigger because there is nothing to liquidate.
C.6
One invariant, enforced on the way in rather than audited afterwards: the register refuses to book money it is not already holding.

The protocol has already spent the money. It borrowed against fees it has not earned and burned supply with the proceeds. If volume falls, nothing defaults — the queue simply moves more slowly, and the holder is the one carrying that. A claim bought behind 0.25 ETH of queue at 20 ETH/day waits 60 days; at a tenth of that volume it waits 600; at zero it waits forever.

Source: tenor/Register.sol, Schedule C. Measurements: gas_tenor.js and econ_tenor.js section 4.

Schedule D

The offering

D.1
A continuous Dutch auction in yield. Always open, always quoted. What moves is the yield: it widens on its own while nobody buys and snaps back to the reference the moment somebody does.
D.2
The reference yield is set by the wait, not by anyone's opinion — the unfunded face ahead of a new claim divided by the observed rate at which the fund fills. 8.00% at a zero wait, 120.00% at the rail.
D.3
On top of that, a tension of 3.00% per day since the last sale, capped at 40.00%. That is the Dutch part: if the reference is too tight for the market, the price falls until it is not. Every sale resets it.
D.4
Price is face ÷ (1 + r·t), simple interest. No exponent and no logarithm, because neither is worth the gas or the rounding at these tenors.
D.5
The rail. Outstanding face may never exceed two years of fee income at the observed rate. The rate is measured, so the rail tightens by itself when volume falls, and an offering that would breach it reverts.
D.6
Nothing sells first. No allocation, no whitelist, no private round and no discount for size. The queue is the order the claims were bought in, and there is no other queue.

The rail binds at issuance and nowhere else. It cannot un-sell a claim. If the observed rate falls after issuance, outstanding face ends up above what the rail would permit today — measured at 1.43× in econ_tenor.js for a pool whose volume never recovers from its opening week. Nothing in the contract can prevent that, and a circular that implied otherwise would be lying.

Price a claim

Your wait
Yield on offer
Price per 1.0000 face
You pay
Discount to face
Against the rail

The contract's own arithmetic, run in your browser. It is a model of the offering, not a quote: the live quote comes from Offering.quote(face) once deployed, and the observed rate it uses is measured on chain rather than typed into a box.

Measured

What it costs

Against the real PoolManager on a mainnet fork, beside a hookless control pool — same token, same fee, same spacing, same band, same depth, same opening tick. Both branches run from the same snapshot, so the difference is the hook and nothing else.

What a trader pays · at 10 gwei
PathGasThe hook's shareNote
Buy127,739+39,027skim taken in beforeSwap
Sell132,403+38,821ETH is unspecified, so afterSwap
The first swap ever232,396one-time; opens the rate accumulator
Buy a claim165,401quote, rail check, mint, forward
Redeem a claim52,779at any queue depth
Transfer a claim59,205ordinary ERC-721
Sweep the buyback132,374anyone; swaps and burns
Sync the fund28,358anyone; credits stray ETH

There is one loop in the whole surface, and it is the digit conversion inside tokenURI — a view, bounded by the 78 digits of a uint256, never on a path anybody pays for. Everything a user pays for is straight-line code. The benchmark asserts that by scanning the sources rather than asking to be believed.

The launch, one time

Five contracts, two wirings, a pool and a band
StepGasAt 10 gwei
Deploy Tenor500,2150.00500 ETH
Deploy Register1,406,6670.01407 ETH
Deploy HookDeployer205,0200.00205 ETH
Deploy TenorHook1,706,4020.01706 ETH
Deploy Offering1,009,6060.01010 ETH
Wire the register51,3100.00051 ETH
Wire the hook45,9620.00046 ETH
Initialize the pool56,5980.00057 ETH
Seed the liquidity216,1170.00216 ETH
Total5,197,8970.05198 ETH

Measured by gas_tenor.js. The pool opens single-sided at tick 175000 — a valuation of 25.13 ETH — seeded with 800,000,000 TENOR and zero ETH, which sim_tenor.js proves by checking what the position actually pulled.

Risk

Plainly

A claim can wait forever

It is paid out of trading that has not happened. If the pool goes quiet the queue stops moving and there is no mechanism — none — that makes it move again. No default is declared because none can be; the claim just sits there.

The money is already spent

Proceeds are burned into supply the moment they are raised. There is no reserve behind a claim, no collateral to seize and nothing to claw back. That is the leverage, stated as a term rather than buried.

The rail cannot un-sell

It refuses new issuance beyond two years of observed income, but it cannot retire face already sold. A pool whose volume collapses after issuing ends up over-issued relative to what the rail would allow that day — measured at 1.43×.

The buyback is sandwichable

It is a swap on a public pool, so it can be front-run like any other. The caller names a minimum, which moves the cost of a sandwich onto whoever calls it — but it does not make the sandwich impossible.

Liquidity can leave

The hook deliberately cannot block or tax a removal. That protects an exit; it also means depth is nobody's promise, and a thinner pool earns fewer fees and fills the queue more slowly.

What TENOR is not

Not a security offering, not a fund, not a deposit. No revenue share, no governance right, no promise from anyone. Nothing here is financial advice or an offer. These are new contracts and carry the risk new contracts carry.

Nothing is deployed, and there has been no third-party audit

At the time of writing there is no TENOR token, no register, no hook and no pool on Ethereum mainnet. Every address on this page is empty. The contracts are tested hard against a mainnet fork — that testing has already caught a real pricing bug in which claims redeemable on arrival were sold at a discount, which is free money taken out of the fund — but a fork simulation written by the same hand that wrote the contract is not an audit, and should not be read as one.

Live

The book

Read directly from Offering.book() and Register.books() over plain JSON-RPC. This page holds no numbers of its own for this section: while the addresses are empty every line reports that it is not deployed, and it will not show a figure it has not read.

NetworkNot checked
Block
The offering, as it stands
PriceableNot yet deployedfalse until a full window of fee history exists
Outstanding faceNot yet deployedwhat a new claim queues behind
The railNot yet deployedtwo years of observed fee income
Room leftNot yet deployedface that could still be sold
TensionNot yet deployedadded to the reference while nobody buys
Fund heldNot yet deployedETH in the register right now
Books tieNot yet deployedbalance ≥ funded − redeemed
Tenor
Not yet deployed
Register
Not yet deployed
TenorHook
Not yet deployed
Offering
Not yet deployed

Nothing has been read yet.