ENSv2 · checked inside every payment

The account number is an ENS name.

The payment contract looks it up itself. If the name doesn’t point to this invoice’s vault, no money moves.

ENS, read live on Sepolia

resolving…

1

Real or forged? Only the chain can tell.

Pick a forgery and press Pay. Both go through the router's real check on Sepolia.

Real

Invoice #1042 · Acme Demo

$1,000.00

Pay to

1042.invoices.acme-demo.eth

The real forged order: claims acme-demo.eth, signed by 0xFdac…A39E.

2

A stolen key breaks, never steals.

Our server holds a key that can only file invoices. Try to misuse it.

acme-demo.ethmerchant’s name · cold wallet onlyinvoices.acme-demo.eth1042vault #10421043vault #10431047vault #1047billing keymerchant

Pick what the thief does.

3

Why this needs ENSv2

Three things v1 can't do with stock contracts.

Scope a key to one branch

setApprovalForAll covers every name you own, root included. NameWrapper fuses only take rights away.

Cover invoices not issued yet

PublicResolver.approve works per name, one transaction each, and only after the name exists.

Resolve inside a payment

Wildcard resolvers may answer off-chain (OffchainLookup). A contract can't follow that.

v1 could approximate this only with a custom registrar contract. ENSv2 does it with stock contracts.

4

Real names, resolved live

Every invoice below is an ENSv2 name on Sepolia. Click one to see its records.

Names on the current contracts, resolved from your browser through UniversalResolverV2.

addr
Points to the invoice’s vault. The router checks it inside every payment: no match, no payment.
pdfiplus.terms
Fingerprint (hash) of the signed order. The pay page compares it before paying, and anyone can re-check it.
pdfiplus.pdf
Fingerprint of the PDF as issued, so a copy can be checked against it. Set on invoices issued in the app.

The ENS app only shows standard records, so the two pdfiplus.* texts appear here, not there.

22
invoice names issued
87
records written
8
ENSv2 contracts
14
ENS reads in each payment
ENS 117k
rest 221k

A third of every payment’s gas is the ENS check.

Remove ENSv2 and fake invoices get paid

Nothing to check the payee against.

…there is no safe hot key

Publishing would need the merchant's own key.

…there is no kill switch

Nothing to revoke when a key leaks.

Not cosmetic: each invoice costs two ENS writes to issue (register, then addr + two text records). A payment can’t settle without the address records matching, and the text records let anyone check the order and PDF are the ones issued.

Evidence

On Sepolia

Issue an invoice
UniversalResolverV2
0x5d25C1…8303e3
acme-demo.eth registry
0x41952C…6F5923
acme-demo.eth resolver
0x145a64…4c2bAD
invoices registry
0x660Aa2…eEDf6e
invoices resolver
0x4053DA…9730F6
PDFiPlusRouter
0x4c11ab…06BDB5