Skip to the register
Paperstock a bonded warehouse for cargo that was never landed
paperstock.fun Not deployed

Paperstock

Dated claims on cargoes that were never landed, collateralised in ether by the pool’s own trading fees.

Every tokenised-real-world-asset on this chain asks you to believe in a warehouse you will never be allowed to visit. This one tells you at the top of the file that the warehouse is empty, and shows you the strongroom instead.

The manifest is imaginary. The collateral is not.

1,000,000,000PAPER, minted once
90 daystenor of a tally
30 daysa new lot, this often
5.00% → 1.00%duty, over 72 hours
60 / 40bond / reserve

“Stock” is the original financial instrument, and it was a stick.

An English Exchequer tally was a length of hazel, notched across the grain with a sum and then split down its length. The creditor walked away with the long half — the stock, which is where stockholder comes from. The Crown kept the short half, the foil. What the stick was a claim on had not happened yet: taxes not yet collected, from a county that had not yet paid. It was a receipt for an asset that did not exist, and it circulated as money in England for roughly seven hundred years.

PAPERSTOCK is six contracts that do the same thing on purpose. A Uniswap v4 hook takes a duty on every swap in one pool and sends it to a strongroom. The strongroom splits it: part stands under a register that cuts dated claims on invented cargoes, part stands under the token itself. Nothing here manufactures value — it refuses to let fee income leave, and that is the whole of the claim being made.

The goods are admitted fiction. The ether behind them is readable to the wei, by anybody, at any second.


How the money moves

There is one source of income in the entire suite and it is the gate. The Pyx has no income of its own; the Exchequer cannot create a wei. Everything below is an accounting of what passed through a swap.

A swap either direction The gate PaperHook.sol duty 5.00% → 1.00% ether The Pyx the strongroom balance ≥ reserve + bonded 60% 40% The bond under the cargo Exchequer the register Lots tallies placed behind the oldest open tally first — the front of the curve The reserve under PAPER Claimed by burning pro rata, any time, no permission burning is neutral to everyone who does not — the floor per token is unchanged

The hook never holds the money. It takes the duty out of the PoolManager directly to the Pyx’s own address and only then writes it down, so there is no balance on the hook that a withdrawal function could have been written against even by mistake.

The duty, hour by hour

The rate opens at 5.00% and decays once, linearly, to a resting 1.00% over 72 hours. The clock starts at the first swap, not at deployment — a pool left sitting cannot have its opening rate waited out, and the first person through the gate pays the opening rate however long the gate has been standing there.

5.00% 1.00% 0h 24h 48h 72h and for ever after hours since the first swap
The duty rate at each point of the decay
Since the first swapRate in forcebps
0 hours5.00%500
24 hours3.67%367
48 hours2.34%234
72 hours and after1.00%100

Those are integer basis points out of the hook’s own formula, OPEN − (span × dt) / DECAY, truncating exactly as the contract does. The three rates are immutable, fixed at construction; the constructor refuses an opening rate above 10.00% or a resting rate above the opening one, and there is no setter and no owner to call one.

No third party has audited any of this

Six contracts, tested hard against a mainnet fork, and that testing has already earned its keep: it caught a sibling project selling a claim for less than the money already sitting behind it. But a simulation written by the same hand that wrote the contract is not an audit and is not offered to you as one.

What is actually at risk

Buying a claim at the floor — at the ratio of money already behind it — cannot lose principal. Buying above the floor risks exactly the premium, and nothing else. That premium is the extrapolated duty, haircut by forty per cent, and it is only ever payable at the front of the curve.

A quiet pool honours nothing. Lots are cut at the 1 ether floor, nothing fills them, and every buyer simply gets back what they put in and not a wei more. That is the ordinary outcome of a quiet pool, not a tail risk.

Being early is uncomfortable on purpose: the first buyer into a lot pays 0.50 and carries the whole risk that no duty ever arrives.

II · the tally

A stick, notched and split

The notches were cut across the grain before the split, and hazel does not split twice the same way. That was the fraud control: the wood.

one stick — notched with the sum, not yet split The stock the long half — the creditor’s — hence stockholder The foil the short half — the Exchequer’s — hence Foil.sol the notches line up across the grain — and only for these two pieces £1000 £100 £20 £1 shillings pence
One piece of hazel, notched with a sum. Press to split it down its length.

The notch scale is the one set out in the Dialogus de Scaccario, the Exchequer’s own twelfth-century handbook: £1000 the thickness of a palm, £100 the breadth of a thumb, £20 a little finger, £1 a swollen barleycorn, a shilling a narrower notch, and a penny a cut with no wood taken out at all.


Where the words come from

The long half was called the stock. A man holding one was a stockholder, and that is the entire etymology of the word — not a share in a company, a piece of wood with the Crown’s debt cut into it.

The short half was the foil, and it stayed at Westminster as the control. A stock presented for payment was laid against its foil in front of a clerk. If the halves did not match, the claim was not honoured.

What the stick was a claim on had not happened yet: taxes not yet collected, from a county that had not yet paid. A receipt for an asset that did not exist — and they circulated as money in England for roughly seven hundred years.

And then they burned Parliament down

