API JSON-RPC
Ultimo aggiornamento della pagina: 23 febbraio 2026
Affinché un'applicazione software possa interagire con la blockchain di Ethereum - sia leggendo i dati della blockchain che inviando transazioni alla rete - deve connettersi a un nodo di Ethereum.
A questo scopo, ogni client di Ethereum implementa una specifica JSON-RPC (opens in a new tab), in modo che ci sia un insieme uniforme di metodi su cui le applicazioni possono fare affidamento indipendentemente dalla specifica implementazione del nodo o del client.
JSON-RPC (opens in a new tab) è un protocollo di chiamata di procedura remota (RPC) leggero e senza stato. Definisce diverse strutture di dati e le regole per la loro elaborazione. È indipendente dal trasporto, in quanto i concetti possono essere utilizzati all'interno dello stesso processo, tramite socket, tramite HTTP o in molti ambienti diversi di passaggio di messaggi. Utilizza JSON (RFC 4627) come formato dei dati.
Implementazioni dei client
I client di Ethereum possono utilizzare linguaggi di programmazione diversi nell'implementazione della specifica JSON-RPC. Consulta la documentazione dei singoli client per ulteriori dettagli relativi a specifici linguaggi di programmazione. Consigliamo di controllare la documentazione di ciascun client per le informazioni più recenti sul supporto delle API.
Librerie di utilità
Sebbene tu possa scegliere di interagire direttamente con i client di Ethereum tramite l'API JSON-RPC, ci sono spesso opzioni più semplici per gli sviluppatori di dApp. Esistono molte librerie JavaScript e API di backend che forniscono wrapper sopra l'API JSON-RPC. Con queste librerie, gli sviluppatori possono scrivere metodi intuitivi di una sola riga nel linguaggio di programmazione scelto per inizializzare richieste JSON-RPC (dietro le quinte) che interagiscono con Ethereum.
API dei client di consenso
Questa pagina tratta principalmente l'API JSON-RPC utilizzata dai client di esecuzione di Ethereum. Tuttavia, anche i client di consenso dispongono di un'API RPC che consente agli utenti di richiedere informazioni sul nodo, richiedere blocchi Beacon, lo stato Beacon e altre informazioni relative al consenso direttamente da un nodo. Questa API è documentata sulla pagina web dell'API Beacon (opens in a new tab).
Un'API interna viene utilizzata anche per la comunicazione tra client all'interno di un nodo, ovvero consente al client di consenso e al client di esecuzione di scambiarsi dati. Questa è chiamata 'Engine API' e le specifiche sono disponibili su GitHub (opens in a new tab).
Specifiche del client di esecuzione
Leggi le specifiche complete dell'API JSON-RPC su GitHub (opens in a new tab). Questa API è documentata sulla pagina web dell'API di esecuzione (opens in a new tab) e include un Inspector per provare tutti i metodi disponibili.
Convenzioni
Codifica dei valori esadecimali
Due tipi di dati chiave vengono passati tramite JSON: array di byte non formattati e quantità. Entrambi vengono passati con una codifica esadecimale ma con requisiti diversi per la formattazione.
Quantità
Quando si codificano quantità (interi, numeri): codificare come esadecimale, prefissare con "0x", la rappresentazione più compatta (piccola eccezione: lo zero dovrebbe essere rappresentato come "0x0").
Ecco alcuni esempi:
- 0x41 (65 in decimale)
- 0x400 (1024 in decimale)
- SBAGLIATO: 0x (dovrebbe avere sempre almeno una cifra - lo zero è "0x0")
- SBAGLIATO: 0x0400 (non sono ammessi zeri iniziali)
- SBAGLIATO: ff (deve essere prefissato con 0x)
Dati non formattati
Quando si codificano dati non formattati (array di byte, indirizzi di account, hash, array di bytecode): codificare come esadecimale, prefissare con "0x", due cifre esadecimali per byte.
Ecco alcuni esempi:
- 0x41 (dimensione 1, "A")
- 0x004200 (dimensione 3, "0B0")
- 0x (dimensione 0, "")
- SBAGLIATO: 0xf0f0f (deve essere un numero pari di cifre)
- SBAGLIATO: 004200 (deve essere prefissato con 0x)
Il parametro del blocco
I seguenti metodi hanno un parametro del blocco:
Quando vengono fatte richieste che interrogano lo stato di Ethereum, il parametro del blocco fornito determina l'altezza del blocco.
Le seguenti opzioni sono possibili per il parametro del blocco:
Stringa HEX- un numero di blocco interoStringa "earliest"per il primo blocco o blocco genesiStringa "latest"- per l'ultimo blocco propostoStringa "safe"- per l'ultimo blocco head sicuroStringa "finalized"- per l'ultimo blocco finalizzatoStringa "pending"- per lo stato o le transazioni in sospeso
Esempi
In questa pagina forniamo esempi di come utilizzare i singoli endpoint dell'API JSON_RPC usando lo strumento a riga di comando, curl (opens in a new tab). Questi esempi di singoli endpoint si trovano di seguito nella sezione Esempi di curl. Più in basso nella pagina, forniamo anche un esempio end-to-end per compilare e distribuire un contratto intelligente utilizzando un nodo Geth, l'API JSON_RPC e curl.
Esempi con curl
Di seguito sono forniti esempi di utilizzo dell'API JSON_RPC effettuando richieste curl (opens in a new tab) a un nodo Ethereum. Ogni esempio include una descrizione dell'endpoint specifico, i suoi parametri, il tipo di ritorno e un esempio pratico di come dovrebbe essere utilizzato.
Le richieste curl potrebbero restituire un messaggio di errore relativo al tipo di contenuto. Questo perché l'opzione --data imposta il tipo di contenuto su application/x-www-form-urlencoded. Se il tuo nodo segnala un problema al riguardo, imposta manualmente l'intestazione inserendo -H "Content-Type: application/json" all'inizio della chiamata. Inoltre, gli esempi non includono la combinazione di URL/IP e porta, che deve essere l'ultimo argomento fornito a curl (es. 127.0.0.1:8545). Una richiesta curl completa che include questi dati aggiuntivi assume la seguente forma:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545Gossip, Stato, Cronologia
Una manciata di metodi JSON-RPC principali richiede dati dalla rete di Ethereum e rientra ordinatamente in tre categorie principali: Gossip, Stato e Cronologia. Usa i link in queste sezioni per passare a ciascun metodo, oppure usa il sommario per esplorare l'intero elenco dei metodi.
Metodi di Gossip
Questi metodi tracciano la testa della catena. È così che le transazioni si fanno strada nella rete, trovano posto nei blocchi e come i client scoprono i nuovi blocchi.
Metodi di Stato
Metodi che riportano lo stato attuale di tutti i dati memorizzati. Lo "stato" è come un grande pezzo di RAM condivisa e include i saldi degli account, i dati dei contratti e le stime del gas.
Metodi di Cronologia
Recupera i registri storici di ogni blocco fino alla genesi. Questo è come un grande file di sola aggiunta e include tutte le intestazioni dei blocchi, i corpi dei blocchi, i blocchi uncle e le ricevute delle transazioni.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
Playground dell'API JSON-RPC
Puoi usare lo strumento playground (opens in a new tab) per scoprire e provare i metodi dell'API. Ti mostra anche quali metodi e reti sono supportati dai vari provider di nodi.
Metodi dell'API JSON-RPC
web3_clientVersion
Restituisce la versione attuale del client.
Parametri
Nessuno
Restituisce
String - La versione attuale del client
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Risultato4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}web3_sha3
Restituisce il Keccak-256 (non lo SHA3-256 standardizzato) dei dati forniti.
Parametri
DATA- I dati da convertire in un hash SHA3
1params: ["0x68656c6c6f20776f726c64"]Restituisce
DATA - Il risultato SHA3 della stringa fornita.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Risultato4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}net_version
Restituisce l'id attuale della rete.
Parametri
Nessuno
Restituisce
String - L'id attuale della rete.
L'elenco completo degli ID di rete attuali è disponibile su chainlist.org (opens in a new tab). Alcuni tra i più comuni sono:
1: Rete principale di Ethereum11155111: Rete di test di Sepolia560048: Rete di test di Hoodi
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Risultato4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
Restituisce true se il client è in ascolto attivo per le connessioni di rete.
Parametri
Nessuno
Restituisce
Boolean - true quando è in ascolto, altrimenti false.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Risultato4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
Restituisce il numero di peer attualmente connessi al client.
Parametri
Nessuno
Restituisce
QUANTITY - intero del numero di peer connessi.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Risultato4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}eth_protocolVersion
Restituisce la versione attuale del protocollo di Ethereum. Nota che questo metodo non è disponibile in Geth (opens in a new tab).
Parametri
Nessuno
Restituisce
String - La versione attuale del protocollo di Ethereum
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Risultato4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
Restituisce un oggetto con i dati sullo stato della sincronizzazione o false.
Parametri
Nessuno
Restituisce
I dati precisi restituiti variano tra le implementazioni dei client. Tutti i client restituiscono False quando il nodo non si sta sincronizzando e tutti i client restituiscono i seguenti campi.
Object|Boolean, Un oggetto con i dati dello stato di sincronizzazione o FALSE, quando non in sincronizzazione:
startingBlock:QUANTITY- Il blocco al quale è iniziata l'importazione (sarà ripristinato solo dopo che la sincronizzazione avrà raggiunto la sua testa)currentBlock:QUANTITY- Il blocco attuale, uguale a eth_blockNumberhighestBlock:QUANTITY- Il blocco più alto stimato
Tuttavia, i singoli client possono anche fornire dati aggiuntivi. Ad esempio, Geth restituisce quanto segue:
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}Mostra tuttoMentre Besu restituisce:
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}Mostra tuttoFai riferimento alla documentazione del tuo client specifico per maggiori dettagli.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// O quando non è in sincronizzazione14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Mostra tuttoeth_coinbase
Restituisce l'indirizzo coinbase del client.
Prova l'endpoint nel playground (opens in a new tab)Nota: Questo metodo è stato deprecato a partire dalla v1.14.0 e non è più supportato. Il tentativo di utilizzare questo metodo comporterà un errore "Method not supported".
Parametri
Nessuno
Restituisce
DATA, 20 byte - l'indirizzo coinbase attuale.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Risultato4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}eth_chainId
Restituisce l'ID della catena utilizzato per firmare le transazioni protette da replay.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
chainId, valore esadecimale come stringa che rappresenta l'intero dell'id della catena attuale.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Risultato4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}eth_mining
Restituisce true se il client sta attivamente minando nuovi blocchi. Questo può restituire true solo per le reti a prova di lavoro e potrebbe non essere disponibile in alcuni client da La Fusione.
Parametri
Nessuno
Restituisce
Boolean - restituisce true se il client sta minando, altrimenti false.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'34{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}eth_hashrate
Restituisce il numero di hash al secondo con cui il nodo sta minando. Questo può restituire true solo per le reti a prova di lavoro e potrebbe non essere disponibile in alcuni client da La Fusione.
Parametri
Nessuno
Restituisce
QUANTITY - numero di hash al secondo.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Risultato4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}eth_gasPrice
Restituisce una stima del prezzo del gas attuale in wei. Ad esempio, il client Besu esamina gli ultimi 100 blocchi e restituisce il prezzo unitario mediano del gas per impostazione predefinita.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
QUANTITY - intero del prezzo del gas attuale in wei.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Risultato4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}eth_accounts
Restituisce un elenco di indirizzi posseduti dal client.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
Array di DATA, 20 Byte - indirizzi posseduti dal client.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}eth_blockNumber
Restituisce il numero del blocco più recente.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
QUANTITY - intero del numero di blocco attuale su cui si trova il client.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Risultato4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}eth_getBalance
Restituisce il saldo dell'account a un dato indirizzo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 20 Byte - indirizzo di cui controllare il saldo.QUANTITY|TAG- numero di blocco intero, o la stringa"latest","earliest","pending","safe", o"finalized", vedi il parametro del blocco
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Restituisce
QUANTITY - intero del saldo attuale in wei.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}eth_getStorageAt
Restituisce il valore da una posizione di archiviazione a un dato indirizzo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 20 Byte - indirizzo dell'archiviazione.QUANTITY- intero della posizione nell'archiviazione.QUANTITY|TAG- numero di blocco intero, o la stringa"latest","earliest","pending","safe","finalized", vedi il parametro del blocco
Restituisce
DATA - il valore in questa posizione di archiviazione.
Esempio
Il calcolo della posizione corretta dipende dall'archiviazione da recuperare. Considera il seguente contratto distribuito a 0x295a70b2de5e3953354a6a8344e616ed314d7251 dall'indirizzo 0x391694e7e0b0cce554cb130d723a9d27458f9298.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}Recuperare il valore di pos0 è semplice:
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"}Recuperare un elemento della mappa è più difficile. La posizione di un elemento nella mappa è calcolata con:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))Questo significa che per recuperare l'archiviazione su pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] dobbiamo calcolare la posizione con:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)La console di geth fornita con la libreria web3 può essere utilizzata per effettuare il calcolo:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Ora per recuperare l'archiviazione:
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
Restituisce il numero di transazioni inviate da un indirizzo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 20 Byte - indirizzo.QUANTITY|TAG- numero di blocco intero, o la stringa"latest","earliest","pending","safe"o"finalized", vedi il parametro del blocco
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // stato all'ultimo blocco4]Restituisce
QUANTITY - intero del numero di transazioni inviate da questo indirizzo.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getBlockTransactionCountByHash
Restituisce il numero di transazioni in un blocco da un blocco che corrisponde all'hash del blocco fornito.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - hash di un blocco
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Restituisce
QUANTITY - intero del numero di transazioni in questo blocco.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getBlockTransactionCountByNumber
Restituisce il numero di transazioni in un blocco che corrisponde al numero di blocco fornito.
Prova l'endpoint nel playground (opens in a new tab)Parametri
QUANTITY|TAG- intero di un numero di blocco, o la stringa"earliest","latest","pending","safe"o"finalized", come nel parametro del blocco.
1params: [2 "0x13738ca", // 203962343]Restituisce
QUANTITY - intero del numero di transazioni in questo blocco.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getUncleCountByBlockHash
Restituisce il numero di uncle in un blocco da un blocco che corrisponde all'hash del blocco fornito.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - hash di un blocco
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Restituisce
QUANTITY - intero del numero di uncle in questo blocco.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getUncleCountByBlockNumber
Restituisce il numero di uncle in un blocco da un blocco che corrisponde al numero di blocco fornito.
Prova l'endpoint nel playground (opens in a new tab)Parametri
QUANTITY|TAG- intero di un numero di blocco, o la stringa"latest","earliest","pending","safe"o"finalized", vedi il parametro del blocco
1params: [2 "0xe8", // 2323]Restituisce
QUANTITY - intero del numero di uncle in questo blocco.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0" // 08}eth_getCode
Restituisce il codice a un dato indirizzo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 20 Byte - indirizzoQUANTITY|TAG- numero di blocco intero, o la stringa"latest","earliest","pending","safe"o"finalized", vedi il parametro del blocco
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Restituisce
DATA - il codice dal dato indirizzo.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
Il metodo sign calcola una firma specifica di Ethereum con: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
L'aggiunta di un prefisso al messaggio rende la firma calcolata riconoscibile come una firma specifica di Ethereum. Questo previene abusi in cui una dApp malevola può firmare dati arbitrari (es. una transazione) e utilizzare la firma per impersonare la vittima.
Nota: l'indirizzo con cui firmare deve essere sbloccato.
Parametri
DATA, 20 Byte - indirizzoDATA, N Byte - messaggio da firmare
Restituisce
DATA: Firma
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_signTransaction
Firma una transazione che può essere inviata alla rete in un momento successivo utilizzando eth_sendRawTransaction.
Parametri
Object- L'oggetto della transazione
type:from:DATA, 20 Byte - L'indirizzo da cui viene inviata la transazione.to:DATA, 20 Byte - (opzionale quando si crea un nuovo contratto) L'indirizzo a cui è diretta la transazione.gas:QUANTITY- (opzionale, predefinito: 90000) Intero del gas fornito per l'esecuzione della transazione. Restituirà il gas non utilizzato.gasPrice:QUANTITY- (opzionale, predefinito: Da determinare) Intero del gasPrice utilizzato per ogni gas pagato, in Wei.value:QUANTITY- (opzionale) Intero del valore inviato con questa transazione, in Wei.data:DATA- Il codice compilato di un contratto OPPURE l'hash della firma del metodo invocato e dei parametri codificati.nonce:QUANTITY- (opzionale) Intero di un nonce. Questo consente di sovrascrivere le proprie transazioni in sospeso che utilizzano lo stesso nonce.
Restituisce
DATA, L'oggetto della transazione codificato in RLP firmato dall'account specificato.
Esempio
1// Richiesta2curl -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// Risultato4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}eth_sendTransaction
Crea una nuova transazione di chiamata di messaggio o la creazione di un contratto, se il campo dati contiene codice, e la firma utilizzando l'account specificato in from.
Parametri
Object- L'oggetto della transazione
from:DATA, 20 Byte - L'indirizzo da cui viene inviata la transazione.to:DATA, 20 Byte - (opzionale quando si crea un nuovo contratto) L'indirizzo a cui è diretta la transazione.gas:QUANTITY- (opzionale, predefinito: 90000) Intero del gas fornito per l'esecuzione della transazione. Restituirà il gas non utilizzato.gasPrice:QUANTITY- (opzionale, predefinito: Da determinare) Intero del gasPrice utilizzato per ogni gas pagato.value:QUANTITY- (opzionale) Intero del valore inviato con questa transazione.input:DATA- Il codice compilato di un contratto OPPURE l'hash della firma del metodo invocato e dei parametri codificati.nonce:QUANTITY- (opzionale) Intero di un nonce. Questo consente di sovrascrivere le proprie transazioni in sospeso che utilizzano lo stesso nonce.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Mostra tuttoRestituisce
DATA, 32 Byte - l'hash della transazione, o l'hash zero se la transazione non è ancora disponibile.
Usa eth_getTransactionReceipt per ottenere l'indirizzo del contratto, dopo che la transazione è stata proposta in un blocco, quando hai creato un contratto.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_sendRawTransaction
Crea una nuova transazione di chiamata di messaggio o la creazione di un contratto per le transazioni firmate.
Parametri
DATA, I dati della transazione firmata.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Restituisce
DATA, 32 Byte - l'hash della transazione, o l'hash zero se la transazione non è ancora disponibile.
Usa eth_getTransactionReceipt per ottenere l'indirizzo del contratto, dopo che la transazione è stata proposta in un blocco, quando hai creato un contratto.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_call
Esegue immediatamente una nuova chiamata di messaggio senza creare una transazione sulla blockchain. Spesso utilizzato per eseguire funzioni di contratto intelligente di sola lettura, ad esempio il balanceOf per un contratto ERC-20.
Parametri
Object- L'oggetto della chiamata di transazione
from:DATA, 20 Byte - (opzionale) L'indirizzo da cui viene inviata la transazione.to:DATA, 20 Byte - L'indirizzo a cui è diretta la transazione.gas:QUANTITY- (opzionale) Intero del gas fornito per l'esecuzione della transazione. eth_call consuma zero gas, ma questo parametro potrebbe essere necessario per alcune esecuzioni.gasPrice:QUANTITY- (opzionale) Intero del gasPrice utilizzato per ogni gas pagatovalue:QUANTITY- (opzionale) Intero del valore inviato con questa transazioneinput:DATA- (opzionale) Hash della firma del metodo e dei parametri codificati. Per i dettagli vedi Ethereum Contract ABI nella documentazione di Solidity (opens in a new tab).
QUANTITY|TAG- numero di blocco intero, o la stringa"latest","earliest","pending","safe"o"finalized", vedi il parametro del blocco
Restituisce
DATA - il valore restituito dal contratto eseguito.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}eth_estimateGas
Genera e restituisce una stima di quanto gas è necessario per consentire il completamento della transazione. La transazione non verrà aggiunta alla blockchain. Nota che la stima potrebbe essere significativamente superiore alla quantità di gas effettivamente utilizzata dalla transazione, per una serie di motivi tra cui le meccaniche della EVM e le prestazioni del nodo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Vedi i parametri di eth_call, tranne per il fatto che tutte le proprietà sono opzionali. Se non viene specificato alcun limite del gas, geth utilizza il limite del gas del blocco dal blocco in sospeso come limite superiore. Di conseguenza, la stima restituita potrebbe non essere sufficiente per eseguire la chiamata/transazione quando la quantità di gas è superiore al limite del gas del blocco in sospeso.
Restituisce
QUANTITY - la quantità di gas utilizzata.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}eth_getBlockByHash
Restituisce informazioni su un blocco tramite hash.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - Hash di un blocco.Boolean- Setruerestituisce gli oggetti completi della transazione, sefalsesolo gli hash delle transazioni.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Restituisce
Object - Un oggetto blocco, o null quando non è stato trovato alcun blocco:
number:QUANTITY- il numero del blocco.nullquando è un blocco in sospeso.hash:DATA, 32 Byte - hash del blocco.nullquando è un blocco in sospeso.parentHash:DATA, 32 Byte - hash del blocco genitore.nonce:DATA, 8 Byte - hash della prova di lavoro generata.nullquando è un blocco in sospeso,0x0per i blocchi a prova di stake (da La Fusione)sha3Uncles:DATA, 32 Byte - SHA3 dei dati degli uncle nel blocco.logsBloom:DATA, 256 Byte - il filtro bloom per i log del blocco.nullquando è un blocco in sospeso.transactionsRoot:DATA, 32 Byte - la radice del trie delle transazioni del blocco.stateRoot:DATA, 32 Byte - la radice del trie dello stato finale del blocco.receiptsRoot:DATA, 32 Byte - la radice del trie delle ricevute del blocco.miner:DATA, 20 Byte - l'indirizzo del beneficiario a cui sono state date le ricompense del blocco.difficulty:QUANTITY- intero della difficoltà per questo blocco.totalDifficulty:QUANTITY- intero della difficoltà totale della catena fino a questo blocco.extraData:DATA- il campo "dati extra" di questo blocco.size:QUANTITY- intero della dimensione di questo blocco in byte.gasLimit:QUANTITY- il limite del gas massimo consentito in questo blocco.gasUsed:QUANTITY- il gas totale utilizzato da tutte le transazioni in questo blocco.timestamp:QUANTITY- il timestamp unix di quando il blocco è stato collazionato.transactions:Array- Array di oggetti transazione, o hash di transazione di 32 Byte a seconda dell'ultimo parametro fornito.uncles:Array- Array di hash degli uncle.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Risultato4{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}Mostra tuttoeth_getBlockByNumber
Restituisce informazioni su un blocco tramite numero di blocco.
Prova l'endpoint nel playground (opens in a new tab)Parametri
QUANTITY|TAG- intero di un numero di blocco, o la stringa"earliest","latest","pending","safe"o"finalized", come nel parametro del blocco.Boolean- Setruerestituisce gli oggetti completi della transazione, sefalsesolo gli hash delle transazioni.
1params: [2 "0x1b4", // 4363 true,4]Restituisce Vedi eth_getBlockByHash
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Per il risultato vedi eth_getBlockByHash
eth_getTransactionByHash
Restituisce le informazioni su una transazione richiesta tramite hash della transazione.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - hash di una transazione
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Restituisce
Object - Un oggetto transazione, o null quando non è stata trovata alcuna transazione:
blockHash:DATA, 32 Byte - hash del blocco in cui si trovava questa transazione.nullquando è in sospeso.blockNumber:QUANTITY- numero del blocco in cui si trovava questa transazione.nullquando è in sospeso.from:DATA, 20 Byte - indirizzo del mittente.gas:QUANTITY- gas fornito dal mittente.gasPrice:QUANTITY- prezzo del gas fornito dal mittente in Wei.hash:DATA, 32 Byte - hash della transazione.input:DATA- i dati inviati insieme alla transazione.nonce:QUANTITY- il numero di transazioni effettuate dal mittente prima di questa.to:DATA, 20 Byte - indirizzo del destinatario.nullquando è una transazione di creazione di un contratto.transactionIndex:QUANTITY- intero della posizione dell'indice della transazione nel blocco.nullquando è in sospeso.value:QUANTITY- valore trasferito in Wei.v:QUANTITY- id di recupero ECDSAr:QUANTITY- firma ECDSA rs:QUANTITY- firma ECDSA s
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Risultato4{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}Mostra tuttoeth_getTransactionByBlockHashAndIndex
Restituisce informazioni su una transazione tramite hash del blocco e posizione dell'indice della transazione.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - hash di un blocco.QUANTITY- intero della posizione dell'indice della transazione.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Restituisce Vedi eth_getTransactionByHash
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Per il risultato vedi eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Restituisce informazioni su una transazione tramite numero di blocco e posizione dell'indice della transazione.
Prova l'endpoint nel playground (opens in a new tab)Parametri
QUANTITY|TAG- un numero di blocco, o la stringa"earliest","latest","pending","safe"o"finalized", come nel parametro del blocco.QUANTITY- la posizione dell'indice della transazione.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Restituisce Vedi eth_getTransactionByHash
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Per il risultato vedi eth_getTransactionByHash
eth_getTransactionReceipt
Restituisce la ricevuta di una transazione tramite hash della transazione.
Nota Che la ricevuta non è disponibile per le transazioni in sospeso.
Parametri
DATA, 32 Byte - hash di una transazione
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Restituisce
Object - Un oggetto ricevuta della transazione, o null quando non è stata trovata alcuna ricevuta:
transactionHash:DATA, 32 Byte - hash della transazione.transactionIndex:QUANTITY- intero della posizione dell'indice della transazione nel blocco.blockHash:DATA, 32 Byte - hash del blocco in cui si trovava questa transazione.blockNumber:QUANTITY- numero del blocco in cui si trovava questa transazione.from:DATA, 20 Byte - indirizzo del mittente.to:DATA, 20 Byte - indirizzo del destinatario. null quando è una transazione di creazione di un contratto.cumulativeGasUsed:QUANTITY- La quantità totale di gas utilizzata quando questa transazione è stata eseguita nel blocco.effectiveGasPrice:QUANTITY- La somma della commissione di base e della mancia pagata per unità di gas.gasUsed:QUANTITY- La quantità di gas utilizzata solo da questa specifica transazione.contractAddress:DATA, 20 Byte - L'indirizzo del contratto creato, se la transazione era una creazione di un contratto, altrimentinull.logs:Array- Array di oggetti log, che questa transazione ha generato.logsBloom:DATA, 256 Byte - Filtro Bloom per i client leggeri per recuperare rapidamente i log correlati.type:QUANTITY- intero del tipo di transazione,0x0per le transazioni legacy,0x1per i tipi di lista di accesso,0x2per le commissioni dinamiche.
Restituisce anche uno dei seguenti :
root:DATA32 byte della radice dello stato post-transazione (pre Byzantium)status:QUANTITYo1(successo) o0(fallimento)
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Risultato4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // stringa dell'indirizzo se è stato creato12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // log come restituiti da getFilterLogs, ecc.18 }],19 "logsBloom": "0x00...0", // filtro bloom di 256 byte20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Mostra tuttoeth_getUncleByBlockHashAndIndex
Restituisce informazioni su un uncle di un blocco tramite hash e posizione dell'indice dell'uncle.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 Byte - L'hash di un blocco.QUANTITY- La posizione dell'indice dell'uncle.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Restituisce Vedi eth_getBlockByHash
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Per il risultato vedi eth_getBlockByHash
Nota: Un uncle non contiene transazioni individuali.
eth_getUncleByBlockNumberAndIndex
Restituisce informazioni su un uncle di un blocco tramite numero e posizione dell'indice dell'uncle.
Prova l'endpoint nel playground (opens in a new tab)Parametri
QUANTITY|TAG- un numero di blocco, o la stringa"earliest","latest","pending","safe","finalized", come nel parametro del blocco.QUANTITY- la posizione dell'indice dell'uncle.
1params: [2 "0x29c", // 6683 "0x0", // 04]Restituisce Vedi eth_getBlockByHash
Nota: Un uncle non contiene transazioni individuali.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'Per il risultato vedi eth_getBlockByHash
eth_newFilter
Crea un oggetto filtro, basato sulle opzioni del filtro, per notificare quando lo stato cambia (log). Per verificare se lo stato è cambiato, chiama eth_getFilterChanges.
Una nota sulla specifica dei filtri degli argomenti (topic): Gli argomenti dipendono dall'ordine. Una transazione con un log con argomenti [A, B] corrisponderà ai seguenti filtri di argomenti:
[]"qualsiasi cosa"[A]"A in prima posizione (e qualsiasi cosa dopo)"[null, B]"qualsiasi cosa in prima posizione E B in seconda posizione (e qualsiasi cosa dopo)"[A, B]"A in prima posizione E B in seconda posizione (e qualsiasi cosa dopo)"[[A, B], [A, B]]"(A O B) in prima posizione E (A O B) in seconda posizione (e qualsiasi cosa dopo)"- Parametri
Object- Le opzioni del filtro:
fromBlock:QUANTITY|TAG- (opzionale, predefinito:"latest") Numero di blocco intero, o"latest"per l'ultimo blocco proposto,"safe"per l'ultimo blocco sicuro,"finalized"per l'ultimo blocco finalizzato, o"pending","earliest"per le transazioni non ancora in un blocco.toBlock:QUANTITY|TAG- (opzionale, predefinito:"latest") Numero di blocco intero, o"latest"per l'ultimo blocco proposto,"safe"per l'ultimo blocco sicuro,"finalized"per l'ultimo blocco finalizzato, o"pending","earliest"per le transazioni non ancora in un blocco.address:DATA|Array, 20 Byte - (opzionale) Indirizzo del contratto o un elenco di indirizzi da cui dovrebbero originare i log.topics:Array di DATA, - (opzionale) Array di argomentiDATAdi 32 Byte. Gli argomenti dipendono dall'ordine. Ogni argomento può anche essere un array di DATA con opzioni "o".
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]Mostra tuttoRestituisce
QUANTITY - Un id del filtro.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newBlockFilter
Crea un filtro nel nodo, per notificare quando arriva un nuovo blocco. Per verificare se lo stato è cambiato, chiama eth_getFilterChanges.
Parametri Nessuno
Restituisce
QUANTITY - Un id del filtro.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_newPendingTransactionFilter
Crea un filtro nel nodo, per notificare quando arrivano nuove transazioni in sospeso. Per verificare se lo stato è cambiato, chiama eth_getFilterChanges.
Parametri Nessuno
Restituisce
QUANTITY - Un id del filtro.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_uninstallFilter
Disinstalla un filtro con l'id fornito. Dovrebbe sempre essere chiamato quando l'osservazione non è più necessaria. Inoltre, i filtri scadono quando non vengono richiesti con eth_getFilterChanges per un periodo di tempo.
Parametri
QUANTITY- L'id del filtro.
1params: [2 "0xb", // 113]Restituisce
Boolean - true se il filtro è stato disinstallato con successo, altrimenti false.
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Risultato4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}eth_getFilterChanges
Metodo di polling per un filtro, che restituisce un array di log che si sono verificati dall'ultimo polling.
Parametri
QUANTITY- l'id del filtro.
1params: [2 "0x16", // 223]Restituisce
Array - Array di oggetti log, o un array vuoto se nulla è cambiato dall'ultimo polling.
-
Per i filtri creati con
eth_newBlockFilteril ritorno sono hash di blocco (DATA, 32 Byte), es.,["0x3454645634534..."]. -
Per i filtri creati con
eth_newPendingTransactionFilteril ritorno sono hash di transazione (DATA, 32 Byte), es.,["0x6345343454645..."]. -
Per i filtri creati con
eth_newFilteri log sono oggetti con i seguenti parametri:removed:TAG-truequando il log è stato rimosso, a causa di una riorganizzazione della catena.falsese è un log valido.logIndex:QUANTITY- intero della posizione dell'indice del log nel blocco.nullquando è un log in sospeso.transactionIndex:QUANTITY- intero della posizione dell'indice della transazione da cui è stato creato il log.nullquando è un log in sospeso.transactionHash:DATA, 32 Byte - hash delle transazioni da cui è stato creato questo log.nullquando è un log in sospeso.blockHash:DATA, 32 Byte - hash del blocco in cui si trovava questo log.nullquando è in sospeso.nullquando è un log in sospeso.blockNumber:QUANTITY- il numero del blocco in cui si trovava questo log.nullquando è in sospeso.nullquando è un log in sospeso.address:DATA, 20 Byte - indirizzo da cui ha avuto origine questo log.data:DATA- dati di log non indicizzati a lunghezza variabile. (In solidity: zero o più argomenti di log non indicizzati di 32 Byte.)topics:Array di DATA- Array da 0 a 4DATAdi 32 Byte di argomenti di log indicizzati. (In solidity: Il primo argomento è l'hash della firma dell'evento (es.,Deposit(address,bytes32,uint256)), a meno che tu non abbia dichiarato l'evento con lo specificatoreanonymous.)
-
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Risultato4{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}Mostra tuttoeth_getFilterLogs
Restituisce un array di tutti i log che corrispondono al filtro con l'id fornito.
Parametri
QUANTITY- L'id del filtro.
1params: [2 "0x16", // 223]Restituisce Vedi eth_getFilterChanges
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Per il risultato vedi eth_getFilterChanges
eth_getLogs
Restituisce un array di tutti i log che corrispondono a un dato oggetto filtro.
Parametri
Object- Le opzioni del filtro:
fromBlock:QUANTITY|TAG- (opzionale, predefinito:"latest") Numero di blocco intero, o"latest"per l'ultimo blocco proposto,"safe"per l'ultimo blocco sicuro,"finalized"per l'ultimo blocco finalizzato, o"pending","earliest"per le transazioni non ancora in un blocco.toBlock:QUANTITY|TAG- (opzionale, predefinito:"latest") Numero di blocco intero, o"latest"per l'ultimo blocco proposto,"safe"per l'ultimo blocco sicuro,"finalized"per l'ultimo blocco finalizzato, o"pending","earliest"per le transazioni non ancora in un blocco.address:DATA|Array, 20 Byte - (opzionale) Indirizzo del contratto o un elenco di indirizzi da cui dovrebbero originare i log.topics:Array di DATA, - (opzionale) Array di argomentiDATAdi 32 Byte. Gli argomenti dipendono dall'ordine. Ogni argomento può anche essere un array di DATA con opzioni "o".blockHash:DATA, 32 Byte - (opzionale, futuro) Con l'aggiunta dell'EIP-234,blockHashsarà una nuova opzione di filtro che limita i log restituiti al singolo blocco con l'hash di 32 byteblockHash. L'utilizzo diblockHashequivale afromBlock=toBlock= il numero di blocco con hashblockHash. SeblockHashè presente nei criteri di filtro, non sono consentiti néfromBlocknétoBlock.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Restituisce Vedi eth_getFilterChanges
Esempio
1// Richiesta2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Per il risultato vedi eth_getFilterChanges
Esempio di utilizzo
Distribuire un contratto usando JSON_RPC
Questa sezione include una dimostrazione di come distribuire un contratto usando solo l'interfaccia RPC. Esistono percorsi alternativi per distribuire contratti in cui questa complessità viene astratta, ad esempio, usando librerie costruite sopra l'interfaccia RPC come web3.js (opens in a new tab) e web3.py (opens in a new tab). Queste astrazioni sono generalmente più facili da comprendere e meno soggette a errori, ma è comunque utile capire cosa succede dietro le quinte.
Di seguito è riportato un semplice contratto intelligente chiamato Multiply7 che verrà distribuito usando l'interfaccia JSON-RPC su un nodo Ethereum. Questo tutorial presuppone che il lettore stia già eseguendo un nodo Geth. Maggiori informazioni su nodi e client sono disponibili qui. Si prega di fare riferimento alla documentazione dei singoli client per vedere come avviare l'HTTP JSON-RPC per i client non Geth. La maggior parte dei client serve per impostazione predefinita su 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}La prima cosa da fare è assicurarsi che l'interfaccia HTTP RPC sia abilitata. Ciò significa che forniamo a Geth il flag --http all'avvio. In questo esempio usiamo il nodo Geth su una catena di sviluppo privata. Usando questo approccio non abbiamo bisogno di ether sulla rete reale.
geth --http --dev console 2>>geth.logQuesto avvierà l'interfaccia HTTP RPC su http://localhost:8545.
Possiamo verificare che l'interfaccia sia in esecuzione recuperando l'indirizzo coinbase (ottenendo il primo indirizzo dall'array degli account) e il saldo usando curl (opens in a new tab). Si prega di notare che i dati in questi esempi differiranno sul proprio nodo locale. Se si desidera provare questi comandi, sostituire i parametri di richiesta nella seconda richiesta curl con il risultato restituito dalla prima.
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"}Poiché i numeri sono codificati in esadecimale, il saldo viene restituito in wei come stringa esadecimale. Se vogliamo avere il saldo in ether come numero, possiamo usare web3 dalla console di Geth.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"Ora che c'è un po' di ether sulla nostra catena di sviluppo privata, possiamo distribuire il contratto. Il primo passo è compilare il contratto Multiply7 in byte code che può essere inviato all'EVM. Per installare solc, il compilatore Solidity, seguire la documentazione di Solidity (opens in a new tab). (Potresti voler usare una versione precedente di solc per farla corrispondere alla versione del compilatore usata per il nostro esempio (opens in a new tab)).
Il passo successivo è compilare il contratto Multiply7 in byte code che può essere inviato all'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:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Ora che abbiamo il codice compilato dobbiamo determinare quanto gas costa distribuirlo. L'interfaccia RPC ha un metodo eth_estimateGas che ci fornirà una stima.
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"}E infine distribuire il contratto.
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"}La transazione viene accettata dal nodo e viene restituito un hash della transazione. Questo hash può essere usato per tracciare la transazione. Il passo successivo è determinare l'indirizzo in cui è distribuito il nostro contratto. Ogni transazione eseguita creerà una ricevuta. Questa ricevuta contiene varie informazioni sulla transazione, come in quale blocco è stata inclusa la transazione e quanto gas è stato usato dall'EVM. Se una transazione crea un contratto, conterrà anche l'indirizzo del contratto. Possiamo recuperare la ricevuta con il metodo RPC eth_getTransactionReceipt.
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}Il nostro contratto è stato creato su 0x4d03d617d700cf81935d7f797f4e2ae719648262. Un risultato nullo invece di una ricevuta significa che la transazione non è ancora stata inclusa in un blocco. Attendi un momento, controlla se il tuo client di consenso è in esecuzione e riprova.
Interagire con i contratti intelligenti
In questo esempio invieremo una transazione usando eth_sendTransaction al metodo multiply del contratto.
eth_sendTransaction richiede diversi argomenti, in particolare from, to e data. From è l'indirizzo pubblico del nostro account e to è l'indirizzo del contratto. L'argomento data contiene un payload che definisce quale metodo deve essere chiamato e con quali argomenti. È qui che entra in gioco l'ABI (interfaccia binaria dell'applicazione) (opens in a new tab). L'ABI è un file JSON che definisce come definire e codificare i dati per l'EVM.
I byte del payload definiscono quale metodo nel contratto viene chiamato. Si tratta dei primi 4 byte dall'hash Keccak sul nome della funzione e sui tipi dei suoi argomenti, codificati in esadecimale. La funzione multiply accetta un uint che è un alias per uint256. Questo ci lascia con:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"Il passo successivo è codificare gli argomenti. C'è solo un uint256, diciamo, il valore 6. L'ABI ha una sezione che specifica come codificare i tipi uint256.
int<M>: enc(X) è la codifica in complemento a due big-endian di X, riempita sul lato di ordine superiore (sinistra) con 0xff per X negativo e con zero byte per X positivo in modo tale che la lunghezza sia un multiplo di 32 byte.
Questo si codifica in 0000000000000000000000000000000000000000000000000000000000000006.
Combinando il selettore della funzione e l'argomento codificato, i nostri dati saranno 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.
Questo può ora essere inviato al nodo:
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"}Poiché è stata inviata una transazione, è stato restituito un hash della transazione. Recuperando la ricevuta si ottiene:
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}Mostra tuttoLa ricevuta contiene un log. Questo log è stato generato dall'EVM all'esecuzione della transazione e incluso nella ricevuta. La funzione multiply mostra che l'evento Print è stato sollevato con l'input moltiplicato per 7. Poiché l'argomento per l'evento Print era un uint256, possiamo decodificarlo secondo le regole dell'ABI, il che ci lascerà con il decimale atteso 42. A parte i dati, vale la pena notare che i topic possono essere usati per determinare quale evento ha creato il log:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"Questa era solo una breve introduzione ad alcune delle attività più comuni, che dimostra l'uso diretto della JSON-RPC.