Trasferimento molti a molti su Solana
Trasferimenti appaiati su Solana: una transazione per riga, 0,001 SOL per trasferimento e la regola del rent che salta una riga invece di limarla.

Ci sono tre modi di muovere molti pagamenti in una volta su Solana, e vengono confusi di continuo. Un multi-sender paga una lista da un solo wallet. Un collector raccoglie molti wallet dentro uno. Poi c'è il caso che nessuno dei due sa esprimere.
Un trasferimento molti a molti su Solana tiene ogni wallet mittente con il proprio destinatario. Il wallet 1 paga l'indirizzo 1, il wallet 40 paga l'indirizzo 40, e le due righe non si toccano mai.
Sembra un dettaglio. È la differenza fra una sorgente e quaranta sorgenti indipendenti.
- Una riga è una transazione, e il wallet mittente paga tutte le sue voci.
- Commissione di piattaforma 0,001 SOL per trasferimento, commissione di rete 0,000005 SOL.
- Un destinatario che non ha mai tenuto quel token aggiunge 0,00149 SOL di deposito rent.
- Le righe che non passano vengono saltate, non limate.
Tre forme di trasferimento massivo
Lo strumento di invio multiplo fa uno verso molti. Un wallet, una lista di destinatari, un pagatore. È la forma di un airdrop.
Il raccoglitore a lotti fa molti verso uno. Venti wallet, una destinazione, e alla fine tutto sta in un posto solo.
Lo strumento molti a molti è la terza forma, e l'unica che conosce le coppie. La riga uno ha la sua sorgente, la riga due ne ha un'altra. Nessuna cassa comune e nessuna compensazione fra righe.
Quanto costa una riga
Su una riga possono comparire tre voci, e il wallet mittente di quella riga le paga tutte e tre. Non c'è un conto di finanziamento condiviso, quindi un wallet che non copre la propria riga non prende in prestito da quella sopra. La voce di rete è la commissione base di 5.000 lamport per firma che la documentazione delle commissioni di Solana spiega per intero.
| Voce | Modalità SOL | Modalità token |
|---|---|---|
| Commissione di piattaforma | 0,001 SOL | 0,001 SOL |
| Commissione di rete | 0,000005 SOL | 0,000005 SOL |
| Account token del destinatario | non si applica | 0,00149 SOL, e solo se quel destinatario non ha mai tenuto questo token |
Rileggi la terza riga, perché è quella che sorprende. Mandare un token SPL a un indirizzo che non l'ha mai toccato significa creare un account che lo contenga, e Solana chiede un deposito rent per quell'account. Il deposito è molto più alto della commissione di rete.
Su cento destinatari nuovi i depositi valgono circa 0,149 SOL, mentre la commissione di piattaforma si ferma a 0,1. Il deposito non viene bruciato: resta nell'account token del destinatario e torna a chi chiuderà quell'account più avanti. Se il destinatario ha già il token, la voce sparisce del tutto. Lo strumento controlla tutti gli account di destinazione in una sola chiamata prima di firmare, quindi la stima che vedi è quella che paghi.
Le righe che vengono saltate
Prima della firma girano due controlli, e tutti e due fermano la riga invece di cambiarla.
Il primo è aritmetica semplice. Se il wallet mittente non copre il suo importo più le commissioni più un eventuale account token da aprire, la riga viene segnata e lasciata stare. Non parte niente a metà.
Il secondo è più strano e vale la pena capirlo, perché la prima volta sembra un difetto. Solana non lascia un account con un saldo sopra lo zero ma sotto il minimo esente da rent. Per un wallet normale quel minimo è 0,00065 SOL, e viene dalla formula riportata nella documentazione degli account di Solana.
Svuotare del tutto un account è consentito. Lasciarci dentro 0,00005 SOL no. Una riga che spinge un wallet in quell'intervallo viene marcata come rent dust e non viene inviata.
Perché non limare l'importo e basta
L'alternativa sarebbe tagliare l'importo finché ci sta, e sarebbe peggio. Hai scritto una cifra. Uno strumento che ne manda un'altra senza dirtelo è uno strumento con cui poi non riesci a riconciliare nessun foglio di calcolo.
Manda invece il saldo intero, oppure abbassa l'importo così che il resto superi il minimo.
Una transazione per riga, e perché conta
Siccome ogni riga è una transazione a sé, una riga fallita cade da sola. In un lotto che impila tutto dentro una transazione, un errore alla riga 30 si porta via anche le altre 29.
Questo ha un costo: quaranta coppie sono quaranta firme e quaranta commissioni di rete da 0,000005 SOL, una voce su cui non vale la pena ottimizzare. In cambio ottieni un risultato che si legge riga per riga. Per sapere a che velocità entrano quelle transazioni, i numeri stanno nell'articolo sulla priority fee.
Quando un trasferimento molti a molti su Solana è la forma giusta
La rotazione dei wallet è la risposta onesta per la maggior parte dei casi. Hai un gruppo di wallet con uno storico che preferisci lasciarti alle spalle, ne generi un gruppo nuovo con il generatore di wallet in blocco, e vuoi che il vecchio wallet 7 finanzi il nuovo wallet 7 e nient'altro.
Il secondo caso è una lista di pagamenti dove il pagatore cambia riga per riga. Più progetti, più casse, un foglio solo. Un multi-sender non riesce a esprimerlo, perché ha esattamente una sorgente.
Il terzo è la redistribuzione dopo uno snapshot, dove ogni holder viene pagato da un wallet che gli hai già assegnato. Come si legge quella distribuzione prima di distribuire sta nella guida sulla distribuzione degli holder.
Preparare la lista
Fai la prima passata con due righe. La tabella dei risultati dice quanto è costata davvero una riga, depositi di account token compresi, prima di mandare tutta la lista.
Controlla anche se i destinatari hanno già il token. Su una lista composta per metà da holder esistenti la voce dei depositi si dimezza, e su cento righe vale ancora più o meno quanto la commissione di piattaforma.
Annota infine quale wallet paga quale riga. Dopo la passata quella corrispondenza si ricostruisce peggio di quanto sembri adesso, soprattutto se i mittenti sono appena stati generati e non hanno ancora uno storico che li distingua.
Un ultimo punto sul saldo: lascia in ogni mittente qualcosa sopra il suo importo. Tarato al centesimo, il controllo del rent scarta la riga e tocca rifinanziare, ed è più lento che aver tenuto un margine fin dall'inizio.
Domande frequenti sul trasferimento appaiato
In cosa cambia rispetto a lanciare il multi-sender più volte?
Il multi-sender ha esattamente una sorgente per passata. Quaranta sorgenti sono quaranta passate e quaranta cambi manuali di wallet. Qui è una passata con quaranta righe.
Una riga fallita costa qualcosa?
Dipende da dove si ferma. Una riga che non passa il controllo preventivo non viene mai firmata, quindi niente commissione di rete né di piattaforma. Una riga firmata, inviata e poi fallita sulla catena paga la commissione di rete, come ogni transazione Solana fallita. Quella di piattaforma è un'istruzione nella stessa transazione e non si salda se il trasferimento non va a buon fine.
Mittenti e destinatari possono sovrapporsi?
Sì. Un wallet può inviare su una riga e ricevere su un'altra. Ogni riga viene controllata per conto suo.
Perché la mia riga risulta rent dust?
Perché il resto nel wallet mittente sarebbe finito fra zero e 0,00065 SOL. Manda il saldo intero o abbassa l'importo.
Serve SOL in un wallet che invia soltanto token?
Sì. La commissione di rete e quella di piattaforma si pagano in SOL anche quando il trasferimento riguarda un token.
C'è un numero massimo di coppie?
Non c'è un massimo fisso, e niente ti impedisce di incollare migliaia di coppie. Vengono firmate e inviate a lotti di cento e confermate a gruppi fino a 256, con un tetto di novanta secondi per ogni attesa di conferma, quindi una passata lunga richiede qualche minuto. Una passata che puoi seguire è una passata che puoi correggere, perciò una lista molto lunga si gestisce meglio in più passate brevi. Il limite vero è la preparazione: ogni wallet mittente deve essere finanziato prima.
Come decidere in una riga
Se il tuo foglio ha una colonna per il pagatore, questa è la forma che serve. Se tutte le righe partono dallo stesso wallet, prendi il multi-sender e paga una volta invece di quaranta. E se una riga non parte, guarda prima il minimo di rent invece di dare per scontato un difetto. Su quel minimo c'è altro nella spiegazione dell'errore insufficient funds for rent.
Un articolo del team di J Tools.
Vedi tutti gli articoli di J Tools Editorial →