In 1834 the Treasury decided the obsolete sticks were clutter and fed two cartloads of them into a furnace under the House of Lords. The flue overheated, the panelling caught, and the Palace of Westminster burned to the ground.

This is the most literal thing that has ever happened in finance and the project is named after it.

The history is decoration. The arithmetic is not.

Nothing on this page asks you to value the story. Every figure that matters is a number in a public view function, readable by anybody, at any second, without asking.


What stock in a tally actually is here

The stock

Units of face in one numbered tally, denominated in wei, held in the Exchequer’s own book at stockOf[id][you]. You subscribe it by paying ether into strike, and you may hand it to anybody with transferStock — a plain book entry, no fee, no permission.

It is a pro-rata claim on whatever is actually behind that tally the moment you present it. Not a promise of face. A claim on what is there, readable to the wei, by anybody.

The foil

Foil.sol, and it records exactly one number: the count of separate UTC days on which this pool has traded at all. Not volume. Not price. Not fees. Days.

Money is the one thing a single address can fake in a single block, so the register needs at least one gate that cannot be crossed by being rich. You can fund a tally in one transaction. You cannot make it Tuesday.

Laying the one against the other

A lot is honoured only when the book and the calendar agree. Four conditions, all of them, before the tally matures — and the twenty-first separate trading day is the one the money cannot buy.

The four conditions for honour

  1. Every unit of the lot has been subscribed.
  2. The backing has reached the whole of it.
  3. At least 25% of the lot was paid for by duty, not by buyers.
  4. The pool has traded on at least 21 separate days since the tally was cut.

It latches in two stages, and the order is deliberate. The instant the first three hold, the lot is marked FILLED, in ink, at a block number. Only then does the calendar matter — and by then no quantity of face anybody can add would undo it. Without that ordering, somebody could wait for a lot to fill, buy a great deal of face at par purely to push the duty share under the bar, strand the lot on paper for ever and recover every wei afterwards because the ratio was one. It would have cost them nothing. The simulation found that.

The merchant’s mark

Whoever burns 1,000,000 PAPER against an honoured lot first may cut a twelve-character mark into it, once, for ever. It confers nothing whatsoever. It is the nearest thing here to a name painted on a warehouse door.

III · the curve

A term structure nobody posted

The bond is placed strictly by maturity. The oldest open tally fills first, and only when it is paid up or matured does the next begin. Two rules and a queue, and what falls out the other end is a yield curve.

Below is the register run day by day, with the contract’s own arithmetic in exact integers — the same _price, the same _place walk bounded at three tallies, the same two-stage honour latch. It is a model, and it says so. Nothing on this page is a forecast, an APY or a projection of anything that will happen.

Drag either control. The curve is redrawn from a fresh run of the model each time.
Price — what a unit of face costs right now Backing ratio — what is actually behind it The gap between them is the premium, and the premium is the whole of the risk

The book, on that day

Every open tally on the selected day
LotDays left Lot sizeTaken RatioPrice Duty shareState

How to read it

Near-dated sticks have been fed and trade near face. They have sat at the front of the queue and taken the duty, so the money behind them is close to the money promised, and the price is close to 1.00.

Far-dated sticks have seen no duty and trade at the opening discount. A tally nobody has subscribed opens at 0.50, and the first buyer into it carries the whole risk that no duty ever arrives.

There is no order book here and no counterparty. The price is a public function of four numbers — face, backing, duty and elapsed — and it is the same function for everybody. Nobody posted this curve. Nobody can. There is no allocation function, no privileged caller and nothing to lobby.

The price, exactly

r     = backing / subscribed
basis = max(elapsed, 7 days)
add   = duty × (90d − elapsed) / basis × 0.60
add   = min(add, (subscribed − backing) / 2)
price = (backing + add) / subscribed

In words: the register looks at the rate at which duty — gate income, not other people’s purchases — has actually arrived in this tally, carries that rate out to maturity, takes forty per cent off it for being a guess, and then refuses to let the result climb more than halfway from the money that is there to the money that is promised.

Because the addition can never be negative, the price can never be less than the money already sitting behind the claim. Buy and immediately present and you cannot come out ahead — not by intent, by algebra, and proved to the wei. Cost rounds up, payout rounds down; both roundings point at the register.

Before maturity the price is an estimate. At maturity the estimate is over and the price is the money that is there. A tally that matures short stays presentable for ever at whatever ratio it reached.

What the model assumes, stated rather than buried

Volume is held constant at whatever the slider says, and the duty follows the hook’s real schedule — 5.00% decaying to 1.00% over the first three days, then flat. Sixty per cent of it is bonded. Subscription demand is taken as one eighth of the pool’s daily volume, and that single proportion is the only thing on this page that is not read out of a contract. Buyers are adversarial: the whole day’s demand goes to whichever open tally is cheapest, which is the worst case for the register.

Drag the volume to zero and watch what happens: lots pinned at the 1 ether floor, nothing subscribed, nothing honoured, every price at the opening 0.50. That is not a failure mode of the model. It is what a pool nobody trades produces, and it is the ordinary case this page will not hide from you.

IV · the warehouse

The Manifest

None of this cargo exists. That is the point.

There is no tin, there is no rum, there is no ship and there is no port agent. Not one crate of it. Every line below is computed in your browser from keccak256(“PAPERSTOCK/LOT/” ‖ lot) — the same pure function the Manifest contract runs on chain, with no input, no oracle, no owner, no stored string and nothing to set.

