Typowe struktury danych JSON dla metod RPC Solana
Różne metody RPC Solana zwracają bardziej złożone odpowiedzi w postaci ustrukturyzowanych obiektów JSON, wypełnionych określonymi wartościami kluczowymi.
Najczęstsze z tych struktur danych JSON obejmują:
Transakcje
Transakcje znacznie różnią się od tych na innych blockchainach. Koniecznie zapoznaj się z Anatomią transakcji, aby dowiedzieć się więcej o transakcjach na Solanie.
JSON
Struktura JSON transakcji jest zdefiniowana w następujący sposób:
message: <object>
- Definiuje zawartość transakcji.accountKeys: <array[string]>
- Lista kluczy publicznych zakodowanych w base-58 używanych przez transakcję, w tym przez instrukcje i do podpisów. Pierwszemessage.header.numRequiredSignatures
klucze publiczne muszą podpisać transakcję.header: <object>
- Szczegóły typów kont i podpisów wymaganych przez transakcję.numRequiredSignatures: <number>
- Całkowita liczba podpisów wymaganych do uznania transakcji za ważną. Podpisy muszą odpowiadać pierwszymnumRequiredSignatures
zmessage.accountKeys
.numReadonlySignedAccounts: <number>
- OstatnienumReadonlySignedAccounts
z podpisanych kluczy to konta tylko do odczytu. Programy mogą przetwarzać wiele transakcji, które ładują konta tylko do odczytu w ramach jednego wpisu PoH, ale nie mogą kredytować ani debetować lamportów ani modyfikować danych konta. Transakcje skierowane na to samo konto do odczytu i zapisu są oceniane sekwencyjnie.numReadonlyUnsignedAccounts: <number>
- OstatnienumReadonlyUnsignedAccounts
z niepodpisanych kluczy to konta tylko do odczytu.
recentBlockhash: <string>
- Hash zakodowany w base-58 ostatniego bloku w księdze używany do zapobiegania duplikacji transakcji i nadawania im okresu ważności.instructions: <array[object]>
- Lista instrukcji programowych, które zostaną wykonane w kolejności i zatwierdzone w jednej atomowej transakcji, jeśli wszystkie się powiodą.programIdIndex: <number>
- Indeks w tablicymessage.accountKeys
wskazujący konto programu, które wykonuje tę instrukcję.accounts: <array[number]>
- Lista uporządkowanych indeksów w tablicymessage.accountKeys
wskazujących, które konta przekazać do programu.data: <string>
- Dane wejściowe programu zakodowane w ciągu base-58.
addressTableLookups: <array[object]|undefined>
- Lista tabel adresowych używanych przez transakcję do dynamicznego ładowania adresów z tabel wyszukiwania adresów w łańcuchu. Niezdefiniowane, jeślimaxSupportedTransactionVersion
nie jest ustawione.accountKey: <string>
- Klucz publiczny zakodowany w base-58 dla konta tabeli wyszukiwania adresów.writableIndexes: <array[number]>
- Lista indeksów używanych do ładowania adresów kont do zapisu z tabeli wyszukiwania.readonlyIndexes: <array[number]>
- Lista indeksów używanych do ładowania adresów kont tylko do odczytu z tabeli wyszukiwania.
signatures: <array[string]>
- Lista podpisów zakodowanych w base-58 zastosowanych do transakcji. Lista zawsze ma długośćmessage.header.numRequiredSignatures
i nie jest pusta. Podpis na indeksiei
odpowiada kluczowi publicznemu na indeksiei
wmessage.accountKeys
. Pierwszy z nich jest używany jako id transakcji.
JSON przeanalizowany
Struktura przeanalizowanego JSON-a transakcji jest podobna do regularnego formatu JSON, z dodatkowymi informacjami o kontach i instrukcjach:
message: <object>
- Definiuje zawartość transakcji.accountKeys: <array[object]>
- Lista informacji o kontach użytych w transakcji.pubkey: <string>
- Klucz publiczny zakodowany w base-58 dla konta.signer: <boolean>
- Wskazuje, czy konto jest wymaganym sygnatariuszem transakcji.writable: <boolean>
- Wskazuje, czy konto jest zapisywalne.source: <string>
- Źródło konta (transakcja lub tabela wyszukiwania).
recentBlockhash: <string>
- Hash zakodowany w base-58 dla ostatniego bloku w księdze, używany do zapobiegania duplikacji transakcji i nadawania im okresu ważności.instructions: <array[object]>
- Lista przeanalizowanych instrukcji programowych.program: <string>
- Nazwa programu, który jest wywoływany.programId: <string>
- Klucz publiczny programu zakodowany w base-58.stackHeight: <number|null>
- Wysokość stosu instrukcji.parsed: <object>
- Dane specyficzne dla programu.type: <string>
- Typ instrukcji (np. "transfer").info: <object>
- Przeanalizowane informacje o instrukcji specyficzne dla programu i typu instrukcji.
signatures: <array[string]>
- Lista podpisów zakodowanych w base-58 zastosowanych do transakcji.
Metadane statusu transakcji
err: <object|null>
- Błąd, jeśli transakcja się nie powiodła, null, jeśli transakcja zakończyła się sukcesem. Definicje TransactionErrorfee: <u64>
- Opłata za tę transakcję, jako liczba całkowita u64preBalances: <array>
- Tablica sald kont u64 sprzed przetworzenia transakcjipostBalances: <array>
- Tablica sald kont u64 po przetworzeniu transakcjiinnerInstructions: <array|null>
- Lista wewnętrznych instrukcji lubnull
jeśli rejestrowanie wewnętrznych instrukcji nie było włączone podczas tej transakcjipreTokenBalances: <array|undefined>
- Lista sald tokenów sprzed przetworzenia transakcji lub pominięta, jeśli rejestrowanie sald tokenów nie było jeszcze włączone podczas tej transakcjipostTokenBalances: <array|undefined>
- Lista sald tokenów po przetworzeniu transakcji lub pominięta, jeśli rejestrowanie sald tokenów nie było jeszcze włączone podczas tej transakcjilogMessages: <array|null>
- Tablica komunikatów dziennika jako ciągi znaków lubnull
jeśli rejestrowanie komunikatów dziennika nie było włączone podczas tej transakcjirewards: <array|null>
- Nagrody na poziomie transakcji; tablica obiektów JSON zawierających:pubkey: <string>
- Klucz publiczny, jako ciąg zakodowany w base-58, konta, które otrzymało nagrodęlamports: <i64>
- Liczba lamportów nagrody przypisana lub odjęta od konta, jako i64postBalance: <u64>
- Saldo konta w lamportach po zastosowaniu nagrodyrewardType: <string|undefined>
- Typ nagrody: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- Prowizja konta głosującego w momencie przyznania nagrody, obecna tylko dla nagród za głosowanie i staking
- PRZESTARZAŁE:
status: <object>
- Status transakcji"Ok": <null>
- Transakcja zakończyła się sukcesem"Err": <ERR>
- Transakcja nie powiodła się z TransactionError
loadedAddresses: <object|undefined>
- Adresy transakcji załadowane z tabel wyszukiwania adresów. Niezdefiniowane, jeślimaxSupportedTransactionVersion
nie jest ustawione w parametrach żądania lub jeślijsonParsed
kodowanie jest ustawione w parametrach żądania.writable: <array[string]>
- Uporządkowana lista adresów zakodowanych w base-58 dla zapisywalnych załadowanych kontreadonly: <array[string]>
- Uporządkowana lista adresów zakodowanych w base-58 dla tylko do odczytu załadowanych kont
returnData: <object|undefined>
- Najnowsze dane zwrotne wygenerowane przez instrukcję w transakcji, z następującymi polami:programId: <string>
- Program, który wygenerował dane zwrotne, jako zakodowany w base-58 Pubkeydata: <[string, encoding]>
- Same dane zwrotne, jako zakodowane w base-64 dane binarne
computeUnitsConsumed: <u64|undefined>
- Liczba jednostek obliczeniowych zużytych przez transakcjęversion: <"legacy"|number|undefined>
- Wersja transakcji. Niezdefiniowana, jeślimaxSupportedTransactionVersion
nie jest ustawione w parametrach żądania.signatures: <array>
- Obecne, jeśli "sygnatury" są żądane dla szczegółów transakcji; tablica ciągów sygnatur, odpowiadająca kolejności transakcji w bloku
Wewnętrzne instrukcje
Środowisko wykonawcze Solana rejestruje instrukcje międzyprogramowe, które są wywoływane podczas przetwarzania transakcji, i udostępnia je w celu zapewnienia większej przejrzystości tego, co zostało wykonane w łańcuchu bloków dla każdej instrukcji transakcji. Wywołane instrukcje są grupowane według pierwotnej instrukcji transakcji i są wymieniane w kolejności przetwarzania.
Struktura JSON wewnętrznych instrukcji jest zdefiniowana jako lista obiektów w następującej strukturze:
index: number
- Indeks instrukcji transakcji, z której pochodzi wewnętrzna instrukcja(e)instructions: <array[object]>
- Uporządkowana lista wewnętrznych instrukcji programowych wywołanych podczas jednej instrukcji transakcji.programIdIndex: <number>
- Indeks w tablicymessage.accountKeys
wskazujący konto programu, które wykonuje tę instrukcję.accounts: <array[number]>
- Lista uporządkowanych indeksów w tablicymessage.accountKeys
wskazująca, które konta przekazać do programu.data: <string>
- Dane wejściowe programu zakodowane w ciągu znaków base-58.
Salda tokenów
Struktura JSON sald tokenów jest zdefiniowana jako lista obiektów w następującej strukturze:
accountIndex: <number>
- Indeks konta, dla którego podano saldo tokenów.mint: <string>
- Pubkey tokena.owner: <string|undefined>
- Pubkey właściciela salda tokenów.programId: <string|undefined>
- Pubkey programu Token, który jest właścicielem konta.uiTokenAmount: <object>
-amount: <string>
- Surowa ilość tokenów jako ciąg znaków, ignorując miejsca dziesiętne.decimals: <number>
- Liczba miejsc dziesiętnych skonfigurowanych dla tokena.uiAmount: <number|null>
- Ilość tokenów jako liczba zmiennoprzecinkowa, uwzględniająca miejsca dziesiętne. PRZESTARZAŁEuiAmountString: <string>
- Ilość tokenów jako ciąg znaków, uwzględniająca miejsca dziesiętne.
Is this page helpful?