Přeskočit na hlavní obsah
Change page

JSON-RPC API

Stránka naposledy aktualizována: 23. února 2026

Aby mohla softwarová aplikace interagovat s blockchainem Ethereum - ať už čtením dat z blockchainu nebo odesíláním transakcí do sítě - musí se připojit k síťovému uzlu.

Za tímto účelem každý klient Etherea implementuje specifikaci JSON-RPCopens in a new tab, takže existuje jednotná sada metod, na které se aplikace mohou spolehnout bez ohledu na konkrétní implementaci uzlu nebo klienta.

JSON-RPCopens in a new tab je bezstavový, odlehčený protokol pro vzdálené volání procedur (RPC). Definuje několik datových struktur a pravidla pro jejich zpracování. Je transportně agnostický, což znamená, že koncepty lze použít v rámci stejného procesu, přes sokety, přes HTTP nebo v mnoha různých prostředích pro předávání zpráv. Jako datový formát používá JSON (RFC 4627).

Implementace klienta

Ethereovští klienti mohou při implementaci specifikace JSON-RPC používat různé programovací jazyky. Další podrobnosti týkající se konkrétních programovacích jazyků naleznete v dokumentaci jednotlivých klientů. Doporučujeme vám projít si dokumentaci každého klienta pro nejnovější informace o podpoře API.

Knihovny usnadňující práci

I když se můžete rozhodnout přímo komunikovat s ethereovskými klienty přes JSON-RPC API, pro vývojáře dappek existují často jednodušší možnosti. Existuje mnoho knihoven pro JavaScript a backendové API, které poskytují obálky nad rozhraním JSON-RPC API. S těmito knihovnami mohou vývojáři psát intuitivní, jednorázové metody ve zvoleném programovacím jazyce, které (pod kapotou) inicializují JSON-RPC požadavky a interagují s Ethereem.

API konsensuálních klientů

Tato stránka se zabývá především JSON-RPC API používaným exekučními klienty Etherea. Nicméně, konsensuální klienti také mají RPC API, které umožňuje uživatelům dotazovat se na informace o síťovém uzlu, žádat Beacon bloky, stav Beaconu a další informace související s konsensem přímo ze síťového uzlu. Toto API je zdokumentováno na webové stránce Beacon APIopens in a new tab.

Interní API se také používá pro komunikaci mezi klienty v rámci síťového uzlu - tedy umožňuje konsensuálnímu klientovi a exekučnímu klientovi vyměňovat si data. Tomuto se říká „Engine API“ a specifikace jsou dostupné na GitHubuopens in a new tab.

Specifikace exekučního klienta

Přečtěte si celou specifikaci JSON-RPC API na GitHubuopens in a new tab. Toto API je zdokumentováno na webové stránce Execution APIopens in a new tab a obsahuje inspektor, který vám umožní vyzkoušet si všechny dostupné metody.

Konvence

Kódování šestnáctkových hodnot

Přes JSON jsou přenášeny dva klíčové datové typy: neformátovaná pole bajtů a množství. Oba jsou přenášeny s hex kódováním, ale s různými požadavky na formátování.

Množství

Pokud kódujete množství (integery, čísla): Kódujte jako hex, předpona "0x", nejkompaktnější reprezentace (mírná výjimka: nula by měla být reprezentována jako "0x0").

Zde je několik příkladů:

  • 0x41 (65 v desítkové soustavě)
  • 0x400 (1024 v desítkové soustavě)
  • ŠPATNĚ: 0x (vždy by mělo být alespoň jedno číslo - nula je "0x0")
  • ŠPATNĚ: 0x0400 (nejsou povoleny žádné nuly na začátku)
  • ŠPATNĚ: ff (musí mít předponu 0x)

Neformátovaná data

Při kódování neformátovaných dat (pole bajtů, adresy účtů, hashe, pole bytecode): Kódujte jako hex, předpona "0x", dva hexadecimální znaky na bajt.

Zde je několik příkladů:

  • 0x41 (velikost 1, "A")
  • 0x004200 (velikost 3, "0B0")
  • 0x (velikost 0, "")
  • ŠPATNĚ: 0xf0f0f (musí být sudý počet znaků)
  • ŠPATNĚ: 004200 (musí mít předponu 0x)

Parametr bloku

Následující metody mají parametr bloku:

Když jsou podány požadavky, které se dotazují na stav Etherea, zadaný parametr bloku určuje jeho výšku.

Pro parametr bloku jsou možné následující možnosti:

  • HEX String – celé číslo bloku
  • String "earliest" pro nejstarší/genesis blok
  • String "latest" – pro poslední navržený blok
  • String "safe" – pro poslední bezpečný hlavní blok
  • String "finalized" – pro poslední finalizovaný blok
  • String "pending" – pro nevyřízený stav/transakce

Příklady

Na této stránce poskytujeme příklady použití jednotlivých koncových bodů JSON_RPC API pomocí nástroje příkazového řádku curlopens in a new tab. Tyto jednotlivé příklady koncových bodů naleznete níže v sekci Příklady s curl. Dále na stránce také poskytujeme kompletní příklad kompilace a nasazení chytrého kontraktu pomocí uzlu Geth, rozhraní JSON_RPC API a curl.

Příklady s curl

Níže jsou uvedeny příklady použití rozhraní JSON_RPC API prostřednictvím požadavků curlopens in a new tab na uzel Ethereum. Každý příklad obsahuje popis konkrétního endpointu, jeho parametrů, návratového typu a konkrétní příklad, jak by měl být použit.

Požadavky curl mohou vrátit chybovou zprávu týkající se typu obsahu. Důvodem je to, že volba --data nastavuje typ obsahu na application/x-www-form-urlencoded. Pokud si váš uzel na toto stěžuje, nastavte hlavičku ručně umístěním -H "Content-Type: application/json" na začátek volání. Příklady také nezahrnují kombinaci URL/IP adresy a portu, která musí být posledním argumentem předaným příkazu curl (např. 127.0.0.1:8545). Kompletní požadavek curl včetně těchto údajů má následující podobu:

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

