Przejdź do głównej treści
Change page

API JSON-RPC

Aby aplikacja mogła wchodzić w interakcję z blockchainem Ethereum – poprzez odczytywanie danych z blockchaina lub wysyłanie transakcji do sieci – musi połączyć się z węzłem Ethereum.

W tym celu każdy klient Ethereum implementuje specyfikację JSON-RPC (opens in a new tab), dzięki czemu istnieje jednolity zestaw metod, na których aplikacje mogą polegać niezależnie od konkretnego węzła lub implementacji klienta.

JSON-RPC (opens in a new tab) to bezstanowy, lekki protokół zdalnego wywołania procedur (RPC). Definiuje on kilka struktur danych oraz zasady ich przetwarzania. Jest on niezależny od warstwy transportowej, co oznacza, że jego koncepcje mogą być używane w ramach tego samego procesu, przez gniazda (sockets), przez HTTP lub w wielu różnych środowiskach przekazywania wiadomości. Jako format danych wykorzystuje JSON (RFC 4627).

Implementacje klientów

Klienty Ethereum mogą wykorzystywać różne języki programowania podczas implementacji specyfikacji JSON-RPC. Zobacz dokumentację poszczególnych klientów, aby uzyskać więcej szczegółów związanych z konkretnymi językami programowania. Zalecamy sprawdzanie dokumentacji każdego klienta w celu uzyskania najnowszych informacji o obsłudze API.

Biblioteki pomocnicze

Chociaż możesz zdecydować się na bezpośrednią interakcję z klientami Ethereum za pośrednictwem API JSON-RPC, często istnieją łatwiejsze opcje dla twórców dappów. Istnieje wiele bibliotek JavaScript i API backendowych, które stanowią nakładki na API JSON-RPC. Dzięki tym bibliotekom programiści mogą pisać intuicyjne, jednolinijkowe metody w wybranym przez siebie języku programowania, aby inicjować żądania JSON-RPC (wewnętrznie), które wchodzą w interakcję z Ethereum.

API klientów konsensusu

Ta strona dotyczy głównie API JSON-RPC używanego przez klienty warstwy wykonawczej Ethereum. Jednakże klienty konsensusu również posiadają API RPC, które pozwala użytkownikom na zapytania o informacje dotyczące węzła, żądanie bloków Beacon, stanu Beacon oraz innych informacji związanych z konsensusem bezpośrednio z węzła. To API jest udokumentowane na stronie internetowej Beacon API (opens in a new tab).

Wewnętrzne API jest również używane do komunikacji między klientami wewnątrz węzła - to znaczy umożliwia klientowi konsensusu i klientowi warstwy wykonawczej wymianę danych. Nazywa się to „Engine API”, a jego specyfikacje są dostępne na GitHubie (opens in a new tab).

Specyfikacja klienta warstwy wykonawczej

Przeczytaj pełną specyfikację API JSON-RPC na GitHubie (opens in a new tab). To API jest udokumentowane na stronie Execution API (opens in a new tab) i zawiera narzędzie Inspector, które pozwala wypróbować wszystkie dostępne metody.

Konwencje

Kodowanie wartości szesnastkowych

Przez JSON przekazywane są dwa kluczowe typy danych: niesformatowane tablice bajtów i wielkości. Oba są przekazywane w kodowaniu szesnastkowym, ale mają różne wymagania dotyczące formatowania.

Wielkości

Podczas kodowania wielkości (liczb całkowitych, liczb): zakoduj jako wartość szesnastkową, dodaj prefiks „0x”, używając najbardziej kompaktowej reprezentacji (drobny wyjątek: zero powinno być reprezentowane jako „0x0”).

Oto kilka przykładów:

  • 0x41 (65 w systemie dziesiętnym)
  • 0x400 (1024 w systemie dziesiętnym)
  • ŹLE: 0x (zawsze powinna być co najmniej jedna cyfra - zero to „0x0”)
  • ŹLE: 0x0400 (wiodące zera są niedozwolone)
  • ŹLE: ff (musi mieć prefiks 0x)

Niesformatowane dane

Podczas kodowania niesformatowanych danych (tablic bajtów, adresów kont, hashów, tablic kodu bajtowego): zakoduj jako wartość szesnastkową, dodaj prefiks „0x”, po dwie cyfry szesnastkowe na bajt.

Oto kilka przykładów:

  • 0x41 (rozmiar 1, „A”)
  • 0x004200 (rozmiar 3, „0B0”)
  • 0x (rozmiar 0, "")
  • ŹLE: 0xf0f0f (musi być parzysta liczba cyfr)
  • ŹLE: 004200 (musi mieć prefiks 0x)

Parametr bloku

Następujące metody mają parametr bloku:

Gdy wysyłane są żądania odpytujące stan Ethereum, podany parametr bloku określa wysokość bloku.

Dla parametru bloku możliwe są następujące opcje:

  • HEX String - numer bloku w postaci liczby całkowitej
  • String "earliest" - dla najwcześniejszego bloku / bloku genezy
  • String "latest" - dla najnowszego zaproponowanego bloku
  • String "safe" - dla najnowszego bezpiecznego bloku czołowego
  • String "finalized" - dla najnowszego sfinalizowanego bloku
  • String "pending" - dla oczekującego stanu/transakcji

Przykłady

Na tej stronie przedstawiamy przykłady użycia poszczególnych punktów końcowych API JSON_RPC za pomocą narzędzia wiersza poleceń curl (opens in a new tab). Przykłady dla poszczególnych punktów końcowych znajdują się poniżej w sekcji Przykłady użycia curl. W dalszej części strony udostępniamy również kompleksowy przykład kompilacji i wdrożenia inteligentnego kontraktu przy użyciu węzła Geth, API JSON_RPC oraz narzędzia curl.

Przykłady użycia curl

Poniżej znajdują się przykłady użycia API JSON-RPC poprzez wysyłanie żądań curl (opens in a new tab) do węzła Ethereum. Każdy przykład zawiera opis konkretnego punktu końcowego, jego parametrów, zwracanego typu oraz praktyczny przykład jego użycia.