A tokenised-real-world-asset is a string in a database and a PDF you are not shown. This is a string in a pure function and a source file that opens by telling you the cargo does not exist. One of the two is being straight with you about what you are holding.

Somebody will screenshot one of these cards, crop off this notice, and post it as a holding. Nothing in Solidity can prevent that. The defence is that the admission is in the source, on this page, in the deployment document, and in this paragraph.

The commodities and ports are drawn from the manifests of the nineteenth-century bonded trade and they are deliberately plausible: hemp out of Macassar, cochineal out of Vera Cruz, quicksilver out of Callao. These were ordinary cargoes. A lot line out of this contract reads exactly like a lot line off a real warrant, and that is the joke, and the joke is the product.

Any non-negative whole number. Lot 0 is never cut; the Exchequer starts at 1.

The first lots on the register


How a line is assembled

The seed is keccak256 of fifteen ASCII bytes followed by the lot number as a 32-byte big-endian word. Six of the first eight bytes of that hash pick every field. The rest of the hash is unused.

Which byte of the seed picks which field
ByteFieldTaken as
seed[0]Commodity& 0x0f → 16 goods
seed[1]Port of lading& 0x0f → 16 ports
seed[2]Unit of measure& 0x07 → 8 units
seed[3]Grade& 0x03 → 4 grades
seed[4..5]Quantity20 + raw × 9980 / 65535
seed[6]Mark letter65 + b % 26
seed[7]Mark number100 + b % 900

Quantity therefore runs from 20 to 10,000 inclusive, and the mark from A-100 to Z-999. Two calls with the same lot number a decade apart return the same cargo, and there is no privileged address anywhere that could arrange otherwise.

Then what am I actually buying?

Ether. The cargo is the name on the claim; the backing is the money the Pyx has actually put behind it, and you can read that number at any second of the tally’s life. Nothing in the Manifest touches the money and nothing in it can move it.

It is a separate contract because it holds nothing and can do nothing, and separating it says so more loudly than a comment could. No state, no ether, no writer, no wiring step, no constructor arguments. Every function is pure.

It is already worthless, in the strict sense

This contract adds no value to a tally and removes none. Burn it out of the suite and every claim would be worth the same ether to the wei; you would simply be holding “lot 7” instead of a quantity of graphite that was never landed anywhere.

V · the pyx

The oldest continuously running audit in the world

A pyx is a locked box. From 1282 the Royal Mint has dropped sample coins into one, and once a year a jury of goldsmiths opens it in front of the Queen’s Remembrancer, counts the contents, and assays them against a standard plate. If the coin is light, the Master of the Mint answers for it. The ceremony is called the Trial of the Pyx and it has been held, with gaps, for seven hundred and forty years.

Its one good idea is that the box is opened in public by people who did not fill it. Pyx.sol keeps two numbers and publishes a view called trial that anybody may call, from anywhere, for nothing, whenever they like, that says whether the box holds what it claims to hold.

One way in. The duty on swaps, and nothing else, ever. The hook sends it straight to this address and only then calls credit — and credit refuses unless the ether is already here. A book that is only ever written after the money lands cannot be talked into believing in money that did not.

Two ways out, and no third. The bond, drawn by the Exchequer and placed behind whichever tally is nearest its maturity. And the reserve, which stands under PAPER and is claimed by burning. There is no withdrawal, no sweep, no rescue, no treasury address, no owner to add one and no upgrade path to add one later. These are not withheld powers — go and read the file, they are absent.

The invariant

surplus reserve bonded held the balance owed reserve + bonded held ≥ owed

Enforced on the way in, on every single credit, rather than audited afterwards and apologised for. The surplus is anything that arrived here without a claim attached — a donation — and it belongs to nobody.


The floor under PAPER

PAPER is a claim on the reserve and on nothing else. Ether paid into a tally belongs to whoever holds that tally’s stock, and the token has no call on a wei of it. You take your share by burning, pro rata, at any time, with nobody’s permission. This calculator runs the contract’s own integer arithmetic, in wei, with the same rounding.

floorPerToken & quoteClaim

Integers only where the contract uses integers. Amounts are converted to wei exactly as an ERC-20 with eighteen decimals would.

Why burning is fair to the people who do not

Because n tokens buy n × reserve / supply, and taking that much out of both sides of the fraction leaves reserve / supply exactly where it started. The floor per token after a burn equals the floor per token before it, to the wei, by construction and not by rounding luck: the payout rounds down, so the only direction the survivors can be moved in is up.

What could make the strongroom worthless

It starts empty. It has no income of its own and cannot create any: it is a box with a slot in the lid, and if nobody trades the pool then nobody posts duty and the box stays empty for ever. A floor of zero is a floor, and it is the floor this contract will publish, honestly, for as long as that is the true number.

The invariant also protects the book and not the price. It guarantees that what is promised is present. It guarantees nothing whatsoever about whether the amount promised is large enough to matter to you.

VI · docs

Six contracts

Read these the way you would read the front of a prospectus, because that is what they are written as. Every heading is a question a buyer is entitled to ask, and the last question in every one of the six files is the same one.

