method how_it_works()

One request, read in five steps

Presign sits between the dapp and your wallet. Before the wallet asks you to confirm, the request is decoded, simulated, checked and explained. Most checks finish in about a second.

  1. 01The request is decoded
  2. 02It runs before it runs
  3. 03Risks get named
  4. 04You get a verdict and a fix
  5. 05Then you sign
app.swapzone.exampleethereum · mainnet
ReadingSimulated3 flagsFlaggedSafe to sign
01 / request02 / simulation03 / flags04 / verdict05 / signedapprove(spender, amount)

Don't sign this

fixSet the allowance to 250 USDC, the amount of this swap.
app.swapzone.exampleethereum · mainnet
Flagged
04 / verdictapprove(spender, amount)

Don't sign this

fixSet the allowance to 250 USDC, the amount of this swap.

steps 01-05

What happens in that second

  1. step 01 · request

    The request is decoded

    A dapp asks your wallet for a signature. Presign turns the call data into words: which method, which contract, how much.

    app.swapzone.exampleethereum · mainnet
    Reading
    01 / requestapprove(spender, amount)

    method
    approve(spender, amount)
    spender
    0x9f3a…c21e
    amount
    unlimited USDC
    network
    Ethereum · fee ~$1.84
  2. step 02 · simulation

    It runs before it runs

    The transaction is replayed on a fork of the chain, so you see the balance change before anything moves.

    app.swapzone.exampleethereum · mainnet
    Simulated
    02 / simulationapprove(spender, amount)

    you giveUnlimited USDC
    you getNothing

    Balance after: 4,820 USDC can be moved at any time by 0x9f3a…c21e.

  3. step 03 · flags

    Risks get named

    Allowances, new contracts, unverified code, lookalike addresses and known drainer patterns are flagged one by one.

    app.swapzone.exampleethereum · mainnet
    3 flags
    03 / flagsapprove(spender, amount)

    • Unlimited allowanceThe spender can move every USDC you hold, now or later.
    • New contractThe spender was deployed 3 days ago.
    • Unverified sourceIts code is not published, so nobody can read it.
  4. step 04 · verdict

    You get a verdict and a fix

    Not a score you have to interpret. A plain answer, and when it is a no, the change that makes it a yes.

    app.swapzone.exampleethereum · mainnet
    Flagged
    04 / verdictapprove(spender, amount)

    Don't sign this

    fixSet the allowance to 250 USDC, the amount of this swap.
  5. step 05 · signed

    Then you sign

    The safe version goes to your wallet as usual. Presign never holds keys and never signs for you.

    app.swapzone.exampleethereum · mainnet
    Safe to sign
    05 / signedapprove(spender, amount)

    Signed with a 250 USDC limit

    allowance
    250 USDC
    tx
    0x4be1…07fa
    checked in
    1.2 s

timing p50

Fast enough that you never wait for it

decode
40 ms
simulate
620 ms
flag
310 ms
explain
230 ms
total
1.2 s

questions

What people ask first

Does Presign see my private key?

No. It reads the request your wallet is about to sign. Keys stay in the wallet, and nothing is signed by Presign.

What if Presign is down?

Your wallet works as before. Requests go straight through and the popup says the check was skipped.

Which chains are covered?

Ethereum, Base, Arbitrum, Optimism and Polygon. Solana is in beta since v2.1.

Can it be wrong?

Yes, and it says how sure it is. Every flag links to the rule that raised it, so you can check the reasoning.

Read. Then sign.

Add Presign to your wallet and see every request in plain words before you confirm it.

PresignAstro + Sanity themeBuy this theme $59 (opens in a new tab)