SIGIL

Arc

Fully onchain · Arc · ERC‑721

SIGIL

A wax seal, restored onchain. You sign once, and the signature is the only thing the image is made of.

Make your own

r

s

v

wax

Supply
TBA
Price
TBA
Date
TBA

§ 01

The name

English has two words descended from sigillum, and most people never notice they are related. The name works on three levels.

Latin

Signum meant a sign or a mark. Its diminutive sigillum meant a little sign — specifically a small figure, and by extension the engraved stamp that pressed it into wax. That word entered English twice: through Old French seel it became seal; through direct Latin borrowing it became sigil. Same word, two roads, two meanings.

Occult

In magical practice a sigil condenses a statement of intent into a glyph you can no longer read. The engine performs the same operation on a signature: all of the information is present, none of it recoverable.

Cryptographic

Every codebase abbreviates an ECDSA signature the same way. The abbreviation machines use, extended back into the word the Romans used.

SIG+IL

One went legal, one went esoteric. This project sits exactly where they split.

Before digital signatures, a wax seal pressed with a privately-held matrix was how a charter, a treaty, or a letter of credit was authenticated. The matrix was unique, kept in your possession, and losing it was catastrophic — a private key in every functional respect.

SIGIL restores that instrument onchain. A collector mints an unsealed token: a pool of undyed wax, identical to every other. To seal it they sign a message with their wallet. The contract runs ecrecover, confirms the signature belongs to the caller, and permanently stores the signature’s three components. Those three numbers are the only input to the artwork. Sealing is one-way.

§ 02

Why signatures, not random seeds

Most generative collections seed from a block hash, a mint index, or a pre-committed list. All three mean the collector receives a number rather than produces one. A signature is different.

  1. 01

    Cannot be forged

    It requires the private key. There is no shortcut.

  2. 02

    Cannot be guessed

    The space is astronomically large.

  3. 03

    Cannot be predicted

    ECDSA uses a nonce, so even you cannot know your mark before you make it.

  4. 04

    Can be verified by anyone

    Ecrecover returns the address that produced it. Provenance is a computation anyone can repeat, not a database claim.

§ 03

The method

Four steps, all integer arithmetic. The same signature produces the same mark on any machine, forever.

  1. sign

    You sign

    The contract calls ecrecover and rejects anything that does not resolve to your own address.

  2. r

    r walks

    Read two bits at a time. Each pair is a heading.

    Two bits, one heading
    00north
    01east
    10south
    11west
  3. s

    s measures

    Read in step with the heading. Each pair plus one gives the run length, one to four cells.

  4. v

    v folds

    The completed path is overlaid with its own rotation. This is what turns a random walk into a balanced mark.

000 / 110·

Crossing count per cell selects a tone from a five-step ramp, so density is earned by the path rather than assigned to it. A final pass adds a one-cell dithered glow beside the hottest crossings.

§ 04

Make your own

This page generates a throwaway private key, signs one fixed message with it, and presses the result. It is a demonstration of the mechanic, not a mint.

No wallet Nothing is connected and nothing leaves your browser. The key below is made here, used once, and forgotten when you close the tab.

private key
address
message
r
s
v

Take that key, sign that exact message, and you get this exact image back. Unforgeability is not a claim on this page — it is something you can go and check.

coverage
crossings
handedness
stride

§ 05

Unsealed, then sealed

Every blank is identical. The wax is undyed because the palette derives from the signature, and there is not yet a signature.

unsealed undyed wax, identical for every token

one‑way

sealed the signature, pressed in

Sealing is irreversible. The contract will not accept a second signature for a token, and there is no function that removes the first. What you press is what you keep.

§ 06

Onchain, in the strict sense

No IPFS. No server. No metadata folder that can rot. If the chain is alive, the art renders.

  • Two storage slots. The signature’s three components pack into two words, written once and never changed. Low-s is enforced, which leaves the top bit of the second word free to carry the recovery parameter.
  • The metadata computes. Token URI runs the walk, builds an SVG, base64-encodes it, and returns it inline as a data URI.
  • Reading costs nothing. Rendering is a view call.
  • All integer math. Bit shifts, masks, modulo. No floats, so the output is identical everywhere.
Sigil.sol
/// Two slots. Written once, never changed.
struct Seal {
    bytes32 r;
    uint256 sv;   // s in the low 255 bits, v's parity in the top
}

