API JSON-RPC
Strona ostatnio zaktualizowana: 23 lutego 2026
Aby aplikacja mogła wchodzić w interakcję z blockchainem Ethereum – odczytywać dane blockchainu lub wysyłać transakcje do sieci – musi łączyć się z węzłem Ethereum.
W tym celu każdy klient Ethereum implementuje specyfikację JSON-RPCopens in a new tab, więc istnieje jednolity zestaw metod, na których aplikacje mogą polegać niezależnie od konkretnej implementacji węzła lub klienta.
JSON-RPCopens in a new tab to bezstanowy, lekki protokół zdalnego wywoływania procedur (RPC). Definiuje kilka struktur danych i zasady dotyczące ich przetwarzania. Jest niezależny od transportu, ponieważ koncepcje te mogą być używane w ramach tego samego procesu, przez gniazda, przez HTTP lub w wielu różnych środowiskach przekazywania komunikatów. Używa formatu danych JSON (RFC 4627).
Implementacje klienta
Klienci Ethereum mogą wykorzystywać różne języki programowania podczas wdrażania specyfikacji JSON-RPC. Więcej szczegółów na temat konkretnych języków programowania można znaleźć w dokumentacji poszczególnych klientów. Zalecamy sprawdzenie dokumentacji każdego klienta w celu uzyskania najnowszych informacji o obsłudze API.
Biblioteki ułatwiające
Chociaż można zdecydować się na bezpośrednią interakcję z klientami Ethereum za pośrednictwem interfejsu API JSON-RPC, często istnieją łatwiejsze opcje dla deweloperów dapp. Istnieje wiele bibliotek JavaScript i API backendowych, które zapewniają wrappery na API JSON-RPC. Dzięki tym bibliotekom deweloperzy mogą pisać intuicyjne, jednowierszowe metody w wybranym przez siebie języku programowania, aby inicjować żądania JSON-RPC (w tle), które wchodzą w interakcję z Ethereum.
Interfejsy API klienta konsensusu
Ta strona dotyczy głównie interfejsu API JSON-RPC używanego przez klientów wykonawczych Ethereum. Jednak klienci konsensusu mają również interfejs API RPC, który pozwala użytkownikom na wysyłanie zapytań o informacje o węźle, żądanie bloków Beacon, stanu Beacon i innych informacji związanych z konsensusem bezpośrednio z węzła. Ten interfejs API jest udokumentowany na stronie internetowej Beacon APIopens in a new tab.
Wewnętrzny interfejs API jest również używany do komunikacji między klientami w węźle – to znaczy, umożliwia klientowi konsensusu i klientowi wykonawczemu wymianę danych. Nazywa się to „Engine API”, a specyfikacje są dostępne na GitHubieopens in a new tab.
Specyfikacja klienta wykonawczego
Przeczytaj pełną specyfikację API JSON-RPC na GitHubieopens in a new tab. Ten interfejs API jest udokumentowany na stronie Execution APIopens in a new tab i zawiera Inspektor, który pozwala wypróbować wszystkie dostępne metody.
Konwencje
Kodowanie wartości szesnastkowych
Dwa kluczowe typy danych są przekazywane przez JSON: niesformatowane tablice bajtów i ilości. Oba są przekazywane z kodowaniem szesnastkowym, ale z różnymi wymaganiami dotyczącymi formatowania.
Ilości
Podczas kodowania ilości (liczb całkowitych, liczb): zakoduj jako hex, poprzedź prefiksem "0x", najbardziej kompaktowa reprezentacja (niewielki wyjątek: zero powinno być reprezentowane jako "0x0").
Oto kilka przykładów:
- 0x41 (65 dziesiętnie)
- 0x400 (1024 dziesiętnie)
- BŁĄD: 0x (powinien zawsze mieć co najmniej jedną cyfrę - zero to "0x0")
- BŁĄD: 0x0400 (niedozwolone zera wiodące)
- BŁĄD: ff (musi być poprzedzone 0x)
Dane niesformatowane
Podczas kodowania niesformatowanych danych (tablice bajtów, adresy kont, hasze, tablice kodu bajtowego): koduj jako hex, poprzedź prefiksem "0x", dwie cyfry szesnastkowe na bajt.
Oto kilka przykładów:
- 0x41 (rozmiar 1, "A")
- 0x004200 (rozmiar 3, "0B0")
- 0x (rozmiar 0, "")
- BŁĄD: 0xf0f0f (musi być parzysta liczba cyfr)
- BŁĄD: 004200 (musi być poprzedzone 0x)
Parametr bloku
Następujące metody mają parametr bloku:
Kiedy składane są żądania dotyczące stanu Ethereum, podany parametr bloku określa wysokość bloku.
Dla parametru bloku możliwe są następujące opcje:
Ciąg HEX- numer bloku w postaci liczby całkowitejCiąg znaków "earliest"dla najwcześniejszego/genezy blokuCiąg znaków "latest"– dla ostatniego zaproponowanego blokuCiąg znaków "safe"– dla ostatniego bezpiecznego bloku głównegoCiąg znaków "finalized"– dla ostatniego sfinalizowanego blokuCiąg znaków "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ń, curlopens in a new tab. Te indywidualne przykłady punktów końcowych znajdują się poniżej w sekcji Przykłady Curl. W dalszej części strony przedstawiamy również kompletny przykład kompilowania i wdrażania inteligentnego kontraktu za pomocą węzła Geth, interfejsu API JSON_RPC i curl.
Przykłady Curl
Poniżej przedstawiono przykłady użycia interfejsu API JSON_RPC poprzez wysyłanie żądań curlopens in a new tab do węzła Ethereum. Każdy przykład zawiera opis konkretnego punktu końcowego, jego parametrów, typu zwrotnego i praktyczny przykład jego użycia.
Żądania curl mogą zwrócić komunikat o błędzie związany z typem zawartości. Dzieje się tak, ponieważ opcja --data ustawia typ zawartości na application/x-www-form-urlencoded. Jeśli twój węzeł zgłasza ten problem, ręcznie ustaw nagłówek, umieszczając -H "Content-Type: application/json" na początku wywołania. Przykłady nie zawierają również kombinacji URL/IP i portu, która musi być ostatnim argumentem podanym do curl (np. 127.0.0.1:8545). Pełne żądanie curl zawierające te dodatkowe dane ma następującą postać:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545Plotki, stan, historia
Kilka podstawowych metod JSON-RPC wymaga danych z sieci Ethereum i dzieli się na trzy główne kategorie: Plotki, Stan i Historia. Użyj linków w tych sekcjach, aby przejść do każdej metody, lub użyj spisu treści, aby przejrzeć całą listę metod.
Metody plotkowania
Metody te śledzą nagłówek łańcucha. W ten sposób transakcje krążą po sieci, trafiają do bloków, a klienci dowiadują się o nowych blokach.
Metody stanu
Metody, które raportują aktualny stan wszystkich przechowywanych danych. "Stan" jest jak jeden duży, współdzielony fragment pamięci RAM i obejmuje salda kont, dane kontraktów i szacunki gazu.
Metody historii
Pobiera historyczne zapisy każdego bloku aż do bloku genezy. Jest to jak jeden duży plik tylko do dołączania i zawiera wszystkie nagłówki bloków, treści bloków, bloki uncle i potwierdzenia transakcji.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
Plac zabaw API JSON-RPC
Możesz użyć narzędzia placu zabawopens in a new tab, aby odkryć i wypróbować metody API. Pokazuje 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 bieżącą wersję klienta.
Parametry
Brak
Zwraca
String - aktualna wersja klienta
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}web3_sha3
Zwraca Keccak-256 (nie standaryzowany SHA3-256) podanych danych.
Parametry
DATA- dane do przekształcenia w hasz SHA3
1params: ["0x68656c6c6f20776f726c64"]Zwraca
DATA - wynik SHA3 podanego ciągu.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}net_version
Zwraca bieżący identyfikator sieci.
Parametry
Brak
Zwraca
String - bieżący identyfikator sieci.
Pełna lista aktualnych identyfikatorów sieci jest dostępna na stronie chainlist.orgopens in a new tab. Niektóre z popularnych to:
1: Sieć główna Ethereum11155111: Sieć testowa Sepolia560048: Sieć testowa Hoodi
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
Zwraca true, jeśli klient aktywnie nasłuchuje połączeń sieciowych.
Parametry
Brak
Zwraca
Boolean - true podczas słuchania, w przeciwnym razie false.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
Zwraca liczbę peerów aktualnie podłączonych do klienta.
Parametry
Brak
Zwraca
QUANTITY - liczba całkowita połączonych peerów.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}eth_protocolVersion
Zwraca aktualną wersję protokołu Ethereum. Należy pamiętać, że ta metoda jest niedostępna w Gethopens in a new tab.
Parametry
Brak
Zwraca
String - bieżąca wersja protokołu Ethereum
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
Zwraca obiekt z danymi o stanie synchronizacji lub false.
Parametry
Brak
Zwraca
Dokładne zwracane dane różnią się w zależności od implementacji klienta. Wszyscy klienci zwracają False, gdy węzeł nie jest synchronizowany, i wszyscy klienci zwracają następujące pola.
Object|Boolean, obiekt z danymi o stanie synchronizacji lub FALSE, gdy nie synchronizuje:
startingBlock:QUANTITY- blok, od którego rozpoczął się import (zostanie zresetowany dopiero po osiągnięciu przez synchronizację nagłówka)currentBlock:QUANTITY- bieżący blok, tak samo jak eth_blockNumberhighestBlock:QUANTITY- szacowany najwyższy blok
Jednak poszczególni klienci mogą również dostarczać dodatkowe dane. Na przykład Geth zwraca następujące informacje:
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "currentBlock": "0x3cf522",6 "healedBytecodeBytes": "0x0",7 "healedBytecodes": "0x0",8 "healedTrienodes": "0x0",9 "healingBytecode": "0x0",10 "healingTrienodes": "0x0",11 "highestBlock": "0x3e0e41",12 "startingBlock": "0x3cbed5",13 "syncedAccountBytes": "0x0",14 "syncedAccounts": "0x0",15 "syncedBytecodeBytes": "0x0",16 "syncedBytecodes": "0x0",17 "syncedStorage": "0x0",18 "syncedStorageBytes": "0x0"19 }20}Pokaż wszystkoNatomiast Besu zwraca:
1{2 "jsonrpc": "2.0",3 "id": 51,4 "result": {5 "startingBlock": "0x0",6 "currentBlock": "0x1518",7 "highestBlock": "0x9567a3",8 "pulledStates": "0x203ca",9 "knownStates": "0x200636"10 }11}Pokaż wszystkoWięcej szczegółów można znaleźć w dokumentacji konkretnego klienta.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Pokaż wszystkoeth_coinbase
Zwraca adres coinbase klienta.
Wypróbuj punkt końcowy w placu zabawopens in a new tabUwaga: ta metoda została wycofana od wersji v1.14.0 i nie jest już obsługiwana. Próba użycia tej metody spowoduje błąd "Metoda nie jest obsługiwana".
Parametry
Brak
Zwraca
DATA, 20 bajtów - aktualny adres coinbase.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}eth_chainId
Zwraca identyfikator łańcucha używany do podpisywania transakcji chronionych przed powtórzeniem.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
Brak
Zwraca
chainId, wartość szesnastkowa jako ciąg reprezentujący liczbę całkowitą bieżącego identyfikatora łańcucha.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}eth_mining
Zwraca true, jeśli klient aktywnie wydobywa nowe bloki. Może to zwrócić true tylko dla sieci proof-of-work i może nie być dostępne w niektórych klientach od czasu The Merge.
Parametry
Brak
Zwraca
Boolean - zwraca true, jeśli klient wydobywa, w przeciwnym razie false.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}eth_hashrate
Zwraca liczbę haszy na sekundę, z jaką kopie węzeł. Może to zwrócić true tylko dla sieci proof-of-work i może nie być dostępne w niektórych klientach od czasu The Merge.
Parametry
Brak
Zwraca
QUANTITY - liczba haszy na sekundę.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}eth_gasPrice
Zwraca szacunkową bieżącą cenę za gaz w wei. Na przykład klient Besu domyślnie sprawdza ostatnie 100 bloków i zwraca medianę ceny jednostki gazu.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
Brak
Zwraca
QUANTITY - liczba całkowita bieżącej ceny gazu w wei.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}eth_accounts
Zwraca listę adresów należących do klienta.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
Brak
Zwraca
Array of DATA, 20 bajtów - adresy należące do klienta.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}eth_blockNumber
Zwraca numer ostatniego bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
Brak
Zwraca
QUANTITY - liczba całkowita bieżącego numeru bloku, na którym znajduje się klient.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}eth_getBalance
Zwraca saldo konta pod podanym adresem.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 20 bajtów - adres do sprawdzenia salda.QUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe"lub"finalized", zobacz parametr bloku
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Zwraca
QUANTITY - liczba całkowita bieżącego salda w wei.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}eth_getStorageAt
Zwraca wartość z pozycji przechowywania pod danym adresem.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 20 bajtów - adres pamięci masowej.QUANTITY- liczba całkowita pozycji w pamięci.QUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe","finalized", zobacz parametr bloku
Zwraca
DATA - wartość w tej pozycji pamięci.
Przykład
Obliczenie prawidłowej pozycji zależy od pamięci, którą należy pobrać. Rozważ następujący kontrakt wdrożony pod adresem 0x295a70b2de5e3953354a6a8344e616ed314d7251 z adresu 0x391694e7e0b0cce554cb130d723a9d27458f9298.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}Pobranie wartości pos0 jest proste:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}Pobranie elementu mapy jest trudniejsze. Pozycję elementu w mapie oblicza się za pomocą:
1keccak(LeftPad32(klucz, 0), LeftPad32(pozycja w mapie, 0))Oznacza to, że aby pobrać pamięć z pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] musimy obliczyć pozycję za pomocą:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)Konsola geth, która jest dostarczana z biblioteką web3, może być użyta do wykonania obliczeń:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Teraz, aby pobrać pamięć:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}eth_getTransactionCount
Zwraca liczbę transakcji wysłanych z adresu.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 20 bajtów - adres.QUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe"lub"finalized", zobacz parametr bloku
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // stan w ostatnim bloku4]Zwraca
QUANTITY - liczba całkowita transakcji wysłanych z tego adresu.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getBlockTransactionCountByHash
Zwraca liczbę transakcji w bloku z bloku pasującego do podanego haszu bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz bloku
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Zwraca
QUANTITY - liczba całkowita liczby transakcji w tym bloku.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getBlockTransactionCountByNumber
Zwraca liczbę transakcji w bloku pasującym do podanego numeru bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
QUANTITY|TAG- liczba całkowita numeru bloku lub ciąg"earliest","latest","pending","safe"lub"finalized", jak w parametrze bloku.
1params: [2 "0x13738ca", // 203962343]Zwraca
QUANTITY - liczba całkowita liczby transakcji w tym bloku.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getUncleCountByBlockHash
Zwraca liczbę bloków uncle w bloku pasującym do podanego haszu bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz bloku
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Zwraca
QUANTITY - liczba całkowita liczby bloków uncle w tym bloku.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getUncleCountByBlockNumber
Zwraca liczbę bloków uncle w bloku pasującym do podanego numeru bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
QUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe"lub"finalized", zobacz parametr bloku
1params: [2 "0xe8", // 2323]Zwraca
QUANTITY - liczba całkowita liczby bloków uncle w tym bloku.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0" // 08}eth_getCode
Zwraca kod pod podanym adresem.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 20 bajtów - adresQUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe"lub"finalized", zobacz parametr bloku
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Zwraca
DATA - kod z podanego adresu.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
Metoda podpisu oblicza specyficzny dla Ethereum podpis za pomocą: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
Dodanie prefiksu do komunikatu sprawia, że obliczony podpis jest rozpoznawalny jako podpis specyficzny dla Ethereum. Zapobiega to nadużyciom, w których złośliwa dappka może podpisywać dowolne dane (np. transakcję) i używać podpisu do podszywania się pod ofiarę.
Uwaga: adres, którym się podpisujesz, musi być odblokowany.
Parametry
DATA, 20 bajtów - adresDATA, N bajtów - komunikat do podpisania
Zwraca
DATA: Podpis
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_signTransaction
Podpisuje transakcję, która może być przesłana do sieci w późniejszym czasie za pomocą eth_sendRawTransaction.
Parametry
Object– obiekt transakcji
type:from:DATA, 20 bajtów - adres, z którego wysyłana jest transakcja.to:DATA, 20 bajtów - (opcjonalnie przy tworzeniu nowego kontraktu) adres, na który kierowana jest transakcja.gas:QUANTITY- (opcjonalnie, domyślnie: 90000) Liczba całkowita gazu przeznaczonego na wykonanie transakcji. Zwróci niewykorzystany gaz.gasPrice:QUANTITY- (opcjonalne, domyślne: do ustalenia) Liczba całkowita gasPrice używana dla każdego opłaconego gazu, w Wei.value:QUANTITY- (opcjonalnie) Liczba całkowita wartości wysłanej z tą transakcją, w Wei.data:DATA- skompilowany kod kontraktu LUB hasz wywołanej sygnatury metody i zakodowanych parametrów.nonce:QUANTITY- (opcjonalne) Liczba całkowita nonce. Pozwala to na nadpisanie własnych oczekujących transakcji, które używają tego samego nonce.
Zwraca
DATA, obiekt transakcji zakodowany w RLP i podpisany przez określone konto.
Przykład
1// Request2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_sendTransaction
Tworzy nową transakcję wywołania komunikatu lub tworzy kontrakt, jeśli pole danych zawiera kod, i podpisuje ją za pomocą konta określonego w from.
Parametry
Object– obiekt transakcji
from:DATA, 20 bajtów - adres, z którego wysyłana jest transakcja.to:DATA, 20 bajtów - (opcjonalnie przy tworzeniu nowego kontraktu) adres, na który kierowana jest transakcja.gas:QUANTITY- (opcjonalnie, domyślnie: 90000) Liczba całkowita gazu przeznaczonego na wykonanie transakcji. Zwróci niewykorzystany gaz.gasPrice:QUANTITY- (opcjonalne, domyślne: do ustalenia) Liczba całkowita gasPrice używana dla każdego opłaconego gazu.value:QUANTITY- (opcjonalnie) Liczba całkowita wartości wysłanej w ramach tej transakcji.input:DATA- skompilowany kod kontraktu LUB hasz wywołanej sygnatury metody i zakodowanych parametrów.nonce:QUANTITY- (opcjonalne) Liczba całkowita nonce. Pozwala to na nadpisanie własnych oczekujących transakcji, które używają tego samego nonce.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Pokaż wszystkoZwraca
DATA, 32 bajty - hasz transakcji lub hasz zerowy, jeśli transakcja nie jest jeszcze dostępna.
Użyj eth_getTransactionReceipt, aby uzyskać adres kontraktu po zaproponowaniu transakcji w bloku, gdy utworzyłeś kontrakt.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_sendRawTransaction
Tworzy nową transakcję wywołania wiadomości lub tworzenie kontraktu dla podpisanych transakcji.
Parametry
DATA, dane podpisanej transakcji.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Zwraca
DATA, 32 bajty - hasz transakcji lub hasz zerowy, jeśli transakcja nie jest jeszcze dostępna.
Użyj eth_getTransactionReceipt, aby uzyskać adres kontraktu po zaproponowaniu transakcji w bloku, gdy utworzyłeś kontrakt.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_call
Wykonuje natychmiastowe wywołanie nowego komunikatu 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.
Parametry
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, na który kierowana jest transakcja.gas:QUANTITY- (opcjonalnie) Liczba całkowita gazu przeznaczonego na wykonanie transakcji. eth_call zużywa zero gazu, ale ten parametr może być potrzebny w niektórych wykonaniach.gasPrice:QUANTITY- (opcjonalne) Liczba całkowita gasPrice użyta dla każdego opłaconego gazuvalue:QUANTITY- (opcjonalnie) Liczba całkowita wartości wysłanej w tej transakcjiinput:DATA- (opcjonalnie) hasz sygnatury metody i zakodowanych parametrów. Szczegółowe informacje można znaleźć w ABI kontraktu Ethereum w dokumentacji Solidityopens in a new tab.
QUANTITY|TAG- numer bloku w postaci liczby całkowitej lub ciąg znaków"latest","earliest","pending","safe"lub"finalized", zobacz parametr bloku
Zwraca
DATA - wartość zwracana przez wykonany kontrakt.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}eth_estimateGas
Generuje i zwraca oszacowanie, ile gazu jest potrzebne, aby transakcja mogła zostać ukończona. Transakcja nie zostanie dodana do blockchainu. Należy pamiętać, że szacunkowa wartość może być znacznie wyższa niż ilość gazu faktycznie zużytego przez transakcję z różnych powodów, w tym z powodu mechaniki EVM i wydajności węzła.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
Zobacz parametry eth_call, z wyjątkiem tego, że wszystkie właściwości są opcjonalne. Jeśli nie określono limitu gazu, geth używa limitu gazu z bloku oczekującego jako górnej granicy. W rezultacie zwrócona estymacja może nie być wystarczająca do wykonania wywołania/transakcji, gdy ilość gazu jest wyższa niż limit gazu w oczekującym bloku.
Zwraca
QUANTITY - ilość zużytego gazu.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}eth_getBlockByHash
Zwraca informacje o bloku po haszu.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz bloku.Boolean- jeślitrue, zwraca pełne obiekty transakcji, jeślifalse, tylko hasze transakcji.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Zwraca
Object - obiekt bloku lub null, jeśli nie znaleziono bloku:
number:QUANTITY- numer bloku.null, gdy jest to blok oczekujący.hash:DATA, 32 bajty - hasz bloku.null, gdy jest to blok oczekujący.parentHash:DATA, 32 bajty - hasz bloku nadrzędnego.nonce:DATA, 8 bajtów - hasz wygenerowanego dowodu pracy.null, gdy jest to blok oczekujący,0x0dla bloków proof-of-stake (od czasu The Merge)sha3Uncles:DATA, 32 bajty - SHA3 danych bloków uncle 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 potwierdzeń bloku.miner:DATA, 20 bajtów - adres beneficjenta, któremu przyznano nagrody za blok.difficulty:QUANTITY- liczba całkowita trudności dla tego bloku.totalDifficulty:QUANTITY- liczba całkowita całkowitej trudności łańcucha aż do tego bloku.extraData:DATA- pole "dodatkowych danych" tego bloku.size:QUANTITY- liczba całkowita rozmiaru tego bloku w bajtach.gasLimit:QUANTITY- maksymalna ilość gazu dozwolona w tym bloku.gasUsed:QUANTITY- całkowity zużyty gaz przez wszystkie transakcje w tym bloku.timestamp:QUANTITY- znacznik czasu uniksowego, kiedy blok został zebrany.transactions:Array- tablica obiektów transakcji lub 32-bajtowe hasze transakcji w zależności od ostatniego podanego parametru.uncles:Array- tablica haszy bloków uncle.
Przykład
1// Żądanie2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Wynik4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "difficulty": "0x4ea3f27bc",9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",10 "gasLimit": "0x1388",11 "gasUsed": "0x0",12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",16 "nonce": "0x689056015818adbe",17 "number": "0x1b4",18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",21 "size": "0x220",22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",23 "timestamp": "0x55ba467c",24 "totalDifficulty": "0x78ed983323d",25 "transactions": [26 ],27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",28 "uncles": [29 ]30 }31}Pokaż wszystkoeth_getBlockByNumber
Zwraca informacje o bloku po numerze bloku.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
QUANTITY|TAG- liczba całkowita numeru bloku lub ciąg"earliest","latest","pending","safe"lub"finalized", jak w parametrze bloku.Boolean- jeślitrue, zwraca pełne obiekty transakcji, jeślifalse, tylko hasze transakcji.
1params: [2 "0x1b4", // 4363 true,4]Zwraca Zobacz eth_getBlockByHash
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Wynik zobacz eth_getBlockByHash
eth_getTransactionByHash
Zwraca informacje o transakcji żądanej przez hasz transakcji.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz transakcji
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Zwraca
Object - obiekt transakcji lub null, gdy nie znaleziono transakcji:
blockHash:DATA, 32 bajty - hasz bloku, w którym znajdowała się ta transakcja.null, gdy oczekuje.blockNumber:QUANTITY- numer bloku, w którym znajdowała się ta transakcja.null, gdy oczekuje.from:DATA, 20 bajtów - adres nadawcy.gas:QUANTITY- gaz dostarczony przez nadawcę.gasPrice:QUANTITY- cena gazu podana przez nadawcę w Wei.hash:DATA, 32 bajty - hasz transakcji.input:DATA- dane wysyłane wraz z transakcją.nonce:QUANTITY- liczba transakcji wykonanych przez nadawcę przed tą.to:DATA, 20 bajtów - adres odbiorcy.null, gdy jest to transakcja utworzenia kontraktu.transactionIndex:QUANTITY- liczba całkowita indeksu pozycji transakcji w bloku.null, gdy oczekuje.value:QUANTITY- wartość przeniesiona w Wei.v:QUANTITY- identyfikator odzyskiwania ECDSAr:QUANTITY- podpis ECDSA rs:QUANTITY- podpis ECDSA s
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 5000012 "gasPrice":"0x4a817c800", // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 6518 "value":"0xf3dbb76162000", // 429000000000000019 "v":"0x25", // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}Pokaż wszystkoeth_getTransactionByBlockHashAndIndex
Zwraca informacje o transakcji według haszu bloku i pozycji indeksu transakcji.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz bloku.QUANTITY- liczba całkowita pozycji indeksu transakcji.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Zwraca Zobacz eth_getTransactionByHash
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Wynik zobacz eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Zwraca informacje o transakcji według numeru bloku i pozycji indeksu transakcji.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
QUANTITY|TAG- numer bloku lub ciąg"earliest","latest","pending","safe"lub"finalized", jak w parametrze bloku.QUANTITY- pozycja indeksu transakcji.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Zwraca Zobacz eth_getTransactionByHash
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Wynik zobacz eth_getTransactionByHash
eth_getTransactionReceipt
Zwraca potwierdzenie transakcji według haszu transakcji.
Uwaga Potwierdzenie nie jest dostępne dla oczekujących transakcji.
Parametry
DATA, 32 bajty - hasz transakcji
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Zwraca
Object - obiekt potwierdzenia transakcji lub null, gdy nie znaleziono potwierdzenia:
transactionHash:DATA, 32 bajty - hasz transakcji.transactionIndex:QUANTITY- liczba całkowita indeksu pozycji transakcji w bloku.blockHash:DATA, 32 bajty - hasz 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żytego podczas wykonywania tej transakcji w bloku.effectiveGasPrice:QUANTITY- suma opłaty podstawowej i napiwku zapłaconego za jednostkę gazu.gasUsed:QUANTITY- ilość gazu zużytego tylko przez tę konkretną transakcję.contractAddress:DATA, 20 bajtów – adres utworzonego kontraktu, jeśli transakcja była utworzeniem kontraktu, w przeciwnym razienull.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 typu transakcji,0x0dla transakcji starszego typu,0x1dla typów z listą dostępu,0x2dla opłat dynamicznych.
Zwraca również albo :
root:DATA32 bajty korzenia stanu po transakcji (przed Byzantium)status:QUANTITYalbo1(sukces), albo0(niepowodzenie)
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string adresu, jeśli został utworzony12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logi zwracane przez getFilterLogs itp.18 }],19 "logsBloom": "0x00...0", // 256-bajtowy filtr Blooma20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Pokaż wszystkoeth_getUncleByBlockHashAndIndex
Zwraca informacje o bloku-stryju na podstawie jego haszu i pozycji indeksu stryja.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
DATA, 32 bajty - hasz bloku.QUANTITY- pozycja indeksu bloku uncle.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Zwraca Zobacz eth_getBlockByHash
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Wynik zobacz eth_getBlockByHash
Uwaga: blok uncle nie zawiera pojedynczych transakcji.
eth_getUncleByBlockNumberAndIndex
Zwraca informacje o bloku-stryju na podstawie jego numeru i pozycji indeksu stryja.
Wypróbuj punkt końcowy w placu zabawopens in a new tabParametry
QUANTITY|TAG- numer bloku lub ciąg"earliest","latest","pending","safe","finalized", jak w parametrze bloku.QUANTITY- pozycja indeksu bloku uncle.
1params: [2 "0x29c", // 6683 "0x0", // 04]Zwraca Zobacz eth_getBlockByHash
Uwaga: blok uncle nie zawiera pojedynczych transakcji.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'Wynik zobacz eth_getBlockByHash
eth_newFilter
Tworzy obiekt filtra w oparciu o opcje filtrowania, aby powiadamiać o zmianie stanu (logi). Aby sprawdzić, czy stan się zmienił, wywołaj eth_getFilterChanges.
Uwaga dotycząca określania filtrów tematów: Tematy zależą od kolejności. Transakcja z logiem z tematami [A, B] będzie dopasowana przez następujące filtry tematów:
[]"cokolwiek"[A]"A na pierwszej pozycji (i cokolwiek po)"[null, B]"cokolwiek na pierwszej pozycji ORAZ B na drugiej pozycji (i cokolwiek po)"[A, B]"A na pierwszej pozycji ORAZ B na drugiej pozycji (i cokolwiek po)"[[A, B], [A, B]]"(A LUB B) na pierwszej pozycji ORAZ (A LUB B) na drugiej pozycji (i cokolwiek po)"- Parametry
Object– opcje filtra:
fromBlock:QUANTITY|TAG- (opcjonalnie, domyślnie:"latest") Liczba całkowita numeru bloku lub"latest"dla ostatniego proponowanego bloku,"safe"dla ostatniego bezpiecznego bloku,"finalized"dla ostatniego sfinalizowanego bloku lub"pending","earliest"dla transakcji, które nie są jeszcze w bloku.toBlock:QUANTITY|TAG- (opcjonalnie, domyślnie:"latest") Liczba całkowita numeru bloku lub"latest"dla ostatniego proponowanego bloku,"safe"dla ostatniego bezpiecznego bloku,"finalized"dla ostatniego 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ówDATA. Tematy zależą od kolejności. Każdy temat może być również tablicą DATA z opcjami "lub".
1params: [2 {3 fromBlock: "0x1",4 toBlock: "0x2",5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",6 topics: [7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",8 null,9 [10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",12 ],13 ],14 },15]Pokaż wszystkoZwraca
QUANTITY - identyfikator filtra.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newBlockFilter
Tworzy filtr w węźle, aby powiadamiać o nadejściu nowego bloku. Aby sprawdzić, czy stan się zmienił, wywołaj eth_getFilterChanges.
Parametry Brak
Zwraca
QUANTITY - identyfikator filtra.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newPendingTransactionFilter
Tworzy filtr w węźle, aby powiadamiać o nadejściu nowych oczekujących transakcji. Aby sprawdzić, czy stan się zmienił, wywołaj eth_getFilterChanges.
Parametry Brak
Zwraca
QUANTITY - identyfikator filtra.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_uninstallFilter
Odinstalowuje filtr o podanym identyfikatorze. Należy zawsze wywoływać, gdy obserwacja nie jest już potrzebna. Dodatkowo filtry ulegają przedawnieniu, jeśli przez pewien czas nie są wywoływane za pomocą eth_getFilterChanges.
Parametry
QUANTITY- identyfikator filtra.
1params: [2 "0xb", // 113]Zwraca
Boolean - true, jeśli filtr został pomyślnie odinstalowany, w przeciwnym razie false.
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}eth_getFilterChanges
Metoda odpytywania filtra, która zwraca tablicę logów, które wystąpiły od ostatniego odpytania.
Parametry
QUANTITY- identyfikator filtra.
1params: [2 "0x16", // 223]Zwraca
Array - tablica obiektów logów lub pusta tablica, jeśli od ostatniego odpytania nic się nie zmieniło.
-
Dla filtrów utworzonych za pomocą
eth_newBlockFilterzwracane są hasze bloków (DATA, 32 bajty), np.["0x3454645634534..."]. -
Dla filtrów utworzonych za pomocą
eth_newPendingTransactionFilterzwracane są hasze transakcji (DATA, 32 bajty), np.["0x6345343454645..."]. -
Dla filtrów utworzonych za pomocą
eth_newFilterlogi są obiektami z następującymi parametrami: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 indeksu pozycji logu w bloku.null, gdy jest to log oczekujący.transactionIndex:QUANTITY- liczba całkowita indeksu pozycji transakcji, z której utworzono log.null, gdy jest to log oczekujący.transactionHash:DATA, 32 bajty - hasz transakcji, z których ten log został utworzony.null, gdy jest to log oczekujący.blockHash:DATA, 32 bajty - hasz bloku, w którym znajdował się ten log.null, gdy oczekuje.null, gdy jest to log oczekujący.blockNumber:QUANTITY- numer bloku, w którym znajdował się ten log.null, gdy oczekuje.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 solidity: zero lub więcej 32-bajtowych nieindeksowanych argumentów logu).topics:Array of DATA- tablica od 0 do 4 32-bajtowychDATAindeksowanych argumentów logów. (W solidity: Pierwszym tematem jest hasz sygnatury zdarzenia (np.Deposit(address,bytes32,uint256)), chyba że zadeklarowano zdarzenie ze specyfikatoremanonymous).
-
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 19 "blockNumber":"0x1b4", // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}Pokaż wszystkoeth_getFilterLogs
Zwraca tablicę wszystkich logów pasujących do filtra o podanym identyfikatorze.
Parametry
QUANTITY- identyfikator filtra.
1params: [2 "0x16", // 223]Zwraca Zobacz eth_getFilterChanges
Przykład
1// Request2curl -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 danego obiektu filtra.
Parametry
Object– opcje filtra:
fromBlock:QUANTITY|TAG- (opcjonalnie, domyślnie:"latest") Liczba całkowita numeru bloku lub"latest"dla ostatniego proponowanego bloku,"safe"dla ostatniego bezpiecznego bloku,"finalized"dla ostatniego sfinalizowanego bloku lub"pending","earliest"dla transakcji, które nie są jeszcze w bloku.toBlock:QUANTITY|TAG- (opcjonalnie, domyślnie:"latest") Liczba całkowita numeru bloku lub"latest"dla ostatniego proponowanego bloku,"safe"dla ostatniego bezpiecznego bloku,"finalized"dla ostatniego 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ówDATA. Tematy zależą od kolejności. Każdy temat może być również tablicą DATA z opcjami "lub".blockHash:DATA, 32 bajty - (opcjonalnie, w przyszłości) Wraz z dodaniem EIP-234,blockHashbędzie nową opcją filtra, która ogranicza zwracane logi do pojedynczego bloku z 32-bajtowym haszemblockHash. UżycieblockHashjest równoznaczne zfromBlock=toBlock= numer bloku z haszemblockHash. JeśliblockHashjest obecny w kryteriach filtra, to anifromBlock, anitoBlocknie są dozwolone.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Zwraca Zobacz eth_getFilterChanges
Przykład
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Wynik zobacz 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 za pomocą bibliotek zbudowanych na bazie interfejsu RPC, takich jak web3.jsopens in a new tab i web3.pyopens in a new tab. Te abstrakcje są na ogół łatwiejsze do zrozumienia i mniej podatne na błędy, ale nadal warto zrozumieć, co dzieje się pod spodem.
Poniżej znajduje się prosty inteligentny kontrakt o nazwie Multiply7, który zostanie wdrożony za pomocą interfejsu JSON-RPC na 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. Proszę zapoznać 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 działa na localhost:8545.
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}Pierwszą rzeczą, którą należy zrobić, jest upewnienie się, że interfejs HTTP RPC jest włączony. Oznacza to, że przy uruchomieniu Geth podajemy flagę --http. W tym przykładzie używamy węzła Geth w prywatnym łańcuchu deweloperskim. Używając tego podejścia nie potrzebujemy etheru w prawdziwej sieci.
geth --http --dev console 2>>geth.logSpowoduje to uruchomienie interfejsu HTTP RPC pod adresem http://localhost:8545.
Możemy zweryfikować, czy interfejs działa, pobierając adres coinbase (uzyskując pierwszy adres z tablicy kont) i saldo za pomocą curlopens in a new tab. Proszę zauważyć, że dane w tych przykładach będą się różnić na Twoim lokalnym węźle. Jeśli chcesz wypróbować te polecenia, zastąp parametry żądania w drugim żądaniu 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ą kodowane szesnastkowo, saldo jest zwracane w wei jako ciąg szesnastkowy. Jeśli chcemy mieć saldo w etherze jako liczbę, możemy użyć web3 z konsoli Geth.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"Teraz, gdy mamy trochę etheru w naszym prywatnym łańcuchu deweloperskim, możemy wdrożyć kontrakt. Pierwszym krokiem jest skompilowanie kontraktu Multiply7 do kodu bajtowego, który można wysłać do EVM. Aby zainstalować solc, kompilator Solidity, postępuj zgodnie z dokumentacją Solidityopens in a new tab. (Możesz chcieć użyć starszej wersji solc, aby dopasować ją do wersji kompilatora użytej w naszym przykładzieopens in a new tab.)
Następnym krokiem jest skompilowanie kontraktu Multiply7 do kodu bajtowego, który można wysłać 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 =======Binarny:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Teraz, gdy mamy skompilowany kod, musimy określić, ile gazu kosztuje jego wdrożenie. Interfejs RPC ma metodę eth_estimateGas, która da 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 w końcu wdrożenie kontraktu.
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 jest akceptowana przez węzeł i zwracany jest hasz transakcji. Ten hasz może być użyty do śledzenia transakcji. Następnym krokiem jest ustalenie adresu, pod którym wdrożono nasz kontrakt. Każda wykonana transakcja utworzy potwierdzenie. To potwierdzenie zawiera różne informacje o transakcji, takie jak blok, w którym transakcja została uwzględniona, i ile gazu zużyła EVM. Jeśli transakcja
tworzy kontrakt, będzie również zawierać adres kontraktu. Możemy pobrać potwierdzenie 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 potwierdzenia oznacza, że transakcja nie została jeszcze uwzględniona w 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 adres publiczny naszego konta, a to to adres kontraktu. Argument data zawiera ładunek, który definiuje, która metoda musi zostać wywołana i z jakimi argumentami. W tym miejscu do gry wchodzi ABI (binarny interfejs aplikacji)opens in a new tab. ABI to plik JSON, który definiuje sposób definiowania i kodowania danych dla EVM.
Bajty ładunku definiują, która metoda w kontrakcie jest wywoływana. Są to pierwsze 4 bajty z haszu Keccak nazwy funkcji i typów jej argumentów, zakodowane szesnastkowo. Funkcja multiply akceptuje uint, który jest aliasem dla uint256. Pozostawia nas to z:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"Następnym krokiem jest zakodowanie argumentów. Jest tylko jeden uint256, powiedzmy, o wartości 6. ABI ma sekcję, która określa, jak kodować typy uint256.
int<M>: enc(X) jest kodowaniem X w uzupełnieniu do dwóch w porządku big-endian, dopełnionym po stronie wyższego rzędu (lewej) wartością 0xff dla ujemnego X i zerowymi bajtami dla dodatniego X, tak aby długość była wielokrotnością 32 bajtów.
Koduje się to do 0000000000000000000000000000000000000000000000000000000000000006.
Łącząc selektor funkcji i zakodowany argument, nasze dane będą wyglądać następująco: 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ócony został jej hasz. Pobranie potwierdzenia daje:
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}Pokaż wszystkoPotwierdzenie zawiera log. Ten log został wygenerowany przez EVM podczas wykonywania transakcji i zawarty w potwierdzeniu. 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 pozostawi nas z oczekiwaną wartością dziesiętną 42. Oprócz danych warto zauważyć, że tematy można wykorzystać do określenia, które zdarzenie utworzyło log:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"To było tylko krótkie wprowadzenie do niektórych z najczęstszych zadań, demonstrujące bezpośrednie użycie JSON-RPC.