Šíření informací, stav, historie

Několik základních metod JSON-RPC vyžaduje data ze sítě Ethereum a přehledně se dělí do tří hlavních kategorií: šíření informací, stav a historie. Pomocí odkazů v těchto sekcích můžete přejít na jednotlivé metody, nebo použít obsah pro prozkoumání kompletního seznamu metod.

Metody šíření informací

Tyto metody sledují hlavičku řetězce. Takto se transakce šíří po síti, dostávají se do bloků a takto se také klienti dozvídají o nových blocích.

Metody stavu

Metody, které informují o aktuálním stavu všech uložených dat. "Stav" je jako jeden velký sdílený kus RAM a zahrnuje zůstatky účtů, data kontraktů a odhady spotřeby paliva.

Metody historie

Získávají historické záznamy o každém bloku až po genesis. Představte si je jako jeden velký soubor pouze pro přidávání, který obsahuje všechny hlavičky bloků, těla bloků, uncle bloky a stvrzenky transakcí.

JSON-RPC API Playground

K prozkoumání a vyzkoušení metod API můžete použít nástroj playgroundopens in a new tab. Ukazuje vám také, které metody a sítě jsou podporovány různými poskytovateli síťových uzlů.

Metody rozhraní JSON-RPC API

web3_clientVersion

Vrací aktuální verzi klienta.

Parametry

Žádná

Návratová hodnota

String – aktuální verze klienta

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc":"2.0",
7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"
8}

web3_sha3

Vrátí haš Keccak-256 (nikoli standardizovaný SHA3-256) z daných dat.

Parametry

  1. DATA – data, která mají být převedena na haš SHA3
1params: ["0x68656c6c6f20776f726c64"]

Návratová hodnota

DATA – výsledek haše SHA3 daného řetězce.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
3// Result
4{
5 "id":64,
6 "jsonrpc": "2.0",
7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
8}

net_version

Vrací ID aktuální sítě.

Parametry

Žádná

Návratová hodnota

String – ID aktuální sítě.

Úplný seznam aktuálních ID sítí je k dispozici na chainlist.orgopens in a new tab. Některé běžné jsou:

  • 1: Ethereum Mainnet
  • 11155111: testnet Sepolia
  • 560048 : Hoodi Testnet

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "3"
8}

net_listening

Vrátí true, pokud klient aktivně naslouchá síťovým připojením.

Parametry

Žádná

Návratová hodnota

Booleantrue, když naslouchá, jinak false.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc":"2.0",
7 "result":true
8}

net_peerCount

Vrací počet peerů, kteří jsou aktuálně připojeni ke klientovi.

Parametry

Žádná

Návratová hodnota

QUANTITY – celé číslo počtu připojených peerů.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
3// Result
4{
5 "id":74,
6 "jsonrpc": "2.0",
7 "result": "0x2" // 2
8}

eth_protocolVersion

Vrátí aktuální verzi protokolu Ethereum. Upozorňujeme, že tato metoda není v Gethu dostupnáopens in a new tab.

Parametry

Žádná

Návratová hodnota

String – aktuální verze protokolu Ethereum

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "54"
8}

eth_syncing

Vrátí objekt s daty o stavu synchronizace nebo false.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

Přesná návratová data se liší mezi implementacemi klientů. Všichni klienti vracejí False, když se uzel nesynchronizuje, a všichni klienti vracejí následující pole.

Object|Boolean, Objekt s daty o stavu synchronizace nebo FALSE, když nesynchronizuje:

  • startingBlock: QUANTITY – blok, u kterého import začal (resetuje se pouze po dosažení hlavičky synchronizace)
  • currentBlock: QUANTITY – aktuální blok, stejné jako eth_blockNumber
  • highestBlock: QUANTITY – odhadovaný nejvyšší blok

Individuální klienti mohou také poskytovat další data. Například Geth vrací následující:

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}
Zobrazit vše

Zatímco Besu vrací:

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}
Zobrazit vše

Další podrobnosti naleznete v dokumentaci pro vašeho konkrétního klienta.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": {
8 startingBlock: '0x384',
9 currentBlock: '0x386',
10 highestBlock: '0x454'
11 }
12}
13// Or when not syncing
14{
15 "id":1,
16 "jsonrpc": "2.0",
17 "result": false
18}
Zobrazit vše

eth_coinbase

Vrátí klientskou adresu coinbase.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Poznámka: Tato metoda je od verze v1.14.0 zastaralá a již není podporována. Pokus o použití této metody bude mít za následek chybu „Metoda není podporována“.

Parametry

Žádná

Návratová hodnota

DATA, 20 bajtů – aktuální coinbase adresa.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
3// Result
4{
5 "id":64,
6 "jsonrpc": "2.0",
7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
8}

eth_chainId

Vrátí ID řetězce používané pro podepisování transakcí chráněných proti opakování.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

chainId, šestnáctková hodnota jako řetězec představující celé číslo ID aktuálního řetězce.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "0x1"
8}

eth_mining

Vrátí true, pokud klient aktivně těží nové bloky. Toto může vrátit true pouze pro sítě proof-of-work a v některých klientech nemusí být po sloučení k dispozici.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

Boolean – vrátí true, pokud klient těží, jinak false.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
3//
4{
5 "id":71,
6 "jsonrpc": "2.0",
7 "result": true
8}

eth_hashrate

Vrátí počet hashů za sekundu, se kterými uzel těží. Toto může vrátit true pouze pro sítě proof-of-work a v některých klientech nemusí být po sloučení k dispozici.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

