Collegare MetaMask a una dApp non trasferisce automaticamente le crypto, ma alcune operazioni successive possono concedere a uno smart contract il diritto di movimentare determinati token. Questa autorizzazione viene spesso chiamata approval o allowance e rappresenta uno dei passaggi più importanti da capire prima di usare un exchange decentralizzato, un protocollo DeFi o un marketplace NFT.
Il punto essenziale è distinguere tra tre situazioni diverse: l’autorizzazione ERC-20 a spendere una quantità di token, la firma off-chain di un permesso come permit e l’autorizzazione più ampia associata a NFT e token non fungibili tramite setApprovalForAll. Il fatto che MetaMask mostri una richiesta di firma o di conferma non significa sempre che il trasferimento avvenga nello stesso momento. In alcuni casi stai solo concedendo a un contratto la possibilità di farlo in futuro.
Che cosa significa autorizzare un contratto
Su Ethereum e sulle reti compatibili con l’EVM, i token ERC-20 non sono monete indipendenti custodite dentro MetaMask. Sono registrati nel contratto del token, che mantiene i saldi degli indirizzi e applica le regole per i trasferimenti.
Quando una dApp deve spostare token dal tuo indirizzo al proprio contratto, normalmente non può farlo senza una preventiva autorizzazione. Il wallet esegue una chiamata alla funzione approve del contratto del token. Con questa chiamata indichi quale contratto può spendere una certa quantità dei tuoi token.
La relazione può essere rappresentata in modo semplificato così:
- il tuo indirizzo è il proprietario dei token;
- il contratto del token registra un limite di spesa;
- un altro contratto, chiamato spesso spender o spender contract, può utilizzare quel limite;
- la dApp usa poi transferFrom per trasferire i token entro l’importo autorizzato.
Un approval non equivale quindi necessariamente a un invio immediato. È una delega tecnica. Se il limite resta attivo, il contratto autorizzato potrebbe utilizzarlo in un’operazione successiva, secondo le regole del proprio codice.
Allowance ERC-20: autorizzazione limitata o illimitata
L’allowance è il limite di token che un determinato spender può trasferire dal tuo indirizzo. Può essere impostata su una quantità precisa oppure su un valore molto elevato, spesso indicato nelle interfacce come unlimited o illimitata.
Un’autorizzazione limitata riduce l’esposizione teorica: se il contratto viene compromesso o contiene una vulnerabilità, l’importo potenzialmente utilizzabile è circoscritto alla somma approvata. Tuttavia, può essere necessario effettuare una nuova approval quando vuoi usare altri token, con una transazione e un costo aggiuntivi.
Un’allowance illimitata è più comoda perché evita approvazioni ripetute. Non significa che tutti i token vengano trasferiti subito, ma consente allo spender di utilizzare, in base alle funzioni disponibili e alle condizioni del contratto, una quantità molto ampia dei token approvati. Se in seguito mantieni quei token sullo stesso indirizzo, l’autorizzazione potrebbe continuare a essere rilevante.
Prima di confermare, controlla almeno:
- il nome e l’indirizzo del token;
- l’indirizzo dello spender, che potrebbe essere diverso dal sito o dall’applicazione che stai usando;
- la quantità approvata;
- la rete sulla quale avviene l’operazione;
- la coerenza tra il contratto visualizzato e quello ufficiale della dApp.
Una richiesta di approval non deve essere considerata sicura solo perché proviene da una dApp conosciuta. Un sito contraffatto, un dominio omofono o un contratto malevolo possono chiedere un’autorizzazione verso un indirizzo controllato dall’attaccante.
Che differenza c’è tra approval e permit
Un approval tradizionale è normalmente una transazione on-chain inviata al contratto del token. Richiede gas e modifica direttamente lo stato della blockchain. Dopo la conferma, l’allowance è visibile on-chain.
Un permit, quando supportato dallo standard del token e dal contratto che lo utilizza, permette invece di autorizzare una spesa firmando un messaggio strutturato. La firma viene poi presentata da un’altra parte, spesso la dApp o un relayer, che esegue l’operazione on-chain.
Il vantaggio pratico può essere una procedura più efficiente, talvolta con un’unica transazione per autorizzazione e utilizzo dei token. Ma la firma off-chain non è priva di conseguenze. Non pagare gas al momento della firma non significa che la richiesta sia innocua: il messaggio può contenere il token, lo spender, il limite, una scadenza e un nonce.
Per questo è importante distinguere una firma personale generica da una firma di dati strutturati. Una richiesta che mostra termini come permit, Permit2, spender, value, deadline o nonce merita attenzione particolare. L’interfaccia del wallet potrebbe non rendere ogni campo immediatamente comprensibile, soprattutto quando il contratto o l’applicazione non forniscono una visualizzazione chiara.
La scadenza è un elemento importante, ma non risolve ogni rischio. Un permit scaduto non dovrebbe più essere utilizzabile secondo le regole previste dal relativo standard, mentre un permit con scadenza molto lunga amplia la finestra temporale nella quale la firma può essere presentata. Anche il nonce serve a impedire il riutilizzo della stessa autorizzazione, ma la sicurezza dipende comunque dal contratto e dal modo in cui la dApp gestisce la firma.
Che cos’è setApprovalForAll con gli NFT
Nel caso degli NFT ERC-721 e di molti token ERC-1155, la funzione più delicata è spesso setApprovalForAll. Invece di autorizzare un singolo token o una quantità specifica, questa funzione può consentire a un operatore di gestire tutti gli NFT compatibili presenti nell’indirizzo, o quelli che il contratto considera soggetti a quell’autorizzazione.
È una procedura comune nei marketplace e in alcune applicazioni che devono trasferire NFT durante una vendita. Tuttavia, l’ampiezza della delega è maggiore rispetto all’approvazione di un singolo token.
Prima di firmare una richiesta setApprovalForAll, verifica:
- se l’operatore è il contratto ufficiale del marketplace o della dApp;
- se l’autorizzazione è impostata su true o false;
- quale collezione o standard di token può essere interessato;
- se stai operando sulla rete corretta;
- se la richiesta è effettivamente necessaria per l’azione che vuoi eseguire.
Un errore frequente è approvare un operatore globale dopo aver cliccato su un link ricevuto tramite messaggio o social network. Se il contratto è fraudolento, l’autorizzazione potrebbe consentire il trasferimento degli NFT senza una nuova conferma esplicita per ogni singolo asset.
Come controllare le autorizzazioni prima e dopo l’uso di una dApp
Il primo controllo va fatto dentro MetaMask, leggendo con calma la richiesta prima di premere conferma o firma. Non approvare automaticamente perché la schermata della dApp indica che l’operazione è necessaria. Se qualcosa è poco chiaro, interrompi la procedura e verifica il contratto tramite fonti indipendenti e ufficiali.
Dopo l’operazione puoi controllare le allowance e le autorizzazioni sulla blockchain attraverso strumenti di gestione degli approval o tramite l’explorer della rete, quando offre questa funzione. È fondamentale selezionare la rete corretta e collegare o inserire soltanto l’indirizzo pubblico interessato. Non inserire mai la seed phrase, la chiave privata o file di backup in un sito che promette di verificare gli approval.
Quando non utilizzi più una dApp, valuta la rimozione delle autorizzazioni non necessarie. Revocare un’allowance significa normalmente impostarla a zero o sostituirla con un limite diverso; la revoca è a sua volta una transazione on-chain e può richiedere gas. Per NFT e token compatibili, la revoca di setApprovalForAll comporta l’impostazione del valore su false.
La revoca non annulla necessariamente un trasferimento già eseguito e non rende sicuro un contratto malevolo. Serve a eliminare o ridurre una delega ancora attiva. Se sospetti che una chiave privata o una seed phrase siano state compromesse, la semplice revoca può essere insufficiente: l’attaccante potrebbe continuare a firmare transazioni direttamente dal tuo indirizzo.
Errori da evitare con MetaMask
- Confondere collegamento e autorizzazione: connettere il wallet a un sito non è la stessa cosa che approvare un token o firmare un permit.
- Accettare allowance illimitate senza comprenderle: la comodità può aumentare l’esposizione futura dell’indirizzo.
- Ignorare lo spender: il nome della dApp non garantisce che il contratto autorizzato sia quello corretto.
- Firmare messaggi incomprensibili: una firma off-chain può avere effetti economici anche senza una transazione immediatamente visibile.
- Usare strumenti di revoca non verificati: evita siti raggiunti da pubblicità, messaggi privati o link abbreviati.
- Considerare la revoca una garanzia assoluta: riduce alcune autorizzazioni, ma non corregge una seed phrase esposta o un contratto già utilizzato per sottrarre fondi.
Un esempio pratico
Immagina di voler scambiare un token ERC-20 su un DEX. La prima richiesta di MetaMask potrebbe essere un approval verso il contratto che gestisce lo scambio. Se approvi 100 token, il contratto potrà utilizzare fino a quel limite secondo le proprie regole. La seconda richiesta potrebbe essere lo swap vero e proprio, con importi, destinatario, slippage e commissioni.
Se invece approvi una quantità illimitata, lo swap iniziale potrebbe riguardare solo 100 token, ma l’autorizzazione residua potrebbe restare attiva. In seguito, lo stesso spender potrebbe utilizzare altri token dello stesso tipo presenti sul tuo indirizzo, se il contratto e le condizioni dell’operazione lo consentono.
Con un NFT, la richiesta setApprovalForAll potrebbe non trasferire alcun oggetto nel momento della firma, ma autorizzare un marketplace a gestire la collezione interessata. La differenza tra delega e trasferimento è quindi fondamentale per capire ciò che stai realmente approvando.
La procedura prudente prima di confermare
- Apri MetaMask dal browser o dall’app ufficiale, senza usare finestre duplicate o pop-up sospetti.
- Controlla rete, token, contratto e indirizzo dello spender.
- Verifica se la richiesta è un approval, un permit, una firma strutturata o setApprovalForAll.
- Preferisci, quando disponibile e comprensibile, un limite coerente con l’operazione invece di un’autorizzazione illimitata.
- Controlla la transazione risultante sull’explorer corretto.
- Quando hai terminato, esamina le autorizzazioni rimaste e revoca quelle non più necessarie.
Capire la differenza tra allowance, permit e setApprovalForAll aiuta a leggere MetaMask con maggiore consapevolezza. Il wallet mostra la richiesta tecnica, ma la responsabilità di verificare destinatario, contratto, rete e ampiezza della delega resta parte essenziale dell’uso delle dApp. Una conferma rapida può autorizzare molto più di quanto suggerisca il semplice pulsante “Connect” o “Confirm”.