Żądania curl mogą zwrócić komunikat o błędzie związany z typem zawartości (content type). Dzieje się tak, ponieważ opcja --data ustawia typ zawartości na application/x-www-form-urlencoded. Jeśli twój węzeł zgłasza z tego powodu błąd, ustaw nagłówek ręcznie, umieszczając -H "Content-Type: application/json" na początku wywołania. Przykłady nie zawierają również kombinacji adresu URL/IP i portu, która musi być ostatnim argumentem przekazanym do curl (np. 127.0.0.1:8545). Kompletne żądanie curl uwzględniające te dodatkowe dane przyjmuje następującą postać:

curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545

Gossip, stan, historia

Garść podstawowych metod JSON-RPC wymaga danych z sieci Ethereum i dzieli się na trzy główne kategorie: Gossip, stan i historia. Użyj linków w tych sekcjach, aby przejść do każdej metody, lub skorzystaj ze spisu treści, aby zapoznać się z całą listą metod.

Metody Gossip

Te metody śledzą czoło łańcucha. W ten sposób transakcje rozprzestrzeniają się w sieci, trafiają do bloków, a klienty dowiadują się o nowych blokach.

Metody stanu

Metody, które raportują obecny stan wszystkich przechowywanych danych. „Stan” jest jak jeden wielki współdzielony fragment pamięci RAM i obejmuje salda kont, dane kontraktów oraz szacunki gazu.

Metody historii

Pobierają historyczne rekordy każdego bloku aż do genezy. Przypomina to jeden duży plik, do którego można tylko dopisywać dane (append-only), i obejmuje wszystkie nagłówki bloków, ciała bloków, bloki uncle oraz pokwitowania transakcji.

Playground API JSON-RPC

Możesz użyć narzędzia playground (opens in a new tab), aby odkrywać i testować metody API. Pokazuje ono również, które metody i sieci są obsługiwane przez różnych dostawców węzłów.

Metody API JSON-RPC

web3_clientVersion

Zwraca aktualną wersję klienta.

Parametry

Brak

Zwraca

String - Aktualna wersja klienta

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
// Wynik
{
  "id":67,
  "jsonrpc":"2.0",
  "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"
}

web3_sha3

Zwraca Keccak-256 (nie ustandaryzowane SHA3-256) dla podanych danych.

Parametry

  1. DATA - Dane do przekonwertowania na hash SHA3
params: ["0x68656c6c6f20776f726c64"]

Zwraca

DATA - Wynik SHA3 dla podanego ciągu znaków.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
// Wynik
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}

net_version

Zwraca aktualny identyfikator sieci.

Parametry

Brak

Zwraca

String - Aktualny identyfikator sieci.

Pełna lista aktualnych identyfikatorów sieci jest dostępna na stronie chainlist.org (opens in a new tab). Niektóre z popularnych to:

  • 1: sieć główna Ethereum
  • 11155111: sieć testowa Sepolia
  • 560048 : sieć testowa Hoodi

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
// Wynik
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "3"
}

net_listening

Zwraca true, jeśli klient aktywnie nasłuchuje połączeń sieciowych.

Parametry

Brak

Zwraca

Boolean - true podczas nasłuchiwania, w przeciwnym razie false.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
// Wynik
{
  "id":67,
  "jsonrpc":"2.0",
  "result":true
}

net_peerCount

Zwraca liczbę peerów aktualnie połączonych z klientem.

Parametry

Brak

Zwraca

QUANTITY - liczba całkowita określająca liczbę połączonych peerów.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
// Wynik
{
  "id":74,
  "jsonrpc": "2.0",
  "result": "0x2" // 2
}

eth_protocolVersion

Zwraca aktualną wersję protokołu Ethereum. Należy pamiętać, że ta metoda nie jest dostępna w Geth (opens in a new tab).

Parametry

Brak

Zwraca

String - Aktualna wersja protokołu Ethereum

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
// Wynik
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "54"
}

eth_syncing

Zwraca obiekt z danymi o statusie synchronizacji lub false.

Wypróbuj endpoint w piaskownicy (opens in a new tab)

Parametry

Brak

Zwraca

Dokładne zwracane dane różnią się w zależności od implementacji klienta. Wszystkie klienty zwracają False, gdy węzeł się nie synchronizuje, i wszystkie klienty zwracają następujące pola.

Object|Boolean, Obiekt z danymi o statusie synchronizacji lub FALSE, gdy się nie synchronizuje:

  • startingBlock: QUANTITY - Blok, od którego rozpoczął się import (zostanie zresetowany dopiero po tym, jak synchronizacja osiągnie wierzchołek)
  • currentBlock: QUANTITY - Obecny blok, to samo co eth_blockNumber
  • highestBlock: QUANTITY - Szacowany najwyższy blok

Jednakże poszczególne klienty mogą również dostarczać dodatkowe dane. Na przykład Geth zwraca następujące dane:

Natomiast Besu zwraca:

Więcej szczegółów znajdziesz w dokumentacji swojego konkretnego klienta.

Przykład

eth_coinbase

Zwraca adres coinbase klienta.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Uwaga: Ta metoda została wycofana w wersji v1.14.0 i nie jest już obsługiwana. Próba użycia tej metody spowoduje błąd „Method not supported”.

Parametry

Brak

Zwraca

