◈ Pre-launch The bench reads Arbitrum One live. Nothing here is an offer or financial advice.
Arbitrum One · 42161

A fill is a claim until you strike it

Trades settle onchain, but what you're handed is a report — an interface telling you what it says happened. Assay ignores the report and rebuilds the fill from the chain: what left the wallet, what entered it, what the venue kept.

as·say/ˈaseɪ/

To determine what a thing is actually made of, rather than what it is claimed to be. Assay offices have declined to take sellers at their word since the 1300s: you bring the silver, they test it themselves, and only then is it struck.

Sterling is 925 fine — 925 parts silver per thousand. A fill has a fineness too. You were promised a thousand parts; the chain says how many arrived.

The bench
Touchstone arb1.arbitrum.io/rpc · idle
Permalink
▸ Assay this wallet's recent fills

Fineness needs a claim. Reconstruction alone tells you what arrived; it cannot tell you what you were owed. That number lives in the interface that filled you, so you supply it — until venue decoders can read it off the transaction itself.

Ledger

Every assay you've struck, kept in this browser and nowhere else. Assay has no account system and no server to send it to — clear your site data and this is gone.

An assay office keeps a register of what it has marked. This is yours, and it never leaves your machine.

Method

Four steps, no interpretation. Anyone re-running them lands on the same number or the method is broken.

i

Fetch the transaction and its receipt. Confirm it settled — an unconfirmed transaction is a rumour, not a fill.

ii

Read every ERC-20 transfer the token contracts themselves emitted, ignoring whatever the venue said about its own work.

iii

Net them against the wallet. That sum is what moved, and no interface gets a vote in it.

iv

Divide by what was promised. Parts per thousand. That is the fineness, and assay offices round down — you never get credit for purity you don't have.

The ladder

Millesimal fineness is the real standard for silver. These are the actual thresholds, applied to fills.

999
Fine. What you were promised is what arrived.
925
Sterling. A normal fill with normal costs.
750
Below sterling. Something took a real bite.
<750
Below standard. An assay office would break the piece rather than mark it — so Assay refuses the stamp.

The honest caveat: step ii trusts each token contract to report its own transfers, which is weaker than diffing raw balances at block N−1 and N. Balance-diffing needs an archive node and the public RPC won't serve it. The method still catches what matters — a venue claiming one output while the token moved another — because the venue and the token are different contracts. A malicious token would defeat it. Written here rather than discovered by you later.

Standing

What exists, what doesn't, and nothing in between. Check any Working row by using it.

Reconstruction
Reads the chain and nets transfers against your wallet.
Working
Gas accounting
The ETH the network took, from the receipt. No extra call.
Working
Fineness
Struck against a claim you supply.
Working
Wallet assay
Recent fills for any address, from transfer logs over a window.
Working
Permalink
Every struck assay gets a URL that re-runs it from the chain.
Working
Ledger
Local register of assays you've struck.
Working
Router readout
Names the router and reads the floor you signed — Uniswap V2 and V3, Camelot, SushiSwap. Verified against 539 settled transactions; the decoder withholds the number when its layout check fails.
Working
Quote decoders
Read the exact figure the interface quoted — a stronger promise than the floor. Needs each venue's own ABI.
Not built
State diffing
Balances at block N−1 vs N. Needs an archive node.
Not built
Drift
Whether a stock token tracks the asset it claims to represent.
Not built
Assay Agent
Polls the chain and assays every settled transaction that touches a wallet you registered. Runs as its own process; the code is in the repository.
Code ships
Telegram notices
Plain-English explanation of each fill. A model writes the sentences; the figures are computed before it sees them and it is forbidden to touch them.
Code ships
Accounts
Registration by one-time code from the bot. No email, no password, no wallet key.
Code ships
Dashboard
Per-account profile, history and watched wallets. Signed out it shows sample data.
Working
Public feed
Recent strikes on the front page: a Telegram display name, the ticker, arrived against promised, and the grade. Never an address or a hash. Opt out from the dashboard.
Code ships
Hosted agent
Nobody is running one. Clone the repository and run your own.
Not running
Multi-chain
The reconstruction is not chain-specific, but the router table has to be earned per chain, empirically.
Not built
Token
None exists. There is nothing to buy.
None
Team
One person, unnamed until there's something worth putting a name on.
Unstaffed
Users
Zero.
Zero

A row reads Working because the code ships and you can run it yourself. The rest are blank because they are blank. Every project that ends badly had a table like this filled in with numbers months before the numbers were true.

Wallet

