Monad mainnet · 143


Component kit: every state, as the pages use it.

The postal register’s parts, each drawn in every state it can be in. Red appears only in wax: the seal, and the word “lock”. Airmail blue marks what is open. Everything else is ink, pencil and ruling on manila.

ExampleAddresses, keys and letters here are examples made by the SDK. The Monad mainnet smoke-test key and its transaction link are real.

Colour and type

Six brand values and their surfaces. The wax is a state, not a decoration: it appears when a seal presses shut and when it breaks.

  • Manila--bg #F3EEE3the page: envelope stock
  • Letter sheet--bg-elevated #F8F4EBcards, slips, the letter
  • Inner fold--bg-sunk #ECE6D9inside the envelope
  • Iron-gall ink--ink #1E1B16text, rules, primary buttons
  • Pencil--muted #6E6556secondary text, labels
  • Ruling--rule #CFC4AFregister hairlines
  • Airmail blue--before #2F5D9Eopen state: a public key, a letter going out
  • Sealing wax--after #A3261Eonly as wax: the seal and the word “lock”

Title, Bodoni Moda 44

Address line, Bodoni Moda italic 30

Body, Public Sans 19. Plain words, like a postal form: what happened, and what to do next.

Data, IBM Plex Mono 15: 6b52 86d1 ad27 08a1 · keyOf(address)

Label capitals, Public Sans 12

WaxSeal

Five states. It presses in 280 ms with an overshoot and cracks in 560 ms; with reduced motion the change is instant. It appears on the seal and open screens only.

absentwhere the wax will land
pressedseal() completed
crackedopen() succeeded

pressing, frame by frame

  1. 0 ms
  2. 70 ms
  3. 140 ms
  4. 210 ms
  5. 280 ms

cracking, frame by frame

  1. 0 ms
  2. 140 ms
  3. 280 ms
  4. 420 ms
  5. 560 ms
replaypress it shut, crack it open, at full speed

Envelope

An airmail edge, an italic address line, a flap that is down or folded back, a slot for the seal and one for the letter. The letter exists only before sealing and after opening.

Maya, the dentist moved to Thursday at 10:40. I will remind you on Wednesday evening.

To address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Epoch 1

open, unsealedthe letter is readable by whoever carries it

To address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Epoch 1

closed, sealedonly the addressee’s passkey breaks it

Maya, the dentist moved to Thursday at 10:40. I will remind you on Wednesday evening.

To address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Epoch 1

openedseal cracked, letter out

To agent 4412

Epoch 1

closed, not yet sealedto an agent; the wax lands on the ring
compactinbox thumbnails: sealed · opened

The courier comes at noon.

To address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Epoch 1

opened, one short linethe sheet still covers the flap folded back behind it

Maya, the dentist moved to Thursday at 10:40. I will remind you on Wednesday evening.

To address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Epoch 1

replayseal it, then open it

AddressCard

The address line, the key as a bar strip and in hex, the epoch, and where the key was posted.

Encryption address

address 0xfa72da61400f345d85bf3d0d55395bdbebdb02b3

Key
db97 84b7 c246 deb1
Epoch
1
Address
0xfa72da61400f345d85bf3d0d55395bdbebdb02b3
Posted
0x35b833…1ae233 (opens the explorer)Monad mainnet · block 108,289,847 · 26 Sep 2026, 21:45 UTC

A smoke-test key: the SDK’s derivation over random bytes standing in for a passkey. No passkey was used.

postedreal: the Monad mainnet directory’s smoke-test key

Your encryption address

Example

address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30

Key
6b52 86d1 ad27 08a1
Epoch
1
Address
0x4ccacf6625c9290a533d71998a33b24cfe85fa30
Posted
Not posted: example card
examplenot posted

Your encryption address

Example

address 0x2cb6230026b0bd54a44fc92b501526e5351c7d02

Key
895c 500f 4d5e b78b
Epoch
2
Address
0x2cb6230026b0bd54a44fc92b501526e5351c7d02
Posted
Not posted: example card
rotatedepoch 2; epoch 1 still opens

Your encryption address

Example

address 0xd6c94ca947d4bb713647b92cea04082fe0f2078a

Key
5930 13e0 5c26 c52f
Epoch
1
Address
0xd6c94ca947d4bb713647b92cea04082fe0f2078a
Posted
Waiting for the transaction
postingthe publish transaction is out

RegisterTable

Ruled register columns with tabular numerals. From 1024 px up every column shows; narrower, it keeps addressee, epoch and key.

