Gängige JSON-Datenstrukturen für Solana RPC-Methoden
Verschiedene Solana RPC-Methoden liefern komplexere Antworten als strukturierte JSON- Objekte, gefüllt mit spezifischen Schlüssel-Wert-Paaren.
Zu den häufigsten dieser JSON-Datenstrukturen gehören:
Transaktionen
Transaktionen unterscheiden sich deutlich von denen auf anderen Blockchains. Lesen Sie unbedingt den Abschnitt Anatomie einer Transaktion, um mehr über Transaktionen auf Solana zu erfahren.
JSON
Die JSON-Struktur einer Transaktion ist wie folgt definiert:
message: <object>- Definiert den Inhalt der Transaktion.accountKeys: <array[string]>- Liste der Base-58-codierten öffentlichen Schlüssel, die von der Transaktion verwendet werden, einschließlich der Anweisungen und für Signaturen. Die erstenmessage.header.numRequiredSignaturesöffentlichen Schlüssel müssen die Transaktion signieren.header: <object>- Detailliert die Kontotypen und Signaturen, die von der Transaktion benötigt werden.numRequiredSignatures: <number>- Die Gesamtzahl der Signaturen, die erforderlich sind, um die Transaktion gültig zu machen. Die Signaturen müssen mit den erstennumRequiredSignaturesvonmessage.accountKeysübereinstimmen.numReadonlySignedAccounts: <number>- Die letztennumReadonlySignedAccountsder signierten Schlüssel sind schreibgeschützte Konten. Programme können mehrere Transaktionen verarbeiten, die schreibgeschützte Konten innerhalb eines einzelnen PoH-Eintrags laden, dürfen aber keine Lamports gutschreiben oder abbuchen oder Kontodaten ändern. Transaktionen, die auf dasselbe Lese-Schreib-Konto abzielen, werden sequentiell ausgewertet.numReadonlyUnsignedAccounts: <number>- Die letztennumReadonlyUnsignedAccountsder unsignierten Schlüssel sind schreibgeschützte Konten.
recentBlockhash: <string>- Ein Base-58-codierter Hash eines kürzlich erstellten Blocks im Ledger, der verwendet wird, um Transaktionsduplikate zu verhindern und Transaktionen Lebensdauern zu geben.instructions: <array[object]>- Liste der Programm-Anweisungen, die in Sequenz ausgeführt und in einer atomaren Transaktion festgeschrieben werden, wenn alle erfolgreich sind.programIdIndex: <number>- Index in dasmessage.accountKeys-Array, der das Programmkonto angibt, das diese Anweisung ausführt.accounts: <array[number]>- Liste geordneter Indizes in dasmessage.accountKeys-Array, die angibt, welche Konten an das Programm übergeben werden sollen.data: <string>- Die Programmeingabedaten, codiert in einem Base-58-String.
addressTableLookups: <array[object]|undefined>- Liste der Adresstabellen- Nachschlagungen, die von einer Transaktion verwendet werden, um Adressen dynamisch aus On-Chain- Adressnachschlagetabellen zu laden. Undefiniert, wennmaxSupportedTransactionVersionnicht gesetzt ist.accountKey: <string>- Base-58-codierter öffentlicher Schlüssel für ein Adressnachschlagetabellen- Konto.writableIndexes: <array[number]>- Liste der Indizes, die verwendet werden, um Adressen von beschreibbaren Konten aus einer Nachschlagetabelle zu laden.readonlyIndexes: <array[number]>- Liste der Indizes, die verwendet werden, um Adressen von schreibgeschützten Konten aus einer Nachschlagetabelle zu laden.
signatures: <array[string]>- Eine Liste von Base-58-codierten Signaturen, die auf die Transaktion angewendet wurden. Die Liste hat immer die Längemessage.header.numRequiredSignaturesund ist nicht leer. Die Signatur am Indexientspricht dem öffentlichen Schlüssel am Indexiinmessage.accountKeys. Die erste wird als Transaktions-ID verwendet.
JSON geparst
Die geparste JSON-Struktur einer Transaktion folgt einer ähnlichen Struktur wie das reguläre JSON-Format, mit zusätzlicher Analyse von Konten und Anweisungen Informationen:
message: <object>- Definiert den Inhalt der Transaktion.accountKeys: <array[object]>- Liste der Konteninformationen, die von der Transaktion verwendet werden.pubkey: <string>- Der Base-58-kodierte öffentliche Schlüssel des Kontos.signer: <boolean>- Gibt an, ob das Konto ein erforderlicher Transaktions- Signer ist.writable: <boolean>- Gibt an, ob das Konto beschreibbar ist.source: <string>- Quelle des Kontos (Transaktion oder Lookup-Tabelle).
recentBlockhash: <string>- Ein Base-58-kodierter Hash eines kürzlich erstellten Blocks im Ledger, der verwendet wird, um Transaktionsduplikate zu verhindern und Transaktionen Lebensdauern zu geben.instructions: <array[object]>- Liste der geparsten Programm-Anweisungen.program: <string>- Der Name des aufgerufenen Programms.programId: <string>- Der Base-58-kodierte öffentliche Schlüssel des Programms.stackHeight: <number|null>- Die Stack-Höhe der Anweisung.parsed: <object>- Programmspezifische geparste Daten.type: <string>- Der Typ der Anweisung (z.B. "transfer").info: <object>- Geparste Anweisungsinformationen spezifisch für das Programm und den Anweisungstyp.
signatures: <array[string]>- Eine Liste von Base-58-kodierten Signaturen, die auf die Transaktion angewendet wurden.
Transaktionsstatus-Metadaten
err: <object|null>- Fehler, wenn die Transaktion fehlgeschlagen ist, null, wenn die Transaktion erfolgreich war. TransactionError-Definitionenfee: <u64>- Fee, die für diese Transaktion berechnet wurde, als u64-GanzzahlpreBalances: <array>- Array von u64-Kontoständen vor der Verarbeitung der TransaktionpostBalances: <array>- Array von u64-Kontoständen nach der Verarbeitung der TransaktioninnerInstructions: <array|null>- Liste von inneren Anweisungen odernullwenn die Aufzeichnung innerer Anweisungen während dieser Transaktion nicht aktiviert warpreTokenBalances: <array|undefined>- Liste von Token-Salden vor der Verarbeitung der Transaktion oder weggelassen, wenn die Token-Saldo-Aufzeichnung noch nicht während dieser Transaktion aktiviert warpostTokenBalances: <array|undefined>- Liste von Token-Salden nach der Verarbeitung der Transaktion oder weggelassen, wenn die Token-Saldo-Aufzeichnung noch nicht während dieser Transaktion aktiviert warlogMessages: <array|null>- Array von String-Protokollnachrichten odernull, wenn die Aufzeichnung von Protokollnachrichten während dieser Transaktion nicht aktiviert warrewards: <array|null>- Belohnungen auf Transaktionsebene; ein Array von JSON-Objekten mit:pubkey: <string>- Der öffentliche Schlüssel als Base-58-kodierte Zeichenfolge des Kontos, das die Belohnung erhalten hatlamports: <i64>- Anzahl der Belohnungs-Lamports, die dem Konto gutgeschrieben oder belastet wurden, als i64postBalance: <u64>- Kontostand in Lamports nach Anwendung der BelohnungrewardType: <string|undefined>- Art der Belohnung: "fee", "rent", "voting", "staking"commission: <u8|undefined>- Provision des Abstimmungskontos, als die Belohnung gutgeschrieben wurde, nur für Abstimmungs- und Staking-Belohnungen vorhanden
- VERALTET:
status: <object>- Transaktionsstatus"Ok": <null>- Transaktion war erfolgreich"Err": <ERR>- Transaktion ist mit TransactionError fehlgeschlagen
loadedAddresses: <object|undefined>- Transaktionsadressen, die aus Adress-Lookup-Tabellen geladen wurden. Undefiniert, wennmaxSupportedTransactionVersionnicht in den Anfrageparametern gesetzt ist oder wennjsonParsedKodierung in den Anfrageparametern gesetzt ist.writable: <array[string]>- Geordnete Liste von Base-58-kodierten Adressen für beschreibbare geladene Kontenreadonly: <array[string]>- Geordnete Liste von Base-58-kodierten Adressen für schreibgeschützte geladene Konten
returnData: <object|undefined>- die neuesten Rückgabedaten, die von einer Anweisung in der Transaktion generiert wurden, mit den folgenden Feldern:programId: <string>- das Programm, das die Rückgabedaten generiert hat, als Base-58-kodierter Pubkeydata: <[string, encoding]>- die Rückgabedaten selbst, als Base-64-kodierte Binärdaten
computeUnitsConsumed: <u64|undefined>- Anzahl der Recheneinheiten, die von der Transaktion verbraucht wurdenversion: <"legacy"|number|undefined>- Transaktionsversion. Undefiniert, wennmaxSupportedTransactionVersionnicht in den Anfrageparametern gesetzt ist.signatures: <array>- vorhanden, wenn "signatures" für Transaktionsdetails angefordert werden; ein Array von Signatur-Strings, entsprechend der Transaktions- reihenfolge im Block
Inner Instructions
Die Solana-Laufzeitumgebung zeichnet die programmübergreifenden Anweisungen auf, die während der Transaktionsverarbeitung aufgerufen werden, und macht diese für eine größere Transparenz darüber verfügbar, was pro Transaktionsanweisung on-chain ausgeführt wurde. Aufgerufene Anweisungen werden nach der ursprünglichen Transaktionsanweisung gruppiert und in der Reihenfolge der Verarbeitung aufgelistet.
Die JSON-Struktur der inneren Anweisungen ist als Liste von Objekten in der folgenden Struktur definiert:
index: number- Index der Transaktionsanweisung, aus der die innere(n) Anweisung(en) stammt(en)instructions: <array[object]>- Geordnete Liste der inneren Programm-Anweisungen, die während einer einzelnen Transaktionsanweisung aufgerufen wurden.programIdIndex: <number>- Index in dasmessage.accountKeys-Array, der das Programmkonto angibt, das diese Anweisung ausführt.accounts: <array[number]>- Liste geordneter Indizes in dasmessage.accountKeys-Array, die angibt, welche Konten an das Programm übergeben werden sollen.data: <string>- Die Programmeingabedaten, kodiert in einem Base-58-String.
Token-Guthaben
Die JSON-Struktur der Token-Guthaben ist als Liste von Objekten in der folgenden Struktur definiert:
accountIndex: <number>- Index des Kontos, für das das Token-Guthaben bereitgestellt wird.mint: <string>- Pubkey der Token-Mint.owner: <string|undefined>- Pubkey des Besitzers des Token-Guthabens.programId: <string|undefined>- Pubkey des Token Program, dem das Konto gehört.uiTokenAmount: <object>-amount: <string>- Rohe Menge an Tokens als String, ohne Berücksichtigung der Dezimalstellen.decimals: <number>- Anzahl der für die Token-Mint konfigurierten Dezimalstellen.uiAmount: <number|null>- Token-Betrag als Gleitkommazahl, unter Berücksichtigung der Dezimalstellen. VERALTETuiAmountString: <string>- Token-Betrag als String, unter Berücksichtigung der Dezimalstellen.
Is this page helpful?