Paper.sol  The stock 1 of 6 · 1,919 bytes runtime

Manifest names it · Foil records it · Pyx reserves against it · Exchequer issues it · PaperHook collects for it

Where does the name come from?

An Exchequer tally was a hazel stick, notched across the grain with a sum and split down its length. The Crown kept the short half, the foil. The creditor walked away with the long half, and the long half was called the stock. A man holding one was a stockholder, and that is the whole etymology of the word.

What the stick was a claim on had not happened yet: taxes not yet collected, from a county that had not yet paid. A receipt for an asset that did not exist. They circulated as money in England for roughly seven hundred years. In 1834 the Treasury fed two cartloads of obsolete sticks into a furnace under the House of Lords, the flue overheated, and Parliament burned to the ground.

What is being sold here?

A token. One billion PAPER, minted once in the constructor, eighteen decimals, and not one unit more thereafter.

Around it there is a register that issues dated claims on cargoes that were never landed, named by a contract that invents them out of a hash. Those claims are collateralised in ether by the pool’s own trading fees. The goods are admitted fiction. The collateral is not.

What does holding PAPER entitle me to?

One thing, and the absence of everything else is the point. PAPER is a claim on the reserve — the share of trading fees the Pyx sets aside under the token rather than under the tallies. You take it by burning, pro rata, at any time, with nobody’s permission.

PAPER is not a claim on the tallies. Ether paid into a tally belongs to whoever holds that tally’s stock, and this token has no call on a wei of it. If you want the cargo, buy the cargo.

What cannot be done to me?

Minting. There is no mint function anywhere in the file. Not disabled, not guarded behind an owner, not renounced after the fact — never written, and a function that was never written cannot be switched back on by anybody for any reason.

Administration. There is no owner. The launcher role exists so the pool can be seeded before anyone is able to trade against it, and it deletes itself inside the same transaction that uses it.

Taxation. No transfer fee, no rebase, no reflection, no blacklist, no maximum wallet, no cooldown, no pause. Moving PAPER between two addresses is an ordinary ERC-20 transfer and costs what one costs.

What could make this worthless?

The reserve is only ever as large as the fees, and the fees are only ever as large as the volume. On a pool nobody trades the reserve stays at zero, every tally matures short, and the register goes on printing manifests for cargoes that will never be paid for. Nothing in this suite manufactures value. It refuses to let fee income leave, which is a far smaller claim and is the only one being made.

And no third party has audited any of it. The six contracts are tested hard against a mainnet fork, and that testing has already earned its keep — it caught a sibling project selling a claim for less than the money already sitting behind it, which is the same as handing out cash. But a simulation written by the same hand that wrote the contract is not an audit and is not offered to you as one.

Manifest.sol  The cargo 2 of 6 · 2,526 bytes runtime

The only contract in the suite whose entire job is to lie, and the only one that tells you so in its own source

What is this for?

Every tally the Exchequer cuts is a claim against a lot, and a lot has to be a lot of something or the whole thing is an abstraction with a number on it. Give this contract a lot number and it gives you a cargo: a commodity, a port of lading, a quantity, a unit of measure, a grade and a lot mark. Every field is read out of keccak256 of the lot number. There is no input, no oracle, no owner, no stored string and nothing to set.

Are the goods real?

No. Not one crate of it. There is no tin, there is no rum, there is no ship and there is no port agent.

The commodities and ports come from the manifests of the nineteenth-century bonded trade and they are deliberately plausible. These were ordinary cargoes. A lot line out of this contract reads exactly like a lot line off a real warrant, and that is the joke, and the joke is the product.

Then what am I actually buying?

Ether. The cargo is the name on the claim; the backing is the money the Pyx has actually put behind it, and you can read that number at any second of the tally’s life. Nothing in this file touches the money and nothing in this file can move it.

Why is it a separate contract?

Because it holds nothing and can do nothing, and separating it says so more loudly than a comment could. No state, no ether, no writer, no wiring step, no constructor arguments. Every function is pure. Two calls with the same lot number a decade apart return the same cargo.

What could make this worthless?

It is already worthless, in the strict sense, and that is the design. This contract adds no value to a tally and removes none. Burn it out of the suite and every claim would be worth the same ether to the wei.

The real risk it carries is a human one. Somebody will screenshot a lot line, crop off the part where it says the cargo is invented, and post it as a holding. Nothing in Solidity can prevent that. The defence is that the admission is in the source, on the website, in the deployment document, and in this paragraph.

Foil.sol  The other half of the stick 3 of 6 · 1,217 bytes runtime

Holds no ether, owns no token, accepts one writer for ever

Why is it called the foil?

The foil was the control. Notches cut before the split had to line up across the grain, and hazel does not split twice the same way. A stock presented for payment was laid against its foil in front of a clerk; if the halves did not match, the claim was not honoured. The fraud control was the wood.

This contract is the foil: the record kept on the other side of the claim, written by something with no interest in the outcome.

What does it record?

One number, and the restraint is the whole design: the number of separate days on which this pool has traded at all. Not volume. Not price. Not fees. Days.

The hook calls in after every swap; if the UTC day has already been counted, nothing at all happens and nothing is written. The first swap of a new day moves the counter by exactly one and that is the most this contract can ever do in twenty-four hours.