DATA, 20 bajtów - aktualny adres coinbase.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
// Wynik
{
  "id":64,
  "jsonrpc": "2.0",
  "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}

eth_chainId

Zwraca identyfikator łańcucha używany do podpisywania transakcji chronionych przed atakami typu replay.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

Brak

Zwraca

chainId, wartość szesnastkowa w postaci ciągu znaków reprezentująca liczbę całkowitą aktualnego identyfikatora łańcucha.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
// Wynik
{
  "id":67,
  "jsonrpc": "2.0",
  "result": "0x1"
}

eth_mining

Zwraca true, jeśli klient aktywnie kopie nowe bloki. Może to zwrócić true tylko dla sieci opartych na dowodzie pracy (PoW) i może nie być dostępne w niektórych klientach od czasu The Merge.

Wypróbuj punkt końcowy w piaskownicy (opens in a new tab)

Parametry

Brak

Zwraca

Boolean - zwraca true, jeśli klient kopie, w przeciwnym razie false.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
//
{
  "id":71,
  "jsonrpc": "2.0",
  "result": true
}

eth_hashrate

Zwraca liczbę hashy na sekundę, z jaką kopie węzeł. Może to zwrócić true tylko dla sieci opartych na dowodzie pracy i może nie być dostępne w niektórych klientach od czasu The Merge.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

Brak

Zwraca

QUANTITY - liczba hashy na sekundę.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
// Wynik
{
  "id":71,
  "jsonrpc": "2.0",
  "result": "0x38a"
}

eth_gasPrice

Zwraca szacunkową obecną cenę za gaz w wei. Na przykład klient Besu domyślnie bada ostatnie 100 bloków i zwraca medianę ceny jednostki gazu.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

Brak

Zwraca

QUANTITY - liczba całkowita określająca obecną cenę gazu w wei.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
// Wynik
{
  "id":73,
  "jsonrpc": "2.0",
  "result": "0x1dfd14000" // 8049999872 Wei
}

eth_accounts

Zwraca listę adresów należących do klienta.

Wypróbuj endpoint w piaskownicy (opens in a new tab)

Parametry

Brak

Zwraca

Array of DATA, 20 bajtów - adresy należące do klienta.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}

eth_blockNumber

Zwraca numer najnowszego bloku.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

Brak

Zwraca

QUANTITY - liczba całkowita oznaczająca numer bieżącego bloku, na którym znajduje się klient.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
// Wynik
{
  "id":83,
  "jsonrpc": "2.0",
  "result": "0x4b7" // 1207
}

eth_getBalance

Zwraca saldo konta pod danym adresem.

Wypróbuj punkt końcowy w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 20 bajtów - adres, którego saldo ma zostać sprawdzone.
  2. QUANTITY|TAG - liczba całkowita określająca numer bloku lub ciąg znaków "latest", "earliest", "pending", "safe" lub "finalized", zobacz parametr bloku
params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]

Zwraca

QUANTITY - liczba całkowita określająca obecne saldo w wei.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0234c8a3397aab58" // 158972490234375000
}

eth_getStorageAt

Zwraca wartość z pozycji pamięci pod danym adresem.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 20 bajtów - adres pamięci.
  2. QUANTITY - liczba całkowita określająca pozycję w pamięci.
  3. QUANTITY|TAG - liczba całkowita określająca numer bloku lub ciąg znaków "latest", "earliest", "pending", "safe", "finalized", zobacz parametr bloku

Zwraca

DATA - wartość na tej pozycji w pamięci.

Przykład Obliczenie prawidłowej pozycji zależy od pamięci, którą chcemy pobrać. Rozważmy następujący kontrakt wdrożony pod adresem 0x295a70b2de5e3953354a6a8344e616ed314d7251 przez adres 0x391694e7e0b0cce554cb130d723a9d27458f9298.

contract Storage {
    uint pos0;
    mapping(address => uint) pos1;
    constructor() {
        pos0 = 1234;
        pos1[msg.sender] = 5678;
    }
}

Pobranie wartości pos0 jest proste:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}

Pobranie elementu z mapy jest trudniejsze. Pozycja elementu w mapie jest obliczana za pomocą:

keccak(LeftPad32(key, 0), LeftPad32(map position, 0))

Oznacza to, że aby pobrać pamięć dla pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"], musimy obliczyć pozycję za pomocą:

keccak(
  decodeHex(
    "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
      "0000000000000000000000000000000000000000000000000000000000000001"
  )
)

Konsola Geth, która jest dostarczana z biblioteką Web3, może zostać użyta do wykonania tego obliczenia:

> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"

Teraz, aby pobrać pamięć:

curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}

eth_getTransactionCount

Zwraca liczbę transakcji wysłanych z danego adresu.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 20 bajtów - adres.
  2. QUANTITY|TAG - numer bloku w postaci liczby całkowitej lub ciąg znaków "latest", "earliest", "pending", "safe" lub "finalized", zobacz parametr bloku
params: [
  "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
  "latest", // stan w najnowszym bloku
]

Zwraca

QUANTITY - liczba całkowita określająca liczbę transakcji wysłanych z tego adresu.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_getBlockTransactionCountByHash

Zwraca liczbę transakcji w bloku pasującym do podanego hasha bloku.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty - hash bloku
params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]

Zwraca

QUANTITY - liczba całkowita określająca liczbę transakcji w tym bloku.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x8b" // 139
}

eth_getBlockTransactionCountByNumber

Zwraca liczbę transakcji w bloku pasującym do podanego numeru bloku.

Wypróbuj punkt końcowy w środowisku testowym (opens in a new tab)

Parametry

  1. QUANTITY|TAG - liczba całkowita będąca numerem bloku lub ciąg znaków "earliest", "latest", "pending", "safe" lub "finalized", zgodnie z parametrem bloku.
params: [
  "0x13738ca", // 20396234
]

Zwraca

QUANTITY - liczba całkowita określająca liczbę transakcji w tym bloku.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x8b" // 139
}

eth_getUncleCountByBlockHash

Zwraca liczbę wujków w bloku na podstawie podanego hasha bloku.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty – hash bloku
params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]

Zwraca

QUANTITY – liczba całkowita reprezentująca liczbę wujków w tym bloku.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_getUncleCountByBlockNumber

Zwraca liczbę wujków w bloku pasującym do podanego numeru bloku.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. QUANTITY|TAG - liczba całkowita będąca numerem bloku lub ciąg znaków "latest", "earliest", "pending", "safe" lub "finalized", zobacz parametr bloku
params: [
  "0xe8", // 232
]

Zwraca

QUANTITY - liczba całkowita określająca liczbę wujków w tym bloku.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0" // 0
}

eth_getCode

Zwraca kod pod danym adresem.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 20 bajtów - adres
  2. QUANTITY|TAG - całkowity numer bloku lub ciąg znaków "latest", "earliest", "pending", "safe" lub "finalized", zobacz parametr bloku
params: [
  "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
  "0x5daf3b", // 6139707
]

Zwraca

DATA - kod z podanego adresu.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
}

eth_sign

Metoda sign oblicza specyficzny dla Ethereum podpis za pomocą: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).