/// Press a signature into an unsealed token. One way, and only yours.
function seal(uint256 id, bytes32 r, bytes32 s, uint8 v) external {
    if (_seal[id].r != 0)                        revert AlreadySealed();
    if (ownerOf(id) != msg.sender)               revert NotYourToken();
    if (ecrecover(_digest(id), v, r, s) != msg.sender) revert NotYourSignature();
    if (uint256(s) > HALF_N)                     revert HighS();

    _seal[id] = Seal(r, uint256(s) | (uint256(v - 27) << 255));
    emit Sealed(id, msg.sender);
}

/// The artwork is computed, not stored. A view call, so reading is free.
function tokenURI(uint256 id) public view override returns (string memory) {
    Seal memory k = _seal[id];
    bytes memory art = k.r == 0
        ? _undyed()                       // a pool of undyed wax
        : _press(k.r, bytes32(k.sv & S_MASK), uint8(k.sv >> 255) + 27);

    return string.concat("data:application/json;base64,", Base64.encode(_json(id, art)));
}

§ 07

Traits are measured, not assigned

There is no trait list and no rarity table, because there was never a roll. After a walk completes you can measure it. Every one of these is derived after the fact.

wax
which of the six palettes the signature selects
handedness
the fold, taken from the recovery parameter
coverage
the fraction of the grid the path touches
crossings
cells visited three times or more
longest stride
the longest single run in the walk

Coverage across 100 seals, pressed on this page just now

Sorting the collection by coverage means sorting by a property of the secp256k1 curve. Nobody chose this shape.

Coverage distribution
CoverageSeals

§ 08

Arc

Arc is Circle’s open L1 for the world’s financial markets, with a founding validator set of institutions including BlackRock, DTCC, ICE, Mastercard and Visa. Gas is denominated in USDC.

You pay for your seal in dollars

Gas on Arc is denominated in USDC, so sealing is priced the way it always was. Sealing fees were a chancery line item for six hundred years.

Permissionless to deploy, permissioned to validate

Anyone may press a mark; institutions attest to it. That is exactly how seals worked.

A settlement layer, not another NFT chain

SIGIL is a cultural object on a settlement layer, not another PFP on another NFT chain.

mainnet
16 September 2026
gas
USDC
marketplace
OpenSea, from day one

§ 09

The primitive

Humans cannot compare hex strings. SIGIL is a renderer that turns a signature into something the eye can hold. The collection is the first thing built with it, not the only thing that could be.

This is why OpenSSH ships VisualHostKey. A person who would never notice one wrong character in a sixty-four character fingerprint will notice a different picture immediately. The eye is very good at shapes and very bad at hexadecimal.

The same renderer that presses a seal into a token can be called by any contract, for any signature. What follows is not a roadmap. It is what the primitive makes possible.

  1. 3 of 4 signed

    01

    Compound seals

    An N-of-M transaction produces several signatures. Composite them into a single mark, each signer contributing a quadrant. You can see at a glance that three of four signed, and which three. Medieval heraldry solved this with quartering, dividing a shield to show the houses that stood behind a claim. The problem has not changed.

  2. settlement-01

    treasury-02

    custody-03

    02

    Agent identity

    Arc supports agentic economic activity: autonomous agents holding keys and signing on behalf of institutions. “Which agent did this” becomes a real question, and an address is a poor answer. An operator watching a fleet can recognise one by sight before reading a single character.

  3. identical at a glance. not the same key.

    03

    Counterparty verification

    Before a treasury desk approves a transfer, show the seal of the counterparty key. Two addresses that differ only in the middle are visually identical in hex and trivially confused. Their seals are not. Address poisoning depends on hex being unreadable; this makes it readable.

  4. authority, delegated

    04

    Authority chains

    A key authorised by another key renders as a seal nested inside a seal. Delegation becomes visible. You can see how deep an authority runs without reading a permissions table — which is precisely what a counterseal did on a medieval charter, the lesser seal set within the greater to show authority passed down.

None of this requires a token, a treasury, or a promise. It requires a deterministic renderer that anyone can call and everyone can verify.

That part already exists.

§ 10

Terms

Three of these are not decided yet. When they are, they will be stated here and nowhere else first.

Collection specification
SupplyTBA
PriceTBA
DateTBA
ChainArc
MintOpenSea
StandardERC‑721
Canvas32 × 32
Traitsderived