Why days and not money?

Because money is the one thing a single address can fake in a single block, and the Exchequer needs at least one gate that cannot be crossed by being rich. The funding condition can be bought outright. The calendar condition cannot be bought at any price, by anybody. You can fund a tally in one transaction. You cannot make it Tuesday.

What can it do to me?

Nothing. It cannot hold ether — there is no payable function and no receive. It cannot hold a token. It has no owner. Its one writer is set once by a wiring role that deletes itself in the same transaction, and after that the writer can never be changed, added to or removed, by anyone, for any reason. On the swap path it is one storage read and a comparison, and on the first swap of a day, one write.

What could make this worthless?

A determined party with a lot of time can satisfy it. One swap of one wei a day, for the required number of days, counts exactly as much as a day of real trading — this contract cannot tell an active market from a patient one and does not claim to. What it costs to fake is gas, and calendar days, every one of them in public and on chain where anybody deciding what a tally is worth can see the pattern. It raises the floor on the cheapest possible lie from one block to several weeks. It does not make lying impossible.

And it measures a pool, not a world. If the pool is quiet for reasons having nothing to do with the register, the counter is still right and the tally still matures short. It has no way to tell those apart, and it will not be taught to.

Pyx.sol  The strongroom 4 of 6 · 2,717 bytes runtime

One way in, two ways out, and no third

What is a pyx?

A locked box. From 1282 the Royal Mint has dropped sample coins into one, and once a year a jury of goldsmiths opens it in front of the Queen’s Remembrancer, counts the contents, and assays them against a standard plate. If the coin is light the Master of the Mint answers for it. The Trial of the Pyx has been held, with gaps, for seven hundred and forty years.

Its one good idea is that the box is opened in public by people who did not fill it. This contract publishes a view called trial that anybody can call, from anywhere, for nothing, whenever they like.

What comes in?

The duty on swaps, and nothing else, ever. PaperHook takes it out of the PoolManager and sends it straight to this address — the hook never holds a wei of it — and then calls credit to account for what has already arrived. credit refuses unless the ether is already here. A book that is only ever written after the money lands cannot be talked into believing in money that did not.

Where can it go?

Two places, and they are the only two that exist in the bytecode. The bond, drawn by the Exchequer and placed behind whichever tally is nearest its maturity. The reserve, which stands under PAPER itself and is claimed by burning, pro rata, by anybody holding the token.

There is no withdrawal. No sweep. No rescue. No treasury address. No owner to add one and no upgrade path to add one later. These are not withheld powers — go and read the file, they are absent.

What is the invariant?

balance ≥ reserve + bonded

Held is never less than owed. It is enforced on the way in, on every single credit, rather than audited afterwards and apologised for. The fork simulation asserts it after every swap, every draw and every burn.

Why is burning fair to the people who do not?

Because n tokens buy n × reserve / supply, and taking that much out of both sides of the fraction leaves reserve / supply exactly where it started. The floor per token after a burn equals the floor per token before it, to the wei, by construction and not by rounding luck: the payout rounds down, so the only direction the survivors can be moved in is up.

What could make this worthless?

It starts empty. It has no income of its own and cannot create any: it is a box with a slot in the lid, and if nobody trades the pool then nobody posts duty and the box stays empty for ever. A floor of zero is a floor, and it is the floor this contract will publish, honestly, for as long as that is the true number.

The invariant also protects the book and not the price. It guarantees that what is promised is present. It guarantees nothing whatsoever about whether the amount promised is large enough to matter to you.

Exchequer.sol  The register 5 of 6 · 8,479 bytes runtime

Cuts the tallies, sells the stock, pays the claims, and never holds a position on either side of any of it

What am I buying, exactly?

Units of face in one numbered tally. Face is denominated in wei, and a tally is a claim against a lot of cargo that does not exist. Every thirty days this contract cuts a new tally and fixes the size of that lot on the spot. A tally runs for ninety days — the classic tenor of a commercial bill, and picked for that reason.

While it runs, two things flow into it: what people pay for stock in it, and the duty the Pyx has taken at the gate. Both are ether and both stand behind the face. Your stock is a pro-rata claim on whatever is behind that tally the moment you present it. Not a promise of face. A claim on what is actually there, readable to the wei at any second, by anybody.

How big is a lot?

Three times the bond the register drew over the previous thirty days, and never less than 1 ether. Nobody picks it. Nobody can change it once it is cut.

That rule was not the first attempt. The first design let buyers subscribe as much face as they liked, and it does not survive contact with arithmetic: demand expands until the gate income is a rounding error beside it, every lot drifts to full on subscription money alone, and the word HONOURED stops meaning anything. The simulation found that before a line of this had been near a chain.

Sizing the lot off the warehouse’s own takings fixes it from the other end. A busy quarter cuts large lots, a dead quarter cuts small ones, and the ratio between what the gate earns and what the cargo costs stays fixed by construction. At 3× cover the duty pays for about a third of every lot, and a lot that fills returns half as much again as it cost to subscribe. At 2× that would be +100% a cycle — a bot race and not a market. Above 4× the duty share falls under the honour bar and no lot could ever be honoured at all.

What does it cost?

There is no order book and no counterparty. The price is a function, it is public, and it is the same function for everybody:

r     = backing / subscribed
add   = duty × remaining/elapsed × 0.60
add   = min(add, (subscribed − backing)/2)
price = (backing + add) / subscribed

The register looks at the rate at which duty — gate income, not other people’s purchases — has actually arrived in this tally, carries that rate out to maturity, takes forty per cent off it for being a guess, and then refuses to let the result climb more than halfway from the money that is there to the money that is promised. A run rate is never read off less than a week.

Why does that line matter so much?

Because the addition can never be negative, the price can never be less than the money already sitting behind the claim. That single line is the most important one in the file and it is the reason for the shape of everything else.

The alternative has already happened in this repository: a sibling project priced a dated claim off a stale number and would sell you, below face, a claim that was already worth face. The fork simulation caught it. It was free money out of the fund, and it was three lines of arithmetic.

So the guarantee here is written the other way round and proved to the wei: buy and immediately present and you cannot come out ahead. Not by intent — by algebra. Buying n face at price p adds p to both sides of a fraction standing at r ≤ p, so the new ratio lands between r and p; presenting straight back pays that new ratio, which is at most p. Both roundings point at the register: cost rounds up, payout rounds down.

And the pending duty is drawn into the tally before the price is read, in the same transaction, every time. Quoting against money that is about to land but has not been credited yet is the same bug wearing a hat.

Is buying in fair to people already holding?

Yes, for the same reason. A newcomer pays at least r, so the ratio behind every existing holder can only be moved up. Nobody in a tally can be thinned by somebody else joining it, at any size, at any moment. Fifty thousand random buys, presentations and placements were thrown at that property and the ratio has never once fallen.

How does the duty get shared out?

Strictly by maturity. The bond is drawn from the Pyx and placed behind the oldest tally still open — the front of the curve — until that one is paid up or matures, and only then does the next begin to fill.

There is one brake. A tally may only ever have absorbed duty worth subscribed × elapsed / term: a stick cut last month cannot swallow the whole quarter’s takings before the older sticks have had theirs. When the front hits that ceiling the remainder spills down the queue, three tallies deep in one call and never more.

Nobody chooses any of this. There is no allocation function, no privileged caller, nothing to lobby. It falls out of two rules, and what it produces is a term structure nobody posted anywhere.

When is a lot honoured?

When the fiction stops being one. Four conditions, all of them, before the tally matures: every unit of the lot has been subscribed; the backing has reached the whole of it; at least a quarter of the lot was paid for by duty, not by buyers; and the pool has traded on at least 21 separate days since it was cut. The last one cannot be bought.

It latches in two stages. The instant the first three hold, the lot is marked FILLED, in ink, at a block number. Only then does the calendar matter — and by then there is no quantity of face anybody can add that would undo it. Without that, somebody could wait for a lot to fill and then buy a great deal of face at par purely to push the duty share under the bar, strand the lot on paper for ever, and recover every wei afterwards because the ratio was one. It would have cost them nothing.

Honour is permanent. No path in this contract clears it. Whoever burns 1,000,000 PAPER against an honoured lot first may cut a twelve-character merchant’s mark into it, once, for ever. It confers nothing whatsoever.

What happens if it is not honoured?

Nothing dramatic, deliberately. At maturity the tally stops receiving duty. Whatever ratio it reached is the ratio it keeps, for ever, and every holder can present at that ratio whenever they like. No liquidation, no forced exit, no penalty, no deadline on your own money. The clock was only ever on the funding.

An unhonoured tally matures short. It is a claim on a cargo nobody paid for, which is what a tally has always been, and it stays presentable for ever as the receipt for that.

What could make this worthless?

No duty. Everything above is plumbing for gate income, and on a pool nobody trades there is none. Lots are then cut at the 1 ether floor, nothing fills them, and every buyer gets back what they put in and not a wei more. That is the ordinary outcome of a quiet pool, not a tail.

Being early. The first buyer into a lot pays 0.50 and carries the whole risk that no duty ever arrives. That is the trade, and it is meant to be uncomfortable.

Front-loading. Whoever subscribes the front of the curve first gets the cheapest way into the tally that is about to be fed. The lot cap bounds how much of that anyone can take and the intake ceiling bounds how fast, but it is still capital being paid ahead of patience, and that is said here rather than left to be discovered.

Late money. The placement walk is bounded at three tallies per call. If the queue falls further behind than that — possible only after a long quiet stretch — the excess waits in unplaced until somebody calls sweep again. It is never lost and never spendable by anyone. It is late.

And this file is unaudited, like the other five. It is the largest of them, it holds the money, and it has already been rewritten once because a simulation disagreed with it.

PaperHook.sol  The custom house 6 of 6 · 4,681 bytes runtime

Present at every swap, holds nothing, configurable by nobody

Why is there a hook at all?

Because a bonded warehouse is paid for by the duty on what passes through the gate, and this contract is the gate. It is the only thing in the suite that is present at every swap, and the only place where the income can be taken before it becomes somebody’s to keep. Everything else in PAPERSTOCK is downstream of this file. The Pyx has no income of its own. The Exchequer cannot create a wei.

What does it take?

Ether, on both sides of every trade. It opens at 5.00% and decays once, smoothly, to a resting 1.00% over three days.