Dodanie prefiksu do wiadomości sprawia, że obliczony podpis jest rozpoznawalny jako specyficzny dla Ethereum. Zapobiega to nadużyciom, w których złośliwa zdecentralizowana aplikacja (dapp) może podpisać dowolne dane (np. transakcję) i użyć podpisu do podszycia się pod ofiarę.

Uwaga: adres, za pomocą którego ma zostać złożony podpis, musi być odblokowany.

Parametry

  1. DATA, 20 bajtów - adres
  2. DATA, N bajtów - wiadomość do podpisania

Zwraca

DATA: Podpis

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_signTransaction

Podpisuje transakcję, która może zostać przesłana do sieci w późniejszym czasie za pomocą eth_sendRawTransaction.

Parametry

  1. Object - Obiekt transakcji
  • type:
  • from: DATA, 20 bajtów - Adres, z którego wysyłana jest transakcja.
  • to: DATA, 20 bajtów - (opcjonalne przy tworzeniu nowego kontraktu) Adres, do którego skierowana jest transakcja.
  • gas: QUANTITY - (opcjonalne, domyślnie: 90000) Liczba całkowita określająca gaz dostarczony do wykonania transakcji. Zwróci niewykorzystany gaz.
  • gasPrice: QUANTITY - (opcjonalne, domyślnie: do ustalenia) Liczba całkowita określająca gasPrice użyty dla każdej opłaconej jednostki gazu, w wei.
  • value: QUANTITY - (opcjonalne) Liczba całkowita określająca wartość wysłaną z tą transakcją, w wei.
  • data: DATA - Skompilowany kod kontraktu LUB hash podpisu wywoływanej metody i zakodowanych parametrów.
  • nonce: QUANTITY - (opcjonalne) Liczba całkowita określająca nonce. Pozwala to na nadpisanie własnych oczekujących transakcji, które używają tego samego nonce.

Zwraca

DATA, Zakodowany w RLP obiekt transakcji podpisany przez określone konto.

Przykład

// Żądanie
curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'
// Wynik
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}

eth_sendTransaction

Tworzy nową transakcję wywołania wiadomości lub utworzenia kontraktu, jeśli pole danych zawiera kod, i podpisuje ją za pomocą konta określonego w from.

Parametry

  1. Object - Obiekt transakcji
  • from: DATA, 20 bajtów - Adres, z którego wysyłana jest transakcja.
  • to: DATA, 20 bajtów - (opcjonalne przy tworzeniu nowego kontraktu) Adres, do którego skierowana jest transakcja.
  • gas: QUANTITY - (opcjonalne, domyślnie: 90000) Liczba całkowita określająca gaz dostarczony do wykonania transakcji. Niewykorzystany gaz zostanie zwrócony.
  • gasPrice: QUANTITY - (opcjonalne, domyślnie: do ustalenia) Liczba całkowita określająca cenę gazu (gasPrice) używaną dla każdej opłaconej jednostki gazu.
  • value: QUANTITY - (opcjonalne) Liczba całkowita określająca wartość wysłaną wraz z tą transakcją.
  • input: DATA - Skompilowany kod kontraktu LUB hash podpisu wywoływanej metody i zakodowanych parametrów.
  • nonce: QUANTITY - (opcjonalne) Liczba całkowita określająca nonce. Pozwala to na nadpisanie własnych oczekujących transakcji, które używają tego samego nonce.

Zwraca

DATA, 32 bajty - hash transakcji lub zerowy hash, jeśli transakcja nie jest jeszcze dostępna.

Użyj eth_getTransactionReceipt, aby uzyskać adres kontraktu po tym, jak transakcja została zaproponowana w bloku, w przypadku utworzenia kontraktu.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_sendRawTransaction

Tworzy nową transakcję wywołania wiadomości lub transakcję utworzenia kontraktu dla podpisanych transakcji.

Parametry

  1. DATA, Podpisane dane transakcji.
params: [
  "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
]

Zwraca

DATA, 32 bajty - hash transakcji, lub zerowy hash, jeśli transakcja nie jest jeszcze dostępna.

Użyj eth_getTransactionReceipt, aby uzyskać adres kontraktu po tym, jak transakcja została zaproponowana w bloku, jeśli utworzyłeś kontrakt.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

eth_call

Wykonuje nowe wywołanie wiadomości natychmiast, bez tworzenia transakcji na blockchainie. Często używane do wykonywania funkcji inteligentnych kontraktów tylko do odczytu, na przykład balanceOf dla kontraktu ERC-20.

Wypróbuj punkt końcowy w środowisku testowym (opens in a new tab)

Parametry

  1. Object - Obiekt wywołania transakcji
  • from: DATA, 20 bajtów - (opcjonalnie) Adres, z którego wysyłana jest transakcja.
  • to: DATA, 20 bajtów - Adres, do którego kierowana jest transakcja.
  • gas: QUANTITY - (opcjonalnie) Liczba całkowita określająca gaz dostarczony do wykonania transakcji. eth_call zużywa zero gazu, ale ten parametr może być wymagany przez niektóre wykonania.
  • gasPrice: QUANTITY - (opcjonalnie) Liczba całkowita określająca cenę gazu używaną dla każdej opłaconej jednostki gazu
  • value: QUANTITY - (opcjonalnie) Liczba całkowita określająca wartość wysłaną z tą transakcją
  • input: DATA - (opcjonalnie) Hash podpisu metody i zakodowanych parametrów. Szczegółowe informacje można znaleźć w ABI kontraktu Ethereum w dokumentacji Solidity (opens in a new tab).
  1. QUANTITY|TAG - liczba całkowita określająca numer bloku lub ciąg znaków "latest", "earliest", "pending", "safe" lub "finalized", zobacz parametr bloku

Zwraca

DATA - wartość zwracana przez wykonany kontrakt.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x"
}

eth_estimateGas

Generuje i zwraca szacunkową ilość gazu niezbędną do zakończenia transakcji. Transakcja nie zostanie dodana do blockchaina. Należy pamiętać, że szacunkowa wartość może być znacznie wyższa niż ilość gazu faktycznie zużyta przez transakcję z różnych powodów, w tym ze względu na mechanikę EVM i wydajność węzła.

Wypróbuj punkt końcowy w środowisku testowym (opens in a new tab)

