API JSON-RPC
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 Ethereum.
A questo scopo, ogni client Ethereum implementa una specifica JSON-RPC (opens in a new tab), in modo che esista un insieme uniforme di metodi su cui le applicazioni possono fare affidamento indipendentemente dal nodo specifico o dall'implementazione del client.
JSON-RPC (opens in a new tab) è un protocollo di chiamata di procedura remota (RPC) leggero e senza stato. Definisce diverse strutture dati e le regole per la loro elaborazione. È indipendente dal trasporto, in quanto i concetti possono essere utilizzati all'interno dello stesso processo, su socket, su 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 diversi linguaggi di programmazione nell'implementare le specifiche 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 si possa scegliere di interagire direttamente con i client Ethereum tramite l'API JSON-RPC, spesso esistono opzioni più semplici per gli sviluppatori di applicazioni decentralizzate (dapp). Esistono molte librerie JavaScript e di 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 che preferiscono per inizializzare richieste JSON-RPC (internamente) 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, i blocchi Beacon, lo stato Beacon e altre informazioni relative al consenso direttamente da un nodo. Questa API è documentata nella 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 scambiare 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 nella 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 in 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 sempre avere 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 in 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 effettuate 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:
HEX String- un numero di blocco interoString "earliest"per il primo blocco/blocco genesiString "latest"- per l'ultimo blocco propostoString "safe"- per l'ultimo blocco head sicuroString "finalized"- per l'ultimo blocco finalizzatoString "pending"- per lo stato/transazioni in sospeso
Esempi
In questa pagina forniamo esempi su come utilizzare i singoli endpoint dell'API JSON_RPC tramite lo strumento a riga di comando curl (opens in a new tab). Questi esempi di singoli endpoint si trovano di seguito nella sezione Esempi con curl. Più in basso nella pagina, forniamo anche un esempio end-to-end per la compilazione e la distribuzione di uno smart contract 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 questo problema, 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:
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545
Gossip, stato, cronologia
Una manciata di metodi JSON-RPC principali richiede dati dalla rete Ethereum e si divide 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 archiviati. 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 al blocco genesi. È 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 API JSON-RPC
web3_clientVersion
Restituisce la versione attuale del client.
Parametri
Nessuno
Restituisce
String - La versione attuale del client
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
// Risultato
{
"id":67,
"jsonrpc":"2.0",
"result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"
}
web3_sha3
Restituisce il Keccak-256 (non lo SHA3-256 standardizzato) dei dati forniti.
Parametri
DATA- I dati da convertire in un hash SHA3
params: ["0x68656c6c6f20776f726c64"]
Restituisce
DATA - Il risultato SHA3 della stringa fornita.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
// Risultato
{
"id":64,
"jsonrpc": "2.0",
"result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}
net_version
Restituisce l'ID della rete corrente.
Parametri
Nessuno
Restituisce
String - L'ID della rete corrente.
L'elenco completo degli ID di rete correnti è disponibile su chainlist.org (opens in a new tab). Alcuni tra i più comuni sono:
1: Mainnet di Ethereum11155111: testnet Sepolia560048: testnet Hoodi
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
// Risultato
{
"id":67,
"jsonrpc": "2.0",
"result": "3"
}
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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
// Risultato
{
"id":67,
"jsonrpc":"2.0",
"result":true
}
net_peerCount
Restituisce il numero di peer attualmente connessi al client.
Parametri
Nessuno
Restituisce
QUANTITY - numero intero dei peer connessi.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
// Risultato
{
"id":74,
"jsonrpc": "2.0",
"result": "0x2" // 2
}
eth_protocolVersion
Restituisce la versione attuale del protocollo Ethereum. Nota che questo metodo non è disponibile in Geth (opens in a new tab).
Parametri
Nessuno
Restituisce
String - La versione attuale del protocollo Ethereum
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
// Risultato
{
"id":67,
"jsonrpc": "2.0",
"result": "54"
}
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 è in sincronizzazione e tutti i client restituiscono i seguenti campi.
Object|Boolean, Un oggetto con i dati sullo stato della sincronizzazione o FALSE, quando non è in sincronizzazione:
startingBlock:QUANTITY- Il blocco al quale è iniziata l'importazione (verrà reimpostato solo dopo che la sincronizzazione avrà raggiunto la sua testa)currentBlock:QUANTITY- Il blocco corrente, uguale a eth_blockNumberhighestBlock:QUANTITY- Il blocco più alto stimato
Tuttavia, i singoli client potrebbero fornire anche dati aggiuntivi. Ad esempio, Geth restituisce quanto segue:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"currentBlock": "0x3cf522",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0x3e0e41",
"startingBlock": "0x3cbed5",
"syncedAccountBytes": "0x0",
"syncedAccounts": "0x0",
"syncedBytecodeBytes": "0x0",
"syncedBytecodes": "0x0",
"syncedStorage": "0x0",
"syncedStorageBytes": "0x0"
}
}
Mentre Besu restituisce:
{
"jsonrpc": "2.0",
"id": 51,
"result": {
"startingBlock": "0x0",
"currentBlock": "0x1518",
"highestBlock": "0x9567a3",
"pulledStates": "0x203ca",
"knownStates": "0x200636"
}
}
Fai riferimento alla documentazione del tuo client specifico per maggiori dettagli.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": {
startingBlock: '0x384',
currentBlock: '0x386',
highestBlock: '0x454'
}
}
// Oppure quando non è in sincronizzazione
{
"id":1,
"jsonrpc": "2.0",
"result": false
}
eth_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 versione v1.14.0 e non è più supportato. Il tentativo di utilizzare questo metodo genererà un errore "Method not supported".
Parametri
Nessuno
Restituisce
DATA, 20 byte - l'indirizzo coinbase corrente.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
// Risultato
{
"id":64,
"jsonrpc": "2.0",
"result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}
eth_chainId
Restituisce l'ID della catena utilizzato per la firma delle 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 corrente.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
// Risultato
{
"id":67,
"jsonrpc": "2.0",
"result": "0x1"
}
eth_mining
Restituisce true se il client sta attivamente minando nuovi blocchi. Questo può restituire true solo per le reti basate su Prova di lavoro (PoW) e potrebbe non essere disponibile in alcuni client da The Merge.
Parametri
Nessuno
Restituisce
Boolean - restituisce true se il client sta minando, altrimenti false.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
//
{
"id":71,
"jsonrpc": "2.0",
"result": true
}
eth_hashrate
Restituisce il numero di hash al secondo con cui il nodo sta effettuando il minaggio. Questo può restituire true solo per le reti di Prova di lavoro (PoW) e potrebbe non essere disponibile in alcuni client da The Merge.
Parametri
Nessuno
Restituisce
QUANTITY - numero di hash al secondo.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
// Risultato
{
"id":71,
"jsonrpc": "2.0",
"result": "0x38a"
}
eth_gasPrice
Restituisce una stima del prezzo attuale per gas in Wei. Ad esempio, il client Besu esamina gli ultimi 100 blocchi e restituisce il prezzo mediano dell'unità di gas per impostazione predefinita.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
QUANTITY - numero intero dell'attuale prezzo del gas in Wei.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
// Risultato
{
"id":73,
"jsonrpc": "2.0",
"result": "0x1dfd14000" // 8049999872 Wei
}
eth_accounts
Restituisce un elenco di indirizzi posseduti dal client.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Nessuno
Restituisce
Array of DATA, 20 byte - indirizzi posseduti dal client.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}
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 del blocco corrente su cui si trova il client.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
// Risultato
{
"id":83,
"jsonrpc": "2.0",
"result": "0x4b7" // 1207
}
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
params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]
Restituisce
QUANTITY - intero del saldo attuale in Wei.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x0234c8a3397aab58" // 158972490234375000
}
eth_getStorageAt
Restituisce il valore da una posizione di storage a un dato indirizzo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 20 byte - indirizzo dello storage.QUANTITY- intero della posizione nello storage.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 storage.
Esempio
Il calcolo della posizione corretta dipende dallo storage da recuperare. Considera il seguente contratto distribuito in 0x295a70b2de5e3953354a6a8344e616ed314d7251 dall'indirizzo 0x391694e7e0b0cce554cb130d723a9d27458f9298.
contract Storage {
uint pos0;
mapping(address => uint) pos1;
constructor() {
pos0 = 1234;
pos1[msg.sender] = 5678;
}
}
Recuperare il valore di pos0 è semplice:
curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}
Recuperare un elemento della mappa è più difficile. La posizione di un elemento nella mappa è calcolata con:
keccak(LeftPad32(key, 0), LeftPad32(map position, 0))
Questo significa che per recuperare lo storage su pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] dobbiamo calcolare la posizione con:
keccak(
decodeHex(
"000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
"0000000000000000000000000000000000000000000000000000000000000001"
)
)
La console di Geth fornita con la libreria Web3 può essere utilizzata per effettuare il calcolo:
> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"
Ora per recuperare lo storage:
curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}
eth_getTransactionCount
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
params: [
"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"latest", // stato all'ultimo blocco
]
Restituisce
QUANTITY - intero del numero di transazioni inviate da questo indirizzo.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_getBlockTransactionCountByHash
Restituisce il numero di transazioni presenti in un blocco corrispondente all'hash del blocco fornito.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 byte - hash di un blocco
params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]
Restituisce
QUANTITY - numero intero di transazioni in questo blocco.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x8b" // 139
}
eth_getBlockTransactionCountByNumber
Restituisce il numero di transazioni in un blocco corrispondente 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.
params: [
"0x13738ca", // 20396234
]
Restituisce
QUANTITY - intero del numero di transazioni in questo blocco.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x8b" // 139
}
eth_getUncleCountByBlockHash
Restituisce il numero di uncle in un blocco a partire 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
params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]
Restituisce
QUANTITY - numero intero di uncle in questo blocco.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_getUncleCountByBlockNumber
Restituisce il numero di uncle in un blocco corrispondente al numero di blocco specificato.
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
params: [
"0xe8", // 232
]
Restituisce
QUANTITY - intero del numero di uncle in questo blocco.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x0" // 0
}
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
params: [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x5daf3b", // 6139707
]
Restituisce
DATA - il codice dal dato indirizzo.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
}
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. Ciò previene abusi in cui un'applicazione decentralizzata (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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
eth_signTransaction
Firma una transazione che può essere inviata alla rete in un secondo momento 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) Numero intero del gas fornito per l'esecuzione della transazione. Restituirà il gas non utilizzato.gasPrice:QUANTITY- (opzionale, predefinito: da determinare) Numero intero del gasPrice utilizzato per ogni gas pagato, in Wei.value:QUANTITY- (opzionale) Numero 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) Numero 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
// Richiesta
curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'
// Risultato
{
"id": 1,
"jsonrpc": "2.0",
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
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.
params: [
{
from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
gas: "0x76c0", // 30400
gasPrice: "0x9184e72a000", // 10000000000000
value: "0x9184e72a", // 2441406250
input:
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
},
]
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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
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.
params: [
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
]
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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
eth_call
Esegue immediatamente una nuova chiamata di messaggio senza creare una transazione sulla blockchain. Spesso utilizzata per eseguire funzioni di smart contract 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, vedere l'ABI del contratto Ethereum nella documentazione di Solidity (opens in a new tab).
QUANTITY|TAG- numero di blocco intero o la stringa"latest","earliest","pending","safe"o"finalized", vedere il parametro del blocco
Restituisce
DATA - il valore di ritorno del contratto eseguito.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x"
}
eth_estimateGas
Genera e restituisce una stima di quanto gas sia necessario per consentire il completamento della transazione. La transazione non verrà aggiunta alla blockchain. Nota che la stima potrebbe essere significativamente maggiore della quantità di gas effettivamente utilizzata dalla transazione, per una serie di motivi, tra cui le meccaniche dell'EVM e le prestazioni del nodo.
Prova l'endpoint nel playground (opens in a new tab)Parametri
Vedi i parametri di eth_call, con l'eccezione che tutte le proprietà sono facoltative. Se non viene specificato alcun limite di gas, geth utilizza il limite di gas del blocco in sospeso come limite massimo. Di conseguenza, la stima restituita potrebbe non essere sufficiente per eseguire la chiamata/transazione quando la quantità di gas è superiore al limite di gas del blocco in sospeso.
Restituisce
QUANTITY - la quantità di gas utilizzata.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x5208" // 21000
}
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.
params: [
"0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
false,
]
Restituisce
Object - Un oggetto blocco, oppure 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 (PoW) generata.nullquando è un blocco in sospeso,0x0per i blocchi Proof-of-Stake (PoS) (da The Merge)sha3Uncles:DATA, 32 byte - SHA3 dei dati degli uncle nel blocco.logsBloom:DATA, 256 byte - il filtro di 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 di 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 "extra data" di questo blocco.size:QUANTITY- intero della dimensione di questo blocco in byte.gasLimit:QUANTITY- il 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 assemblato.transactions:Array- Array di oggetti transazione, o hash di transazione da 32 byte a seconda dell'ultimo parametro fornito.uncles:Array- Array di hash degli uncle.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
// Risultato
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"difficulty": "0x4ea3f27bc",
"extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit": "0x1388",
"gasUsed": "0x0",
"hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",
"mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",
"nonce": "0x689056015818adbe",
"number": "0x1b4",
"parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x220",
"stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",
"timestamp": "0x55ba467c",
"totalDifficulty": "0x78ed983323d",
"transactions": [
],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": [
]
}
}
eth_getBlockByNumber
Restituisce informazioni su un blocco in base al numero del 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 delle transazioni, sefalsesolo gli hash delle transazioni.
params: [
"0x1b4", // 436
true,
]
Restituisce Vedi eth_getBlockByHash
Esempio
// Richiesta
curl -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 l'hash della transazione.
Prova l'endpoint nel playground (opens in a new tab)Parametri
DATA, 32 byte - hash di una transazione
params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]
Restituisce
Object - Un oggetto transazione, oppure 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 del contratto.transactionIndex:QUANTITY- numero 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- r della firma ECDSAs:QUANTITY- s della firma ECDSA
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'
// Risultato
{
"jsonrpc":"2.0",
"id":1,
"result":{
"blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"blockNumber":"0x5daf3b", // 6139707
"from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
"gas":"0xc350", // 50000
"gasPrice":"0x4a817c800", // 20000000000
"hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
"input":"0x68656c6c6f21",
"nonce":"0x15", // 21
"to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
"transactionIndex":"0x41", // 65
"value":"0xf3dbb76162000", // 4290000000000000
"v":"0x25", // 37
"r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
"s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"
}
}
eth_getTransactionByBlockHashAndIndex
Restituisce informazioni su una transazione in base all'hash del blocco e alla 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.
params: [
"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"0x0", // 0
]
Restituisce Vedi eth_getTransactionByHash
Esempio
// Richiesta
curl -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 in base al numero del blocco e alla 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.
params: [
"0x9c47cf", // 10241999
"0x24", // 36
]
Restituisce Vedi eth_getTransactionByHash
Esempio
// Richiesta
curl -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 l'hash della transazione.
Nota che la ricevuta non è disponibile per le transazioni in sospeso.
Parametri
DATA, 32 byte: hash di una transazione
params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]
Restituisce
Object - Un oggetto della ricevuta della transazione, oppure 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 si tratta di una transazione di creazione del 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 commissione prioritaria pagate 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 contratto, altrimentinull.logs:Array- Array di oggetti di log generati da questa transazione.logsBloom:DATA, 256 byte: Filtro di 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 inoltre uno dei seguenti :
root:DATA32 byte della radice di stato post-transazione (pre-Byzantium)status:QUANTITY1(successo) oppure0` (fallimento)
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'
// Risultato
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash":
"0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",
"blockNumber": "0xeff35f",
"contractAddress": null, // stringa dell'indirizzo se è stato creato
"cumulativeGasUsed": "0xa12515",
"effectiveGasPrice": "0x5a9c688d4",
"from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",
"gasUsed": "0xb4c8",
"logs": [{
// log come restituiti da getFilterLogs, ecc.
}],
"logsBloom": "0x00...0", // filtro bloom di 256 byte
"status": "0x1",
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"transactionHash":
"0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",
"transactionIndex": "0x66",
"type": "0x2"
}
}
eth_getUncleByBlockHashAndIndex
Restituisce informazioni su un uncle di un blocco in base all'hash e alla 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.
params: [
"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"0x0", // 0
]
Restituisce Vedi eth_getBlockByHash
Esempio
// Richiesta
curl -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 singole transazioni.
eth_getUncleByBlockNumberAndIndex
Restituisce informazioni su un uncle di un blocco in base al numero e alla 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.
params: [
"0x29c", // 668
"0x0", // 0
]
Restituisce Vedi eth_getBlockByHash
Nota: un uncle non contiene transazioni individuali.
Esempio
// Richiesta
curl -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, in base alle 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 per topic: I topic dipendono dall'ordine. Una transazione con un log con topic [A, B] corrisponderà ai seguenti filtri per topic:
[]"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, oppure"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, oppure"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 avere origine i log.topics:Array of DATA, - (opzionale) Array di 32 Byte di topicDATA. I topic dipendono dall'ordine. Ogni topic può anche essere un array di DATI con opzioni "or".
params: [
{
fromBlock: "0x1",
toBlock: "0x2",
address: "0x8888f1f195afa192cfee860698584c030f4c9db1",
topics: [
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
null,
[
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",
],
],
},
]
Restituisce
QUANTITY - Un id del filtro.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
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
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_uninstallFilter
Disinstalla un filtro con l'id specificato. Dovrebbe sempre essere chiamato quando il monitoraggio non è più necessario. Inoltre, i filtri scadono quando non vengono richiesti con eth_getFilterChanges per un certo periodo di tempo.
Parametri
QUANTITY- L'id del filtro.
params: [
"0xb", // 11
]
Restituisce
Boolean - true se il filtro è stato disinstallato con successo, altrimenti false.
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
// Risultato
{
"id":1,
"jsonrpc": "2.0",
"result": true
}
eth_getFilterChanges
Metodo di polling per un filtro, che restituisce un array di log verificatisi dall'ultimo polling.
Parametri
QUANTITY- l'id del filtro.
params: [
"0x16", // 22
]
Restituisce
Array - Array di oggetti log, o un array vuoto se nulla è cambiato dall'ultimo polling.
-
Per i filtri creati con
eth_newBlockFiltervengono restituiti gli hash dei blocchi (DATA, 32 Byte), ad es.,["0x3454645634534..."]. -
Per i filtri creati con
eth_newPendingTransactionFiltervengono restituiti gli hash delle transazioni (DATA, 32 Byte), ad 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 della transazione 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 del log non indicizzati a lunghezza variabile. (In Solidity: zero o più argomenti del log non indicizzati da 32 Byte.)topics:Array of DATA- Array da 0 a 4DATAda 32 Byte di argomenti del log indicizzati. (In Solidity: Il primo topic è l'hash della firma dell'evento (ad es.,Deposit(address,bytes32,uint256)), a meno che l'evento non sia stato dichiarato con lo specificatoreanonymous.)
-
Esempio
// Richiesta
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
// Risultato
{
"id":1,
"jsonrpc":"2.0",
"result": [{
"logIndex": "0x1", // 1
"blockNumber":"0x1b4", // 436
"blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
"transactionIndex": "0x0", // 0
"address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"data":"0x0000000000000000000000000000000000000000000000000000000000000000",
"topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
},{
...
}]
}
eth_getFilterLogs
Restituisce un array di tutti i log che corrispondono al filtro con l'id specificato.
Parametri
QUANTITY- L'id del filtro.
params: [
"0x16", // 22
]
Restituisce Vedi eth_getFilterChanges
Esempio
// Richiesta
curl -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 intero del blocco, 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 intero del blocco, 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 provenire i log.topics:Array of DATA, - (opzionale) Array di topicDATAdi 32 Byte. I topic dipendono dall'ordine. Ogni topic può anche essere un array di DATA con opzioni "or".blockHash:DATA, 32 Byte - (opzionale, futuro) Con l'aggiunta dell'EIP-234,blockHashsarà una nuova opzione di filtro che restringe i log restituiti al singolo blocco con l'hash di 32 byteblockHash. L'uso diblockHashè equivalente afromBlock=toBlock= il numero del blocco con hashblockHash. SeblockHashè presente nei criteri di filtro, allora non sono consentiti néfromBlocknétoBlock.
params: [
{
topics: [
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
],
},
]
Restituisce Vedi eth_getFilterChanges
Esempio
// Richiesta
curl -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. Ci sono 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.
Il seguente è un semplice smart contract 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. Fai riferimento alla documentazione dei singoli client per vedere come avviare l'HTTP JSON-RPC per i client diversi da Geth. La maggior parte dei client per impostazione predefinita serve su localhost:8545.
contract Multiply7 {
event Print(uint);
function multiply(uint input) returns (uint) {
Print(input * 7);
return input * 7;
}
}
La prima cosa da fare è assicurarsi che l'interfaccia HTTP RPC sia abilitata. Questo 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.log
Questo 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). Nota che i dati in questi esempi differiranno sul tuo nodo locale. Se vuoi provare questi comandi, sostituisci 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.
web3.fromWei("0x1639e49bba16280000", "ether")
// "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 bytecode che può essere inviato all'EVM. Per installare solc, il compilatore Solidity, segui 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 bytecode 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:
6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029
Ora che abbiamo il codice compilato, dobbiamo determinare quanto gas costa distribuirlo. L'interfaccia RPC ha un metodo eth_estimateGas che ci darà 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 gli smart contract
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 (Application Binary Interface) (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. Questi sono i primi 4 byte dell'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:
web3.sha3("multiply(uint256)").substring(0, 10)
// "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:
{
blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
blockNumber: 268,
contractAddress: null,
cumulativeGasUsed: 22631,
gasUsed: 22631,
logs: [{
address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",
blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
blockNumber: 268,
data: "0x000000000000000000000000000000000000000000000000000000000000002a",
logIndex: 0,
topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],
transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
transactionIndex: 0
}],
transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
transactionIndex: 0
}
La ricevuta contiene un log. Questo log è stato generato dall'EVM durante l'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. Oltre ai dati, vale la pena notare che i topic possono essere usati per determinare quale evento ha creato il log:
web3.sha3("Print(uint256)")
// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"
Questa era solo una breve introduzione ad alcune delle attività più comuni, che dimostra l'uso diretto della JSON-RPC.