QUANTITY – počet hašů za sekundu.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
3// Result
4{
5 "id":71,
6 "jsonrpc": "2.0",
7 "result": "0x38a"
8}

eth_gasPrice

Vrací odhad aktuální ceny za palivo v jednotkách wei. Například klient Besu zkoumá posledních 100 bloků a vrací mediánovou cenu za jednotku paliva ve výchozím nastavení.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

QUANTITY – celé číslo aktuální ceny gasu ve wei.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
3// Result
4{
5 "id":73,
6 "jsonrpc": "2.0",
7 "result": "0x1dfd14000" // 8049999872 Wei
8}

eth_accounts

Vrátí seznam adres, které klient vlastní.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

Pole DATA, 20 bajtů – adresy vlastněné klientem.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
8}

eth_blockNumber

Vrací číslo nejnovějšího bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Žádná

Návratová hodnota

QUANTITY – celé číslo aktuálního čísla bloku, na kterém se klient nachází.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
3// Result
4{
5 "id":83,
6 "jsonrpc": "2.0",
7 "result": "0x4b7" // 1207
8}

eth_getBalance

Vrací zůstatek účtu na dané adrese.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 20 bajtů – adresa pro kontrolu zůstatku.
  2. QUANTITY|TAG – celé číslo bloku nebo řetězec "latest", "earliest", "pending", "safe" nebo "finalized", viz parametr bloku
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]

Návratová hodnota

QUANTITY – celé číslo aktuálního zůstatku ve wei.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x0234c8a3397aab58" // 158972490234375000
8}

eth_getStorageAt

Vrátí hodnotu z pozice v úložišti na dané adrese.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 20 bajtů – adresa úložiště.
  2. QUANTITY – celé číslo pozice v úložišti.
  3. QUANTITY|TAG – celé číslo bloku nebo řetězec "latest", "earliest", "pending", "safe", "finalized", viz parametr bloku

Návratová hodnota

DATA – hodnota na této pozici v úložišti.

Příklad Výpočet správné pozice závisí na úložišti, které se má načíst. Zvažte následující kontrakt nasazený na adrese 0x295a70b2de5e3953354a6a8344e616ed314d7251 adresou 0x391694e7e0b0cce554cb130d723a9d27458f9298.

1contract Storage {
2 uint pos0;
3 mapping(address => uint) pos1;
4 constructor() {
5 pos0 = 1234;
6 pos1[msg.sender] = 5678;
7 }
8}

Získání hodnoty pos0 je přímočaré:

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

Načtení prvku mapy je obtížnější. Pozice prvku v mapě se vypočítá pomocí:

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

To znamená, že pro načtení úložiště na pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] musíme vypočítat pozici pomocí:

1keccak(
2 decodeHex(
3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
4 "0000000000000000000000000000000000000000000000000000000000000001"
5 )
6)

Konzole Geth, která je dodávána s knihovnou web3, může být použita k provedení výpočtu:

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

Nyní načteme úložiště:

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

eth_getTransactionCount

Vrátí počet transakcí odeslaných z adresy.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 20 bajtů – adresa.
  2. QUANTITY|TAG – celé číslo bloku nebo řetězec "latest", "earliest", "pending", "safe" nebo "finalized", viz parametr bloku
1params: [
2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
3 "latest", // stav v posledním bloku
4]

Návratová hodnota

QUANTITY - celé číslo udávající počet transakcí odeslaných z této adresy.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}

eth_getBlockTransactionCountByHash

Vrátí počet transakcí v bloku, který odpovídá danému haši bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš bloku
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]

Návratová hodnota

QUANTITY – celé číslo počtu transakcí v tomto bloku.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x8b" // 139
8}

eth_getBlockTransactionCountByNumber

Vrátí počet transakcí v bloku odpovídajícím danému číslu bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. QUANTITY|TAG – celé číslo čísla bloku nebo řetězec "earliest", "latest", "pending", "safe" nebo "finalized", jako v parametru bloku.
1params: [
2 "0x13738ca", // 20396234
3]

Návratová hodnota

QUANTITY – celé číslo počtu transakcí v tomto bloku.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x8b" // 139
8}

eth_getUncleCountByBlockHash

Vrátí počet strýčkovských bloků v bloku odpovídajícím danému haši bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš bloku
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]

Návratová hodnota

QUANTITY – celé číslo počtu strýčkovských bloků v tomto bloku.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}

eth_getUncleCountByBlockNumber

Vrátí počet strýčkovských bloků v bloku odpovídajícím danému číslu bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. QUANTITY|TAG – celé číslo čísla bloku nebo řetězec "latest", "earliest", "pending", "safe" nebo "finalized", viz parametr bloku
1params: [
2 "0xe8", // 232
3]

Návratová hodnota

QUANTITY – celé číslo počtu strýčkovských bloků v tomto bloku.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x0" // 0
8}

eth_getCode

Vrátí kód na dané adrese.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 20 bajtů – adresa
  2. QUANTITY|TAG – celé číslo bloku nebo řetězec "latest", "earliest", "pending", "safe" nebo "finalized", viz parametr bloku
1params: [
2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
3 "0x5daf3b", // 6139707
4]

Návratová hodnota

DATA – kód z dané adresy.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
8}

eth_sign

Metoda podpisu vypočítá specifický podpis Etherea pomocí: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).

Přidáním předpony ke zprávě je vypočtený podpis rozpoznatelný jako specifický podpis Etherea. Tím se zabrání zneužití, kdy může škodlivá dapp podepsat libovolná data (např. transakci) a použít podpis k tomu, aby se vydávala za oběť.

Poznámka: adresa, kterou se má podepsat, musí být odemčena.

Parametry

  1. DATA, 20 bajtů – adresa
  2. DATA, N bajtů – zpráva k podepsání

Návratová hodnota

DATA: Podpis

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
8}

eth_signTransaction

