SignLens

How SignLens works

SignLens sits between a dapp and your wallet. Dapps see it as one more wallet to connect, through the standard they use to find wallets in the browser, but it holds no keys: a dapp sends it what it wants signed, SignLens explains it in its own window, and once you say so the request goes unchanged to the wallet you actually sign with.

That is clear signing, for whichever Solana wallet you use: you read what a transaction does, in words, before your wallet signs it, rather than a hash or a site's description of it.

  1. You connect "SignLens" in the dapp. SignLens connects, in turn, to your own wallet in the same page: Phantom, Backpack, Solflare or another Solana wallet.
  2. The dapp asks for a signature. SignLens keeps its own copy of the transaction, fetches the extra addresses it refers to from a Solana node (the RPC in the settings), simulates it there, and asks SignLens's server to explain it. When the explanation names accounts that would explain more, such as the proposal a multisig approval or a DAO vote refers to, SignLens reads them from the same node and asks again.
  3. The window opens before your wallet does. The verdict and a one-line summary at the top, or, when the transaction does several things, how many, with each on a line of its own; the findings; what the transaction does to you, as a list; each instruction with its fields; and the engine's full text.
  4. You decide. Reject, and the dapp is told you refused. Continue, and the exact bytes SignLens explained go to the wallet the window names, which asks you as usual. A page that changes its transaction afterwards changes nothing, and if you choose another wallet in the settings meanwhile, nothing is signed.

The SignLens popup: the API ready, explaining in English and Simplified Chinese, and three requests, a warning passed on, an OK swap passed on, and a blocked swap rejected

The verdict

Reading an explanation

Every explanation on this site is what the SignLens window shows for a transaction, recorded from the engine's answer.

The verdict and the summary
OK, Warning or Blocked (what each means), then one line saying what the transaction does, or, when it does several things, how many, with each on a line below.
Findings
What to read before you approve. Critical blocks the request; High and Warning are to read first; Info is for information.
What this does
The transaction's effects, as sentences: what is sent, received, approved, created, closed or handed over, and by whom. "You" and "Your wallet" are the signer, and accounts SignLens can prove are the signer's are named so.
The badge
A check in a ring after a name or an amount: SignLens knows the token or account by its address, from a verified token list or by deriving it, not by the name it gives itself. It is drawn, not written, so no token's name can carry it.
"(claimed, unverified)"
A name or a number SignLens could not check: what a token calls itself, or what an RPC reported.
"per your RPC"
Words taken from an account your RPC returned, such as the option a DAO vote picks or the steps of a multisig proposal. SignLens checks the account is the one the transaction names and decodes as it should, but cannot check that the RPC told the truth; what it says never lowers a finding.
"≥" and "≤"
At least and at most. Many amounts are only set when the transaction runs: a swap receives at least its minimum, a deposit takes at most what you allowed. SignLens shows the bound the signed transaction guarantees.
"UNLIMITED" and "NO TIME LIMIT"
An approval of the largest amount there is, and a signature that stays valid until its nonce account is advanced (a durable nonce).
"raw units"
An amount of a token whose decimals SignLens does not know, in the token's smallest units: 1,000,000 raw units of a token with six decimals is 1.
Short addresses
The first and last four characters of an address, such as Ffz5…piwg; hover it for the whole address, or open the full text. Scammers make addresses that share those characters with one you use (address poisoning), and SignLens flags one that shares them with yours or a contact's.
The full text
Everything the engine printed: each instruction with its fields, the signers, the fee, and how long the signature stays valid.
The line under it
Where the transaction comes from (a mainnet transaction, linked to an explorer, or one built to show a case), who it was explained for, and by which engine, on which day.

Where the words come from

Each program SignLens explains has a reviewed description of its instructions, built from the program's published interface and checked against real mainnet transactions. The badge marks a token or an account SignLens knows by its address, from a verified token list or by deriving it, not by the name it gives itself. The engine words every sentence, in English, or in Simplified Chinese, reviewed by a native speaker, when your browser asks for it. A simulation is a claim by the Solana node that ran it: SignLens holds it against the decoded instructions, and more leaving than they state is a finding.

What runs where

Everything that runs in your browser is open source, TypeScript compiled file for file with no bundler, and each release is built reproducibly, with its checksums and a build attestation (the source). In this beta the explanation itself is computed on SignLens's server, which keeps verdicts and finding codes, not the transaction; the privacy page has the details.

Watch-only mode

SignLens can also connect as any address you give it, with no wallet behind it: it explains what a dapp asks that address to sign, and refuses every request. Useful for checking a dapp before you connect a real wallet.

Try it: install SignLens for Chrome or Firefox.