PoH, account model, SPL token, DeFi, Anchor e perché ogni tanto la rete si ferma.
Spiegato senza "Ethereum killer", senza TPS inventati, con i downtime contati.
"65.000 transazioni al secondo." — In laboratorio. Con vento favorevole. E solo un validatore.
E perché non è semplicemente "Ethereum più veloce"
Il problema di tutte le blockchain è il consenso: come fanno migliaia di nodi a concordare sull'ordine delle transazioni senza fidarsi l'uno dell'altro? Bitcoin e Ethereum usano il tempo reale come riferimento — ma i nodi si devono comunque aspettare e coordinarsi.
Proof of History (PoH) risolve il problema in modo diverso: crea una fonte di tempo crittograficamente verificabile integrata nella blockchain stessa. I validatori non devono aspettarsi — sanno già l'ordine degli eventi. Risultato: blocchi ogni 400ms, throughput reale di migliaia di tx/secondo su mainnet.
Il prezzo: hardware validatore molto più costoso, architettura più complessa, e centralizzazione maggiore rispetto a Ethereum.
SHA-256 applicato ricorsivamente crea un "orologio" crittografico. Dimostra che il tempo è passato senza coordinamento esterno.
Runtime parallelo: esegue smart contract in parallelo se non toccano gli stessi account. Ethereum è single-thread, Solana è multi-thread.
Le transazioni vengono inoltrate al validatore previsto prima che il blocco corrente sia chiuso. Riduce il mempool e la latenza.
La differenza architettonica più importante rispetto a Ethereum
In Ethereum un contratto combina codice + storage nello stesso indirizzo. In Solana è tutto separato: i Program account contengono solo bytecode (immutabile), i Data account contengono solo dati, e sono di proprietà del programma che li gestisce.
Ogni account ha un owner (il programma che può modificarlo), un saldo in lamport (1 SOL = 10⁹ lamport), e un campo data di dimensione fissa stabilita alla creazione.
Ogni account occupa spazio sullo stato del validatore. Solana addebita un rent proporzionale alla dimensione. In pratica quasi tutti gli account sono rent-exempt: se tieni almeno il minimo di lamport (calcolato sulla dimensione), non paghi niente e l'account vive per sempre.
# Minimo rent-exempt per un account da 165 byte (token account) solana rent 165 Rent per byte-year: 0.00000348 SOL Rent per epoch: 0.000002439 SOL Minimum balance for rent exemption: 0.00203928 SOL # Quindi creare un nuovo token account costa ~0.002 SOL una tantum # Chiudendo l'account recuperi i lamport
Più simili a una chiamata di funzione che a un trasferimento
# Una transazione Solana contiene: { signatures: [firma1, firma2, ...], # una per ogni signer message: { recentBlockhash: "Abc123...", # blockhash recente (~60s di validità) accountKeys: [...], # tutti gli account coinvolti (dichiarati in anticipo!) instructions: [ # una o più istruzioni { programId: "TokenkegQfeZy...", # quale program chiamare accounts: [idx1, idx2, ...], # indici in accountKeys data: "..." # parametri codificati } ] } }
Un limite storico di Solana: max 32 account per transazione. Per operazioni DeFi complesse (swap con molti pool) questo era un problema.
La soluzione: Address Lookup Tables (ALT) — tabelle on-chain di indirizzi che le transazioni possono referenziare per indice compresso. Una tx versioned può così toccare centinaia di account usando pochi byte di indice. Jupiter (l'aggregatore DeFi) le usa per routing multi-hop.
Bassissime. Finché non vuoi essere incluso velocemente.
# Fee base: 5000 lamport per firma (~0.000005 SOL) # Con SOL a 150$: ~0.00075$ per transazione # Compute Units (CU): equivalente del gas di Ethereum # Default budget: 200.000 CU per istruzione # Ogni operazione consuma CU (addizione: 1, sha256: 100+, ...) # Priority fee (dal 2022): paghi di più per saltare la coda # Fee aggiuntiva = microlamport per CU × CU usati # Durante congestione (NFT drop, memecoin mania) la priority fee # può esplodere — da 0 a milioni di microlamport per CU # Best practice: impostare compute budget esplicito ComputeBudgetProgram.setComputeUnitLimit({ units: 100_000 }) ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 10_000 })
Come su Ethereum, ma con qualche dettaglio diverso
# Solana usa Ed25519 (non secp256k1 come Bitcoin/Ethereum) # Chiave privata: 64 byte (32 seed + 32 pubkey) # Indirizzo: Base58 della chiave pubblica (32 byte) 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Solana CLI — generare un keypair solana-keygen new --outfile ~/.config/solana/id.json solana-keygen pubkey ~/.config/solana/id.json # Keypair come array JSON (formato file) # [174,47,154,16,202,193,206,113,...] — 64 byte # QUESTO FILE È LA TUA CHIAVE PRIVATA — non condividerlo mai # Vanity address (inizia con un prefisso) solana-keygen grind --starts-with SOL:1
| Wallet | Note |
|---|---|
| Phantom | Il più diffuso. Browser extension + mobile. Buona UX, supporta NFT, token, staking. |
| Solflare | Alternativa solida. Supporta hardware wallet Ledger nativamente. |
| Backpack | Wallet di xNFT Protocols. Supporta "xNFT" — app che girano dentro il wallet. |
| Ledger | Hardware wallet. Richiede app Solana installata e Solflare come interfaccia. |
| Solana CLI | Per sviluppatori e automazione. Nessuna GUI. |
L'equivalente di ERC-20, ma con l'account model di Solana
Su Ethereum ogni token ERC-20 è un contratto separato con la sua mappa address → balance. Su Solana tutti i fungible token usano lo stesso programma — il Token Program (o il nuovo Token-2022).
Ogni token ha un Mint account (definisce il token: decimali, supply, chi può mintare). Ogni utente che vuole tenere quel token ha un Associated Token Account (ATA) separato — un account derivato deterministicamente da (wallet_address, mint_address).
# Creare un nuovo token (Mint) spl-token create-token Creating token 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU # Creare un token account per te spl-token create-account 7xKXtg2CW87... # Mintare token spl-token mint 7xKXtg2CW87... 1000000 # Trasferire token spl-token transfer 7xKXtg2CW87... 100 DESTINATARIO # --fund-recipient crea l'ATA del destinatario se non esiste # Vedere i tuoi token spl-token accounts # Chiudere un token account vuoto (recupera il rent ~0.002 SOL) spl-token close --address TOKEN_ACCOUNT_ADDR
Versione aggiornata del Token Program con funzionalità estese:
Fee basse, velocità alta, rug pull democratici per tutti
Aggregatore DEX. Trova il miglior prezzo tra tutti i DEX di Solana. Il punto di partenza per qualsiasi swap.
AMM + order book ibrido. CLMM (concentrated liquidity). Il DEX storico di Solana.
AMM con Whirlpools (concentrated liquidity). UX semplice, buona liquidità per le coppie principali.
Lending e borrowing. Depositi collaterale, prendi in prestito. Liquidazioni automatiche se il collaterale scende.
Liquid staking. Depositi SOL, ricevi mSOL (che cresce di valore rispetto a SOL). Usabile in DeFi mentre stai staking.
Launchpad memecoin. Chiunque crea un token in 30 secondi. Bonding curve, rug pull facilitato. L'anarchia in forma di UI.
Solana è diventata la chain principale per i memecoin, in gran parte per via di pump.fun: un sito che permette di creare un token in 30 secondi, con una bonding curve integrata che gestisce la liquidità iniziale.
Metaplex, compressed NFT e il mercato che ha sopravvissuto al 2022
Non esiste uno standard ERC-721 come su Ethereum. Gli NFT Solana usano lo standard Metaplex: ogni NFT è un SPL Token con supply = 1 e decimali = 0, con un Metadata account che punta a un JSON con nome, immagine, attributi.
# Struttura di un NFT Solana (semplificata) Mint Account # supply=1, decimals=0, mint authority=null (frozen) └── Token Account # il tuo wallet tiene 1 unità di questo token └── Metadata Account # gestito da Metaplex Token Metadata Program ├── name: "DeGod #1234" ├── symbol: "DGOD" ├── uri: "https://..." # punta al JSON con immagine e attributi ├── creators: [...] # lista creator con percentuale royalty └── seller_fee_basis_points: 500 # 5% royalty (non enforced on-chain)
Il problema degli NFT normali: ogni NFT crea 3-4 account on-chain → costa ~0.012 SOL per NFT. Per una collection da 10.000 pezzi: 120 SOL solo di rent.
La soluzione: Compressed NFT usa un Merkle tree per comprimere milioni di NFT in un singolo account. Mintare 1 milione di cNFT costa circa 50 SOL invece di 12.000. Il tradeoff è che la proof di ownership richiede dati off-chain (via Helius o simili).
Rust + Anchor. Più complesso di Solidity, più potente.
| Tool | Ruolo |
|---|---|
| Rust | Linguaggio nativo per i program Solana. Compilato a BPF bytecode. |
| Anchor | Framework che astrae la complessità di Rust + Solana. IDL generato automaticamente, client TypeScript incluso. Quello che Hardhat è per Ethereum. |
| Solana CLI | Deploy, airdrop su devnet, gestione keypair, interazione con la chain. |
| Solana Web3.js | Libreria JavaScript per interagire con la chain dal frontend. |
| @solana/spl-token | Libreria JS per interazioni con SPL Token. |
| Helius / QuickNode | RPC provider con API avanzate (webhooks, indexing, cNFT support). |
// Program in Rust + Anchor use anchor_lang::prelude::*; declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"); #[program] pub mod counter { use super::*; pub fn initialize(ctx: Context<Initialize>) -> Result<()> { ctx.accounts.counter.count = 0; Ok(()) } pub fn increment(ctx: Context<Increment>) -> Result<()> { ctx.accounts.counter.count += 1; Ok(()) } } // Definizione degli account richiesti da ogni istruzione #[derive(Accounts)] pub struct Initialize<'info> { #[account(init, payer = user, space = 8 + 8)] pub counter: Account<'info, Counter>, #[account(mut)] pub user: Signer<'info>, pub system_program: Program<'info, System>, } #[derive(Accounts)] pub struct Increment<'info> { #[account(mut)] pub counter: Account<'info, Counter>, } // Struttura dati dell'account #[account] pub struct Counter { pub count: u64, }
# Setup sh -c "$(curl -sSfL https://release.solana.com/stable/install)" cargo install --git https://github.com/coral-xyz/anchor anchor-cli # Creare e buildare un progetto Anchor anchor init mio-programma cd mio-programma && anchor build anchor test # lancia un validator locale, deploya, esegue i test TypeScript # Deploy su devnet solana config set --url devnet solana airdrop 2 # SOL gratis su devnet per i test anchor deploy # Interagire dal CLI solana balance solana transaction-history INDIRIZZO solana account PROGRAM_ID
| Rete | Uso | Come ottenere SOL |
|---|---|---|
| Localnet | Validator locale sul tuo PC. Zero latenza, reset istantaneo, ideale per sviluppo attivo. | solana airdrop 500 — illimitato in locale |
| Devnet | Rete di test condivisa, simile a mainnet. Dati persistono tra sessioni. La più usata per testing. | solana airdrop 2 (CLI) oppure faucet.solana.com |
| Testnet | Usata per testare release del validator client. Instabile, non per sviluppo dApp normale. | faucet.solana.com (limitato) |
| Mainnet-beta | La rete reale. SOL valgono soldi. Ancora "beta" nel nome per ragioni storiche. | compri SOL |
# Scegliere la rete solana config set --url localhost # localnet solana config set --url devnet # devnet solana config set --url mainnet-beta # mainnet solana config get # mostra configurazione corrente # Avviare un validator locale solana-test-validator # --reset → pulisce lo stato al riavvio # --clone PROGRAM → clona un programma da mainnet/devnet in locale # --url devnet → fork da devnet (come anvil --fork su Ethereum) # Airdrop SOL su devnet/localnet solana airdrop 2 # 2 SOL al tuo wallet solana airdrop 2 INDIRIZZO # a un indirizzo specifico # Su devnet il CLI è limitato a 2 SOL per volta — usa il faucet web per di più # Faucet alternativi: faucet.solana.com, faucet.quicknode.com/solana/devnet
Come funziona il consenso e come guadagnare reward
Solana usa PoS (con PoH come orologio). I validatori sono selezionati per proporre blocchi proporzionalmente al loro stake totale (proprio + delegato da altri). Ogni epoch dura ~2-3 giorni.
Il problema dello staking normale: i SOL in stake non sono usabili in DeFi durante il cooldown. Il liquid staking risolve questo: depositi SOL, ricevi un token liquido (mSOL, JitoSOL, bSOL) che cresce di valore rispetto a SOL man mano che si accumulano i reward.
| Protocollo | Token | Note |
|---|---|---|
| Marinade | mSOL | Il più grande. Distribuisce stake tra ~100 validatori. APY ~7%. |
| Jito | JitoSOL | Aggiunge MEV reward allo staking. APY leggermente più alto. |
| BlazeStake | bSOL | Focus su decentralizzazione — favorisce validatori piccoli. |
Stessi rischi di Ethereum, più qualche specialità della casa
| Rischio | Descrizione |
|---|---|
| Missing owner check | Il program non verifica che l'account passato sia effettivamente di proprietà del program atteso. Chiunque può passare un account finto. |
| Missing signer check | Il program non verifica che un account abbia firmato la transazione. Qualsiasi utente può impersonare l'admin. |
| Arithmetic overflow | Rust in modalità release non panicha sull'overflow — usa checked_add/checked_mul sempre in codice finanziario. |
| Token-2022 estensioni malevole | Transfer fee nascosta, permanent delegate del creatore. Leggi le estensioni prima di comprare. |
| Fake token account | Passare un token account di una mint diversa da quella attesa. Sempre verificare la mint del token account. |
Attenzione
Buone pratiche
Il kit per muoversi nell'ecosistema senza improvvisare
Solana vince quando hai bisogno di fee basse per molte transazioni, velocità sotto il secondo, o stai costruendo qualcosa che Ethereum L1 non può fare per costi (cNFT da milioni di pezzi, gaming on-chain, orderbook su chain).
Ethereum vince quando hai bisogno di massima decentralizzazione e sicurezza, compatibilità con l'ecosistema EVM più grande del mondo, o stai gestendo somme dove il rischio di downtime è inaccettabile.
Non sono in competizione — risolvono problemi diversi con tradeoff diversi. Chi vi dice che "X ucciderà Y" sta vendendo qualcosa.