Un indirizzo del contratto (contract address) è l'indirizzo di uno smart contract su una blockchain. Viene creato quando il contratto viene deployato, non ha una chiave privata ed è la stringa che le persone intendono quando scrivono "CA" accanto a un token.
Su Ethereum e su ogni chain EVM ha esattamente l'aspetto di un indirizzo del wallet: 0x seguito da 40 caratteri esadecimali. Un token come USDT o USDC è un contratto, quindi l'indirizzo del token è un indirizzo del contratto. Ciò che cambia rispetto a un indirizzo del wallet è cosa c'è dietro: codice e storage invece di una persona che possiede una chiave privata.
Il termine compare in tre situazioni: quando aggiungi un token personalizzato a un wallet, quando un block explorer etichetta un indirizzo come contratto e quando qualcuno pubblica il CA di una nuova moneta. Questa guida spiega cosa identifica l'indirizzo, come viene generato, come distinguerlo da un indirizzo del wallet, dove trovare l'indirizzo vero di un token e cosa succede se invii fondi a uno di questi indirizzi.
La versione breve
- Un indirizzo del contratto punta a del codice; un indirizzo del wallet punta a chi possiede una chiave. Sulle chain EVM entrambi usano lo stesso formato, quindi il formato da solo non dice quale sia quale. Un block explorer o una chiamata eth_getCode sì.
- Sulle chain EVM l'indirizzo è 0x + 40 caratteri esadecimali, derivato dall'indirizzo e dal nonce di chi fa il deploy, oppure da un salt con CREATE2. Tron usa 34 caratteri che iniziano con T, Solana un mint address in base58.
- Copia l'indirizzo di un token dal sito o dalla documentazione dell'emittente, poi controlla che l'explorer mostri codice sorgente verificato, molti holder e una lunga cronologia. I token truffa riutilizzano nomi e simboli reali.
- La maggior parte dei contratti token non può restituire i token inviati al proprio indirizzo. I depositi vanno a un indirizzo del wallet; con un contratto si interagisce tramite una dApp o un wallet che ne conosce le funzioni.
1. Cos'è un indirizzo del contratto?
Ogni account su Ethereum, e sulle chain costruite allo stesso modo, ha un indirizzo. Esistono due tipi di account. Un account di proprietà esterna (EOA) appartiene a chi ne possiede la chiave privata. Un account contratto contiene un programma e i dati che quel programma conserva, e il suo indirizzo è l'indirizzo del contratto. La documentazione di ethereum.org lo afferma esplicitamente: gli account contratto non hanno chiavi private; sono controllati dalla logica del codice dello smart contract.
Un contratto viene deployato una sola volta da una transazione, riceve il suo indirizzo in quel momento e lo conserva finché esiste la chain. Chiunque può inviare una transazione a quell'indirizzo per chiamare una delle funzioni del contratto. Un trasferimento di token o uno swap su un exchange decentralizzato è una transazione indirizzata a un contratto.
I token sono il caso più comune. USDT, USDC, WETH e ogni altro token ERC-20 è un contratto che tiene una tabella di saldi. L'indirizzo del token è quindi un indirizzo del contratto, ed è l'unica informazione di cui un wallet ha bisogno per mostrare un token che ancora non conosce.
2. Cosa significa "CA" in crypto?
CA sta per contract address, cioè indirizzo del contratto. Su X, Telegram e Discord un post su un nuovo token di solito finisce con CA seguito dall'indirizzo, perché il nome e il ticker di un token non sono unici mentre l'indirizzo lo è. Siti di trading e wallet usano la stessa abbreviazione.
Su Solana il CA è il mint address del token, l'account che ne definisce l'offerta e i decimali. Su Ethereum, BNB Chain, Base e le altre reti EVM è l'indirizzo del contratto ERC-20 o BEP-20. In entrambi i casi l'indirizzo è ciò che incolli in un wallet o in un explorer per raggiungere esattamente il token di cui qualcuno sta parlando. È anche il motivo per cui i CA falsi sono una truffa comune: un token imitazione con lo stesso nome ha un indirizzo diverso.
3. Che aspetto ha un indirizzo del contratto?
Il formato dipende dalla chain, ed è lo stesso che la chain usa per gli indirizzi dei wallet. Questi sono gli indirizzi ufficiali di due stablecoin molto usate, presi dalle pagine degli emittenti:
| Rete | Token | Indirizzo del contratto | Formato |
|---|---|---|---|
| Ethereum | USDT (ERC-20) | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | 0x + 40 caratteri esadecimali |
| Ethereum | USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 0x + 40 caratteri esadecimali |
| Base | USDC | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0x + 40 caratteri esadecimali |
| Arbitrum One | USDC | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 | 0x + 40 caratteri esadecimali |
| Polygon PoS | USDC | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | 0x + 40 caratteri esadecimali |
| Tron | USDT (TRC-20) | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t | 34 caratteri base58check che iniziano con T |
| Solana | USDC (mint address) | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | da 32 a 44 caratteri base58 |
Le voci di Ethereum, Base, Arbitrum e Polygon vengono dalla lista degli indirizzi dei contratti USDC di Circle, quelle di USDT dalla pagina dei protocolli supportati di Tether. USDC ha un indirizzo diverso su ogni chain: lo stesso nome non significa lo stesso contratto. Le lettere maiuscole e minuscole di un indirizzo EVM formano un checksum definito in EIP-55; la forma tutta minuscola è lo stesso indirizzo, ed explorer e wallet accettano entrambe.
Su Bitcoin non esistono indirizzi dei contratti. Un indirizzo Bitcoin che inizia con 3 o bc1 può codificare uno script, ma a quell'indirizzo non vive nessun programma da chiamare. Il concetto appartiene alle chain basate su account come Ethereum, Tron e Solana.
4. Indirizzo del contratto e indirizzo del wallet: qual è la differenza?
Su una chain EVM i due sono identici all'aspetto, quindi la distinzione sta in cosa controlla l'indirizzo.
| Indirizzo del wallet (account di proprietà esterna) | Indirizzo del contratto | |
|---|---|---|
| Controllato da | Una chiave privata, di solito derivata da una seed phrase | Il codice del contratto; non esiste una chiave privata |
| Può avviare una transazione | Sì | No. Viene eseguito solo quando una transazione o un altro contratto lo chiama |
| Contiene codice | No, a meno che non deleghi a del codice tramite EIP-7702 | Sì, più il proprio storage |
| Come viene creato | Gratis: derivato da una chiave pubblica, senza bisogno di una transazione | Da una transazione di deploy che paga il gas |
| Uso tipico | Ricevere fondi, firmare transazioni | Token, exchange, pool di lending, collezioni NFT, bridge |
| Su un block explorer | Mostrato come un indirizzo normale | Etichettato come contratto, con una tab Contract |
L'unica zona grigia è EIP-7702, attivo su Ethereum dall'upgrade Pectra di maggio 2025. Permette a un indirizzo del wallet di associarsi del codice delegato, così da raggruppare più chiamate o lasciare che qualcun altro paghi le sue commissioni. La chiave controlla ancora l'account e l'account può ancora inviare transazioni, quindi resta un indirizzo del wallet con del codice associato.
Per distinguerli, apri l'indirizzo su un block explorer: un contratto ha una tab Contract, un indirizzo del creatore e, se il sorgente è stato pubblicato, il codice verificato. Nel codice, il metodo JSON-RPC eth_getCode restituisce il bytecode memorizzato a un indirizzo, e solo 0x per un indirizzo del wallet. La guida a Etherscan mostra dove si trova ciascuna di queste tab.
5. Come viene generato un indirizzo del contratto?
L'indirizzo viene calcolato, non scelto, e ogni chain ha la propria regola:
- Ethereum e chain EVM (CREATE)
- L'indirizzo è costituito dagli ultimi 20 byte dell'hash Keccak-256 dell'indirizzo di chi fa il deploy e del suo nonce, cioè il conteggio delle transazioni inviate da quell'indirizzo. Fare il deploy due volte dallo stesso account dà due indirizzi diversi, perché nel frattempo il nonce è avanzato.
- Ethereum e chain EVM (CREATE2)
- Un contratto può deployare un altro contratto a un indirizzo calcolato dal proprio indirizzo, da un salt che sceglie e dall'hash del codice di creazione: keccak256(0xff ++ address ++ salt ++ keccak256(init_code))[12:]. L'indirizzo è noto prima che venga deployato qualsiasi cosa, ed è così che un contratto può comparire allo stesso indirizzo su molte chain.
- Tron
- Un indirizzo Tron è formato da 21 byte con un 0x41 iniziale, mostrati come 34 caratteri base58check che iniziano con T. Gli indirizzi dei contratti usano lo stesso formato degli indirizzi dei wallet e derivano dall'ID della transazione di deploy e dall'indirizzo di chi fa il deploy.
- Solana
- L'indirizzo di un programma è la chiave pubblica dell'account che ne conserva il codice eseguibile. Un token è identificato dall'indirizzo del suo mint account, che appartiene al Token Program. Il wallet che possiede il token riceve un token account separato per ogni mint.
Le regole sono nella documentazione sugli account di ethereum.org, in EIP-1014 per CREATE2, nel riferimento sugli account di Tron e nella documentazione sui token di Solana.
6. Un indirizzo del token è la stessa cosa di un indirizzo del contratto?
Sulle chain EVM sì. L'indirizzo del token è l'indirizzo del contratto del token, e wallet, explorer ed exchange usano i due nomi per la stessa stringa. Aggiungere un token personalizzato a un wallet significa incollare quell'indirizzo; il wallet legge poi il simbolo e il numero di decimali dal contratto stesso, ed è per questo che un indirizzo sbagliato mostra un token sbagliato invece di un errore.
Due casi hanno bisogno di un identificativo in più. Un NFT è identificato dall'indirizzo del contratto della collezione più un token ID, dato che un solo contratto contiene l'intera collezione. Su Solana l'indirizzo del token è il mint address, e il saldo che possiedi vive in un token account legato al tuo wallet, non al mint.
7. Come trovo l'indirizzo del contratto di un token?
Prendilo da una fonte controllata dall'emittente, poi confermalo su un explorer.
- Il sito o la documentazione dell'emittente
- Gli emittenti di stablecoin, i protocolli e la maggior parte dei progetti pubblicano i propri indirizzi per ogni chain. Circle e Tether mantengono una pagina ciascuno per USDC e USDT, e le voci della tabella qui sopra vengono da lì.
- CoinMarketCap e CoinGecko
- La pagina del token elenca l'indirizzo del contratto per ogni chain sotto Contracts, con un pulsante per copiarlo e un link all'explorer.
- Un block explorer
- Cerca il nome del token su Etherscan, BscScan, Polygonscan, Tronscan o Solscan. Gli explorer contrassegnano il token consolidato e mostrano il numero di holder; una copia con lo stesso nome e dieci holder è un token diverso.
- Il tuo wallet o exchange
- I wallet mostrano l'indirizzo nella schermata dei dettagli del token. Gli exchange lo mostrano nelle pagine di deposito e prelievo, insieme alla rete a cui l'indirizzo appartiene.
Copia la stringa intera e annota insieme a essa la rete. Un indirizzo USDC di Base non significa nulla su Arbitrum, e un explorer mostra un indirizzo vuoto se lo cerchi sulla chain sbagliata.
8. Come verifico che un indirizzo del contratto sia legittimo?
Il nome e il simbolo di un token sono testo libero nel contratto, quindi chiunque può deployare un secondo USDC. Questi controlli separano il contratto vero dalle copie:
- Confrontalo con l'emittente
- L'indirizzo deve essere identico, carattere per carattere, a quello sul sito o nella documentazione dell'emittente. Confronta più dei primi e degli ultimi caratteri; gli indirizzi sosia vengono generati proprio per avere in comune quelli.
- Cerca il codice sorgente verificato
- Su Etherscan e sugli explorer simili la tab Contract mostra se chi ha fatto il deploy ha pubblicato il sorgente e se l'explorer lo ha ricompilato ottenendo lo stesso bytecode (verified). Un bytecode non verificato è un segnale d'allarme per qualsiasi token molto usato.
- Controlla holder, età e attività
- Il contratto di una stablecoin vera ha milioni di trasferimenti e anni di storia. Un contratto deployato la settimana scorsa con una manciata di holder e nessun sorgente verificato è un token diverso, qualunque sia il suo nome.
- Leggi le regole del token
- Explorer e scanner di token segnalano i contratti il cui owner può fare mint liberamente, mettere in pausa i trasferimenti, cambiare le commissioni o bloccare la vendita. Un contratto proxy mantiene il suo indirizzo ma può sostituire la propria implementazione, quindi controlla chi controlla l'upgrade.
- Verifica la chain
- Lo stesso progetto ha indirizzi diversi su chain diverse, quindi assicurati che explorer, wallet e fonte si riferiscano tutti alla stessa rete.
La guida a Etherscan illustra la tab Contract e le viste Read Contract e Write Contract usate per questi controlli.
9. Posso inviare crypto a un indirizzo del contratto?
Puoi, e il risultato dipende dal contratto. Depositare in un pool di lending, comprare su un exchange decentralizzato o fare il mint di un NFT funzionano tutti inviando una transazione a un contratto, di solito con una chiamata di funzione allegata, tramite un wallet o una dApp che conosce l'interfaccia del contratto.
Inviare token all'indirizzo del contratto del token stesso è l'errore da evitare. Lo standard ERC-20 definisce funzioni di trasferimento, approvazione e saldo e nulla che permetta al contratto di restituire i token, quindi le monete inviate per errore a un contratto token sono normalmente perse, a meno che l'emittente non abbia previsto una funzione di recupero e accetti di usarla. Lo stesso vale per la maggior parte dei contratti mai progettati per ricevere semplici trasferimenti: alcuni li rifiutano, altri li accettano in silenzio.
Quando un exchange o una persona chiede un deposito, ti dà un indirizzo del wallet. Quando un protocollo vuole che tu interagisca, la dApp costruisce la transazione per te. Se ti ritrovi a incollare l'indirizzo del contratto di un token nel campo del destinatario di un trasferimento, fermati e controlla cosa stai facendo.
10. Un indirizzo del contratto è lo stesso su ogni blockchain?
No, a meno che chi ha fatto il deploy non l'abbia fatto apposta. La tabella USDC qui sopra mostra quattro indirizzi diversi su quattro chain EVM per lo stesso asset, perché ogni deploy è stato una transazione separata da un account con un nonce diverso. Le versioni bridged di un token, spesso etichettate con un suffisso come .e, hanno i propri indirizzi, quindi un explorer può mostrare più di un token chiamato USDC su una stessa rete.
Indirizzi identici su più chain sono possibili tramite CREATE2, oppure ritrasmettendo la stessa transazione di deploy firmata da un account nuovo su ogni chain. Multicall3, un contratto di supporto usato da wallet e librerie, si trova a 0xcA11bde05977b3631167028862bE2a173976CA11 su più di cento chain per questo motivo, come la sua lista dei deploy dimostra. La maggior parte dei token non viene deployata in questo modo, quindi cerca l'indirizzo sulla chain che stai usando.
Se non sei sicuro a quale rete sia connesso un wallet, la lista dei chain ID associa ogni chain ID alla sua rete e al suo explorer.
11. Controllare un indirizzo nel codice
Un'applicazione che permette agli utenti di incollare l'indirizzo di un token o di un destinatario dovrebbe validarne il formato prima di costruire una transazione. L'SDK ChainGate valida gli indirizzi per Bitcoin, Ethereum, Litecoin, Dogecoin, Bitcoin Cash e qualsiasi rete EVM tu registri, e rifiuta un indirizzo EVM il cui checksum (le maiuscole e le minuscole) non corrisponde:
import { ChainGate, isValidEvmAddress } from 'chaingate';
const cg = new ChainGate({ apiKey: process.env.CHAINGATE_API_KEY });
// Format checks: true for a well-formed address, false otherwise
cg.networks.ethereum.isValidAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7'); // true (USDT contract)
cg.networks.ethereum.isValidAddress('0xD8DA6bf26964af9d7eed9e03e53415d37aa96045'); // false (EIP-55 checksum does not match)
isValidEvmAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'); // true (USDC contract)
// Bitcoin: validate and classify the address type
cg.networks.bitcoin.isValidAddress('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4'); // true
cg.networks.bitcoin.identifyAddressType('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4'); // 'segwit-p2wpkh'La validazione del formato dice che la stringa è un indirizzo ben formato; non dice se lì vive del codice. Per quello, chiama eth_getCode su un endpoint RPC: un contratto restituisce il suo bytecode e un indirizzo del wallet restituisce 0x. La documentazione sulla validazione degli indirizzi elenca ogni rete supportata e i tipi di indirizzo Bitcoin che l'SDK riconosce.
12. Dove andare da qui
Un indirizzo del contratto ti dice con quale programma stai parlando, un hash di transazione ti dice quale chiamata hai fatto, e la guida a Etherscan mostra come leggere entrambi su un explorer. Ogni chiamata a un contratto costa gas, e il gas tracker mostra quanto costa in questo momento su ogni rete. Se vuoi che validazione degli indirizzi, saldi e trasferimenti siano gestiti su Bitcoin, Ethereum e le altre reti da un unico SDK, ChainGate lo fa.
Domande frequenti
Cos'è un indirizzo del contratto (contract address) in crypto?
L'indirizzo blockchain di uno smart contract: un programma deployato da una transazione, con un proprio storage e senza chiave privata. Token, exchange decentralizzati, pool di lending e collezioni NFT sono contratti, quindi ognuno ha un indirizzo del contratto. Su Ethereum e sulle altre chain EVM è 0x seguito da 40 caratteri esadecimali, lo stesso formato di un indirizzo del wallet.
Cosa significa CA in crypto?
CA è l'abbreviazione di contract address, l'indirizzo del contratto. Le persone lo pubblicano accanto al nome di un token perché nomi e ticker non sono unici mentre l'indirizzo lo è. Su Solana il CA è il mint address del token; su Ethereum, BNB Chain o Base è l'indirizzo del contratto del token.
Un indirizzo del contratto è la stessa cosa di un indirizzo del wallet?
No. Un indirizzo del wallet è controllato da una chiave privata e può avviare transazioni. Un indirizzo del contratto è controllato dal codice deployato a quell'indirizzo, non ha una chiave privata e agisce solo quando una transazione lo chiama. Sulle chain EVM entrambi hanno lo stesso formato 0x, quindi li distingui su un block explorer, dove i contratti hanno una tab Contract, oppure con la chiamata RPC eth_getCode, che restituisce 0x per un indirizzo del wallet.
Che aspetto ha un indirizzo del contratto?
Ethereum, BNB Chain, Polygon, Arbitrum, Base e altre chain EVM: 0x più 40 caratteri esadecimali, per esempio USDT a 0xdAC17F958D2ee523a2206206994597C13D831ec7. Tron: 34 caratteri base58check che iniziano con T, per esempio USDT a TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Solana: un mint address in base58 da 32 a 44 caratteri, per esempio USDC a EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.
Come trovo l'indirizzo del contratto di un token?
Prendilo dal sito o dalla documentazione dell'emittente, oppure dalla sezione Contracts della pagina del token su CoinMarketCap o CoinGecko, poi confermalo sul block explorer della stessa chain: codice sorgente verificato, un gran numero di holder e una lunga cronologia di trasferimenti contraddistinguono il contratto vero. I wallet mostrano l'indirizzo nella schermata dei dettagli del token e gli exchange nelle pagine di deposito.
Come faccio a sapere se un indirizzo è un contratto?
Aprilo su un block explorer. La pagina di un contratto mostra una tab Contract, l'indirizzo del creatore e, se pubblicato, il codice sorgente verificato. Nel codice, il metodo RPC eth_getCode restituisce il bytecode per un contratto e 0x per un indirizzo del wallet.
Posso inviare token a un indirizzo del contratto?
Solo quando il contratto è progettato per riceverli, come un pool di lending o un exchange, e di solito tramite una dApp che allega la chiamata di funzione giusta. Inviare token all'indirizzo del contratto del token stesso normalmente li fa perdere, perché lo standard ERC-20 non ha una funzione per restituirli. I depositi sugli exchange e i pagamenti alle persone vanno sempre a un indirizzo del wallet.
Cos'è un indirizzo del token?
L'indirizzo del contratto dello smart contract del token. Wallet, explorer ed exchange usano indirizzo del token e indirizzo del contratto per la stessa stringa. Su Solana l'indirizzo del token è il mint address; un NFT è identificato dall'indirizzo del contratto della sua collezione più un token ID.
Un indirizzo del contratto è lo stesso su tutte le chain?
Non per impostazione predefinita. USDC ha un indirizzo diverso su Ethereum, Base, Arbitrum e Polygon perché ogni deploy è una transazione separata. I progetti possono ottenere indirizzi identici su molte chain tramite CREATE2 o ritrasmettendo lo stesso deploy firmato, come fa Multicall3, ma dovresti sempre cercare l'indirizzo sulla chain che stai usando.
Uno smart contract ha una chiave privata?
No. Un account contratto è controllato dal suo codice. Se il codice include funzioni riservate all'owner, l'owner è un indirizzo separato, di solito un wallet o un multisig, che possiede le proprie chiavi. Un contratto la cui proprietà è stata rinunciata (renounced) non ha nessuno che possa modificarlo.
Costruisci con ChainGate
Porta queste idee nel codice — ChainGate ti dà wallet, transazioni e RPC gestito per Ethereum e più di 20 altre blockchain in un’unica libreria.