Parametry

Zobacz parametry eth_call, z tą różnicą, że wszystkie właściwości są opcjonalne. Jeśli nie określono limitu gazu, Geth używa limitu gazu z oczekującego bloku jako górnej granicy. W rezultacie zwrócona szacunkowa wartość może nie wystarczyć do wykonania wywołania/transakcji, gdy ilość gazu jest wyższa niż limit gazu oczekującego bloku.

Zwraca

QUANTITY - ilość zużytego gazu.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x5208" // 21000
}

eth_getBlockByHash

Zwraca informacje o bloku na podstawie jego hasha.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty - Hash bloku.
  2. Boolean - Jeśli true, zwraca pełne obiekty transakcji, jeśli false, tylko hashe transakcji.
params: [
  "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
  false,
]

Zwraca

Object - Obiekt bloku lub null, gdy nie znaleziono bloku:

  • number: QUANTITY - numer bloku. null, gdy jest to blok oczekujący.
  • hash: DATA, 32 bajty - hash bloku. null, gdy jest to blok oczekujący.
  • parentHash: DATA, 32 bajty - hash bloku nadrzędnego.
  • nonce: DATA, 8 bajtów - hash wygenerowanego dowodu pracy (PoW). null, gdy jest to blok oczekujący, 0x0 dla bloków dowodu stawki (PoS) (od czasu The Merge).
  • sha3Uncles: DATA, 32 bajty - SHA3 danych uncles w bloku.
  • logsBloom: DATA, 256 bajtów - filtr Blooma dla logów bloku. null, gdy jest to blok oczekujący.
  • transactionsRoot: DATA, 32 bajty - korzeń drzewa transakcji bloku.
  • stateRoot: DATA, 32 bajty - korzeń końcowego drzewa stanu bloku.
  • receiptsRoot: DATA, 32 bajty - korzeń drzewa pokwitowań bloku.
  • miner: DATA, 20 bajtów - adres beneficjenta, któremu przyznano nagrody za blok.
  • difficulty: QUANTITY - liczba całkowita określająca trudność tego bloku.
  • totalDifficulty: QUANTITY - liczba całkowita określająca całkowitą trudność łańcucha do tego bloku.
  • extraData: DATA - pole "extra data" tego bloku.
  • size: QUANTITY - liczba całkowita określająca rozmiar tego bloku w bajtach.
  • gasLimit: QUANTITY - maksymalna ilość gazu dozwolona w tym bloku.
  • gasUsed: QUANTITY - całkowita ilość gazu zużyta przez wszystkie transakcje w tym bloku.
  • timestamp: QUANTITY - znacznik czasu Unix (timestamp) momentu zestawienia bloku.
  • transactions: Array - tablica obiektów transakcji lub 32-bajtowe hashe transakcji, w zależności od ostatniego podanego parametru.
  • uncles: Array - tablica hashy uncles.

Przykład

eth_getBlockByNumber

Zwraca informacje o bloku na podstawie jego numeru.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. QUANTITY|TAG - liczba całkowita będąca numerem bloku lub ciąg znaków "earliest", "latest", "pending", "safe" lub "finalized", zgodnie z parametrem bloku.
  2. Boolean - Jeśli true, zwraca pełne obiekty transakcji, jeśli false, tylko hashe transakcji.
params: [
  "0x1b4", // 436
  true,
]

Zwraca Zobacz eth_getBlockByHash

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'

Wynik: zobacz eth_getBlockByHash

eth_getTransactionByHash

Zwraca informacje o transakcji na podstawie żądanego hasha transakcji.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty - hash transakcji
params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]

Zwraca

Object - Obiekt transakcji lub null, gdy nie znaleziono transakcji:

  • blockHash: DATA, 32 bajty - hash bloku, w którym znajdowała się ta transakcja. null, gdy jest oczekująca.
  • blockNumber: QUANTITY - numer bloku, w którym znajdowała się ta transakcja. null, gdy jest oczekująca.
  • from: DATA, 20 bajtów - adres nadawcy.
  • gas: QUANTITY - gaz dostarczony przez nadawcę.
  • gasPrice: QUANTITY - cena gazu dostarczona przez nadawcę w wei.
  • hash: DATA, 32 bajty - hash transakcji.
  • input: DATA - dane wysłane wraz z transakcją.
  • nonce: QUANTITY - liczba transakcji wykonanych przez nadawcę przed tą transakcją.
  • to: DATA, 20 bajtów - adres odbiorcy. null, gdy jest to transakcja utworzenia kontraktu.
  • transactionIndex: QUANTITY - liczba całkowita określająca pozycję indeksu transakcji w bloku. null, gdy jest oczekująca.
  • value: QUANTITY - przesłana wartość w wei.
  • v: QUANTITY - identyfikator odzyskiwania ECDSA
  • r: QUANTITY - podpis ECDSA r
  • s: QUANTITY - podpis ECDSA s

Przykład

eth_getTransactionByBlockHashAndIndex

Zwraca informacje o transakcji na podstawie hasha bloku i pozycji indeksu transakcji.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty - hash bloku.
  2. QUANTITY - liczba całkowita określająca pozycję indeksu transakcji.
params: [
  "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
  "0x0", // 0
]

Zwraca Zobacz eth_getTransactionByHash

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'

Wynik: zobacz eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

Zwraca informacje o transakcji na podstawie numeru bloku i pozycji indeksu transakcji.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. QUANTITY|TAG - numer bloku lub ciąg znaków "earliest", "latest", "pending", "safe" lub "finalized", tak jak w parametrze bloku.
  2. QUANTITY - pozycja indeksu transakcji.
params: [
  "0x9c47cf", // 10241999
  "0x24", // 36
]

Zwraca Zobacz eth_getTransactionByHash

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'

Wynik zobacz w eth_getTransactionByHash

eth_getTransactionReceipt

Zwraca pokwitowanie transakcji na podstawie hasha transakcji.

Uwaga Pokwitowanie nie jest dostępne dla oczekujących transakcji.

Parametry

  1. DATA, 32 bajty - hash transakcji
params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]

