Veelvoorkomende JSON-datastructuren voor Solana RPC-methoden
Verschillende Solana RPC-methoden geven complexere antwoorden terug als gestructureerde JSON- objecten, gevuld met specifieke sleutel-waardeparen.
De meest voorkomende van deze JSON-datastructuren zijn onder andere:
Transacties
Transacties zijn behoorlijk anders dan die op andere blockchains. Bekijk zeker Anatomie van een transactie om meer te leren over transacties op Solana.
JSON
De JSON-structuur van een transactie is als volgt gedefinieerd:
message: <object>- Definieert de inhoud van de transactie.accountKeys: <array[string]>- Lijst met base-58 gecodeerde publieke sleutels gebruikt door de transactie, inclusief door de instructies en voor handtekeningen. De eerstemessage.header.numRequiredSignaturespublieke sleutels moeten de transactie ondertekenen.header: <object>- Geeft details over de accounttypes en handtekeningen die vereist zijn voor de transactie.numRequiredSignatures: <number>- Het totale aantal handtekeningen dat vereist is om de transactie geldig te maken. De handtekeningen moeten overeenkomen met de eerstenumRequiredSignaturesvanmessage.accountKeys.numReadonlySignedAccounts: <number>- De laatstenumReadonlySignedAccountsvan de ondertekende sleutels zijn alleen-lezen accounts. Programma's kunnen meerdere transacties verwerken die alleen-lezen accounts laden binnen een enkele PoH-entry, maar mogen geen lamports crediteren of debiteren of accountgegevens wijzigen. Transacties die gericht zijn op hetzelfde lees-schrijf-account worden sequentieel geëvalueerd.numReadonlyUnsignedAccounts: <number>- De laatstenumReadonlyUnsignedAccountsvan de niet-ondertekende sleutels zijn alleen-lezen accounts.
recentBlockhash: <string>- Een base-58 gecodeerde hash van een recent blok in de ledger, gebruikt om duplicatie van transacties te voorkomen en om transacties een levensduur te geven.instructions: <array[object]>- Lijst met programma-instructies die in volgorde worden uitgevoerd en in één atomaire transactie worden vastgelegd als alle instructies slagen.programIdIndex: <number>- Index in demessage.accountKeysarray die het programma-account aangeeft dat deze instructie uitvoert.accounts: <array[number]>- Lijst met geordende indices in demessage.accountKeysarray die aangeeft welke accounts aan het programma moeten worden doorgegeven.data: <string>- De programma-invoergegevens gecodeerd in een base-58 string.
addressTableLookups: <array[object]|undefined>- Lijst met adrestabel- opzoekingen die door een transactie worden gebruikt om dynamisch adressen te laden uit on-chain adresopzoektabellen. Niet gedefinieerd alsmaxSupportedTransactionVersionniet is ingesteld.accountKey: <string>- base-58 gecodeerde publieke sleutel voor een adresopzoektabel- account.writableIndexes: <array[number]>- Lijst met indices die worden gebruikt om adressen van beschrijfbare accounts uit een opzoektabel te laden.readonlyIndexes: <array[number]>- Lijst met indices die worden gebruikt om adressen van alleen-lezen accounts uit een opzoektabel te laden.
signatures: <array[string]>- Een lijst met base-58 gecodeerde handtekeningen toegepast op de transactie. De lijst heeft altijd een lengte vanmessage.header.numRequiredSignaturesen is niet leeg. De handtekening op indexikomt overeen met de publieke sleutel op indexiinmessage.accountKeys. De eerste wordt gebruikt als de transactie-id.
JSON Parsed
De JSON geparseerde structuur van een transactie volgt een vergelijkbare structuur als het reguliere JSON-formaat, met aanvullende parsing van account- en instructie- informatie:
message: <object>- Definieert de inhoud van de transactie.accountKeys: <array[object]>- Lijst met accountinformatie gebruikt door de transactie.pubkey: <string>- De base-58 gecodeerde public key van het account.signer: <boolean>- Geeft aan of het account een vereiste transactie- ondertekenaar is.writable: <boolean>- Geeft aan of het account beschrijfbaar is.source: <string>- Bron van het account (transactie of opzoektabel).
recentBlockhash: <string>- Een base-58 gecodeerde hash van een recent blok in het grootboek, gebruikt om transactieduplicatie te voorkomen en om transacties een levensduur te geven.instructions: <array[object]>- Lijst met geparseerde programma-instructies.program: <string>- De naam van het programma dat wordt aangeroepen.programId: <string>- De base-58 gecodeerde public key van het programma.stackHeight: <number|null>- De stapelhoogte van de instructie.parsed: <object>- Programma-specifieke geparseerde gegevens.type: <string>- Het type instructie (bijv. "transfer").info: <object>- Geparseerde instructie-informatie specifiek voor het programma en instructietype.
signatures: <array[string]>- Een lijst met base-58 gecodeerde handtekeningen toegepast op de transactie.
Transactie status metadata
err: <object|null>- Fout als de transactie mislukt is, null als de transactie geslaagd is. TransactionError definitiesfee: <u64>- kosten die voor deze transactie in rekening zijn gebracht, als u64 integerpreBalances: <array>- array van u64 accountsaldi van vóór de transactie werd verwerktpostBalances: <array>- array van u64 accountsaldi nadat de transactie werd verwerktinnerInstructions: <array|null>- Lijst van inner instructions ofnullals inner instruction registratie niet was ingeschakeld tijdens deze transactiepreTokenBalances: <array|undefined>- Lijst van token balances van vóór de transactie werd verwerkt of weggelaten als token balance registratie nog niet was ingeschakeld tijdens deze transactiepostTokenBalances: <array|undefined>- Lijst van token balances van nadat de transactie werd verwerkt of weggelaten als token balance registratie nog niet was ingeschakeld tijdens deze transactielogMessages: <array|null>- array van string logberichten ofnullals logberichtregistratie niet was ingeschakeld tijdens deze transactierewards: <array|null>- transactie-niveau beloningen; een array van JSON-objecten die het volgende bevatten:pubkey: <string>- De public key, als base-58 gecodeerde string, van het account dat de beloning heeft ontvangenlamports: <i64>- aantal belonings-lamports gecrediteerd of gedebiteerd door het account, als een i64postBalance: <u64>- accountsaldo in lamports nadat de beloning werd toegepastrewardType: <string|undefined>- type beloning: "fee", "rent", "voting", "staking"commission: <u8|undefined>- vote account commissie toen de beloning werd gecrediteerd, alleen aanwezig voor voting en staking beloningen
- VEROUDERD:
status: <object>- Transactiestatus"Ok": <null>- Transactie was succesvol"Err": <ERR>- Transactie mislukt met TransactionError
loadedAddresses: <object|undefined>- Transactieadressen geladen uit adresopzoektabellen. Ongedefinieerd alsmaxSupportedTransactionVersionniet is ingesteld in verzoekparameters, of alsjsonParsedcodering is ingesteld in verzoekparameters.writable: <array[string]>- Geordende lijst van base-58 gecodeerde adressen voor beschrijfbare geladen accountsreadonly: <array[string]>- Geordende lijst van base-58 gecodeerde adressen voor alleen-lezen geladen accounts
returnData: <object|undefined>- de meest recente retourgegevens gegenereerd door een instructie in de transactie, met de volgende velden:programId: <string>- het programma dat de retourgegevens heeft gegenereerd, als base-58 gecodeerde Pubkeydata: <[string, encoding]>- de retourgegevens zelf, als base-64 gecodeerde binaire gegevens
computeUnitsConsumed: <u64|undefined>- aantal compute units verbruikt door de transactieversion: <"legacy"|number|undefined>- Transactieversie. Ongedefinieerd alsmaxSupportedTransactionVersionniet is ingesteld in verzoekparameters.signatures: <array>- aanwezig als "signatures" worden gevraagd voor transactie- details; een array van handtekeningstrings, overeenkomend met de transactie- volgorde in het blok
Inner Instructions
De Solana runtime registreert de cross-program instructies die worden aangeroepen tijdens de verwerking van transacties en maakt deze beschikbaar voor meer transparantie over wat er per transactie-instructie op de blockchain is uitgevoerd. Aangeroepen instructies worden gegroepeerd op basis van de oorspronkelijke transactie-instructie en worden in volgorde van verwerking weergegeven.
De JSON-structuur van inner instructions is gedefinieerd als een lijst van objecten in de volgende structuur:
index: number- Index van de transactie-instructie waaruit de inner instruction(s) afkomstig zijninstructions: <array[object]>- Geordende lijst van inner program instructions die werden aangeroepen tijdens een enkele transactie-instructie.programIdIndex: <number>- Index in demessage.accountKeysarray die aangeeft welk program account deze instructie uitvoert.accounts: <array[number]>- Lijst van geordende indices in demessage.accountKeysarray die aangeeft welke accounts aan het programma moeten worden doorgegeven.data: <string>- De programma-invoergegevens gecodeerd in een base-58 string.
Token Balances
De JSON-structuur van token balances is gedefinieerd als een lijst van objecten in de volgende structuur:
accountIndex: <number>- Index van het account waarvoor de token balance wordt weergegeven.mint: <string>- Pubkey van de token's mint.owner: <string|undefined>- Pubkey van de eigenaar van de token balance.programId: <string|undefined>- Pubkey van het Token Program dat eigenaar is van het account.uiTokenAmount: <object>-amount: <string>- Ruwe hoeveelheid tokens als string, zonder rekening te houden met decimalen.decimals: <number>- Aantal decimalen geconfigureerd voor de token's mint.uiAmount: <number|null>- Token hoeveelheid als float, rekening houdend met decimalen. VEROUDERDuiAmountString: <string>- Token hoeveelheid als string, rekening houdend met decimalen.
Is this page helpful?