Type to search · Esc to close

How this is checked

Claims are cheap. What follows is what was done to find errors in this protocol, what it found, and how to repeat each check yourself.

A protocol that holds other people’s collateral should be checked by people who want it to fail, not by people who wrote it. Ours precedes that review rather than replacing it. What has been done is described below, in full, including what it found.

Everything here can be repeated. The contract, the tests and the reference model are published; the documents carry checksums and timestamps anchored in Bitcoin. Nothing on this page requires trusting us.

What was done

481 local tests, 8 against live Arbitrum One

The local suite covers the curve, the ladder, redemption, the protection level, governance and the fee paths. The eight fork tests run the contract against a fork of Arbitrum One with real price feeds, because a test environment agrees with itself too easily.

A reference model written from the specification

The protocol was reimplemented in Python from the white paper rather than from the contract, so the two could disagree — and they did. The comparison found the headroom formula in backing protection using undamped values while backing itself used the damper, and the mint price undefined for operations covering many tokens at once. Neither error is visible in prose.

Mutation testing

Defects are injected deliberately into the compiled bytecode, and the suite is run again. A suite that still passes is a suite that is not looking. This is what tells you whether the tests above mean anything.

Checksums and timestamps

Every published document carries a SHA-256 checksum and an OpenTimestamps proof anchored in the Bitcoin blockchain. The proof shows the document existed in that exact form on that date, and it verifies without us.

What the checks found

  • Two construction errors in the mechanism, both listed above.
  • Five claims about storage-slot packing and permit signatures described as implemented when they were not. The claims were removed and the section rewritten.
  • Two collateral currencies listed as accepted that have no price feed on Arbitrum, and so cannot be priced or accepted. Both were moved to candidate status.

What the rewrite had to fix

  • A vote and the act it authorised fit in one transaction — Ending Phase 1 early was tied to the issuance stage, and stages are moved by minting rather than by time. One large mint can cross a stage boundary, so a holder could vote and step over the line in the same transaction, leaving no one time to answer. The subject now sits on the cycle grid: a vote is stamped with its cycle and read only at the next boundary.
  • A simple majority elects the outermost value — Parameters that take a value from an ordered series are settled by a weighted median. Where opinion is spread along a series, a majority can carry the outermost rung, while a median holds against vote-splitting. The protection level is the exception: it moves on a scale, one rung per cycle.
  • A fixed threshold leaves the regulator either deaf or jumpy — A fall in inflow counts as significant only once it leaves the ordinary spread. The protocol computes that band itself from the measured volatility of inflow, and it is not put to a vote: its width is a technical quantity, not a matter for collective judgement. It can be no narrower than 5.6 per cent and no wider than 78.6.
  • Voting credits could be earned by any exit — They are granted only for closing a position whose cost stood above book backing — the closing that raises backing for everyone else. A dilutive closing earns none, and neither does paying any fee.
  • A step in the price works as a magnet — In Phase 2 the mint price is recomputed continuously rather than in steps. A step would create a moment before which it pays to hurry in; the same objection keeps the redemption multiplier continuous.
  • Nothing held backing up from below — A protection level fixes how far book backing may fall from its historical maximum, and a single closing may take only part of the headroom left above the threshold.
  • A token that withholds part of every transfer cannot use the ordinary exchange path — Once the transfer fee is above zero, the standard routes of decentralised exchanges — which name a sum and require exactly that sum to arrive — stop accepting the token. Selling and adding liquidity then go through a router written for the purpose, which tops up the difference and holds nothing belonging to anyone. It sits outside the protocol.

How to repeat this

  • Verify a document — Take any file from the documents page, compute its SHA-256, and compare. Then verify its .ots proof against the Bitcoin blockchain. Neither step involves us.
  • Read the reference model — The Python implementation is written from the specification. If it disagrees with the contract, one of them is wrong — and that is the point of having both.
  • Check the contract yourself — What to look for in any protocol before trusting it, in order: what an operator can do without a vote, what a vote can do, and what nobody can do.

What this does not prove

  • This page describes our own review, and our own review precedes review by others rather than replacing it.
  • Tests show the contract does what its authors expected. They cannot show that what the authors expected is right.
  • A timestamp proves when a document existed, not that its contents are true.
  • None of this bears on the market price. The checks cover the mechanism; the market is outside it.