Structures de données JSON courantes pour les méthodes RPC Solana

Diverses méthodes RPC Solana renvoient des réponses plus complexes sous forme d'objets JSON structurés, remplis de valeurs associées à des clés spécifiques.

Les structures de données JSON les plus courantes comprennent :

Transactions

Les transactions sont très différentes de celles sur d'autres blockchains. Assurez-vous de consulter Anatomie d'une transaction pour en savoir plus sur les transactions sur Solana.

JSON

La structure JSON d'une transaction est définie comme suit :

  • message: <object> - Définit le contenu de la transaction.
    • accountKeys: <array[string]> - Liste des clés publiques encodées en base-58 utilisées par la transaction, y compris par les instructions et pour les signatures. Les message.header.numRequiredSignatures premières clés publiques doivent signer la transaction.
    • header: <object> - Détaille les types de compte et les signatures requises par la transaction.
      • numRequiredSignatures: <number> - Le nombre total de signatures requises pour rendre la transaction valide. Les signatures doivent correspondre aux numRequiredSignatures premières clés de message.accountKeys.
      • numReadonlySignedAccounts: <number> - Les numReadonlySignedAccounts dernières clés signées sont des comptes en lecture seule. Les programmes peuvent traiter plusieurs transactions qui chargent des comptes en lecture seule dans une seule entrée PoH, mais ne sont pas autorisés à créditer ou débiter des lamports ou à modifier les données du compte. Les transactions ciblant le même compte en lecture-écriture sont évaluées séquentiellement.
      • numReadonlyUnsignedAccounts: <number> - Les numReadonlyUnsignedAccounts dernières clés non signées sont des comptes en lecture seule.
    • recentBlockhash: <string> - Un hachage encodé en base-58 d'un bloc récent dans le registre utilisé pour empêcher la duplication des transactions et pour donner aux transactions une durée de vie.
    • instructions: <array[object]> - Liste des instructions de programme qui seront exécutées en séquence et validées en une transaction atomique si toutes réussissent.
      • programIdIndex: <number> - Index dans le tableau message.accountKeys indiquant le compte de programme qui exécute cette instruction.
      • accounts: <array[number]> - Liste d'indices ordonnés dans le tableau message.accountKeys indiquant quels comptes transmettre au programme.
      • data: <string> - Les données d'entrée du programme encodées dans une chaîne base-58.
    • addressTableLookups: <array[object]|undefined> - Liste des recherches dans les tables d'adresses utilisées par une transaction pour charger dynamiquement des adresses à partir de tables de recherche d'adresses sur la chaîne. Non défini si maxSupportedTransactionVersion n'est pas défini.
      • accountKey: <string> - clé publique encodée en base-58 pour un compte de table de recherche d'adresses.
      • writableIndexes: <array[number]> - Liste d'indices utilisés pour charger des adresses de comptes modifiables à partir d'une table de recherche.
      • readonlyIndexes: <array[number]> - Liste d'indices utilisés pour charger des adresses de comptes en lecture seule à partir d'une table de recherche.
  • signatures: <array[string]> - Une liste de signatures encodées en base-58 appliquées à la transaction. La liste est toujours de longueur message.header.numRequiredSignatures et non vide. La signature à l'index i correspond à la clé publique à l'index i dans message.accountKeys. La première est utilisée comme identifiant de transaction.

JSON analysé

La structure JSON analysée d'une transaction suit une structure similaire au format JSON standard, avec une analyse supplémentaire des informations de compte et d'instruction :

  • message: <object> - Définit le contenu de la transaction.
    • accountKeys: <array[object]> - Liste des informations de compte utilisées par la transaction.
      • pubkey: <string> - La clé publique du compte encodée en base-58.
      • signer: <boolean> - Indique si le compte est un signataire requis pour la transaction.
      • writable: <boolean> - Indique si le compte est modifiable.
      • source: <string> - Source du compte (transaction ou table de recherche).
    • recentBlockhash: <string> - Un hachage encodé en base-58 d'un bloc récent dans le registre, utilisé pour empêcher la duplication des transactions et pour donner une durée de vie aux transactions.
    • instructions: <array[object]> - Liste des instructions de programme analysées.
      • program: <string> - Le nom du programme appelé.
      • programId: <string> - La clé publique du programme encodée en base-58.
      • stackHeight: <number|null> - La hauteur de pile de l'instruction.
      • parsed: <object> - Données analysées spécifiques au programme.
        • type: <string> - Le type d'instruction (par exemple, "transfer").
        • info: <object> - Informations d'instruction analysées spécifiques au programme et au type d'instruction.
  • signatures: <array[string]> - Une liste de signatures encodées en base-58 appliquées à la transaction.