The clock starts at the first swap, not at deployment. A pool left sitting cannot have its opening rate waited out by anybody, and the first person through the gate pays the opening rate no matter how long the gate has been standing there.

The rate is immutable and the constructor refuses to accept an opening rate above 10.00% or a resting rate above the opening one. There is no setter. There is no owner to call one.

A return delta only ever reaches the unspecified currency, so the duty is taken in beforeSwap when ether is specified — exact-input buys and exact-output sells — and in afterSwap for the other two shapes.

Where does it go?

To the Pyx, and there is no second destination in the bytecode. The duty is taken out of the PoolManager directly to the Pyx’s own address and only then accounted for. This contract is never, at any point in any transaction, holding the money — so there is no balance here that a withdrawal function could have been written against even by mistake.

What does it do to liquidity?

Nothing whatsoever. Permissions are 0x20CC and the six liquidity bits are clear. Anyone may add, anyone may remove, this contract is never consulted about it, and no exit can be blocked, taxed, delayed or front-run by it. That claim is measured rather than asserted: an LP add on this pool against an identical hookless control pool, from the same fork snapshot, is published in the project’s own measurement file alongside the contracts.

The pool the gate stands on is fixed at construction: beforeInitialize refuses any pool whose currency pair, fee and tick spacing are not exactly the ones the hook was built for. The tick spacing is 200, not the 60 the Uniswap interface fills in by default, so the tickSpacing field in the app’s URL has to be corrected by hand or the pool call reverts with WrongTickSpacing.

What does it write down?

One call to the Foil after every swap, which nearly always does nothing at all — the Foil only writes on the first swap of a new UTC day. That is the whole of the record-keeping on the swap path. The register does its arithmetic later, somewhere else, on somebody else’s gas.

What could make this worthless?

It makes every swap in this pool more expensive than the same swap in a pool without it, and no arrangement of the code can make that untrue. The number is published against a hookless control, both from one snapshot, so it can be checked rather than believed.

And the duty is a real cost to the trader, taken from the trade. It is not conjured. Everything the Pyx holds and everything behind every tally was paid by somebody swapping in this pool, and the whole structure is a claim on that flow continuing. If it stops, this file keeps working perfectly and collects nothing.

The terms

Every constant in the suite, and where it lives. Values marked immutable are constructor arguments fixed for the life of the contract, with no setter anywhere; the rest are compile-time constants.

Constants and immutables of the six contracts
NameValueContractWhat it does
INITIAL_SUPPLY1,000,000,000PaperThe entire issue, minted once in the constructor
decimals18PaperOrdinary ERC-20
TERM90 daysExchequerThe tenor of a tally
CUT_EVERY30 daysExchequerA new tally against a new lot, this often
LOT_COVER_BPS30,000 (300%)ExchequerLot size as a multiple of the bond drawn since the last cut
MIN_LOT1 etherExchequerAnd never smaller, however quiet the gate has been
MIN_DAYS21ExchequerSeparate trading days before a lot can be honoured
HONOUR_DUTY_BPS2,500 (25%)ExchequerShare of a lot that must have been paid for by duty
MIN_STRIKE0.001 etherExchequerSmallest face a single purchase may ask for
MARK_COST1,000,000 PAPERExchequerRetired to cut a merchant’s mark into an honoured lot
CONF0.60ExchequerThe haircut on extrapolated duty — 0.60 of the run rate, not 1.00
WARMUP7 daysExchequerA run rate is never read off less than a week
OPENING0.50ExchequerWhat the first purchase into an empty tally pays
PLACE_STEPS3ExchequerTallies the placement walk will look at in one call. A hard ceiling.
BOND_BPS6,000 (60%)PyxImmutable. Share of every credit that goes to the bond; the rest is reserve
MAX_FEE_BPS1,000 (10.00%)PaperHookA ceiling the constructor will not go above
OPEN_FEE_BPS500 (5.00%)PaperHookImmutable. The duty at the first swap
REST_FEE_BPS100 (1.00%)PaperHookImmutable. The resting duty
FEE_DECAY259,200 s (72 h)PaperHookImmutable. How long the decay takes, from the first swap
TICK_SPACING200PaperHookImmutable. The only tick spacing beforeInitialize will accept
permissions0x20CCPaperHookbeforeInitialize, beforeSwap, afterSwap and the two swap return-delta bits. The six liquidity bits are clear.

The immutable rows are the values the project’s own mining and simulation scripts are parameterised with. What is actually on chain will be whatever the deployed hook and Pyx were constructed with, and the LIVE tab reads those back from the contracts themselves rather than from this table.

Measured gas

Measured on a mainnet fork by gas_paper.js, every comparison taken from one snapshot against a pool identical but for the hook. Two runs on the same fork give the same figures.

What a trader pays

pathgasat 10 gweinote
buy, first swap ever241,4860.00241the gate opens
buy, steady134,6090.00135the common case
  of which the hook45,0580.00045against a hookless control
sell, steady155,5030.00156
  of which the hook44,9270.00045
first swap of a new day139,1430.00139+3,649, at most once in 24 hours
add liquidity216,1390.00216hookless: 215,899 — +240

What a subscriber pays

