Strutture di dati JSON comuni per i metodi RPC di Solana

Vari metodi RPC di Solana restituiranno risposte più complesse come oggetti JSON strutturati, contenenti valori specifici associati a chiavi.

Le strutture di dati JSON più comuni includono:

Transazioni

Le transazioni sono molto diverse da quelle su altre blockchain. Assicurati di consultare Anatomia di una transazione per conoscere le transazioni su Solana.

JSON

La struttura JSON di una transazione è definita come segue:

  • message: <object> - Definisce il contenuto della transazione.
    • accountKeys: <array[string]> - Elenco di chiavi pubbliche codificate in base-58 utilizzate dalla transazione, incluse quelle per le istruzioni e per le firme. Le prime message.header.numRequiredSignatures chiavi pubbliche devono firmare la transazione.
    • header: <object> - Specifica i tipi di account e le firme richieste dalla transazione.
      • numRequiredSignatures: <number> - Il numero totale di firme necessarie per rendere valida la transazione. Le firme devono corrispondere alle prime numRequiredSignatures di message.accountKeys.
      • numReadonlySignedAccounts: <number> - Le ultime numReadonlySignedAccounts delle chiavi firmate sono account di sola lettura. I programmi possono elaborare più transazioni che caricano account di sola lettura all'interno di una singola voce PoH, ma non possono accreditare o addebitare lamport o modificare i dati dell'account. Le transazioni che puntano allo stesso account in lettura-scrittura vengono valutate sequenzialmente.
      • numReadonlyUnsignedAccounts: <number> - Le ultime numReadonlyUnsignedAccounts delle chiavi non firmate sono account di sola lettura.
    • recentBlockhash: <string> - Un hash codificato in base-58 di un blocco recente nel registro utilizzato per prevenire la duplicazione delle transazioni e per dare alle transazioni un tempo di vita limitato.
    • instructions: <array[object]> - Elenco di istruzioni di programma che verranno eseguite in sequenza e confermate in un'unica transazione atomica se tutte hanno successo.
      • programIdIndex: <number> - Indice nell'array message.accountKeys che indica l'account del programma che esegue questa istruzione.
      • accounts: <array[number]> - Elenco di indici ordinati nell'array message.accountKeys che indicano quali account passare al programma.
      • data: <string> - I dati di input del programma codificati in una stringa base-58.
    • addressTableLookups: <array[object]|undefined> - Elenco di ricerche nella tabella degli indirizzi utilizzate da una transazione per caricare dinamicamente indirizzi dalle tabelle di ricerca degli indirizzi on-chain. Non definito se maxSupportedTransactionVersion non è impostato.
      • accountKey: <string> - Chiave pubblica codificata in base-58 per un account di tabella di ricerca degli indirizzi.
      • writableIndexes: <array[number]> - Elenco di indici utilizzati per caricare indirizzi di account scrivibili da una tabella di ricerca.
      • readonlyIndexes: <array[number]> - Elenco di indici utilizzati per caricare indirizzi di account di sola lettura da una tabella di ricerca.
  • signatures: <array[string]> - Un elenco di firme codificate in base-58 applicate alla transazione. L'elenco ha sempre lunghezza message.header.numRequiredSignatures e non è mai vuoto. La firma all'indice i corrisponde alla chiave pubblica all'indice i in message.accountKeys. La prima viene utilizzata come ID transazione.

JSON analizzato

La struttura JSON analizzata di una transazione segue una struttura simile al formato JSON regolare, con l'analisi aggiuntiva delle informazioni relative agli account e alle istruzioni:

  • message: <object> - Definisce il contenuto della transazione.
    • accountKeys: <array[object]> - Elenco delle informazioni degli account utilizzati dalla transazione.
      • pubkey: <string> - La chiave pubblica dell'account codificata in base-58.
      • signer: <boolean> - Indica se l'account è un firmatario obbligatorio della transazione.
      • writable: <boolean> - Indica se l'account è scrivibile.
      • source: <string> - Origine dell'account (transazione o tabella di ricerca).
    • recentBlockhash: <string> - Un hash codificato in base-58 di un blocco recente nel registro utilizzato per prevenire la duplicazione delle transazioni e per dare alle transazioni un tempo di vita.
    • instructions: <array[object]> - Elenco delle istruzioni di programma analizzate.
      • program: <string> - Il nome del programma chiamato.
      • programId: <string> - La chiave pubblica del programma codificata in base-58.
      • stackHeight: <number|null> - L'altezza dello stack dell'istruzione.
      • parsed: <object> - Dati analizzati specifici del programma.
        • type: <string> - Il tipo di istruzione (es. "transfer").
        • info: <object> - Informazioni sull'istruzione analizzata specifiche per il programma e il tipo di istruzione.
  • signatures: <array[string]> - Un elenco di firme codificate in base-58 applicate alla transazione.