Podepíše transakci, kterou lze později odeslat do sítě pomocí eth_sendRawTransaction.

Parametry

  1. Object – objekt transakce
  • type:
  • from: DATA, 20 bajtů – adresa, ze které je transakce odeslána.
  • to: DATA, 20 bajtů – (volitelné při vytváření nového kontraktu) adresa, na kterou je transakce směrována.
  • gas: QUANTITY – (volitelné, výchozí: 90000) celé číslo gasu poskytnutého pro provedení transakce. Vrátí nevyužitý gas.
  • gasPrice: QUANTITY – (volitelné, výchozí: bude určeno) celé číslo ceny gasPrice použité pro každý zaplacený gas, ve Wei.
  • value: QUANTITY – (volitelné) celé číslo hodnoty odeslané s touto transakcí, ve Wei.
  • data: DATA – zkompilovaný kód kontraktu NEBO haš podpisu vyvolané metody a zakódovaných parametrů.
  • nonce: QUANTITY – (volitelné) celé číslo nonce. To umožňuje přepsat vlastní nevyřízené transakce, které používají stejný nonce.

Návratová hodnota

DATA, objekt transakce kódovaný pomocí RLP podepsaný zadaným účtem.

Příklad

1// Request
2curl -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// Result
4{
5 "id": 1,
6 "jsonrpc": "2.0",
7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
8}

eth_sendTransaction

Vytvoří novou transakci volání zprávy nebo vytvoření kontraktu, pokud pole data obsahuje kód, a podepíše ji pomocí účtu uvedeného v from.

Parametry

  1. Object – objekt transakce
  • from: DATA, 20 bajtů – adresa, ze které je transakce odeslána.
  • to: DATA, 20 bajtů – (volitelné při vytváření nového kontraktu) adresa, na kterou je transakce směrována.
  • gas: QUANTITY – (volitelné, výchozí: 90000) celé číslo gasu poskytnutého pro provedení transakce. Vrátí nevyužitý gas.
  • gasPrice: QUANTITY – (volitelné, výchozí: bude určeno) celé číslo ceny gasPrice použité pro každý zaplacený gas.
  • value: QUANTITY – (volitelné) celé číslo hodnoty odeslané s touto transakcí.
  • input: DATA – zkompilovaný kód kontraktu NEBO haš podpisu vyvolané metody a zakódovaných parametrů.
  • nonce: QUANTITY – (volitelné) celé číslo nonce. To umožňuje přepsat vlastní nevyřízené transakce, které používají stejný nonce.
1params: [
2 {
3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
5 gas: "0x76c0", // 30400
6 gasPrice: "0x9184e72a000", // 10000000000000
7 value: "0x9184e72a", // 2441406250
8 input:
9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
10 },
11]
Zobrazit vše

Návratová hodnota

DATA, 32 bajtů – haš transakce, nebo nulový haš, pokud transakce ještě není k dispozici.

Použijte eth_getTransactionReceipt pro získání adresy kontraktu poté, co byla transakce navržena v bloku, když jste vytvořili kontrakt.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
8}

eth_sendRawTransaction

Vytvoří novou transakci volání zprávy nebo vytvoření kontraktu pro podepsané transakce.

Parametry

  1. DATA, podepsaná data transakce.
1params: [
2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
3]

Návratová hodnota

DATA, 32 bajtů – haš transakce, nebo nulový haš, pokud transakce ještě není k dispozici.

Použijte eth_getTransactionReceipt pro získání adresy kontraktu poté, co byla transakce navržena v bloku, když jste vytvořili kontrakt.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
8}

eth_call

Okamžitě provede nové volání zprávy bez vytvoření transakce na blockchainu. Často se používá pro provádění funkcí chytrých kontraktů pouze pro čtení, například balanceOf pro kontrakt ERC-20.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. Object – objekt volání transakce
  • from: DATA, 20 bajtů – (volitelné) adresa, ze které je transakce odeslána.
  • to: DATA, 20 bajtů – adresa, na kterou je transakce směrována.
  • gas: QUANTITY – (volitelné) celé číslo gasu poskytnutého pro provedení transakce. eth_call spotřebovává nulový gas, ale tento parametr může být potřebný pro některá provedení.
  • gasPrice: QUANTITY – (volitelné) celé číslo ceny gasu (gasPrice) použité pro každý zaplacený gas
  • value: QUANTITY – (volitelné) celé číslo hodnoty odeslané s touto transakcí
  • input: DATA – (volitelné) haš podpisu metody a zakódovaných parametrů. Podrobnosti naleznete v dokumentaci Solidity o ABI kontraktu Ethereaopens in a new tab.
  1. QUANTITY|TAG – celé číslo bloku nebo řetězec "latest", "earliest", "pending", "safe" nebo "finalized", viz parametr bloku

Návratová hodnota

DATA – návratová hodnota provedeného kontraktu.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x"
8}

eth_estimateGas

Generuje a vrací odhad, kolik gasu je nutné k dokončení transakce. Transakce nebude přidána do blockchainu. Všimněte si, že odhad může být výrazně vyšší než množství gasu skutečně spotřebovaného transakcí, a to z různých důvodů, včetně mechaniky EVM a výkonu uzlu.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

Viz parametry eth_call s tím rozdílem, že všechny vlastnosti jsou volitelné. Pokud není zadán žádný limit transakčních poplatků, Geth použije jako horní hranici limit transakčních poplatků bloku z nevyřízeného bloku. V důsledku toho vrácený odhad nemusí být dostatečný k provedení volání/transakce, pokud je množství paliva vyšší než limit transakčních poplatků nevyřízeného bloku.

Návratová hodnota

QUANTITY – množství spotřebovaného gasu.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x5208" // 21000
8}

eth_getBlockByHash

Vrátí informace o bloku podle haše.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš bloku.
  2. Boolean – pokud true, vrátí celé objekty transakcí, pokud false, vrátí pouze haše transakcí.
