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 blokuString "earliest"pro nejstarší/genesis blokString "latest"– pro poslední navržený blokString "safe"– pro poslední bezpečný hlavní blokString "finalized"– pro poslední finalizovaný blokString "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í.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
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// 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
Vrátí haš Keccak-256 (nikoli standardizovaný SHA3-256) z daných dat.
Parametry
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// 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
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 Mainnet11155111: testnet Sepolia560048: Hoodi Testnet
Příklad
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
Vrátí true, pokud klient aktivně naslouchá síťovým připojením.
Parametry
Žádná
Návratová hodnota
Boolean – true, když naslouchá, jinak false.
Příklad
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
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// 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
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// 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
Vrátí objekt s daty o stavu synchronizace nebo false.
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_blockNumberhighestBlock: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šeZatí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šeDalší podrobnosti naleznete v dokumentaci pro vašeho konkrétního klienta.
Příklad
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}Zobrazit všeeth_coinbase
Vrátí klientskou adresu coinbase.
Vyzkoušejte koncový bod na playgrounduopens in a new tabPozná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// 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
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 tabParametry
Žá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// 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
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.
Parametry
Žádná
Návratová hodnota
Boolean – vrátí true, pokud klient těží, jinak false.
Příklad
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
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.
Parametry
Žádná
Návratová hodnota
QUANTITY – počet hašů za sekundu.
Příklad
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
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 tabParametry
Žádná
Návratová hodnota
QUANTITY – celé číslo aktuální ceny gasu ve wei.
Příklad
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
Vrátí seznam adres, které klient vlastní.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
Žádná
Návratová hodnota
Pole DATA, 20 bajtů – adresy vlastněné klientem.
Příklad
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
Vrací číslo nejnovějšího bloku.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
Žádná
Návratová hodnota
QUANTITY – celé číslo aktuálního čísla bloku, na kterém se klient nachází.
Příklad
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
Vrací zůstatek účtu na dané adrese.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 20 bajtů – adresa pro kontrolu zůstatku.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// 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
Vrátí hodnotu z pozice v úložišti na dané adrese.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 20 bajtů – adresa úložiště.QUANTITY– celé číslo pozice v úložišti.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:85452{"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"2undefined3> 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:85452{"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 tabParametry
DATA, 20 bajtů – adresa.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 bloku4]Návratová hodnota
QUANTITY - celé číslo udávající počet transakcí odeslaných z této adresy.
Příklad
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
Vrátí počet transakcí v bloku, který odpovídá danému haši bloku.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 32 bajtů – haš bloku
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Návratová hodnota
QUANTITY – celé číslo počtu transakcí v tomto bloku.
Příklad
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
Vrátí počet transakcí v bloku odpovídajícím danému číslu bloku.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
QUANTITY|TAG– celé číslo čísla bloku nebo řetězec"earliest","latest","pending","safe"nebo"finalized", jako v parametru bloku.
1params: [2 "0x13738ca", // 203962343]Návratová hodnota
QUANTITY – celé číslo počtu transakcí v tomto bloku.
Příklad
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
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 tabParametry
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// 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
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 tabParametry
QUANTITY|TAG– celé číslo čísla bloku nebo řetězec"latest","earliest","pending","safe"nebo"finalized", viz parametr bloku
1params: [2 "0xe8", // 2323]Návratová hodnota
QUANTITY – celé číslo počtu strýčkovských bloků v tomto bloku.
Příklad
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
Vrátí kód na dané adrese.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 20 bajtů – adresaQUANTITY|TAG– celé číslo bloku nebo řetězec"latest","earliest","pending","safe"nebo"finalized", viz parametr bloku
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Návratová hodnota
DATA – kód z dané adresy.
Příklad
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 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
DATA, 20 bajtů – adresaDATA, N bajtů – zpráva k podepsání
Návratová hodnota
DATA: Podpis
Příklad
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
Podepíše transakci, kterou lze později odeslat do sítě pomocí eth_sendRawTransaction.
Parametry
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// 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
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
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", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Zobrazit všeNá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// 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
Vytvoří novou transakci volání zprávy nebo vytvoření kontraktu pro podepsané transakce.
Parametry
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// 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
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.
Parametry
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ý gasvalue: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.
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// 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 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 tabParametry
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// 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
Vrátí informace o bloku podle haše.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 32 bajtů – haš bloku.Boolean– pokudtrue, vrátí celé objekty transakcí, pokudfalse, 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.nullpro nevyřízený blok,0x0pro 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žadavek2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Výsledek4{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šeeth_getBlockByNumber
Vrátí informace o bloku podle čísla bloku.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
QUANTITY|TAG– celé číslo čísla bloku nebo řetězec"earliest","latest","pending","safe"nebo"finalized", jako v parametru bloku.Boolean– pokudtrue, vrátí celé objekty transakcí, pokudfalse, vrátí pouze haše transakcí.
1params: [2 "0x1b4", // 4363 true,4]Návratová hodnota Viz eth_getBlockByHash
Příklad
1// Request2curl -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 tabParametry
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í ECDSAr:QUANTITY– ECDSA podpis rs:QUANTITY– ECDSA podpis s
Příklad
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}Zobrazit všeeth_getTransactionByBlockHashAndIndex
Vrátí informace o transakci podle haše bloku a pozice indexu transakce.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 32 bajtů – haš bloku.QUANTITY– celé číslo pozice indexu transakce.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Návratová hodnota Viz eth_getTransactionByHash
Příklad
1// Request2curl -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 tabParametry
QUANTITY|TAG– číslo bloku nebo řetězec"earliest","latest","pending","safe"nebo"finalized", jako v parametru bloku.QUANTITY– pozice indexu transakce.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Návratová hodnota Viz eth_getTransactionByHash
Příklad
1// Request2curl -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
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, jinaknull.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,0x0pro starší transakce,0x1pro typy se seznamem přístupů,0x2pro dynamické poplatky.
Vrátí také buď:
root:DATA32 bajtů kořene stavu po transakci (před Byzantium)status:QUANTITYbuď1(úspěch), nebo0(selhání)
Příklad
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, // řetězec adresy, pokud byla vytvořena12 "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 filtr20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Zobrazit všeeth_getUncleByBlockHashAndIndex
Vrací informace o „uncle“ bloku podle haše a pozice indexu „uncle“.
Vyzkoušejte koncový bod na playgrounduopens in a new tabParametry
DATA, 32 bajtů – haš bloku.QUANTITY– pozice indexu strýčkovského bloku.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Návratová hodnota Viz eth_getBlockByHash
Příklad
1// Request2curl -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 tabParametry
QUANTITY|TAG– číslo bloku nebo řetězec"earliest","latest","pending","safe","finalized", jako v parametru bloku.QUANTITY– pozice indexu strýčkovského bloku.
1params: [2 "0x29c", // 6683 "0x0", // 04]Návratová hodnota Viz eth_getBlockByHash
Poznámka: Strýčkovský blok neobsahuje jednotlivé transakce.
Příklad
1// Request2curl -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
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ématDATA. 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šeNávratová hodnota
QUANTITY – ID filtru.
Příklad
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
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// 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
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// 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
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
QUANTITY– ID filtru.
1params: [2 "0xb", // 113]Návratová hodnota
Boolean – true, pokud byl filtr úspěšně odinstalován, jinak false.
Příklad
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
Dotazovací metoda pro filtr, která vrací pole záznamů, které se objevily od posledního dotazu.
Parametry
QUANTITY– ID filtru.
1params: [2 "0x16", // 223]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_newBlockFilterjsou návratovou hodnotou haše bloků (DATA, 32 bajtů), např.[\"0x3454645634534...\"]. -
Pro filtry vytvořené pomocí
eth_newPendingTransactionFilterjsou návratovou hodnotou haše transakcí (DATA, 32 bajtů), např.[\"0x6345343454645...\"]. -
Pro filtry vytvořené pomocí
eth_newFilterjsou logy objekty s následujícími parametry:removed:TAG–true, 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ýchDATAindexovaný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átoremanonymous.)
-
Příklad
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}Zobrazit všeeth_getFilterLogs
Vrátí pole všech logů odpovídajících filtru s daným ID.
Parametry
QUANTITY– ID filtru.
1params: [2 "0x16", // 223]Návratová hodnota Viz eth_getFilterChanges
Příklad
1// Request2curl -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
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ématDATA. 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 budeblockHashnovou možností filtru, která omezuje vrácené logy na jediný blok s 32bajtovým hašemblockHash. PoužitíblockHashje ekvivalentnífromBlock=toBlock= číslo bloku s hašemblockHash. Pokud je v kritériích filtru přítomenblockHash, pak nejsou povoleny anifromBlock, anitoBlock.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Návratová hodnota Viz eth_getFilterChanges
Příklad
1// Request2curl -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.logTí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:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Nyní, 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: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}Zobrazit všePotvrzení 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.