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. Pierwsze message.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ć pierwszym numRequiredSignatures z message.accountKeys.
      • numReadonlySignedAccounts: <number> - Ostatnie numReadonlySignedAccounts 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> - Ostatnie numReadonlyUnsignedAccounts 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 tablicy message.accountKeys wskazujący konto programu, które wykonuje tę instrukcję.
      • accounts: <array[number]> - Lista uporządkowanych indeksów w tablicy message.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śli maxSupportedTransactionVersion 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 indeksie i odpowiada kluczowi publicznemu na indeksie i w message.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 TransactionError
  • fee: <u64> - Opłata za tę transakcję, jako liczba całkowita u64
  • preBalances: <array> - Tablica sald kont u64 sprzed przetworzenia transakcji
  • postBalances: <array> - Tablica sald kont u64 po przetworzeniu transakcji
  • innerInstructions: <array|null> - Lista wewnętrznych instrukcji lub null jeśli rejestrowanie wewnętrznych instrukcji nie było włączone podczas tej transakcji
  • preTokenBalances: <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 transakcji
  • postTokenBalances: <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 transakcji
  • logMessages: <array|null> - Tablica komunikatów dziennika jako ciągi znaków lub null jeśli rejestrowanie komunikatów dziennika nie było włączone podczas tej transakcji
  • rewards: <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 i64
    • postBalance: <u64> - Saldo konta w lamportach po zastosowaniu nagrody
    • rewardType: <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śli maxSupportedTransactionVersion nie jest ustawione w parametrach żądania lub jeśli jsonParsed kodowanie jest ustawione w parametrach żądania.
    • writable: <array[string]> - Uporządkowana lista adresów zakodowanych w base-58 dla zapisywalnych załadowanych kont
    • readonly: <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 Pubkey
    • data: <[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śli maxSupportedTransactionVersion 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 tablicy message.accountKeys wskazujący konto programu, które wykonuje tę instrukcję.
    • accounts: <array[number]> - Lista uporządkowanych indeksów w tablicy message.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ŁE
    • uiAmountString: <string> - Ilość tokenów jako ciąg znaków, uwzględniająca miejsca dziesiętne.

Is this page helpful?

Spis treści

Edytuj stronę