1params: [
2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
3 false,
4]

Návratová hodnota

Object – objekt bloku, nebo null, pokud nebyl nalezen žádný blok:

  • number: QUANTITY – číslo bloku. null, pokud se jedná o nevyřízený blok.
  • hash: DATA, 32 bajtů – haš bloku. null, pokud se jedná o nevyřízený blok.
  • parentHash: DATA, 32 bajtů – haš rodičovského bloku.
  • nonce: DATA, 8 bajtů – haš vygenerovaného proof-of-work. null pro nevyřízený blok, 0x0 pro bloky proof-of-stake (od sloučení)
  • sha3Uncles: DATA, 32 bajtů – SHA3 dat strýčkovských bloků v bloku.
  • logsBloom: DATA, 256 bajtů – bloom filtr pro záznamy bloku. null, pokud se jedná o nevyřízený blok.
  • transactionsRoot: DATA, 32 bajtů – kořen trie transakcí bloku.
  • stateRoot: DATA, 32 bajtů – kořen konečného stavového trie bloku.
  • receiptsRoot: DATA, 32 bajtů – kořen trie potvrzení bloku.
  • miner: DATA, 20 bajtů – adresa příjemce, kterému byly uděleny odměny za blok.
  • difficulty: QUANTITY – celé číslo obtížnosti tohoto bloku.
  • totalDifficulty: QUANTITY – celé číslo celkové obtížnosti řetězce až do tohoto bloku.
  • extraData: DATA – pole „extra data“ tohoto bloku.
  • size: QUANTITY – celé číslo velikosti tohoto bloku v bajtech.
  • gasLimit: QUANTITY – maximální povolený gas v tomto bloku.
  • gasUsed: QUANTITY – celkový spotřebovaný gas všemi transakcemi v tomto bloku.
  • timestamp: QUANTITY – časové razítko unixu pro okamžik, kdy byl blok seřazen.
  • transactions: Pole – pole objektů transakcí nebo 32bajtových hašů transakcí v závislosti na posledním zadaném parametru.
  • uncles: Pole – pole hašů strýčkovských bloků.

Příklad

1// Požadavek
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
3// Výsledek
4{
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}
Zobrazit vše

eth_getBlockByNumber

Vrátí informace o bloku podle čísla bloku.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. QUANTITY|TAG – celé číslo čísla bloku nebo řetězec "earliest", "latest", "pending", "safe" nebo "finalized", jako v parametru bloku.
  2. Boolean – pokud true, vrátí celé objekty transakcí, pokud false, vrátí pouze haše transakcí.
1params: [
2 "0x1b4", // 436
3 true,
4]

Návratová hodnota Viz eth_getBlockByHash

Příklad

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

Výsledek viz eth_getBlockByHash

eth_getTransactionByHash

Vrátí informace o transakci požadované podle haše transakce.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš transakce
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]

Návratová hodnota

Object – objekt transakce nebo null, pokud nebyla nalezena žádná transakce:

  • blockHash: DATA, 32 bajtů – haš bloku, ve kterém se tato transakce nacházela. null, když je nevyřízená.
  • blockNumber: QUANTITY – číslo bloku, ve kterém se tato transakce nacházela. null, když je nevyřízená.
  • from: DATA, 20 bajtů – adresa odesílatele.
  • gas: QUANTITY – gas poskytnutý odesílatelem.
  • gasPrice: QUANTITY – cena gasu poskytnutá odesílatelem ve Wei.
  • hash: DATA, 32 bajtů – haš transakce.
  • input: DATA – data odeslaná spolu s transakcí.
  • nonce: QUANTITY – počet transakcí provedených odesílatelem před touto.
  • to: DATA, 20 bajtů – adresa příjemce. null, pokud se jedná o transakci vytvoření kontraktu.
  • transactionIndex: QUANTITY – celé číslo pozice indexu transakcí v bloku. null, když je nevyřízená.
  • value: QUANTITY – převedená hodnota ve Wei.
  • v: QUANTITY – ID pro obnovení ECDSA
  • r: QUANTITY – ECDSA podpis r
  • s: QUANTITY – ECDSA podpis s

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'
3// Result
4{
5 "jsonrpc":"2.0",
6 "id":1,
7 "result":{
8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
9 "blockNumber":"0x5daf3b", // 6139707
10 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
11 "gas":"0xc350", // 50000
12 "gasPrice":"0x4a817c800", // 20000000000
13 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
14 "input":"0x68656c6c6f21",
15 "nonce":"0x15", // 21
16 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
17 "transactionIndex":"0x41", // 65
18 "value":"0xf3dbb76162000", // 4290000000000000
19 "v":"0x25", // 37
20 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"
22 }
23}
Zobrazit vše

eth_getTransactionByBlockHashAndIndex

Vrátí informace o transakci podle haše bloku a pozice indexu transakce.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš bloku.
  2. QUANTITY – celé číslo pozice indexu transakce.
1params: [
2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
3 "0x0", // 0
4]

Návratová hodnota Viz eth_getTransactionByHash

Příklad

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

Výsledek viz eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

Vrátí informace o transakci podle čísla bloku a pozice indexu transakce.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. QUANTITY|TAG – číslo bloku nebo řetězec "earliest", "latest", "pending", "safe" nebo "finalized", jako v parametru bloku.
  2. QUANTITY – pozice indexu transakce.
1params: [
2 "0x9c47cf", // 10241999
3 "0x24", // 36
4]

Návratová hodnota Viz eth_getTransactionByHash

Příklad

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

Výsledek viz eth_getTransactionByHash

eth_getTransactionReceipt

Vrátí potvrzení o transakci podle haše transakce.

Poznámka: Potvrzení není k dispozici pro nevyřízené transakce.

Parametry

  1. DATA, 32 bajtů – haš transakce
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]

