Solana API: pagamenti SOL e token SPL via REST
Crea indirizzi Solana e sposta SOL e token SPL con semplici chiamate REST. Niente web3.js e nessun SDK da installare.
Una Solana API non dovrebbe imporre un SDK JavaScript sul tuo backend. Chaingateway avvolge Solana in semplice REST: crei indirizzi e invii token SPL con due richieste POST, e una GET restituisce l'altezza di blocco corrente. L'autenticazione è un Bearer token nell'header Authorization. Le risposte sono JSON. Il tuo backend PHP, Go o Java parla con Solana esattamente come parla con qualsiasi altro servizio HTTP.
La prova dura 7 giorni e non richiede KYC. Crea una API key e fai la tua prima richiesta prima che arrivi il prossimo blocco.
Una capacità per endpoint
I provider RPC strutturano la loro documentazione Solana per capacità: accesso al nodo qui, streaming là, webhook in un terzo posto. La superficie Solana di Chaingateway è deliberatamente più piccola, perché è un'API di pagamenti anziché un servizio nodo general-purpose. Mappata allo stesso modo, appare così:
| Capacità | Endpoint | Stato |
|---|---|---|
| Creare indirizzi | POST /api/v2/solana/addresses | Attivo |
| Inviare SOL | POST /api/v2/solana/transactions | Attivo |
| Inviare token SPL | POST /api/v2/solana/transactions/SPL | Attivo |
| Verificare i saldi | GET /api/v2/solana/balances/{address} | Attivo |
| Leggere lo stato della chain | GET /api/v2/solana/blocks/number | Attivo |
| Webhook di deposito | — | Non ancora disponibile su Solana; pattern di polling sotto |
Ogni endpoint prende lo stesso Bearer token, e l'header X-Network: testnet commuta qualsiasi richiesta sull'ambiente di test. Gli schemi di richiesta e risposta sono nella documentazione API.
Transazioni semplici
Invia SOL e token SPL con un semplice payload JSON. Solana produce blocchi in ben meno di un secondo, quindi un pagamento di solito si conferma mentre il tuo utente sta ancora guardando l'indicatore di caricamento.
Gestione sicura degli indirizzi
Gli indirizzi Solana sono chiavi pubbliche a 32 byte codificate in base58, e l'API le valida prima che venga costruita qualsiasi transazione. L'architettura è non-custodial: le key dei tuoi fondi appartengono a te.
Query decodificate
I dati delle transazioni tornano come JSON strutturato invece che blob codificati in base64. I trasferimenti di token sono leggibili senza toccare i dati di istruzione grezzi.
Webhook (IPN)
Onestà prima di tutto: i webhook non sono ancora disponibili per Solana. Traccia i depositi tramite polling invece; GET /api/v2/solana/blocks/number ti dice quando arrivano nuovi blocchi così puoi calibrare i tuoi controlli, e GET /api/v2/solana/balances/{address} risponde se è arrivato qualcosa. Su Ethereum, BSC, Polygon, Arbitrum, TRON e Bitcoin, i webhook di deposito sono attivi già oggi.
Solana via REST, senza web3.js
La via ufficiale verso Solana è JSON-RPC, documentata su solana.com/docs/rpc. Espone il protocollo del nodo: metodi come getLatestBlockhash e sendTransaction, più una libreria client per renderli utilizzabili. Per inviare un token SPL in quel modo, il tuo codice recupera un blockhash recente prima che scada, risolve l'associated token account del destinatario (creandolo se non esiste ancora), poi costruisce, firma e serializza la transazione. In JavaScript, web3.js e il pacchetto spl-token fanno questo per te. In ogni altro linguaggio, sei in gran parte da solo.
Chaingateway sostituisce tutto ciò con un'unica chiamata HTTP. L'API risolve i token account e costruisce la transazione lato server, e il tuo backend non importa mai un SDK Solana. Se vuoi accesso grezzo alla chain per analytics o programmi personalizzati, un provider RPC è lo strumento giusto. Per i pagamenti, REST è più breve, e il codice più breve ha meno posti dove rompersi.
Mint, token account e ATA: perché i trasferimenti su Solana sono diversi
Se vieni da Ethereum, BSC o Polygon, la parte di Solana che più probabilmente ti coglierà di sorpresa non è la velocità o le commissioni. È il modello degli account.
Il modello EVM
Un saldo di token è una voce all'interno dello storage proprio del contratto del token. Il tuo indirizzo "possiede" USDT perché la tabella interna del contratto lo dice. Inviare token a un wallet completamente nuovo aggiunge solo una riga a quella tabella; il destinatario non deve esistere on-chain in alcun modo speciale.
Il modello Solana
Solana divide la stessa idea in account separati. Un token è definito dal suo mint account, che memorizza supply e decimali. I saldi vivono in token account, uno per ogni combinazione di wallet e mint, e la variante standard è l'associated token account (ATA): il suo indirizzo è derivato in modo deterministico dall'indirizzo del wallet e dall'indirizzo del mint. Il tuo wallet non contiene USDC. Possiede un account separato che contiene USDC.
Due conseguenze per i pagamenti
- Un ATA deve esistere prima che i token possano arrivarvi. Se il tuo destinatario non ha mai posseduto il token, l'account deve essere creato on-chain, e la creazione richiede un deposito per renderlo rent-exempt: 0,00203928 SOL a metà 2026, secondo la documentazione ufficiale di Solana. In pratica la transazione del mittente crea e finanzia l'account mancante.
- I trasferimenti spostano valore tra token account, non tra indirizzi wallet. Il codice che punta ingenuamente all'indirizzo wallet fallisce, motivo per cui l'istruzione di trasferimento SPL richiede entrambi i token account più il mint e i suoi decimali per la verifica.
Questa contabilità è esattamente ciò che Chaingateway fa lato server. Tu passi indirizzi wallet e un token mint; l'API deriva i token account e costruisce un trasferimento valido. Il tuo backend non impara mai cos'è un program-derived address, ed è proprio questo il punto.
REST contro web3.js: lo stesso trasferimento, due volte
Ecco come appare l'invio di 10 USDC con web3.js e il pacchetto spl-token:
import { Connection, PublicKey } from "@solana/web3.js";
import {
getOrCreateAssociatedTokenAccount,
transferChecked,
} from "@solana/spl-token";
const connection = new Connection("https://your-rpc-endpoint");
const usdc = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const senderAta = await getOrCreateAssociatedTokenAccount(
connection, payer, usdc, payer.publicKey
);
const recipientAta = await getOrCreateAssociatedTokenAccount(
connection, payer, usdc, new PublicKey(recipient)
);
await transferChecked(
connection, payer,
senderAta.address, usdc, recipientAta.address,
payer, 10_000_000, 6 // 10 USDC at 6 decimals
);Una sola chiamata invece della contabilità ATA di sopra — crea un account e provala su devnet.
Quickstart: tre richieste per il tuo primo trasferimento SPL
Crea un indirizzo:
curl -X POST https://app.chaingateway.io/api/v2/solana/addresses \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY"curl https://app.chaingateway.io/api/v2/solana/blocks/number \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY"curl -X POST https://app.chaingateway.io/api/v2/solana/transactions/SPL \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contractaddress": "TokenMintAddress",
"from": "YourSenderAddress",
"to": "RecipientAddress",
"amount": 10,
"privatekey": "YourSenderPrivateKey"
}'Solana in numeri
I numeri sotto sono verificati sulla documentazione ufficiale di Solana a inizio luglio 2026.
Uno slot, la finestra in cui un validatore può produrre un blocco, è configurato a circa 400 millisecondi e oscilla tra circa 400 e 600 millisecondi nella pratica. Questa cadenza è il motivo per cui il polling dei depositi ogni uno o due secondi non resta mai troppo indietro rispetto alla chain.
La commissione base di transazione è di 5.000 lamport per firma, pari a 0,000005 SOL. Metà viene bruciata, metà va al produttore del blocco. Sopra di essa c'è una commissione di priorità opzionale, prezzata in micro-lamport per unità di calcolo; per default è zero e compra preferenza di scheduling quando la rete è occupata. Per un carico di lavoro di pagamento la lettura pratica è semplice: le commissioni sono così piccole da scomparire nel tuo margine anche su una transazione da un dollaro.
Conferma e finalità sono cose diverse su Solana, e la distinzione conta per come accrediti i depositi. Una transazione è tipicamente confermata, cioè una supermaggioranza di validatori ha votato sul suo blocco, entro un secondo o due. La finalità completa richiede circa 12,8 secondi a metà 2026. L'upgrade di consenso Alpenglow, previsto per fine 2026, punta a comprimere la finalità a circa 100-150 millisecondi; trattalo come un piano annunciato piuttosto che una proprietà già attiva finché non viene rilasciato. Una policy sensata oggi: accredita i pagamenti piccoli alla conferma, trattieni quelli grandi per quella dozzina di secondi extra fino alla finalità.
Tracciare i depositi senza webhook
Solana non ha ancora un endpoint webhook di deposito sull'API di Chaingateway. Il rilevamento fa invece polling su due chiamate: GET /api/v2/solana/blocks/number per tracciare i nuovi blocchi e GET /api/v2/solana/balances/{address} per verificare fondi in arrivo. Con slot sotto il secondo, un intervallo di polling di due secondi mostra comunque un pagamento come ricevuto entro pochi secondi.
Un ciclo di polling disciplinato è economico da eseguire. Memorizza l'altezza di blocco elaborata l'ultima volta, e ogni volta che avanza, controlla i tuoi indirizzi di deposito — o GET /api/v2/solana/balances/{address}/tokens/{mint} per un token SPL specifico — e confronta ciò che trovi con gli ordini aperti.
Il costo di latenza è inferiore a quanto sembri. Solana produce blocchi in meno di un secondo, quindi anche un intervallo di polling di due secondi significa che un cliente vede "pagato" entro pochi secondi dall'invio. L'intero ciclo è poche decine di righe in qualsiasi linguaggio e gira come un cron job o un worker in background. Quando in seguito estendi lo stesso flusso a una chain con webhook, la contabilità resta identica; cambia solo il trigger, da pull a push.
Accettare USDC su Solana: un esempio svolto
USDC è il canale di pagamento che ha reso Solana una rete di liquidazione, quindi merita un percorso concreto. L'indirizzo mint su mainnet è EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, emesso da Circle; qualsiasi altra cosa che dichiari di essere USDC non lo è.
Il lato ricevente: quando un cliente effettua il checkout, crea un nuovo indirizzo con POST /api/v2/solana/addresses e memorizzalo insieme all'ordine. Mostra l'indirizzo e l'importo, e lascia che il cliente paghi da qualsiasi wallet o exchange. Il tuo ciclo di polling della sezione precedente rileva il trasferimento in entrata, abbina l'indirizzo ricevente all'ordine, e lo segna come pagato. Con slot da 400 millisecondi, il divario tra "il cliente ha premuto invia" e "il tuo database dice pagato" è di pochi secondi, per lo più il tuo stesso intervallo di polling.
Registra la firma di transazione di ogni deposito accreditato con un vincolo di unicità. I cicli di polling vengono riavviati, riempiti retroattivamente ed eseguiti di nuovo, e l'idempotenza a livello di database fa sì che nulla di tutto ciò possa accreditare un ordine due volte.
Il lato pagante lo rispecchia. Un pagamento è una singola chiamata POST /api/v2/solana/transactions/SPL con il mint USDC come contractaddress e un "amount": 10 leggibile; l'API applica per te i sei decimali di USDC. Mantieni un saldo SOL modesto sull'indirizzo mittente: 0,000005 SOL per firma per le commissioni, più 0,00203928 SOL ogni volta che va creato il token account di un destinatario. Entrambi gli importi sono abbastanza piccoli che un unico saldo ricaricato copre mesi di pagamenti.
Ciò che ottieni rispetto ai circuiti carta è la liquidazione in secondi senza meccanismo di chargeback, e ciò a cui rinunci è la capacità di annullare un errore. La validazione degli indirizzi che l'API esegue prima di costruire una transazione è tua alleata qui, ma conta altrettanto la tua stessa schermata di conferma.
Invia e ricevi qualsiasi token su Solana, incluso il tuo
SPL è lo standard token di Solana, e l'API tratta ogni mint SPL allo stesso modo. USDC e USDT funzionano immediatamente, con i decimali applicati automaticamente. Se hai coniato un tuo token, passa il suo mint address allo stesso endpoint e si comporta come i principali. Poiché Chaingateway usa un'unica struttura di endpoint tra le chain, il codice Solana sopra si trasferisce a Ethereum, BSC o Polygon scambiando il segmento chain e il suffisso token nell'URL: /solana/transactions/SPL diventa /ethereum/transactions/erc20.
Perché gli sviluppatori scelgono Solana
Solana esegue le transazioni in parallelo anziché rigorosamente una dopo l'altra, ed è da lì che deriva il suo throughput. Le commissioni sono abbastanza piccole da rendere economico pagare importi minimi, e la conferma è abbastanza veloce da permettere a una pagina di checkout di semplicemente aspettarla. Il volume USDC su Solana ha trasformato la chain in una seria rete di liquidazione, e lo slancio degli sviluppatori attorno a essa ha retto attraverso diversi cicli di mercato.
Testnet, devnet e l'header X-Network
Solana gestisce due cluster di test pubblici, e i nomi confondono le persone. Devnet è il sandbox quotidiano per gli sviluppatori di applicazioni: SOL gratuito è disponibile tramite airdrop da faucet, e nulla su di esso ha valore. Testnet esiste principalmente perché validatori e contributor principali esercitino nuove release sotto carico. Se hai usato Sepolia di Ethereum, devnet è l'equivalente più vicino nello spirito.
Con Chaingateway non gestisci affatto URL di cluster. Aggiungi l'header X-Network: testnet a qualsiasi richiesta e viene eseguita contro l'ambiente di test; rimuovilo e la richiesta identica è una chiamata mainnet. Non c'è una seconda API key né un account separato.
Usa l'esecuzione di test per gli scenari che fanno male su mainnet: un pagamento verso un indirizzo che non ha mai posseduto il token (il percorso di creazione token account), un riavvio del tuo ciclo di polling a metà, e un invio duplicato dello stesso pagamento. Ciascuno di questi richiede minuti per essere provato e ciascuno è un incidente reale se lo incontri per la prima volta in produzione.
Quando le richieste falliscono
L'API riporta i problemi come semplici codici di stato HTTP, quindi nulla della tua gestione degli errori deve essere specifico di Solana.
Un 401 significa che il Bearer token manca o è sbagliato. Gli errori nell'intervallo 4xx sono fallimenti di validazione, come un indirizzo che non si decodifica come base58 o un campo mancante; il corpo JSON dice cosa correggere, e ritentare senza cambiare il payload è inutile. Un 429 significa che hai raggiunto il rate limit del tuo piano; rallenta, e calibra il polling dei depositi sul battito dell'altezza di blocco anziché su un ciclo serrato. I piani con limiti più alti sono nella pagina prezzi.
Gli errori server nell'intervallo 5xx sono sicuri da ritentare per le letture. Per gli invii di token, sii più cauto: dopo un timeout non sai se il trasferimento è stato trasmesso, e Solana qui non ha ancora una traccia webhook. Controlla i tuoi record e i trasferimenti recenti dell'indirizzo prima di inviare di nuovo, e mantieni una riga di database per ogni pagamento previsto così che una riesecuzione del tuo worker non possa inviare due volte.
Registra il corpo completo della risposta accanto alla tua richiesta. I codici di stato e gli schemi di errore per endpoint sono nella documentazione API.
Costruito per ogni caso d'uso
Il pattern più comune è l'accettazione di pagamenti: assegna a ogni cliente un indirizzo di deposito, fai polling dei trasferimenti SPL in entrata e segna l'ordine come pagato, con liquidazione in secondi e commissioni troppo piccole per contare nel calcolo del margine. Il secondo pattern sono le operazioni wallet: piattaforme che gestiscono depositi e prelievi per molti utenti attraverso la stessa manciata di endpoint.
Gli stessi blocchi costruttivi gestiscono l'automazione dei pagamenti per airdrop e lanci di token, trasferimenti ricorrenti per la fatturazione di abbonamenti, e pagamenti transfrontalieri dove l'alternativa è una catena di banche corrispondenti che richiede giorni e trattiene punti percentuali.
Integrazione in tre passaggi
Ottieni la tua API key. Registrati e la key appare subito nel tuo pannello. La prova di 7 giorni non richiede KYC.
Fai la tua prima richiesta. Il quickstart copre l'autenticazione e la tua prima chiamata.
Configura il tracciamento dei depositi e vai in produzione. Su Solana questo significa fare polling sul battito dell'altezza di blocco; sulle altre chain puoi passare ai webhook. Una volta funzionante, rimuovi l'header X-Network: testnet e lo stesso codice gira su mainnet.
Cosa funziona su quale chain
Solana è l'unica chain ancora priva di webhook di deposito, da cui il trattino in quella colonna più in basso in questa pagina. Ecco come si confronta il quadro completo degli endpoint tra tutte e sette le chain.
| Chain | Indirizzi | Trasferimenti di token | Webhook di deposito |
|---|---|---|---|
| Bitcoin | POST /api/v2/bitcoin/wallets/{wallet}/addresses | — (nessuno standard token) | GET /api/v2/bitcoin/webhooks/notifications |
| Ethereum | POST /api/v2/ethereum/addresses/import | ERC-20: POST /api/v2/ethereum/transactions/erc20 | GET /api/v2/ethereum/webhooks/notifications |
| TRON | POST /api/v2/tron/addresses/import | TRC-20 e TRC-10: POST /api/v2/tron/transactions/trc20 e .../trc10 | GET /api/v2/tron/webhooks/notifications |
| Solana | POST /api/v2/solana/addresses | SPL: POST /api/v2/solana/transactions/SPL | — |
| BNB Smart Chain | POST /api/v2/bsc/addresses/import | BEP-20: POST /api/v2/bsc/transactions/bep20 | GET /api/v2/bsc/webhooks/notifications |
| Polygon | POST /api/v2/polygon/addresses/import | ERC-20: POST /api/v2/polygon/transactions/erc20 | GET /api/v2/polygon/webhooks/notifications |
| Arbitrum | POST /api/v2/arbitrum/addresses/import | ERC-20: POST /api/v2/arbitrum/transactions/erc20 | GET /api/v2/arbitrum/webhooks/notifications |
Due note a piè di pagina per leggere correttamente la tabella. Primo: TRON è l'integrazione più profonda della piattaforma. Oltre alle rotte sopra, la documentazione tratta lo staking (POST /api/v2/tron/freeze e /delegate), i parametri di chain, e una coppia di self-signing — /transactions/trc20/build per costruire una transazione e /transactions/broadcast per inviarne una firmata localmente. Se il tuo team compliance insiste che le private key non lascino mai i tuoi server, quel pattern build-and-broadcast è la tua via d'ingresso.
Secondo: un trattino significa che la documentazione attuale non riporta alcuna rotta v2 per quella cella, non che la rete sia di serie B. Bitcoin non ha uno standard token, da cui la cella token vuota — il BTC nativo funziona invece con il proprio modello wallet: crea un wallet protetto da password con POST /api/v2/bitcoin/wallets, deriva indirizzi di deposito sotto di esso, e invia con POST /api/v2/bitcoin/transactions. La documentazione di Solana copre creazione indirizzi, trasferimenti SOL e SPL, e query su saldo e blocco, ma non ancora i webhook. Per qualsiasi cosa non elencata qui, la documentazione API ha lo stato attuale.
Domande frequenti
Pronto a integrare Solana?
Crea il tuo account, copia la API key e invia un trasferimento SPL sulla rete di test nei prossimi dieci minuti. Il riferimento completo degli endpoint è su /docs/, e il portale sviluppatori ha tutorial per i flussi di pagamento più comuni.