pathgasat 10 gweinote
strike, first into a lot152,9080.00153
strike, adding to a lot72,1690.00072
present69,8520.00070always open, no penalty
transfer stock51,7880.00052
sweep53,8770.00054anyone, when the pool is idle
sweep, three tallies deep78,7150.00079the worst case — the walk is capped at 3
cut the next tally84,1270.00084anyone, no reward
claim the reserve82,7640.00083burns PAPER, pays ETH
transfer PAPER53,5200.00054
burn PAPER57,3630.00057

Launch, one time

pathgasat 10 gweinote
deploy Paper540,2040.00540
deploy Manifest599,4960.00599
deploy Foil340,9730.00341
deploy Pyx667,0140.00667
deploy Exchequer1,977,0330.01977
deploy HookDeployer205,0200.00205
deploy PaperHook1,080,2900.01080CREATE2, through the factory
wire the Foil45,2590.00045deletes the role it used
wire the Pyx68,1310.00068deletes the role it used
initialize the pool56,3670.00056
seed the liquidity216,1390.00216800,000,000 PAPER, no ETH
total5,795,9260.05796

There is exactly one loop on a user’s path in the whole suite — the placement walk — and it is capped at three tallies. Its worst case is the 78,715 above. Paper, Foil, Pyx and PaperHook contain no loop of any kind, and sim_paper.js asserts that by reading the sources.

Profile: viaIR ON · optimizer 200 · cancun. Measured 2026-09-14.

The risks, together in one place

No third party has audited any of this

Six contracts. Tested hard against a mainnet fork, and that testing has already caught real bugs in this repository — a wrong liquidity formula, inverted tick ranges, inverted swap price limits, and a sibling project selling a claim for less than the money already behind it. A simulation written by the same hand that wrote the contract is not an audit and is not offered to you as one.

What you can and cannot lose

Buying at the floor — the ratio of ether already behind the claim — cannot lose principal. That is proved to the wei, not asserted: the price function can never return less than the backing ratio, the ratio behind a holder ratchets and has never fallen across fifty thousand adversarial trials, and a round trip in one breath is worst-case break-even.

Buying above the floor risks exactly the premium and nothing more. The premium is the extrapolated duty after a forty per cent haircut, it is only ever payable at the front of the curve, and it is capped at halfway from the money that is there to the money that is promised.

A quiet pool honours nothing

Everything in the suite is plumbing for gate income. On a pool nobody trades there is none: lots are cut at the 1 ether floor, nothing fills them, the reserve stays at zero, every tally matures short, and every buyer simply gets back what they put in and not a wei more. That is the ordinary outcome of a quiet pool, not a tail risk, and it is the case this page will not hide from you.

No figure on this page is a forecast. There are no guaranteed returns here, no yield target, no projection, and no partner. The only forward-looking number anywhere is the one the model on the CURVE tab draws, and that tab says in plain words that it is a model.

VII · live

Nothing is deployed

There are no addresses. Every figure below is empty rather than estimated, and this page makes no network request at all until there is something to read.

When the six contracts are on chain, their addresses go into a single configuration object at the top of this page’s script and every row below fills itself from the chain, through an endpoint you supply. The page never quotes a number it did not read. It has no server, no backend and no analytics; the only thing it can ever send anywhere is a JSON-RPC call to the endpoint you type in yourself.

The addresses

The endpoint

NetworkNot contacted
Block
Read at

Calls are plain eth_call over fetch, with the four-byte selectors computed in the browser from the function signatures by this page’s own keccak implementation — the same one that builds the manifest on the WAREHOUSE tab. There is no library here.

Exactly what it will read

Six calls. Nothing else, ever — no indexer, no third-party API, no price feed.

Pyx.trial()

Open the box in public. Anyone, any time, no cost.

held — what is actually thereNot deployed
owed — reserve + bondedNot deployed
ties — held ≥ owedNot deployed
surplus — claimed by nothingNot deployed

Exchequer.book()

Where the queue is standing, and how big the next lot would be.

Tallies cut so farNot deployed
Front of the curveNot deployed
Next cut dueNot deployed
Drawn but not yet placedNot deployed
Total backingNot deployed
Size of the next lotNot deployed

Exchequer.curve(1, 16)

The term structure as the register itself reports it: ids, prices, ratios, seconds left and the share of each lot subscribed. Capped at sixteen tallies per call.

The live term structure
LotPriceRatioDays leftTaken
Not deployed — nothing to read

Foil.record()

The calendar half of the claim. One number and three ways of looking at it.

Separate trading daysNot deployed
Day of the first swapNot deployed
Most recent day countedNot deployed
Calendar days since openingNot deployed
The one writerNot deployed

PaperHook.gate()

Everything the gate has taken, and the rate in force this second.

Duty collected, everNot deployed
Rate in forceNot deployed
The gate openedNot deployed
Pays intoNot deployed
Notes toNot deployed

Paper.totalSupply() · Paper.totalBurned()

The issue, and what has been retired out of it. There is no mint function, so the first can only ever fall.

PAPER in circulationNot deployed
PAPER retired for everNot deployed

Read it yourself instead

Nothing here is privileged. Every one of these six calls is a public view on a verified contract, and an explorer’s own read tab will answer all of them without this page in the middle. If this page and the chain ever disagree, the chain is right.