Návratová hodnota Object – objekt potvrzení transakce, nebo null, pokud nebylo nalezeno žádné potvrzení:

  • transactionHash : DATA, 32 bajtů – haš transakce.
  • transactionIndex: QUANTITY – celé číslo pozice indexu transakcí v bloku.
  • blockHash: DATA, 32 bajtů – haš bloku, ve kterém se tato transakce nacházela.
  • blockNumber: QUANTITY – číslo bloku, ve kterém se tato transakce nacházela.
  • from: DATA, 20 bajtů – adresa odesílatele.
  • to: DATA, 20 bajtů – adresa příjemce. null, pokud se jedná o transakci vytvoření kontraktu.
  • cumulativeGasUsed : QUANTITY – celkové množství gasu spotřebovaného při provedení této transakce v bloku.
  • effectiveGasPrice : QUANTITY – součet základního poplatku a spropitného zaplaceného za jednotku gasu.
  • gasUsed : QUANTITY – množství gasu spotřebovaného pouze touto konkrétní transakcí.
  • contractAddress : DATA, 20 bajtů – adresa vytvořeného kontraktu, pokud se jednalo o transakci vytvoření kontraktu, jinak null.
  • logs: Pole – pole objektů logu, které tato transakce vygenerovala.
  • logsBloom: DATA, 256 bajtů – bloom filtr pro lehké klienty k rychlému načtení souvisejících záznamů.
  • type: QUANTITY – celé číslo typu transakce, 0x0 pro starší transakce, 0x1 pro typy se seznamem přístupů, 0x2 pro dynamické poplatky.

Vrátí také buď:

  • root: DATA 32 bajtů kořene stavu po transakci (před Byzantium)
  • status: QUANTITY buď 1 (úspěch), nebo 0 (selhání)

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'
3// Result
4{
5 "jsonrpc": "2.0",
6 "id": 1,
7 "result": {
8 "blockHash":
9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",
10 "blockNumber": "0xeff35f",
11 "contractAddress": null, // řetězec adresy, pokud byla vytvořena
12 "cumulativeGasUsed": "0xa12515",
13 "effectiveGasPrice": "0x5a9c688d4",
14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",
15 "gasUsed": "0xb4c8",
16 "logs": [{
17 // logy vrácené pomocí getFilterLogs atd.
18 }],
19 "logsBloom": "0x00...0", // 256bajtový bloom filtr
20 "status": "0x1",
21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
22 "transactionHash":
23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",
24 "transactionIndex": "0x66",
25 "type": "0x2"
26 }
27}
Zobrazit vše

eth_getUncleByBlockHashAndIndex

Vrací informace o „uncle“ bloku podle haše a pozice indexu „uncle“.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. DATA, 32 bajtů – haš bloku.
  2. QUANTITY – pozice indexu strýčkovského bloku.
1params: [
2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
3 "0x0", // 0
4]

Návratová hodnota Viz eth_getBlockByHash

Příklad

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

Výsledek viz eth_getBlockByHash

Poznámka: Strýčkovský blok neobsahuje jednotlivé transakce.

eth_getUncleByBlockNumberAndIndex

Vrací informace o „uncle“ bloku podle čísla a pozice indexu „uncle“.

Vyzkoušejte koncový bod na playgrounduopens in a new tab

Parametry

  1. QUANTITY|TAG – číslo bloku nebo řetězec "earliest", "latest", "pending", "safe", "finalized", jako v parametru bloku.
  2. QUANTITY – pozice indexu strýčkovského bloku.
1params: [
2 "0x29c", // 668
3 "0x0", // 0
4]

Návratová hodnota Viz eth_getBlockByHash

Poznámka: Strýčkovský blok neobsahuje jednotlivé transakce.

Příklad

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

Výsledek viz eth_getBlockByHash

eth_newFilter

Vytvoří objekt filtru na základě možností filtru, který upozorní na změnu stavu (záznamy). Chcete-li zkontrolovat, zda se stav změnil, zavolejte eth_getFilterChanges.

Poznámka k zadávání filtrů témat: Témata jsou závislá na pořadí. Transakce s logem s tématy [A, B] bude odpovídat následujícím filtrům témat:

  • [] „cokoliv“
  • [A] „A na první pozici (a cokoliv dalšího)“
  • [null, B] „cokoliv na první pozici A B na druhé pozici (a cokoliv dalšího)“
  • [A, B] „A na první pozici A B na druhé pozici (a cokoliv dalšího)“
  • [[A, B], [A, B]] „(A NEBO B) na první pozici A (A NEBO B) na druhé pozici (a cokoliv dalšího)“
  • Parametry
  1. Object – možnosti filtru:
  • fromBlock: QUANTITY|TAG – (volitelné, výchozí: "latest") celé číslo bloku, nebo "latest" pro poslední navržený blok, "safe" pro poslední bezpečný blok, "finalized" pro poslední finalizovaný blok nebo "pending", "earliest" pro transakce, které ještě nejsou v bloku.
  • toBlock: QUANTITY|TAG – (volitelné, výchozí: "latest") celé číslo bloku, nebo "latest" pro poslední navržený blok, "safe" pro poslední bezpečný blok, "finalized" pro poslední finalizovaný blok nebo "pending", "earliest" pro transakce, které ještě nejsou v bloku.
  • address: DATA|Pole, 20 bajtů – (volitelné) adresa kontraktu nebo seznam adres, ze kterých by měly logy pocházet.
  • topics: Pole DATA, – (volitelné) pole 32bajtových témat DATA. Témata jsou závislá na pořadí. Každé téma může být také polem DATA s možnostmi „nebo“.
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]
Zobrazit vše

Návratová hodnota QUANTITY – ID filtru.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}

eth_newBlockFilter

Vytvoří v uzlu filtr, který upozorní na příchod nového bloku. Chcete-li zkontrolovat, zda se stav změnil, zavolejte eth_getFilterChanges.