Metadati dello stato della transazione

  • err: <object|null> - Errore se la transazione è fallita, null se la transazione è riuscita. Definizioni di TransactionError
  • fee: <u64> - commissione addebitata per questa transazione, come intero u64
  • preBalances: <array> - array dei saldi degli account u64 prima che la transazione fosse elaborata
  • postBalances: <array> - array dei saldi degli account u64 dopo che la transazione è stata elaborata
  • innerInstructions: <array|null> - Elenco di istruzioni interne o null se la registrazione delle istruzioni interne non era abilitata durante questa transazione
  • preTokenBalances: <array|undefined> - Elenco di saldi token prima che la transazione fosse elaborata o omesso se la registrazione del saldo token non era ancora abilitata durante questa transazione
  • postTokenBalances: <array|undefined> - Elenco di saldi token dopo che la transazione è stata elaborata o omesso se la registrazione del saldo token non era ancora abilitata durante questa transazione
  • logMessages: <array|null> - array di messaggi di log di stringa o null se la registrazione dei messaggi di log non era abilitata durante questa transazione
  • rewards: <array|null> - ricompense a livello di transazione; un array di oggetti JSON contenenti:
    • pubkey: <string> - La chiave pubblica, come stringa codificata in base-58, dell'account che ha ricevuto la ricompensa
    • lamports: <i64>- numero di lamport di ricompensa accreditati o addebitati dall'account, come i64
    • postBalance: <u64> - saldo dell'account in lamport dopo che la ricompensa è stata applicata
    • rewardType: <string|undefined> - tipo di ricompensa: "fee", "rent", "voting", "staking"
    • commission: <u8|undefined> - commissione dell'account di voto quando la ricompensa è stata accreditata, presente solo per le ricompense di voto e staking
  • DEPRECATO: status: <object> - Stato della transazione
    • "Ok": <null> - La transazione è stata completata con successo
    • "Err": <ERR> - La transazione è fallita con TransactionError
  • loadedAddresses: <object|undefined> - Indirizzi della transazione caricati dalle tabelle di ricerca degli indirizzi. Non definito se maxSupportedTransactionVersion non è impostato nei parametri della richiesta, o se la codifica jsonParsed è impostata nei parametri della richiesta.
    • writable: <array[string]> - Elenco ordinato di indirizzi codificati in base-58 per account caricati scrivibili
    • readonly: <array[string]> - Elenco ordinato di indirizzi codificati in base-58 per account caricati in sola lettura
  • returnData: <object|undefined> - i dati di ritorno più recenti generati da un'istruzione nella transazione, con i seguenti campi:
    • programId: <string> - il programma che ha generato i dati di ritorno, come Pubkey codificata in base-58
    • data: <[string, encoding]> - i dati di ritorno stessi, come dati binari codificati in base-64
  • computeUnitsConsumed: <u64|undefined> - numero di unità di calcolo consumate dalla transazione
  • version: <"legacy"|number|undefined> - Versione della transazione. Non definito se maxSupportedTransactionVersion non è impostato nei parametri della richiesta.
  • signatures: <array> - presente se vengono richieste "signatures" per i dettagli della transazione; un array di stringhe di firme, corrispondenti all'ordine della transazione nel blocco

Istruzioni interne

Il runtime di Solana registra le istruzioni cross-program che vengono invocate durante l'elaborazione delle transazioni e le rende disponibili per una maggiore trasparenza su ciò che è stato eseguito on-chain per ogni istruzione di transazione. Le istruzioni invocate sono raggruppate dall'istruzione di transazione originaria e sono elencate in ordine di elaborazione.

La struttura JSON delle istruzioni interne è definita come un elenco di oggetti nella seguente struttura:

  • index: number - Indice dell'istruzione di transazione da cui le istruzioni interne hanno avuto origine
  • instructions: <array[object]> - Elenco ordinato di istruzioni interne del programma che sono state invocate durante una singola istruzione di transazione.
    • programIdIndex: <number> - Indice nell'array message.accountKeys che indica l'account del programma che esegue questa istruzione.
    • accounts: <array[number]> - Elenco di indici ordinati nell'array message.accountKeys che indica quali account passare al programma.
    • data: <string> - I dati di input del programma codificati in una stringa base-58.

Saldi dei token

La struttura JSON dei saldi dei token è definita come un elenco di oggetti nella seguente struttura:

  • accountIndex: <number> - Indice dell'account per il quale viene fornito il saldo del token.
  • mint: <string> - Pubkey del mint del token.
  • owner: <string|undefined> - Pubkey del proprietario del saldo del token.
  • programId: <string|undefined> - Pubkey del Token Program che possiede l'account.
  • uiTokenAmount: <object> -
    • amount: <string> - Importo grezzo dei token come stringa, ignorando i decimali.
    • decimals: <number> - Numero di decimali configurati per il mint del token.
    • uiAmount: <number|null> - Importo del token come float, tenendo conto dei decimali. DEPRECATO
    • uiAmountString: <string> - Importo del token come stringa, tenendo conto dei decimali.

Is this page helpful?

Indice

Modifica Pagina