Example register, every column
AddresseeEpochKeyPosted
agent 4412Example1862b 3bca a34d e56fExample, not posted
address 0x2cb6230026b0bd54a44fc92b501526e5351c7d02Example2895c 500f 4d5e b78bExample, not posted
address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30ExampleFound by keyOf16b52 86d1 ad27 08a1Example, not posted
address 0xd6c94ca947d4bb713647b92cea04082fe0f2078aExample15930 13e0 5c26 c52fExample, not posted
address 0x2cb6230026b0bd54a44fc92b501526e5351c7d02ExampleSuperseded1bf31 5c86 ef04 fff7Example, not posted
fullfound line inked blue · rotated line ruled through · rows stamped Example
Monad mainnet register
AddresseeEpochKeyPosted
address 0xfa72da61400f345d85bf3d0d55395bdbebdb02b3Smoke-test key: random bytes stood in for a passkey1db97 84b7 c246 deb10x35b8…e233 (the transaction that posted this key, in the explorer)block 108,289,8470x35b833…1ae233 (opens the explorer)Monad mainnet · block 108,289,847
posted, realthe Monad mainnet directory’s smoke-test line, with its transaction
Example register, compact
AddresseeEpochKeyPosted
address 0x2cb6230026b0bd54a44fc92b501526e5351c7d022895c 500f 4d5e b78bExample, not posted
address 0x4ccacf6625c9290a533d71998a33b24cfe85fa30Found by keyOf16b52 86d1 ad27 08a1Example, not posted
address 0xd6c94ca947d4bb713647b92cea04082fe0f2078a15930 13e0 5c26 c52fExample, not posted
compactbelow 1024 px: addressee, epoch, key
Empty register
AddresseeEpochKeyPosted
No keys in the register yet.
emptya directory with no keys yet

ErrorSlip

A returned-to-sender slip for each SDK error a person can meet: what happened, in plain words, and what to do. Inked, never red.

Returned to sender

ExamplePRF_UNSUPPORTED

Returned to sender: This passkey can’t make an encryption key.

Your passkey provider returned no PRF output, and your encryption key is derived from that output. Some providers return none, for example Dashlane and some Chrome profiles.

What to doUse a passkey saved in a provider that returns PRF output, such as iCloud Keychain in Safari 18 or later, and create your address again.

Returned to sender

ExamplePASSKEY_FAILED

Returned to sender: No passkey answered.

The passkey prompt was cancelled or timed out, or this device has no passkey for this site.

What to doTry again and approve the prompt. If no passkey is offered, use the device where you created your address, or one that syncs its passkeys.

Returned to sender

ExampleNO_KEY_PUBLISHED

Returned to sender: Addressee not in the register.

The directory has no key for this address, so there is nothing to seal to. Nothing was sealed and nothing was sent.

What to doAsk them to create their Letterlock address, then seal the note again.

Returned to sender

ExampleEPOCH_MISMATCH

Returned to sender: Key from another epoch.

The envelope is sealed to epoch 1, and the key in hand is for epoch 2.

What to doOpen it with your passkey again: it re-derives the key for every earlier epoch, including epoch 1.

Returned to sender

ExampleWRONG_KEY

Returned to sender: Sealed to a different passkey.

The envelope did not open. It names key 6b52 86d1 ad27 08a1, and the passkey you chose derives 5930 13e0 5c26 c52f.

What to doOpen it again and choose the passkey you used when you created this address.

Returned to sender

ExampleTAMPERED

Returned to sender: Damaged in transit.

The envelope failed its authentication check: it was changed after it was sealed. No part of it was decrypted.

What to doDon’t trust this copy. If you know who sent it, ask them to seal the note again.

Returned to sender

ExampleINSUFFICIENT_FUNDS

Returned to sender: Not enough postage.

Posting is a Monad transaction, paid in MON by your passkey account, and it holds too little. Nothing was sent.

What to doSend a little MON to your passkey account from any wallet, then press the button again.

Returned to sender

ExampleCHAIN_UNAVAILABLE

Returned to sender: The register did not answer.

Monad’s RPC gave no answer, so nothing is known either way. This is not the same as “no key”: the key may well be there.

What to doTry again in a moment. If a transaction link was shown, open it before sending anything again.

Returned to sender

ExampleNOT_AGENT_OWNER

Returned to sender: Not the agent’s owner.

Only the account that owns an ERC-8004 agent in the identity registry may post that agent’s key, and this account does not own it.

What to doPost the key from the account that owns the agent, or check the agent id.

ExampleThe quoted keys and epochs are what the SDK’s open() really reports for example letters: Maya’s letter opened with Nadia’s passkey, and Kai’s epoch 1 letter with his epoch 2 key.

PasskeyButton

The one primary action on a screen that raises a passkey prompt. Ink, or airmail blue when it opens a letter; never red. While the prompt is up it keeps focus and says what it waits for.

ink

idle
hover
focuskeyboard
pressed
waitingthe prompt is up
disabled

airmail

idle
hover
focuskeyboard
pressed
waitingthe prompt is up
disabled

Other actions, same stamp

inkno prompt
airmaila letter going out
airmail, waitinga transaction is out
outlinesecondary
outline, hover
linknavigates

Postmark, strip, stamp

Ink marks struck on the paper. The strip is a postal 4-state bar code of the key fingerprint: 32 bars, two bits each, the same 16 digits as the hex beside it.

Postmarkring only
Postmarkwith cancellation bars
Wordmarkoutlined; “lock” is wax
6b52 86d1 ad27 08a1
KeyStripopen: a key found in the register
KeyStripink · pencil (superseded)
Example
ExampleBadgestamped on anything not on chain

Fields

A postal form’s lines: capitals for the label, a ruled box to write in. The note is written on a ruled sheet and counted in bytes, the unit the envelope limit is written in.

An address (0x…) or an agent (agent:<id>).

TextFieldaddress, in the data face
TextFieldwith a form error

85 bytes

NoteFieldbytes counted live

85 bytes of 64 bytes

The note is over its limit of 64 bytes.

NoteFieldover its byte limit (64 here), announced once as it goes over
Component kit · Letterlock