Parametry Žádné

Návratová hodnota QUANTITY – ID filtru.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}

eth_newPendingTransactionFilter

Vytvoří v uzlu filtr, který upozorní na příchod nových nevyřízených transakcí. Chcete-li zkontrolovat, zda se stav změnil, zavolejte eth_getFilterChanges.

Parametry Žádné

Návratová hodnota QUANTITY – ID filtru.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}

eth_uninstallFilter

Odinstaluje filtr s daným ID. Mělo by být vždy voláno, když již není potřeba sledování. Filtry navíc vyprší, pokud nejsou po určitou dobu požadovány pomocí eth_getFilterChanges.

Parametry

  1. QUANTITY – ID filtru.
1params: [
2 "0xb", // 11
3]

Návratová hodnota Booleantrue, pokud byl filtr úspěšně odinstalován, jinak false.

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": true
8}

eth_getFilterChanges

Dotazovací metoda pro filtr, která vrací pole záznamů, které se objevily od posledního dotazu.

Parametry

  1. QUANTITY – ID filtru.
1params: [
2 "0x16", // 22
3]

Návratová hodnota Pole – pole objektů logů, nebo prázdné pole, pokud se od posledního dotazu nic nezměnilo.

  • Pro filtry vytvořené pomocí eth_newBlockFilter jsou návratovou hodnotou haše bloků (DATA, 32 bajtů), např. [\"0x3454645634534...\"].

  • Pro filtry vytvořené pomocí eth_newPendingTransactionFilter jsou návratovou hodnotou haše transakcí (DATA, 32 bajtů), např. [\"0x6345343454645...\"].

  • Pro filtry vytvořené pomocí eth_newFilter jsou logy objekty s následujícími parametry:

    • removed: TAGtrue, když byl log odstraněn kvůli reorganizaci řetězce. false, pokud se jedná o platný log.
    • logIndex: QUANTITY – celé číslo pozice indexu logu v bloku. null, pokud se jedná o nevyřízený log.
    • transactionIndex: QUANTITY – celé číslo pozice indexu transakcí, ze kterého byl log vytvořen. null, pokud se jedná o nevyřízený log.
    • transactionHash: DATA, 32 bajtů – haš transakcí, ze kterých byl tento log vytvořen. null, pokud se jedná o nevyřízený log.
    • blockHash: DATA, 32 bajtů – haš bloku, ve kterém se tento log nacházel. null, když je nevyřízená. null, pokud se jedná o nevyřízený log.
    • blockNumber: QUANTITY – číslo bloku, ve kterém se tento log nacházel. null, když je nevyřízená. null, pokud se jedná o nevyřízený log.
    • address: DATA, 20 bajtů – adresa, ze které tento log pochází.
    • data: DATA – neindexovaná data protokolu s proměnnou délkou. (V solidity: nula nebo více 32bajtových neindexovaných argumentů protokolu.)
    • topics: Pole DATA – pole 0 až 4 32bajtových DATA indexovaných argumentů logu. (V solidity: První téma je haš podpisu události (např. Deposit(address,bytes32,uint256)), pokud jste událost nedeklarovali se specifikátorem anonymous.)
  • Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc":"2.0",
7 "result": [{
8 "logIndex": "0x1", // 1
9 "blockNumber":"0x1b4", // 436
10 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
12 "transactionIndex": "0x0", // 0
13 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
16 },{
17 ...
18 }]
19}
Zobrazit vše

eth_getFilterLogs

Vrátí pole všech logů odpovídajících filtru s daným ID.

Parametry

  1. QUANTITY – ID filtru.
1params: [
2 "0x16", // 22
3]

Návratová hodnota Viz eth_getFilterChanges

Příklad

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'

Výsledek viz eth_getFilterChanges

eth_getLogs

Vrátí pole všech logů odpovídajících danému objektu filtru.

Parametry

  1. Object – možnosti filtru:
  • fromBlock: QUANTITY|TAG – (volitelné, výchozí: "latest") celé číslo bloku, nebo "latest" pro poslední navržený blok, "safe" pro poslední bezpečný blok, "finalized" pro poslední finalizovaný blok nebo "pending", "earliest" pro transakce, které ještě nejsou v bloku.
  • toBlock: QUANTITY|TAG – (volitelné, výchozí: "latest") celé číslo bloku, nebo "latest" pro poslední navržený blok, "safe" pro poslední bezpečný blok, "finalized" pro poslední finalizovaný blok nebo "pending", "earliest" pro transakce, které ještě nejsou v bloku.
  • address: DATA|Pole, 20 bajtů – (volitelné) adresa kontraktu nebo seznam adres, ze kterých by měly logy pocházet.
  • topics: Pole DATA, – (volitelné) pole 32bajtových témat DATA. Témata jsou závislá na pořadí. Každé téma může být také polem DATA s možnostmi „nebo“.
  • blockHash: DATA, 32 bajtů – (volitelné, v budoucnu) S přidáním EIP-234 bude blockHash novou možností filtru, která omezuje vrácené logy na jediný blok s 32bajtovým hašem blockHash. Použití blockHash je ekvivalentní fromBlock = toBlock = číslo bloku s hašem blockHash. Pokud je v kritériích filtru přítomen blockHash, pak nejsou povoleny ani fromBlock, ani toBlock.
1params: [
2 {
3 topics: [
4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
5 ],
6 },
7]

Návratová hodnota Viz eth_getFilterChanges

Příklad

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

Výsledek viz eth_getFilterChanges

Příklad použití

Nasazení kontraktu pomocí JSON_RPC

Tato část obsahuje ukázku, jak nasadit kontrakt pouze pomocí rozhraní RPC. Existují alternativní cesty k nasazení kontraktů, kde je tato složitost abstrahována – například pomocí knihoven postavených na rozhraní RPC, jako jsou web3.jsopens in a new tab a web3.pyopens in a new tab. Tyto abstrakce jsou obecně snáze pochopitelné a méně náchylné k chybám, ale stále je užitečné pochopit, co se děje pod pokličkou.

Následuje jednoduchý chytrý kontrakt s názvem Multiply7, který bude nasazen pomocí rozhraní JSON-RPC na uzel Ethereum. Tento tutoriál předpokládá, že čtenář již provozuje uzel Geth. Více informací o uzlech a klientech je k dispozici zde. Informace o tom, jak spustit HTTP JSON-RPC pro klienty jiné než Geth, naleznete v dokumentaci jednotlivých klientů. Většina klientů má jako výchozí nastavení poskytování služeb 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}