Métadonnées d'état de transaction

  • err: <object|null> - Erreur si la transaction a échoué, null si la transaction a réussi. Définitions de TransactionError
  • fee: <u64> - frais facturés pour cette transaction, sous forme d'entier u64
  • preBalances: <array> - tableau des soldes de compte u64 avant que la transaction ne soit traitée
  • postBalances: <array> - tableau des soldes de compte u64 après que la transaction a été traitée
  • innerInstructions: <array|null> - Liste des instructions internes ou null si l'enregistrement des instructions internes n'était pas activé pendant cette transaction
  • preTokenBalances: <array|undefined> - Liste des soldes de jetons avant que la transaction ne soit traitée ou omise si l'enregistrement des soldes de jetons n'était pas encore activé pendant cette transaction
  • postTokenBalances: <array|undefined> - Liste des soldes de jetons après que la transaction a été traitée ou omise si l'enregistrement des soldes de jetons n'était pas encore activé pendant cette transaction
  • logMessages: <array|null> - tableau de messages de journal sous forme de chaînes ou null si l'enregistrement des messages de journal n'était pas activé pendant cette transaction
  • rewards: <array|null> - récompenses au niveau de la transaction ; un tableau d'objets JSON contenant :
    • pubkey: <string> - La clé publique, sous forme de chaîne encodée en base-58, du compte qui a reçu la récompense
    • lamports: <i64>- nombre de lamports de récompense crédités ou débités par le compte, sous forme de i64
    • postBalance: <u64> - solde du compte en lamports après l'application de la récompense
    • rewardType: <string|undefined> - type de récompense : "fee", "rent", "voting", "staking"
    • commission: <u8|undefined> - commission du compte de vote lorsque la récompense a été créditée, présente uniquement pour les récompenses de vote et de staking
  • DÉPRÉCIÉ : status: <object> - État de la transaction
    • "Ok": <null> - La transaction a réussi
    • "Err": <ERR> - La transaction a échoué avec TransactionError
  • loadedAddresses: <object|undefined> - Adresses de transaction chargées depuis des tables de recherche d'adresses. Non défini si maxSupportedTransactionVersion n'est pas défini dans les paramètres de la requête, ou si l'encodage jsonParsed est défini dans les paramètres de la requête.
    • writable: <array[string]> - Liste ordonnée d'adresses encodées en base-58 pour les comptes chargés modifiables
    • readonly: <array[string]> - Liste ordonnée d'adresses encodées en base-58 pour les comptes chargés en lecture seule
  • returnData: <object|undefined> - les données de retour les plus récentes générées par une instruction dans la transaction, avec les champs suivants :
    • programId: <string> - le programme qui a généré les données de retour, sous forme de Pubkey encodée en base-58
    • data: <[string, encoding]> - les données de retour elles-mêmes, sous forme de données binaires encodées en base-64
  • computeUnitsConsumed: <u64|undefined> - nombre d' unités de calcul consommées par la transaction
  • version: <"legacy"|number|undefined> - Version de la transaction. Non défini si maxSupportedTransactionVersion n'est pas défini dans les paramètres de la requête.
  • signatures: <array> - présent si des "signatures" sont demandées pour les détails de la transaction ; un tableau de chaînes de signatures, correspondant à l'ordre des transactions dans le bloc

Instructions internes

L'environnement d'exécution de Solana enregistre les instructions inter-programmes qui sont invoquées pendant le traitement des transactions et les rend disponibles pour une plus grande transparence sur ce qui a été exécuté sur la chaîne par instruction de transaction. Les instructions invoquées sont regroupées par l'instruction de transaction d'origine et sont listées dans l'ordre de traitement.

La structure JSON des instructions internes est définie comme une liste d'objets dans la structure suivante :

  • index: number - Index de l'instruction de transaction à partir de laquelle les instructions internes sont originaires
  • instructions: <array[object]> - Liste ordonnée des instructions de programme internes qui ont été invoquées pendant une seule instruction de transaction.
    • programIdIndex: <number> - Index dans le tableau message.accountKeys indiquant le compte de programme qui exécute cette instruction.
    • accounts: <array[number]> - Liste d'indices ordonnés dans le tableau message.accountKeys indiquant quels comptes transmettre au programme.
    • data: <string> - Les données d'entrée du programme encodées dans une chaîne base-58.

Soldes de jetons

La structure JSON des soldes de jetons est définie comme une liste d'objets dans la structure suivante :

  • accountIndex: <number> - Index du compte pour lequel le solde de jetons est fourni.
  • mint: <string> - Pubkey de l'émission du jeton.
  • owner: <string|undefined> - Pubkey du propriétaire du solde de jetons.
  • programId: <string|undefined> - Pubkey du programme Token qui possède le compte.
  • uiTokenAmount: <object> -
    • amount: <string> - Montant brut de jetons sous forme de chaîne, ignorant les décimales.
    • decimals: <number> - Nombre de décimales configurées pour l'émission du jeton.
    • uiAmount: <number|null> - Montant du jeton sous forme de nombre à virgule flottante, tenant compte des décimales. OBSOLÈTE
    • uiAmountString: <string> - Montant du jeton sous forme de chaîne, tenant compte des décimales.

Is this page helpful?

Table des matières

Modifier la page