Every settled transaction that moved a token in or out of this wallet, over a recent window. Click any to assay it in full.

Pulled from ERC-20 transfer logs over a fixed recent window, not a full history. A wallet showing nothing here has had no token movement in the window — which is not the same as no history at all.

Profile

You are looking at sample data. Put an agent on a wallet and this fills with your own. Sign up for alerts
Assays struck
Every hash you have run
Average fineness
Across the ones that carried a claim
Wallets watched
Notified on every settled transaction
Registered
When this chat was linked
Telegram notices
Off means nothing is sent, and nothing is queued for later. Your wallets and your history are kept either way.
Show me in the public feed
The front page lists recent strikes: your Telegram name, the ticker, what arrived against what was promised, and the grade. It never carries a wallet address, a transaction hash, or your note. Turning this off removes your past entries too, not just the next one.

Sample account

This is what your dashboard looks like once a Telegram chat is registered. Every number above belongs to that chat and to nobody else.

Assay holds three things about you: the Telegram chat id, the addresses you asked it to watch, and this history. Your display name is whatever Telegram already calls you — it is not asked for. No email, no password, no wallet key; there is nothing here you had to trust us with.

History

You are looking at sample data. These strikes belong to nobody. Sign up for alerts
Activitysample

Everything this account has done.

Each line is one thing that happened and one notice that went out. Strikes carry a permalink, and a permalink re-runs the assay from the chain in front of whoever opens it — which is what makes a record worth keeping rather than a claim you have to take from us.

Watched wallets

You are looking at sample data. Register an agent to add your own. Sign up for alerts
Add a walletsample

The addresses your agent assays for you.

Every settled transaction that moves a token in or out of these gets rebuilt by the same four steps and explained on Telegram. New transactions only — adding a wallet does not scan its history.

Chain data is public, so the agent will watch any address you give it, not only ones you control. The code you registered with proves you own the Telegram chat — never the wallet.

Not built

None of this works yet. Every panel below is a mock-up of output that does not exist.

Quote decoders

Today you type the promised number yourself. A decoder would read the quote out of the router calldata, so the claim comes from the transaction rather than from your memory of the screen.

Not built
What it would printmock-up
  quote read from calldata — you did not have to type it
  promised  98.5 ARB   (decoded, venue quote)
  arrived   96.412031 ARB
  fineness  978 / 1000  (Sterling, rounded down)

State diffing

The method reads Transfer logs, so a token that moves value without emitting one is invisible to it. Diffing balances at block N−1 against block N would see the movement regardless.

Not built · needs an archive node
What it would printmock-up
  No ERC-20 transfers in this transaction.
  ── state diff, block 496,204,453 → 496,204,454 ──
  ARB       +96.412031   (balance moved, no log emitted)
  USDC      −10000
  fineness  978 / 1000  (Sterling, rounded down)

Drift

One assay is a number. A hundred is a pattern. Drift would track fineness per venue and per token over time, so a venue that quietly gets worse has somewhere to show up.

Not built
What it would printmock-up
  ARB · your last 6 strikes
  999 ████████████████████  4 weeks ago
  981 ███████████████████   3 weeks ago
  978 ███████████████████   2 weeks ago
  934 ██████████████████    9 days ago
  921 █████████████████     4 days ago
  906 █████████████████     today
  median down 73 parts over four weeks

Multi-chain

The reconstruction is not specific to Arbitrum — it reads ERC-20 Transfer logs, which every EVM chain emits. What is specific is the router table, and that has to be earned per chain the same way this one was: empirically, and re-checked at runtime.

Not built
What it would printmock-up
  chain     base · 8453
  router    0x2626…c43  exactInputSingle
  arrived   1.4802 WETH
  fineness  993 / 1000  (Fine, rounded down)
  router table for this chain: 4 selectors verified, 2 withheld

A token

There isn't one, and there is no date for one. The whitepaper's position stands: if tokenomics ever exist they will be published as real, consistent, on-chain-verifiable numbers — or not at all.

None exists
What it would printmock-up
  No token exists. Nothing here is an offer.
  If that ever changes, this panel will carry the contract address and
  the supply, both readable from the chain rather than from us.

Why show what does not work?

Because the alternative is a page that quietly implies it does. The Standing page lists these as Not built and always has; this is the same list with the output attached, so you can judge whether it would be worth having rather than take the label on faith.

Every panel above is a mock-up written by hand. None of it came from the chain, none of it is anyone's real fill, and no part of it runs.

A fill is a claim until you strike it

Strike