První věc, kterou je třeba udělat, je ujistit se, že je povoleno rozhraní HTTP RPC. To znamená, že při spuštění poskytneme Gethu příznak --http. V tomto příkladu používáme uzel Geth na soukromém vývojovém řetězci. Při tomto přístupu nepotřebujeme ether na skutečné síti.

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

Tím se spustí rozhraní HTTP RPC na http://localhost:8545.

Ověřit, že rozhraní běží, můžeme načtením coinbase adresy (získáním první adresy z pole účtů) a zůstatku pomocí curlopens in a new tab. Upozorňujeme, že data v těchto příkladech se na vašem lokálním uzlu budou lišit. Pokud chcete tyto příkazy vyzkoušet, nahraďte parametry požadavku v druhém požadavku curl výsledkem vráceným z prvního.

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"}

Protože čísla jsou kódována šestnáctkově, zůstatek je vrácen ve wei jako šestnáctkový řetězec. Pokud chceme mít zůstatek v etheru jako číslo, můžeme použít web3 z konzole Geth.

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

Nyní, když máme na našem soukromém vývojovém řetězci nějaký ether, můžeme nasadit kontrakt. Prvním krokem je zkompilovat kontrakt Multiply7 do bajtkódu, který lze odeslat do EVM. Pro instalaci solc, kompilátoru Solidity, postupujte podle dokumentace Solidityopens in a new tab. (Možná budete chtít použít starší vydání solc, aby odpovídalo verzi kompilátoru použitého pro náš příkladopens in a new tab.)

Dalším krokem je zkompilovat kontrakt Multiply7 do bajtového kódu, který lze odeslat 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

Nyní, když máme zkompilovaný kód, musíme určit, kolik gasu stojí jeho nasazení. Rozhraní RPC má metodu eth_estimateGas, která nám poskytne odhad.

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"}

A nakonec nasaďte 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"}

Transakce je přijata uzlem a vrátí se haš transakce. Tento haš může být použit ke sledování transakce. Dalším krokem je určení adresy, na které je náš kontrakt nasazen. Každá provedená transakce vytvoří potvrzení. Toto potvrzení obsahuje různé informace o transakci, například do kterého bloku byla transakce zahrnuta a kolik gasu spotřeboval EVM. Pokud transakce vytváří kontrakt, bude také obsahovat adresu kontraktu. Potvrzení můžeme získat pomocí RPC metody 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"}}

Náš kontrakt byl vytvořen na adrese 0x4d03d617d700cf81935d7f797f4e2ae719648262. Výsledek null namísto potvrzení znamená, že transakce ještě nebyla zahrnuta do bloku. Chvíli počkejte, zkontrolujte, zda běží váš konsensuální klient, a zkuste to znovu.

Interakce s chytrými kontrakty

V tomto příkladu odešleme transakci pomocí eth_sendTransaction na metodu multiply daného kontraktu.

eth_sendTransaction vyžaduje několik argumentů, konkrétně from, to a data. From je veřejná adresa našeho účtu a to je adresa kontraktu. Argument data obsahuje datovou část (payload), která definuje, jaká metoda se má zavolat a s jakými argumenty. Zde přichází na řadu ABI (application binary interface)opens in a new tab. ABI je soubor JSON, který definuje, jak definovat a kódovat data pro EVM.

Bajty datové části (payload) definují, která metoda v kontraktu je volána. Jedná se o první 4 bajty z haše Keccak přes název funkce a typy jejích argumentů, kódované v šestnáctkové soustavě. Funkce multiply přijímá uint, což je alias pro uint256. Zůstane nám tedy:

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

Dalším krokem je zakódování argumentů. Je zde pouze jeden uint256, řekněme hodnota 6. ABI má sekci, která specifikuje, jak kódovat typy uint256.

int<M>: enc(X) je kódování X v doplňkovém kódu big-endian, doplněné na straně vyššího řádu (vlevo) o 0xff pro záporné X a o nulové bajty pro kladné X tak, aby délka byla násobkem 32 bajtů.

To se zakóduje na 0000000000000000000000000000000000000000000000000000000000000006.

Kombinací selektoru funkce a zakódovaného argumentu budou naše data 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.

Toto lze nyní odeslat do uzlu:

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"}

Jelikož byla odeslána transakce, vrátil se její haš. Získání potvrzení vrátí:

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: 0
16 }],
17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
18 transactionIndex: 0
19}
Zobrazit vše

Potvrzení obsahuje log. Tento log byl vygenerován EVM při provedení transakce a zahrnut do potvrzení. Funkce multiply ukazuje, že událost Print byla vyvolána se vstupem vynásobeným 7. Vzhledem k tomu, že argument pro událost Print byl uint256, můžeme jej dekódovat podle pravidel ABI, což nám zanechá očekávanou desetinnou hodnotu 42. Kromě dat stojí za zmínku, že témata lze použít k určení, která událost vytvořila záznam:

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

Toto byl jen stručný úvod do některých z nejběžnějších úkolů, demonstrující přímé použití JSON-RPC.

Byl tento článek užitečný?