Controleer EIP-55-, Bitcoin-, TRON- en Solana-adressen en geef de juiste checksum weer.
Inspecteur voor handtekeningverzoeken
De tool zelf is in het Engels; op deze pagina wordt uitgelegd hoe deze werkt in uw taal.
Gebruik Inspecteur voor handtekeningverzoeken
Wat het doet
Plak de tekst die een portemonnee of een website je vraagt te ondertekenen, en bekijk in begrijpelijk Engels wat hiermee zou worden goedgekeurd. Token-goedkeuringen, vergunningen, Permit2-handtekeningen en Seaport-vermeldingen waarbij iemand anders wordt betaald, worden rood gemarkeerd.
Het draait volledig in je browser: er wordt niets van wat je invoert geüpload.
Hoe gebruik je Inspecteur voor handtekeningverzoeken
- Kopieer het onbewerkte verzoek. Neem de exacte tekst die je moet ondertekenen: de EIP-712 JSON, de 0x-gegevens van een transactie, het volledige transactieobject, een JSON-RPC-verzoek of de tekst van het bericht.
- Plakken en controleren. Plak het in het vak. De controle begint zodra je het hebt geplakt; je kunt ook op ‘Controleren’ klikken of op Ctrl+Enter drukken.
- Kijk eens hoe het werd voorgelezen. In de eerste regel staat hoe de invoer is geïnterpreteerd, bijvoorbeeld als transactieobject. Als dat niet klopt, selecteer dan het juiste type bij ‘Interpreteer de invoer als’.
- Lees de gekleurde afbeelding. Op het embleem, in de titel en in de samenvatting staat in begrijpelijke taal wat de ondertekening zou betekenen. De lijst eronder bevat de waarschuwingen; de ernstigste zijn vetgedrukt.
- Vul de velden in. Bekijk in de tabel de velden ‘spender’ of ‘operator’, ‘token’, ‘amount’, ‘expiry’ en ‘chain’. Open de velden ‘Decoded arguments’ of ‘Message’ om de ruwe waarden te bekijken.
- Beslis en deel. Als je de betaler niet kent, wijs het verzoek dan af in je wallet en zoek de adressen op via een block explorer. Met ‘Copy report’ krijg je een samenvatting in platte tekst, waarbij de links zijn uitgeschakeld.
Voorbeeld
Permit2-handtekening voor een onbeperkte USDC-toelage
{
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitSingle": [
{
"name": "details",
"type": "PermitDetails"
},
{
"name": "spender",
"type": "address"
},
{
"name": "sigDeadline",
"type": "uint256"
}
],
"PermitDetails": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint160"
},
{
"name": "expiration",
"type": "uint48"
},
{
"name": "nonce",
"type": "uint48"
}
]
},
"primaryType": "PermitSingle",
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"message": {
"details": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1461501637330902918203684832716283019655932542975",
"expiration": "281474976710655",
"nonce": "0"
},
"spender": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
"sigDeadline": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}
}Read as: EIP-712 typed data. Change this with “Read the input as”.
DangerousPermit2 PermitSingle: token allowance by signature (UNLIMITED)
Signing lets 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB move an unlimited amount of 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (USDC token on Ethereum) out of your wallet through Permit2. The allowance never expires in practice. The spender submits this signature itself, so you will not see another prompt. Drainers favour Permit2 because many wallets have already approved Permit2 for apps such as Uniswap.
Unlimited amount: the spender can take your whole balance of the token.
The allowance never expires in practice.
The signature never expires in practice.
SPENDER 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB
TOKEN 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDC token on Ethereum
AMOUNT Unlimited: 2^160−1, the Permit2 maximum (1461501637330902918203684832716283019655932542975)
ALLOWANCE EXPIRES 2^48−1 (Permit2 maximum): no practical expiry (beyond the year 5000)
NONCE 0
SIGNATURE VALID UNTIL (SIGDEADLINE) 2^256−1: no practical expiry (beyond the year 5000)
DOMAIN name "Permit2"
CHAIN Ethereum (chain ID 1)
VERIFYING CONTRACT 0x000000000022D473030F116dDEE9F6B43aC78BA3
Permit2 (Uniswap)
EIP-712 DIGEST (WHAT IS SIGNED) 0x579baa31b8f7279c82034e935d103d07caa27a817903937e201389d81d55984c
DOMAIN SEPARATOR 0x866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f28
MESSAGE HASH (HASHSTRUCT) 0xb646364eb4dc82faf68b61d79beb585797490532ff745845f3821e6f8573463c
PRIMARY TYPE PermitSingle(PermitDetails details,address spender,uint256
…Rood vakje: de betaler 0xbBbB…BBbB kan een onbeperkt bedrag aan USDC via Permit2 overmaken, en noch de toestemming, noch de handtekening verloopt. De EIP-712-digest wordt berekend.
Wat er wordt gecontroleerd
| Signaal | Wat dit betekent |
|---|---|
| Risicobadge: Gevaarlijk, Zorgvuldig controleren, Laag risico of Opmerking | 'Gevaarlijk' betekent dat het verzoek tokens of NFT's kan overdragen. Zelfs bij een bekende app wordt hiervoor goedkeuring gevraagd, omdat de toegekende bevoegdheid dezelfde is. Een intrekking, zoals een goedkeuring met een bedrag van 0, wordt weergegeven als 'Laag risico'. |
| Uitgever of exploitant in het rood | Het adres dat het recht zou krijgen om je activa over te dragen. Er worden enkele contracten genoemd, zoals Permit2, Seaport en de OpenSea-conduit; alle andere adressen moeten worden gecontroleerd. |
| Onbeperkt bedrag | Weergegeven voor 2^256−1 of elke waarde van 2^255 of hoger, en in Permit2-verzoeken voor 2^160−1. De besteder zou je volledige saldo van dat token kunnen opnemen, nu en later. |
| Bedrag met symbolische decimalen | Voor USDC, USDT, DAI en WETH op Ethereum wordt het ruwe getal omgerekend; zo wordt 1000000 bijvoorbeeld 1 USDC. Voor andere tokens zie je het ruwe gehele getal, weergegeven met 18 en met 6 decimalen. |
| Vervaldatum en uiterste datum | Verloopt in de praktijk nooit (ook niet na het jaar 5000), is langer dan een jaar geldig of is al verlopen. Een vergunning of toelage die nooit verloopt, blijft bruikbaar, zelfs lang nadat je ze bent vergeten. |
| Blinde handtekening van een hash van 32 bytes | De wallet kan niet weergeven waar de hash voor staat, en bij `eth_sign` kan het gaan om een transactie of een toestemming. Onderteken alleen een hash die je zelf hebt gegenereerd. |
| Controles van bestellingen in de zeehaven | Een advertentie met een prijs van nul, waarbij andere ontvangers meer krijgen dan de aanbieder, of waarbij aangeboden items bij een andere ontvanger weer verschijnen: dit zijn typische kenmerken van valse NFT-advertenties waarmee de aanvaller wordt betaald. |
| Aanmelden met Ethereum-domein | In een inlogbericht wordt de naam van de site vermeld die om inloggegevens vraagt. Als dat domein niet precies overeenkomt met de site waarop je je bevindt, zou de handtekening ervoor kunnen zorgen dat iemand anders als jou wordt ingelogd. |
| Twee uitlezingen van één selector | approve(address, uint256) is dezelfde aanroep in zowel ERC-20 als ERC-721. Tenzij het contract een van de weinige tokens is die de tool herkent, worden beide waarden weergegeven. |
Nog meer voorbeelden
NFT-goedkeuring voor een volledige collectie
0xa22cb465000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000000000000000000001Lees als: transactie-calldata (bekende functieselector). Gevaarlijk: setApprovalForAll: controle over AL je NFT’s in deze collectie. Operator 0x000000000000000000000000000000000000dEaD, Goedgekeurd true, Collectie (naar) niet opgegeven.
Beperkte goedkeuring van USDC in een transactie
{"to":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","data":"0x095ea7b3000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000f4240","value":"0x0","chainId":1}Lees als: transactieobject. Gevaarlijk: ERC-20-goedkeuring. De samenvatting geeft aan dat 0x000000000000000000000000000000000000dEaD tot 1.000.000 eenheden van het USDC-token op Ethereum zou kunnen verplaatsen zonder opnieuw toestemming te vragen. De tabel toont Chain Ethereum (chain-ID 1), Waarde 0 ETH (0 wei) en Bedrag 1.000.000 met de opmerking 1 USDC (6 decimalen).
Blind eth_sign-verzoek
{"method":"eth_sign","params":["0x0000000000000000000000000000000000000001","0xabababababababababababababababababababababababababababababababab"]}Lees dit als: JSON-RPC eth_sign-verzoek. Gevaarlijk: blinde handtekening: een hash van 32 bytes in plaats van tekst, met de vlag dat de meeste wallets eth_sign hebben uitgeschakeld of verborgen omdat oplichters er misbruik van maakten.
Veelgestelde vragen
Wat controleert de Signature Request Inspector?
Het decodeert gegevens van het type EIP-712, transactie-calldata, transactieobjecten en ‘personal_sign’- of ‘eth_sign’-berichten, en berekent de EIP-712-digest. Het markeert tokengoedkeuringen, setApprovalForAll, EIP-2612- en DAI-toestemmingen, Permit2-handtekeningen, Seaport-opdrachten waarbij iemand anders dan jij wordt betaald, en blinde handtekeningen met een hash van meer dan 32 bytes.
Kan een verzoek dat niet rood is gemarkeerd toch schadelijk zijn?
Ja. De tool leest alleen het verzoek zelf: hij heeft geen zicht op saldi, bestaande goedkeuringen of de vraag of een contract kwaadaardig is, en functies buiten zijn tabel worden als ‘onbekend’ weergegeven. Goedkeuringen voor legitieme apps worden ook rood gemarkeerd, omdat de handtekening in beide gevallen dezelfde bevoegdheid verleent.
Wordt het geplakte verzoek ergens naartoe verzonden?
Nee. Het decoderen en hashen gebeurt in je browser en de pagina verstuurt geen netwerkverzoeken met jouw invoer. Een handtekeningverzoek bevat geen vertrouwelijke gegevens, maar plak nooit een privésleutel of seed-zin op een website.
Maakt een kleine hoeveelheid een goedkeuring veilig?
Het beperkt het opneembare bedrag tot dat bedrag, maar de gebruiker kan het op elk moment besteden zonder je opnieuw om toestemming te vragen. Daarom geeft de tool een goedkeuring van 1 USDC nog steeds aan als ‘Gevaarlijk’. Keur alleen het bedrag goed dat je nodig hebt, voor een gebruiker die je hebt gecontroleerd.
Waarom zie ik bij één goedkeuring zowel een ERC-20- als een ERC-721-waarde?
Beide standaarden gebruiken dezelfde functienaam en argumenttypen, dus aan de hand van de 0x-gegevens alleen kun je niet zien om welke het gaat. Plak de volledige transactie inclusief het bestemmingsadres en controleer in een block explorer of dat contract een token of een NFT-collectie is.
Ik heb al een verzoek ondertekend dat hier rood wordt weergegeven. Wat nu?
Handel snel. Trek de goedkeuringen op de blockchain in en zet wat er nog over is over naar een nieuwe wallet. Een ondertekende toestemming die nog niet is gebruikt, wordt niet als goedkeuring weergegeven, dus het overzetten van de tokens is de veiligste stap. In de noodgids staat de volgorde van de te nemen stappen vermeld.