Zwraca Object - Obiekt pokwitowania transakcji lub null, gdy nie znaleziono pokwitowania:

  • transactionHash : DATA, 32 bajty - hash transakcji.
  • transactionIndex: QUANTITY - liczba całkowita określająca pozycję indeksu transakcji w bloku.
  • blockHash: DATA, 32 bajty - hash bloku, w którym znajdowała się ta transakcja.
  • blockNumber: QUANTITY - numer bloku, w którym znajdowała się ta transakcja.
  • from: DATA, 20 bajtów - adres nadawcy.
  • to: DATA, 20 bajtów - adres odbiorcy. null, gdy jest to transakcja utworzenia kontraktu.
  • cumulativeGasUsed : QUANTITY - Całkowita ilość gazu zużyta podczas wykonywania tej transakcji w bloku.
  • effectiveGasPrice : QUANTITY - Suma opłaty podstawowej i opłaty priorytetowej zapłaconej za jednostkę gazu.
  • gasUsed : QUANTITY - Ilość gazu zużyta wyłącznie przez tę konkretną transakcję.
  • contractAddress : DATA, 20 bajtów - Adres utworzonego kontraktu, jeśli transakcja była transakcją utworzenia kontraktu, w przeciwnym razie null.
  • logs: Array - Tablica obiektów logów, które wygenerowała ta transakcja.
  • logsBloom: DATA, 256 bajtów - Filtr Blooma dla lekkich klientów do szybkiego pobierania powiązanych logów.
  • type: QUANTITY - liczba całkowita określająca typ transakcji, 0x0 dla starszych transakcji (legacy), 0x1 dla typów z listą dostępu (access list), 0x2 dla opłat dynamicznych.

Zwraca również jedno z poniższych:

  • root : DATA 32 bajty korzenia stanu po transakcji (przed aktualizacją Bizancjum)
  • status: QUANTITY albo 1 (sukces), albo 0 (niepowodzenie)

Przykład

eth_getUncleByBlockHashAndIndex

Zwraca informacje o wujku bloku na podstawie hasha i pozycji indeksu wujka.

Wypróbuj punkt końcowy w środowisku testowym (opens in a new tab)

Parametry

  1. DATA, 32 bajty – hash bloku.
  2. QUANTITY – pozycja indeksu wujka.
params: [
  "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
  "0x0", // 0
]

Zwraca Zobacz eth_getBlockByHash

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'

Wynik, zobacz eth_getBlockByHash

Uwaga: Wujek nie zawiera pojedynczych transakcji.

eth_getUncleByBlockNumberAndIndex

Zwraca informacje o wujku bloku na podstawie numeru bloku i pozycji indeksu wujka.

Wypróbuj endpoint w środowisku testowym (opens in a new tab)

Parametry

  1. QUANTITY|TAG - numer bloku lub ciąg znaków "earliest", "latest", "pending", "safe", "finalized", tak jak w parametrze bloku.
  2. QUANTITY - pozycja indeksu wujka.
params: [
  "0x29c", // 668
  "0x0", // 0
]

Zwraca Zobacz eth_getBlockByHash

Uwaga: Wujek nie zawiera pojedynczych transakcji.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'

Wynik, zobacz eth_getBlockByHash

eth_newFilter

Tworzy obiekt filtra na podstawie opcji filtrowania, aby powiadamiać o zmianach stanu (logach). Aby sprawdzić, czy stan uległ zmianie, wywołaj eth_getFilterChanges.

Uwaga dotycząca określania filtrów tematów: Tematy są zależne od kolejności. Transakcja z logiem zawierającym tematy [A, B] zostanie dopasowana przez następujące filtry tematów:

  • [] "cokolwiek"
  • [A] "A na pierwszej pozycji (i cokolwiek po nim)"
  • [null, B] "cokolwiek na pierwszej pozycji ORAZ B na drugiej pozycji (i cokolwiek po nim)"
  • [A, B] "A na pierwszej pozycji ORAZ B na drugiej pozycji (i cokolwiek po nim)"
  • [[A, B], [A, B]] "(A LUB B) na pierwszej pozycji ORAZ (A LUB B) na drugiej pozycji (i cokolwiek po nim)"
  • Parametry
  1. Object - Opcje filtra:
  • fromBlock: QUANTITY|TAG - (opcjonalnie, domyślnie: "latest") Całkowity numer bloku, lub "latest" dla ostatniego zaproponowanego bloku, "safe" dla najnowszego bezpiecznego bloku, "finalized" dla najnowszego sfinalizowanego bloku, lub "pending", "earliest" dla transakcji, które nie są jeszcze w bloku.
  • toBlock: QUANTITY|TAG - (opcjonalnie, domyślnie: "latest") Całkowity numer bloku, lub "latest" dla ostatniego zaproponowanego bloku, "safe" dla najnowszego bezpiecznego bloku, "finalized" dla najnowszego sfinalizowanego bloku, lub "pending", "earliest" dla transakcji, które nie są jeszcze w bloku.
  • address: DATA|Array, 20 bajtów - (opcjonalnie) Adres kontraktu lub lista adresów, z których powinny pochodzić logi.
  • topics: Array of DATA, - (opcjonalnie) Tablica 32-bajtowych tematów DATA. Tematy są zależne od kolejności. Każdy temat może być również tablicą DATA z opcjami „lub”.

Zwraca QUANTITY - Identyfikator filtra.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}

eth_newBlockFilter

Tworzy filtr w węźle, aby powiadamiać o nadejściu nowego bloku. Aby sprawdzić, czy stan uległ zmianie, wywołaj eth_getFilterChanges.

Parametry Brak

Zwraca QUANTITY - Identyfikator filtra.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
// Wynik
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}

eth_newPendingTransactionFilter

Tworzy filtr w węźle, aby powiadamiać o nadejściu nowych oczekujących transakcji. Aby sprawdzić, czy stan uległ zmianie, wywołaj eth_getFilterChanges.

Parametry Brak

Zwraca QUANTITY - Identyfikator filtru.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
// Wynik
{
  "id":1,
  "jsonrpc":  "2.0",
  "result": "0x1" // 1
}

eth_uninstallFilter

