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.numRequiredSignaturesklucze 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ć pierwszymnumRequiredSignatureszmessage.accountKeys.numReadonlySignedAccounts: <number>- OstatnienumReadonlySignedAccountsz 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>- OstatnienumReadonlyUnsignedAccountsz 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.accountKeyswskazujący konto programu, które wykonuje tę instrukcję.accounts: <array[number]>- Lista uporządkowanych indeksów w tablicymessage.accountKeyswskazują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ślimaxSupportedTransactionVersionnie 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.numRequiredSignaturesi nie jest pusta. Podpis na indeksieiodpowiada kluczowi publicznemu na indeksieiwmessage.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 lubnulljeś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 lubnulljeś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ślimaxSupportedTransactionVersionnie jest ustawione w parametrach żądania lub jeślijsonParsedkodowanie 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ślimaxSupportedTransactionVersionnie 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.accountKeyswskazujący konto programu, które wykonuje tę instrukcję.accounts: <array[number]>- Lista uporządkowanych indeksów w tablicymessage.accountKeyswskazują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?