In this track: Cryptography with intuition
advanced · 4 MIN READ

EIP-712 domain separators

Typed signing binds structured content to a specified domain.

LET’S PICTURE IT

A form includes the office name and jurisdiction, not just the requested action.

SEE IT FOR YOURSELF
From a public address to a verified signatureStep 1 / 4
From a public address to a verified signaturePublic address0x0000…0001Share to receiveAnother personCan read the addressCannot sign for youPublic identifier ≠ secret authorizationLocal signerPrivate key stays hereSign the chosen requestSigned requestMessage + signatureSecret key not includedThe moving packet represents a signature, not a keySignatureCheck the exact messageCheck the signing contextVerificationAuthorization checkedIntent still mattersValidity and safety are different questionsWallet interfaceReads public dataRequests authorizationNetwork stateBalances and recordsIndependent verificationNo wallet is connected in this local illustration

An address is public receiving information. It is not the private key that authorizes actions.

Animated local teaching model. No wallet, RPC or live blockchain data. Some labels and hashes are abbreviated for readability.

List the chosen domain fields

An EIP-712 domain may include name, version, chainId, verifyingContract and salt. Use the fields actually defined by the protocol rather than assuming every field is always present.

Hash with the correct typed procedure

The domain separator is constructed under EIP-712 rules. It is not an ordinary JSON string hash, and JSON key formatting should not become the signing format.

Verify the expected context

A verifier must enforce the correct chain and contract context where intended. A displayed domain field that the implementation ignores does not protect the action.

Add same-domain replay controls

EIP-712 does not by itself consume messages or reject repeated use. The application needs nonce, cancellation or equivalent authorization-state rules.

Inspect the distinction

domain: Learning Notes, version 1, chainId 1
verifyingContract: address 1
Note: count 7, text hello
typed digest: 0xf4184aa7249f3a4ee3caca75f9d9491ec1822f186e774158ab53e869d73255ab

These are local teaching values, not a signature request or a live-chain lookup.

TURN UNDERSTANDING INTO PRACTICEOpen the Keccak-256 →
QUICK CHECK · NO PRESSURE

Does EIP-712 automatically prevent all replay?

Your progress stays in this browser.
Keep exploring the original referenceEthereum Improvement Proposals ↗

Original explanations by EtherTools. Examples are educational and source-linked; this site is independent of the Ethereum Foundation. Our approach.