Odinstalowuje filtr o podanym identyfikatorze. Należy zawsze wywoływać tę metodę, gdy obserwowanie nie jest już potrzebne. Dodatkowo filtry wygasają, gdy nie są odpytywane za pomocą eth_getFilterChanges przez pewien czas.

Parametry

  1. QUANTITY - Identyfikator filtra.
params: [
  "0xb", // 11
]

Zwraca Boolean - true, jeśli filtr został pomyślnie odinstalowany, w przeciwnym razie false.

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
// Wynik
{
  "id":1,
  "jsonrpc": "2.0",
  "result": true
}

eth_getFilterChanges

Metoda odpytywania dla filtru, która zwraca tablicę logów, które wystąpiły od ostatniego odpytania.

Parametry

  1. QUANTITY - identyfikator filtru.
params: [
  "0x16", // 22
]

Zwraca Array - Tablica obiektów logów lub pusta tablica, jeśli nic się nie zmieniło od ostatniego odpytania.

  • Dla filtrów utworzonych za pomocą eth_newBlockFilter zwracane są hashe bloków (DATA, 32 bajty), np. ["0x3454645634534..."].

  • Dla filtrów utworzonych za pomocą eth_newPendingTransactionFilter zwracane są hashe transakcji (DATA, 32 bajty), np. ["0x6345343454645..."].

  • Dla filtrów utworzonych za pomocą eth_newFilter logi są obiektami o następujących parametrach:

    • removed: TAG - true, gdy log został usunięty z powodu reorganizacji łańcucha. false, jeśli jest to prawidłowy log.
    • logIndex: QUANTITY - liczba całkowita określająca pozycję indeksu logu w bloku. null, gdy jest to log oczekujący.
    • transactionIndex: QUANTITY - liczba całkowita określająca pozycję indeksu transakcji, z której utworzono log. null, gdy jest to log oczekujący.
    • transactionHash: DATA, 32 bajty - hash transakcji, z której utworzono ten log. null, gdy jest to log oczekujący.
    • blockHash: DATA, 32 bajty - hash bloku, w którym znajdował się ten log. null, gdy jest oczekujący. null, gdy jest to log oczekujący.
    • blockNumber: QUANTITY - numer bloku, w którym znajdował się ten log. null, gdy jest oczekujący. null, gdy jest to log oczekujący.
    • address: DATA, 20 bajtów - adres, z którego pochodzi ten log.
    • data: DATA - nieindeksowane dane logu o zmiennej długości. (W języku Solidity: zero lub więcej 32-bajtowych nieindeksowanych argumentów logu.)
    • topics: Array of DATA - Tablica od 0 do 4 32-bajtowych DATA indeksowanych argumentów logu. (W języku Solidity: Pierwszy temat to hash podpisu zdarzenia (np. Deposit(address,bytes32,uint256)), chyba że zdarzenie zostało zadeklarowane ze specyfikatorem anonymous.)
  • Przykład

eth_getFilterLogs

Zwraca tablicę wszystkich logów pasujących do filtra o podanym identyfikatorze.

Parametry

  1. QUANTITY - Identyfikator filtra.
params: [
  "0x16", // 22
]

Zwraca Zobacz eth_getFilterChanges

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'

Wynik: zobacz eth_getFilterChanges

eth_getLogs

Zwraca tablicę wszystkich logów pasujących do podanego obiektu filtru.

Parametry

  1. Object - Opcje filtru:
  • fromBlock: QUANTITY|TAG - (opcjonalnie, domyślnie: "latest") Numer bloku jako liczba całkowita, lub "latest" dla ostatniego zaproponowanego bloku, "safe" dla najnowszego bezpiecznego bloku, "finalized" dla najnowszego sfinalizowanego bloku, lub "pending", "earliest" dla transakcji, które nie są jeszcze w bloku.
  • toBlock: QUANTITY|TAG - (opcjonalnie, domyślnie: "latest") Numer bloku jako liczba całkowita, lub "latest" dla ostatniego zaproponowanego bloku, "safe" dla najnowszego bezpiecznego bloku, "finalized" dla najnowszego sfinalizowanego bloku, lub "pending", "earliest" dla transakcji, które nie są jeszcze w bloku.
  • address: DATA|Array, 20 bajtów - (opcjonalnie) Adres kontraktu lub lista adresów, z których powinny pochodzić logi.
  • topics: Array of DATA, - (opcjonalnie) Tablica 32-bajtowych tematów DATA. Tematy zależą od kolejności. Każdy temat może być również tablicą DANYCH z opcjami „lub”.
  • blockHash: DATA, 32 bajty - (opcjonalnie, w przyszłości) Wraz z dodaniem EIP-234, blockHash będzie nową opcją filtru, która ogranicza zwracane logi do pojedynczego bloku o 32-bajtowym hashu blockHash. Użycie blockHash jest równoznaczne z fromBlock = toBlock = numer bloku z hashem blockHash. Jeśli blockHash jest obecny w kryteriach filtru, to ani fromBlock, ani toBlock nie są dozwolone.
params: [
  {
    topics: [
      "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
    ],
  },
]

Zwraca Zobacz eth_getFilterChanges

Przykład

// Żądanie
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'

Wynik zobacz w eth_getFilterChanges

Przykład użycia

Wdrażanie kontraktu za pomocą JSON_RPC

Ta sekcja zawiera demonstrację, jak wdrożyć kontrakt używając tylko interfejsu RPC. Istnieją alternatywne sposoby wdrażania kontraktów, w których ta złożoność jest ukryta — na przykład przy użyciu bibliotek zbudowanych na interfejsie RPC, takich jak Web3.js (opens in a new tab) i Web3.py (opens in a new tab). Te abstrakcje są na ogół łatwiejsze do zrozumienia i mniej podatne na błędy, ale nadal warto wiedzieć, jak to działa od podszewki.

Poniżej znajduje się prosty inteligentny kontrakt o nazwie Multiply7, który zostanie wdrożony za pomocą interfejsu JSON-RPC w węźle Ethereum. Ten samouczek zakłada, że czytelnik ma już uruchomiony węzeł Geth. Więcej informacji o węzłach i klientach jest dostępnych tutaj. Zapoznaj się z dokumentacją poszczególnych klientów, aby dowiedzieć się, jak uruchomić HTTP JSON-RPC dla klientów innych niż Geth. Większość klientów domyślnie nasłuchuje na localhost:8545.

contract Multiply7 {
    event Print(uint);
    function multiply(uint input) returns (uint) {
        Print(input * 7);
        return input * 7;
    }
}

Pierwszą rzeczą, którą należy zrobić, jest upewnienie się, że interfejs HTTP RPC jest włączony. Oznacza to, że podczas uruchamiania przekazujemy do Geth flagę --http. W tym przykładzie używamy węzła Geth w prywatnym łańcuchu deweloperskim. Dzięki takiemu podejściu nie potrzebujemy etheru w prawdziwej sieci.

geth --http --dev console 2>>geth.log

Spowoduje to uruchomienie interfejsu HTTP RPC na http://localhost:8545.

Możemy sprawdzić, czy interfejs działa, pobierając adres Coinbase (uzyskując pierwszy adres z tablicy kont) i saldo za pomocą curl (opens in a new tab). Należy pamiętać, że dane w tych przykładach będą się różnić w Twoim lokalnym węźle. Jeśli chcesz wypróbować te polecenia, zastąp parametry żądania w drugim wywołaniu curl wynikiem zwróconym z pierwszego.

curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545
{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}

curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545
{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}

Ponieważ liczby są zakodowane szesnastkowo, saldo jest zwracane w wei jako ciąg szesnastkowy. Jeśli chcemy uzyskać saldo w etherze jako liczbę, możemy użyć web3 z konsoli Geth.

web3.fromWei("0x1639e49bba16280000", "ether")
// "410"

Teraz, gdy na naszym prywatnym łańcuchu deweloperskim znajduje się trochę etheru, możemy wdrożyć kontrakt. Pierwszym krokiem jest kompilacja kontraktu Multiply7 do kodu bajtowego, który może zostać wysłany do EVM. Aby zainstalować solc, kompilator Solidity, postępuj zgodnie z dokumentacją Solidity (opens in a new tab). (Możesz chcieć użyć starszej wersji solc, aby dopasować ją do wersji kompilatora użytej w naszym przykładzie (opens in a new tab)).

Kolejnym krokiem jest kompilacja kontraktu Multiply7 do kodu bajtowego, który może zostać wysłany do EVM.

echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin

======= <stdin>:Multiply7 =======
Binary:
6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029

Teraz, gdy mamy skompilowany kod, musimy ustalić, ile gazu będzie kosztować jego wdrożenie. Interfejs RPC posiada metodę eth_estimateGas, która poda nam szacunkową wartość.

curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545
{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}

I wreszcie wdrożyć kontrakt.

curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545
{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}

Transakcja zostaje zaakceptowana przez węzeł i zwracany jest hash transakcji. Ten hash może posłużyć do śledzenia transakcji. Kolejnym krokiem jest określenie adresu, pod którym wdrożono nasz kontrakt. Każda wykonana transakcja utworzy pokwitowanie. To pokwitowanie zawiera różne informacje o transakcji, takie jak to, w którym bloku transakcja została zawarta i ile gazu zużyła maszyna EVM. Jeśli transakcja tworzy kontrakt, będzie również zawierać adres kontraktu. Możemy pobrać pokwitowanie za pomocą metody RPC eth_getTransactionReceipt.

curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545
{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}

Nasz kontrakt został utworzony pod adresem 0x4d03d617d700cf81935d7f797f4e2ae719648262. Wynik null zamiast pokwitowania oznacza, że transakcja nie została jeszcze włączona do bloku. Poczekaj chwilę, sprawdź, czy Twój klient konsensusu jest uruchomiony i spróbuj ponownie.

Interakcja z inteligentnymi kontraktami

W tym przykładzie wyślemy transakcję za pomocą eth_sendTransaction do metody multiply kontraktu.

eth_sendTransaction wymaga kilku argumentów, w szczególności from, to i data. From to publiczny adres naszego konta, a to to adres kontraktu. Argument data zawiera ładunek (payload), który określa, jaka metoda ma zostać wywołana i z jakimi argumentami. W tym miejscu do gry wkracza ABI (binarny interfejs aplikacji) (opens in a new tab). ABI to plik JSON, który określa, jak definiować i kodować dane dla EVM.

Bajty ładunku określają, która metoda w kontrakcie jest wywoływana. Są to pierwsze 4 bajty z hasha Keccak nazwy funkcji i typów jej argumentów, zakodowane szesnastkowo. Funkcja multiply przyjmuje uint, który jest aliasem dla uint256. Daje nam to:

web3.sha3("multiply(uint256)").substring(0, 10)
// "0xc6888fa1"

Kolejnym krokiem jest zakodowanie argumentów. Mamy tylko jeden uint256, powiedzmy, wartość 6. ABI posiada sekcję, która określa, jak kodować typy uint256.

int<M>: enc(X) to kodowanie X w kodzie uzupełnień do dwóch w formacie big-endian, uzupełnione po stronie wyższego rzędu (z lewej) wartością 0xff dla ujemnego X i bajtami zerowymi dla dodatniego X, tak aby długość była wielokrotnością 32 bajtów.

Koduje się to jako 0000000000000000000000000000000000000000000000000000000000000006.

Łącząc selektor funkcji i zakodowany argument, nasze dane będą miały postać 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.

Można to teraz wysłać do węzła:

curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545
{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}

Ponieważ transakcja została wysłana, zwrócono hash transakcji. Pobranie pokwitowania daje:

Pokwitowanie zawiera log. Ten log został wygenerowany przez EVM podczas wykonywania transakcji i dołączony do pokwitowania. Funkcja multiply pokazuje, że zdarzenie Print zostało wywołane z wartością wejściową pomnożoną przez 7. Ponieważ argumentem dla zdarzenia Print był uint256, możemy go zdekodować zgodnie z regułami ABI, co da nam oczekiwaną wartość dziesiętną 42. Oprócz danych warto zauważyć, że tematy (topics) mogą być użyte do określenia, które zdarzenie utworzyło log:

web3.sha3("Print(uint256)")
// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"

To było tylko krótkie wprowadzenie do niektórych z najczęstszych zadań, demonstrujące bezpośrednie użycie JSON-RPC.