API JSON-RPC
Última edição: @rafarocha(opens in a new tab), 3 de outubro de 2024
Para que um aplicativo de software interaja com a blockchain Ethereum - lendo os dados da blockchain ou enviando transações para a rede - ele deve se conectar na Ethereum.
Para esse fim, todos os clientes Ethereum implementam uma especificação JSON-RPC(opens in a new tab) para que exista um conjunto uniforme de métodos nos quais os aplicativos podem confiar, independentemente do nó específico ou da implementação do cliente.
JSON-RPC(opens in a new tab) é um protocolo de chamada de procedimento remoto (RPC) leve e sem estado. Ele define várias estruturas de dados e as regras em torno de seu processamento. É agnóstico de transporte no sentido de que os conceitos podem ser usados dentro do mesmo processo, sobre sockets, HTTP ou em vários ambientes de passagem de mensagens. Usa o formato de dados JSON (RFC 4627).
Implementações do cliente
Cada cliente Ethereum pode utilizar linguagens de programação diferentes ao implementar a especificação JSON-RPC. Consulte a documentação individual do cliente para mais detalhes relacionados a linguagens de programação específicas. Recomendamos verificar a documentação de cada cliente para as informações mais recentes de suporte à API.
Bibliotecas de Conveniência
Embora você possa optar por interagir diretamente com clientes da Ethereum usando a API JSON-RPC, muitas vezes existem opções mais fáceis para desenvolvedores de dapps. Muitas bibliotecas de e de backend API existem para fornecer wrappers além de API JSON-RPC. Com essas bibliotecas, os desenvolvedores podem escrever intuitivamente métodos de uma linha para inicializar requisições JSON RPC (sob os capôs) que interagem com a Ethereum.
APIs de cliente de consenso
Esta página trata principalmente da API JSON-RPC usada pelos clientes de execução Ethereum. No entanto, os clientes de consenso também têm uma API RPC que permite aos usuários consultar informações sobre o nó, solicitar blocos Beacon, estado do Beacon, e outras informações relacionadas ao consenso diretamente de um nó. Essa API está documentada na página da Web da API Beacon(opens in a new tab).
Uma API interna também é usada para comunicação entre clientes dentro de um nó - ou seja, permite que o cliente de consenso e o cliente de execução troquem dados. Ela é chamada de “API Engine” e suas especificações estão disponíveis no GitHub(opens in a new tab).
Especificação do cliente de execução
Leia a especificação completa da API JSON-RPC no GitHub(opens in a new tab).
Convenções
Codificação de valor hexadecimal
Dois tipos de dados-chave são passados pelo JSON: arrays (matrizes) e quantidade de bytes não formatados. Ambos são passados com uma codificação hexadecimal, mas com diferentes requisitos de formatação.
Quantidades
Ao codificar quantidades (inteiros, números): codifique como hexadecimal, prefixe com "0x", a representação mais compacta (pequena exceção: zero deve ser representado como "0x0").
Veja aqui alguns exemplos:
- 0x41 (65 em decimal)
- 0x400 (1024 em decimal)
- ERRADO: 0x (deve sempre ter pelo menos um dígito - zero é "0x0")
- ERRADO: 0x0400 (sem zeros à esquerda permitidos)
- ERRADO: ff (deve ser prefixado 0x)
Dados não formatados
Ao codificar dados não formatados (arrays de bytes, endereços de contas, hashes, matrizes de bytecodes): codifique como hexadecimal, prefixe com "0x", dois dígitos hexadecimais por byte.
Aqui estão alguns exemplos:
- 0x41 (tamanho 1, "A")
- 0x004200 (tamanho 3, "\0B\0")
- 0x (tamanho 0, "")
- ERRADO: 0xf0f0f (deve ser um número par de dígitos)
- ERRADO: 004200 (deve ser prefixado 0x)
O parâmetro de bloco padrão
Os métodos a seguir têm um parâmetro de bloco padrão extra:
Quando são feitas requisições que atuam no estado da Ethereum, o último parâmetro de bloco padrão determina a altura do bloco.
As seguintes opções são possíveis para o parâmetro defaultBlock:
String HEX
- um número de bloco inteiroString "earliest"
para o bloco mais antigo/de inícioString "latest"
- para o bloco minerado mais recenteString "safe"
– para o último bloco de cabeçalho seguroString "finalized"
– para o último bloco finalizadoString "pendente"
– para o estado/transações pendentes
Exemplos
Nesta página, fornecemos exemplos de como usar endpoints de API JSON_RPC individuais usando a ferramenta de linha de comando curl(opens in a new tab). Esses exemplos de endpoints individuais são encontrados abaixo na seção Exemplos Curl. Mais abaixo na página, também fornecemos um exemplo de ponta a ponta para compilar e implantar um contrato inteligente usando um nó Geth, a API JSON_RPC e curl.
Exemplos Curl
Exemplos de uso da API JSON_RPC fazendo pedidos curl(opens in a new tab) para um nó Ethereum são fornecidos abaixo. Cada exemplo inclui uma descrição do endpoint específico, seus parâmetros, tipo de retorno e um exemplo funcional de como ele deve ser usado.
Os pedidos curl podem retornar uma mensagem de erro relacionada ao tipo de conteúdo. Isso ocorre porque a opção --data
define o tipo de conteúdo como application/x-www-form-urlencoded
. Se o seu nó reclamar sobre isso, defina manualmente o cabeçalho colocando -H "Content-Type: application/json"
no início da chamada. Os exemplos também não incluem a URL/IP & combinação de porta que deve ser o último argumento dado para curl (por exemplo, 127.0.0.1:8545
). Uma solicitação de curl completa, incluindo esses dados adicionais, tem o seguinte formato:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545
Gossip, Estado, Histórico
Alguns dos métodos JSON-RPC principais exigem dados da rede Ethereum, se enquadram perfeitamente em três categorias principais: Gossip, Estado e Histórico. Use os links nestas seções para pular para cada método ou use a tabela de conteúdos para explorar toda a lista de métodos.
Métodos Gossip
Esses métodos rastreiam o cabeçalho da cadeia. É assim que as transações se deslocam pela rede, encontram o caminho para os blocos e como os clientes descobrem novos blocos.
Métodos de Estado
Métodos que relatam o estado atual de todos os dados armazenados. O "estado" é como um grande pedaço compartilhado de RAM e inclui saldos de contas, dados de contratos e estimativas de gás.
Métodos de Histórico
Busca o histórico de registros de cada bloco até à gênesis (início). Isso é como um arquivo grande que apenas insere e inclui todos os cabeçalhos de bloco, corpos de bloco, blocos de tio e recibos de transação.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
Métodos de API JSON-RPC
web3_clientVersion
Retorna a versão atual do cliente.
Parâmetros
Nenhum
Retorna
String
- A versão atual do cliente
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Mist/v0.9.3/darwin/go1.4.1"8}Copiar
web3_sha3
Retorna Keccak-256 (não o SHA3-256 padronizado) dos dados fornecidos.
Parâmetros
DATA
- Os dados para converter em um hash SHA3
1params: ["0x68656c6c6f20776f726c64"]Copiar
Retorna
DATA
- O resultado SHA3 da string fornecida.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}Copiar
net_version
Retorna a id da rede atual.
Parâmetros
Nenhum
Retorna
String
- A id da rede atual.
A lista completa das IDs da rede atual está disponível em chainlist.org(opens in a new tab). Alguns exemplos comuns são:
1
: Ethereum Mainnet5
: Goerli testnet11155111
: Sepolia testnet
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}Copiar
net_listening
Retorna true
se o cliente estiver escutando ativamente as conexões de rede.
Parâmetros
Nenhum
Retorna
Boolean
- true
quando escuta, do contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}Copiar
net_peerCount
Retorna o número de pares atualmente conectados ao cliente.
Parâmetros
Nenhum
Retorna
QUANTITY
- número inteiro do número de pares conectados.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}Copiar
eth_protocolVersion
Retorna a versão atual do protocolo Ethereum. Note que este método não está disponível no Geth(opens in a new tab).
Parâmetros
Nenhum
Retorna
String
- A versão atual do protocolo Ethereum
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}Copiar
eth_syncing
Retorna um objeto com dados sobre o status da sincronização ou false
.
Parâmetros
Nenhum
Retorna
Object|Boolean
, um objeto com dados de status da sincronização ou FALSE
, quando não sincronizado:
startingBlock
:QUANTITY
— O bloco no qual a importação começou (só será reiniciado após a sincronização atingir seu cabeçalho)currentBlock
:QUANTITY
— O bloco atual, o mesmo que eth_blockNumberhighestBlock
:QUANTITY
— O bloco mais alto estimado
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Exibir tudoCopiar
eth_coinbase
Retorna o endereço de coinbase do cliente.
Parâmetros
Nenhum
Retorna
DATA
, 20 bytes - O endereço atual da coinbase.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}Copiar
eth_chainId
Retorna a ID da cadeia usada para assinar transações protegidas contra reprodução.
Parâmetros
Nenhum
Retorna
chainId
, valor hexadecimal como uma cadeia de caracteres representando o inteiro da ID da cadeia atual.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}Copiar
eth_mining
Retorna true
se o cliente estiver ativamente minerando novos blocos.
Parâmetros
Nenhum
Retorna
Boolean
— retorna true
do cliente que está minerando, caso contrário, false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}Copiar
eth_hashrate
Retorna o número de hashes por segundo do nó que está minerando.
Parâmetros
Nenhum
Retorna
QUANTITY
— número de hashes por segundo.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}Copiar
eth_gasPrice
Retorna o preço atual por gás em Wei.
Parâmetros
Nenhum
Retorna
QUANTITY
— Número inteiro do preço atual do gás em Wei.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}Copiar
eth_accounts
Retorna uma lista de endereços de propriedade do cliente.
Parâmetros
Nenhum
Retorna
Matriz de DADOS
, 20 Bytes — endereços de propriedade do cliente.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}Copiar
eth_blockNumber
Retorna o número do bloco mais recente.
Parâmetros
Nenhum
Retorna
QUANTITY
— Inteiro do número do bloco atual no qual o cliente está.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}Copiar
eth_getBalance
Retorna o saldo da conta do endereço fornecido.
Parâmetros
DATA
, 20 Bytes - Endereço para verificar o saldo.QUANTITY|TAG
– número de bloco inteiro, ou a cadeia de caracteres"latest"
,"earliest"
ou"pending"
. Consulte o parâmetro de bloco padrão
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Copiar
Retorna
QUANTITY
— Inteiro do saldo atual em Wei.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}Copiar
eth_getStorageAt
Retorna o valor de uma posição de armazenamento em um determinado endereço.
Parâmetros
DATA
, 20 Bytes - Endereço do armazenamento.QUANTITY
- Número inteiro da posição no armazenamento.QUANTITY|TAG
– número de bloco inteiro, ou a cadeia de caracteres"latest"
,"earliest"
ou"pending"
. Consulte o parâmetro de bloco padrão
Retorna
DATA
— O valor nessa posição de armazenamento.
Exemplo O cálculo da posição correta depende do armazenamento a ser recuperado. Considere o seguinte contrato implementado em 0x295a70b2de5e3953354a6a8344e616ed314d7251
pelo endereço 0x391694e7e0b0cce554cb130d723a9d27458f9298
.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 function Storage() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}
Recuperar o valor da pos0 é simples:
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"}Copiar
Recuperar um elemento do mapa é mais difícil. A posição de um elemento no mapa é calculada com:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))Copiar
Isso significa que, para recuperar o armazenamento na pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] precisamos calcular a posição com:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)Copiar
O console geth fornecido com a biblioteca Web3 pode ser usado para fazer o cálculo:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Copiar
Agora, para buscar o armazenamento:
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"}Copiar
eth_getTransactionCount
Retorna o número de transações enviadas a partir de um endereço.
Parâmetros
DATA
, 20 Bytes - Endereço.QUANTITY|TAG
– número de bloco inteiro, ou a cadeia de caracteres"latest"
,"earliest"
ou"pending"
. Consulte o parâmetro de bloco padrão
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block4]Copiar
Retorna
QUANTITY
— Inteiro do número de transações enviadas a partir desse endereço.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_getBlockTransactionCountByHash
Retorna o número de transações em um bloco a partir de um bloco que corresponde ao hash de bloco fornecido.
Parâmetros
DATA
, 32 bytes - Hash de um bloco
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]Copiar
Retorna
QUANTITY
— Inteiro do número de transações nesse bloco.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xb" // 118}Copiar
eth_getBlockTransactionCountByNumber
Retorna o número de transações em um bloco a partir de um bloco que corresponde ao hash de bloco fornecido.
Parâmetros
QUANTITY|TAG
– número inteiro de um bloco, ou a cadeira de caracteres"earliest"
,"latest"
ou"pending"
, como no parâmetro de bloco padrão.
1params: [2 "0xe8", // 2323]Copiar
Retorna
QUANTITY
— Inteiro do número de transações nesse bloco.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa" // 108}Copiar
eth_getUncleCountByBlockHash
Retorna o número de transações em um bloco a partir de um bloco que corresponde ao hash de bloco fornecido.
Parâmetros
DADOS
, 32 bytes - hash de um bloco
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]Copiar
Retorna
QUANTITY
— Inteiro do número de transações nesse bloco.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_getUncleCountByBlockNumber
Retorna o número de transações em um bloco a partir de um bloco que corresponde ao hash de bloco fornecido.
Parâmetros
QUANTITY|TAG
– número inteiro de um bloco ou a cadeia de caracteres "latest", "earliest" ou "pending". Consulte parâmetro de bloco padrão
1params: [2 "0xe8", // 2323]Copiar
Retorna
QUANTITY
— Inteiro do número de transações nesse bloco.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_getCode
Retorna o código em um endereço fornecido.
Parâmetros
DATA
, 20 Bytes - EndereçoQUANTITY|TAG
– número de bloco inteiro, ou a cadeia de caracteres"latest"
,"earliest"
ou"pending"
. Consulte o parâmetro de bloco padrão
1params: [2 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",3 "0x2", // 24]Copiar
Retorna
DATA
— O código do endereço fornecido.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"8}Copiar
eth_sign
O método de assinatura calcula uma assinatura específica do Ethereum com: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))
.
Ao adicionar um prefixo à mensagem, a assinatura calculada é reconhecível como uma assinatura específica do Ethereum. Isso evita o uso indevido por parte de um dapp malicioso, que pode assinar dados arbitrários (por exemplo, de transação) e usar a assinatura para usar a identidade da vítima.
Observação: o endereço de assinatura deve estar desbloqueado.
Parâmetros
DADOS
, 20 Bytes - endereçoDATA
, N Bytes - Mensagem para assinar
Retorna
DATA
: assinatura
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}Copiar
eth_signTransaction
Assina uma transação que pode ser enviada à rede posteriormente usando eth_sendRawTransaction.
Parâmetros
Objeto
- O objeto da transação
from
:DATA
, 20 Bytes - O endereço de onde a transação é enviada.to
:DATA
, 20 Bytes - (opcional ao criar um novo contrato) O endereço para o qual a transação é direcionada.gas
:QUANTITY
- (opcional, padrão: 90000) Inteiro do gás fornecido para a execução da transação. Retornará o gás não utilizado.gasPrice
:QUANTITY
— (opcional, padrão: a ser determinado) Inteiro do gasPrice usado para cada gás pago, em Wei.valor
:QUANTITY
— (opcional) Inteiro do valor enviado com esta transação, em Wei.dados
:DADOS
- O código compilado de um contrato OU o hash da assinatura do método invocado e os parâmetros codificados.nonce
:QUANTITY
- (opcional) Inteiro de um nonce. Isso permite sobrescrever suas próprias transações pendentes que usam o mesmo nonce.
Retorna
DATA
— O objeto da transação assinada.
Exemplo
1// Request2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}Copiar
eth_sendTransaction
Cria uma nova transação de chamada de mensagem ou uma criação de contrato, se o campo de dados contiver código.
Parâmetros
Object
- O objeto da transação
from
:DATA
, 20 Bytes — Endereço de onde a transação é enviada.to
:DATA
, 20 Bytes — (opcional ao criar um novo contrato) O endereço para o qual a transação é direcionada.gas
:QUANTITY
— (opcional, padrão: 90000) Inteiro do gás fornecido para a execução da transação. Retornará o gás não utilizado.gasPrice
:QUANTITY
— (opcional, padrão: a ser determinado) Inteiro do gasPrice usado para cada gás pago.valor
:QUANTITY
— (opcional) Inteiro do valor enviado com esta transação.data
:DATA
— Código compilado de um contrato OU do hash da assinatura do método invocado e parâmetros codificados.nonce
:QUANTITY
— (opcional) Inteiro de um nonce. Isso permite substituir suas próprias transações pendentes que usam o mesmo nonce.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 data: "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",9 },10]Exibir tudoCopiar
Retorna
DATA
, 32 bytes - o hash da transação ou o hash zero se a transação ainda não estiver disponível.
Use eth_getTransactionReceipt para obter o endereço do contrato, após a transação ter sido minerada, quando você criou um contrato.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}Copiar
eth_sendRawTransaction
Cria uma nova transação de chamada de mensagem ou um contrato para transações assinadas.
Parâmetros
DATA
, O objeto de transação assinada.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Copiar
Retorna
DATA
, 32 Bytes — O hash da transação ou o hash zero se a transação ainda não estiver disponível.
Use eth_getTransactionReceipt para obter o endereço do contrato, após a transação ter sido minerada, quando você criou um contrato.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}Copiar
eth_call
Executa uma nova chamada de mensagem imediatamente sem criar uma transação na blockchain.
Parâmetros
Object
- O objeto de chamada de transação
from
:DATA
, 20 Bytes — (opcional) O endereço a partir do qual a transação é enviada.to
:DATA
, 20 Bytes — O endereço para o qual a transação é direcionada.gas
:QUANTITY
— (opcional) Inteiro do gás fornecido para a execução da transação. eth_call consome zero gás, mas este parâmetro pode ser necessário para algumas execuções.gasPrice
:QUANTITY
— (opcional) Inteiro do gasPrice usado para cada gás pagovalor
:QUANTITY
— (opcional) Inteiro do valor enviado com esta transaçãodata
:DATA
— (opcional) Hash da assinatura do método e parâmetros codificados. Para obter mais detalhes, consulte o Contrato Ethereum ABI na documentação do Solidity(opens in a new tab)
QUANTITY|TAG
– número de bloco inteiro, ou a cadeia de caracteres"latest"
,"earliest"
ou"pending"
. Consulte o parâmetro de bloco padrão
Retorna
DATA
— O valor de retorno do contrato executado.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}Copiar
eth_estimateGas
Gera e retorna uma estimativa de quanto gás é necessário para permitir que a transação seja concluída. A transação não será adicionada à blockchain. Observe que a estimativa pode ser significativamente maior do que a quantidade de gás realmente usada pela transação, por vários motivos, incluindo a mecânica do EVM e o desempenho do nó.
Parâmetros
Veja os parâmetros do eth_call, embora todas as propriedades sejam opcionais. Se nenhum limite de gás for especificado, o geth usa o limite de gás do bloco pendente como um limite superior. Consequentemente, a estimativa retornada poderá não ser suficiente para executar a chamada/transação quando a quantidade de gás for maior que o limite de gás do bloco pendente.
Retorna
QUANTITY
— A quantidade de gás usada.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}Copiar
eth_getBlockByHash
Retorna informações sobre um bloco por hash.
Parâmetros
DATA
, 32 Bytes - Hash de um bloco.Boolean
- Setrue
retorna os objetos de transação completos, sefalse
apenas os hashes das transações.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Copiar
Retorna
Object
— Um objeto de bloco, ou null
quando nenhum bloco foi encontrado:
number
:QUANTITY
— O número do bloco.null
quando o bloco está pendente.hash
:DATA
, 32 Bytes — Hash do bloco.null
quando o bloco está pendente.parentHash
:DATA
, 32 Bytes — Hash do bloco pai.nonce
:DATA
, 8 Bytes — Hash da prova de trabalho gerada.null
quando o bloco está pendente.sha3Uncles
:DATA
, 32 Bytes — SHA3 dos dados tios no bloco.logsBloom
:DATA
, 256 Bytes — O filtro bloom para os logs do bloco.null
quando o bloco está pendente.transactionsRoot
:DATA
, 32 Bytes — A raiz da árvore de transação do bloco.stateRoot
:DATA
, 32 Bytes — A raiz da árvore do estado final do bloco.receiptsRoot
:DATA
, 32 Bytes — A raiz da árvore de itens recebidos do bloco.miner
:DATA
, 20 Bytes — O endereço do beneficiário a quem as recompensas de mineração foram dadas.dificuldade
:QUANTITY
— Inteiro da dificuldade para este bloco.totalDifficulty
:QUANTITY
— Inteiro da dificuldade total da cadeia até este bloco.extraData
:DATA
— O campo “dados extras” deste bloco.size
:QUANTITY
— Inteiro do tamanho deste bloco em bytes.gasLimit
:QUANTITY
— O gás máximo permitido neste bloco.gasUsed
:QUANTITY
— O total de gás usado por todas as transações neste bloco.timestamp
:QUANTITY
— O carimbo de data/hora unix no momento em que o bloco foi agrupado.transactions
:Array
— Matriz de objetos de transação ou hashes de transação de 32 bytes, dependendo do último parâmetro fornecido.uncles
:Array
— Matriz de hashes tio.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result4{5{6"jsonrpc": "2.0",7"id": 1,8"result": {9 "difficulty": "0x4ea3f27bc",10 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",11 "gasLimit": "0x1388",12 "gasUsed": "0x0",13 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",14 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",15 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",16 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",17 "nonce": "0x689056015818adbe",18 "number": "0x1b4",19 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",20 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",21 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",22 "size": "0x220",23 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",24 "timestamp": "0x55ba467c",25 "totalDifficulty": "0x78ed983323d",26 "transactions": [27 ],28 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",29 "uncles": [30 ]31}32}Exibir tudoCopiar
eth_getBlockByNumber
Retorna informações sobre um bloco por número de bloco.
Parâmetros
QUANTITY|TAG
– número inteiro de um bloco, ou a cadeira de caracteres"earliest"
,"latest"
ou"pending"
, como no parâmetro de bloco padrão.Boolean
- Setrue
retorna os objetos de transação completos, sefalse
apenas os hashes das transações.
1params: [2 "0x1b4", // 4363 true,4]Copiar
Retorno Consulte eth_getBlockByHash
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Copiar
Veja o resultado eth_getBlockByHash
eth_getTransactionByHash
Retorna as informações sobre uma transação solicitada pelo hash de transação.
Parâmetros
DATA
, 32 Bytes - hash de uma transação
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Copiar
Retorna
Object
— Um objeto de transação ou null
quando nenhuma transação foi encontrada:
blockHash
:DATA
, 32 Bytes — Hash do bloco onde esta transação estava localizada.null
quando está pendente.blockNumber
:QUANTITY
— Número do bloco onde esta transação estava localizada.null
quando está pendente.from
:DATA
, 20 Bytes — Endereço do remetente.gás
:QUANTITY
— Gás fornecido pelo remetente.gasPrice
:QUANTITY
— Preço do gás fornecido pelo remetente em Wei.hash
:DATA
, 32 Bytes — Hash da transação.input
:DATA
— Os dados enviados com a transação.nonce
:QUANTITY
— O número de transações feitas pelo remetente antes desta.to
:DATA
, 20 Bytes — Endereço do destinatário.null
quando for uma transação de criação de contrato.transactionIndex
:QUANTITY
— Inteiro da posição do índice de transações no bloco.null
quando está pendente.valor
:QUANTITY
— Valor transferido em Wei.v
:QUANTITY
— ID de recuperação ECDSAr
:QUANTITY
— Assinatura ECDSA rs
:QUANTITY
— Assinatura ECDSA s
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 5000012 "gasPrice":"0x4a817c800", // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 6518 "value":"0xf3dbb76162000", // 429000000000000019 "v":"0x25", // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}Exibir tudoCopiar
eth_getTransactionByBlockHashAndIndex
Retorna informações sobre uma transação por hash de bloco e a posição do índice de transação.
Parâmetros
DATA
, 32 Bytes - Hash de um bloco.QUANTITY
- Inteiro da posição do índice da transação.
1params: [2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",3 "0x0", // 04]Copiar
Retorna Consulte eth_getTransactionByHash
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'Copiar
Resultado veja eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Retorna informações sobre uma transação pelo número do bloco e posição do índice da transação.
Parâmetros
QUANTITY|TAG
– um número de bloco ou a cadeia de caracteres"earliest"
,"latest"
ou"pending"
, como no parâmetro de bloco padrão.QUANTITY
- A posição do índice da transação.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Copiar
Retorna Consulte eth_getTransactionByHash
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Copiar
Resultado veja eth_getTransactionByHash
eth_getTransactionReceipt
Retorna o recebimento de uma transação pelo hash de transação.
Observe que o recibo não está disponível para transações pendentes.
Parâmetros
DADOS
, 32 bytes - hash de um bloco
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Copiar
Retorna Object
— Um objeto de recebimento de transação, ou null
quando nenhum recebimento foi encontrado:
transactionHash
:DATA
, 32 Bytes — Hash da transação.transactionIndex
:QUANTITY
— Inteiro da posição do índice de transações no bloco.blockHash
:DATA
, 32 Bytes — Hash do bloco onde esta transação estava localizada.blockNumber
:QUANTITY
— Número do bloco onde esta transação estava localizada.from
:DATA
, 20 Bytes — Endereço do remetente.to
:DATA
, 20 Bytes — Endereço do destinatário. null quando for uma transação de criação de contrato.cumulativeGasUsed
:QUANTITY
— A quantidade total de gás utilizada quando esta transação foi executada no bloco.effectiveGasPrice
:QUANTITY
— A soma da taxa base e gorjeta pagas por unidade de gás.gasUsed
:QUANTITY
— A quantidade de gás usada apenas por esta transação específica.contractAddress
:DATA
, 20 Bytes — O endereço do contrato criado, se a transação era uma criação do contrato, caso contrárionull
.logs
:Array
— Matriz de objetos de log gerados por esta transação.logsBloom
:DATA
, 256 Bytes — Filtro Bloom para clientes leves para recuperar rapidamente os logs relacionados.type
:QUANTITY
— Inteiro do tipo de transação,0x0
para transações herdadas,0x1
para tipos de lista de acesso,0x2
para taxas dinâmicas. Ele também retorna seja :root
:DATA
32 bytes de stateRoot pós-transação (anterior à atualização Byzantium)status
:QUANTITY
seja1
(êxito) ou0
(falha)
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string of the address if it was created12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logs as returned by getFilterLogs, etc.18 }],19 "logsBloom": "0x00...0", // 256 byte bloom filter20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Exibir tudoCopiar
eth_getUncleByBlockHashAndIndex
Retorna informações sobre o tio de um bloco por hash e a posição do índice de um tio.
Parâmetros
DATA
, 32 Bytes - O hash de um bloco.QUANTITY
- A posição do índice tio.
1params: [2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",3 "0x0", // 04]Copiar
Retorna Consulte eth_getBlockByHash
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'Copiar
Veja o resultado eth_getBlockByHash
Observação: um tio (bloco) não contém transações individuais.
eth_getUncleByBlockNumberAndIndex
Retorna informações sobre um tio de um bloco por número e posição do índice tio.
Parâmetros
QUANTITY|TAG
– um número de bloco ou a cadeia de caracteres"earliest"
,"latest"
ou"pending"
, como no parâmetro de bloco padrão.QUANTITY
- A posição do índice tio.
1params: [2 "0x29c", // 6683 "0x0", // 04]Copiar
Retorno Consulte eth_getBlockByHash
Observação: um tio (bloco) não contém transações individuais.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'Copiar
Veja o resultado eth_getBlockByHash
eth_getCompilers
Retorna uma lista de compiladores disponíveis no cliente.
Parâmetros Nenhum
Retorna Array
— Matriz de compiladores disponíveis.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCompilers","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["solidity", "lll", "serpent"]8}Copiar
eth_compileSolidity
Retorna o código Solidity compilado.
Parâmetros
String
- O código-fonte.
1params: [2 "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }",3]Copiar
Retorna DATA
— O código-fonte compilado.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 "code": "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056",9 "info": {10 "source": "contract test {\n function multiply(uint a) constant returns(uint d) {\n return a * 7;\n }\n}\n",11 "language": "Solidity",12 "languageVersion": "0",13 "compilerVersion": "0.9.19",14 "abiDefinition": [15 {16 "constant": true,17 "inputs": [18 {19 "name": "a",20 "type": "uint256"21 }22 ],23 "name": "multiply",24 "outputs": [25 {26 "name": "d",27 "type": "uint256"28 }29 ],30 "type": "function"31 }32 ],33 "userDoc": {34 "methods": {}35 },36 "developerDoc": {37 "methods": {}38 }39 }40}Exibir tudoCopiar
eth_compileLLL
Retorna código LLL compilado.
Parâmetros
String
- O código-fonte.
1params: ["(returnlll (suicide (caller)))"]Copiar
Retorna DATA
— O código-fonte compilado.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileLLL","params":["(returnlll (suicide (caller)))"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code8}Copiar
eth_compileSerpent
Retorna o código Serpent compilado.
Parâmetros
String
- O código fonte.
1params: ["/* some serpent */"]Copiar
Retorna DATA
— O código-fonte compilado.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSerpent","params":["/* some serpent */"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code8}Copiar
eth_newFilter
Cria um objeto de filtro, com base nas opções de filtro, para notificar quando o estado é alterado (logs). Para verificar se o estado mudou, chame eth_getFilterChanges.
Observação sobre a especificação de filtros de tópicos: Os tópicos são dependentes da ordem. Uma transação com um log com tópicos [A, B] será combinada pelos seguintes filtros de tópicos:
[]
“qualquer coisa”[A]
“A na primeira posição (e qualquer coisa depois)”[null, B]
“qualquer coisa na primeira posição E B na segunda posição (e qualquer coisa depois)”[A, B]
“A na primeira posição E B na segunda posição (e qualquer coisa depois)”[[A, B], [A, B]]
“(A OU B) na primeira posição E (A OU B) na segunda posição (e qualquer coisa depois)”- Parâmetros
Object
- As opções de filtro:
fromBlock
:QUANTITY|TAG
— (opcional, padrão:"latest"
) Número de bloco inteiro ou"latest"
para o último bloco minerado ou"pending"
,"earliest"
para as transações ainda não mineradas.toBlock
:QUANTITY|TAG
— (opcional, padrão:"latest"
) Número do bloco inteiro ou"latest"
para o último bloco minerado ou"pending"
,"earliest"
para as transações ainda não mineradas.address
:DATA|Array
, 20 Bytes — (opcional) Endereço do contrato ou uma lista de endereços dos quais os logs devem ser provenientes.topics
:Array of DATA
, — (opcional) Matriz de tópicos deDATA
de 32 Bytes. Os tópicos são dependentes da ordem. Cada tópico também pode ser uma matriz de DADOS (array of DATA) com opções “ou”.
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]Exibir tudoCopiar
Retorna QUANTITY
— Uma ID de filtro.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_newBlockFilter
Cria um filtro no nó para notificar quando um novo bloco chega. Para verificar se o estado mudou, chame eth_getFilterChanges.
Parâmetros Nenhum
Retorna QUANTITY
— Uma ID de filtro.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_newPendingTransactionFilter
Cria um filtro no nó para notificar quando chegam novas transações pendentes. Para verificar se o estado mudou, chame eth_getFilterChanges.
Parâmetros Nenhum
Retorna QUANTITY
— Uma ID de filtro.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}Copiar
eth_uninstallFilter
Desinstala um filtro com a ID fornecida. Deve ser sempre chamado quando o relógio não for mais necessário. Além disso, filtra o tempo limite quando não são solicitados com eth_getFilterChanges por um período de tempo.
Parâmetros
QUANTITY
- A ID do filtro.
1params: [2 "0xb", // 113]Copiar
Retorna Boolean
— true
se o filtro foi desinstalado com sucesso, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}Copiar
eth_getFilterChanges
Método de sondagem para um filtro, que retorna uma matriz de logs que ocorreram desde a última sondagem.
Parâmetros
QUANTITY
- A ID do filtro.
1params: [2 "0x16", // 223]Copiar
Retorna Array
— Matriz de objetos de log ou uma matriz vazia se nada mudou desde a última sondagem.
- Para filtros criados com
eth_newBlockFilter
, o retorno são hashes de bloco (DATA
, 32 Bytes), por exemplo,["0x3454645634534..."]
. - Para filtros criados com
eth_newPendingTransactionFilter
, o retorno são hashes de transação (DATA
, 32 Bytes), por exemplo,["0x6345343454645..."]
. - Para filtros criados com
eth_newFilter
, os logs são objetos com os seguintes parâmetros:removed
:TAG
—true
quando o log foi removido devido a uma reorganização da cadeia.false
se for um log válido.logIndex
:QUANTITY
— Inteiro da posição do índice de log no bloco.null
quando o log estiver pendente.transactionIndex
:QUANTITY
— Inteiro a partir do qual o log de posição do índice foi criado.null
quando o log estiver pendente.transactionHash
:DATA
, 32 Bytes — Hash das transações a partir das quais este log foi criado.null
quando o log estiver pendente.blockHash
:DATA
, 32 Bytes — Hash do bloco onde este log estava localizado.null
quando está pendente.null
quando o log estiver pendente.blockNumber
:QUANTITY
— O número do bloco onde este log estava localizado.null
quando está pendente.null
quando o log estiver pendente.endereço
:DADOS
, 20 Bytes — Endereço de origem deste log.data
:DATA
— Contém um ou mais argumentos não indexados de 32 Bytes do log.topics
:Array of DATA
— Matriz de 0 a 4 32 BytesDATA
de argumentos de log indexados. (No Solidity: O primeiro tópico é o hash da assinatura do evento (por exemplo,Deposit(address,bytes32,uint256)
), exceto se você declarou o evento com o especificadoranonymous
.)
- Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 19 "blockNumber":"0x1b4", // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}Exibir tudoCopiar
eth_getFilterLogs
Retorna uma matriz de todos os logs correspondentes ao filtro com a ID fornecida.
Parâmetros
QUANTITY
- O ID do filtro.
1params: [2 "0x16", // 223]Copiar
Retorna Consulte eth_getFilterChanges
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Copiar
Resultado veja eth_getFilterChanges
eth_getLogs
Retorna uma matriz de todos os logs que correspondem a um determinado objeto de filtro.
Parâmetros
Object
- As opções de filtro:
fromBlock
:QUANTITY|TAG
— (opcional, padrão:"latest"
) Número de bloco inteiro ou"latest"
para o último bloco minerado ou"pending"
,"earliest"
para as transações ainda não mineradas.toBlock
:QUANTITY|TAG
— (opcional, padrão:"latest"
) Número do bloco inteiro ou"latest"
para o último bloco minerado ou"pending"
,"earliest"
para as transações ainda não mineradas.address
:DATA|Array
, 20 Bytes — (opcional) Endereço do contrato ou uma lista de endereços dos quais os logs devem ser provenientes.topics
:Array of DATA
, — (opcional) Matriz de tópicos deDATA
de 32 Bytes. Os tópicos são dependentes da ordem. Cada tópico também pode ser uma matriz de DADOS (array of DATA) com opções “ou”.blockhash
:DATA
, 32 Bytes — (opcional, futuro) Com a adição do EIP-234,blockHash
será uma nova opção de filtro, que restringe os logs retornados ao bloco único com o hash de 32 bytesblockHash
. UsarblockHash
é equivalente afromBlock
=toBlock
= o número do bloco com hashblockHash
. SeblockHash
estiver presente nos critérios de filtro, nemfromBlock
, nemtoBlock
serão permitidos.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Copiar
Retorna Consulte eth_getFilterChanges
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Copiar
Resultado veja eth_getFilterChanges
eth_getWork
Retorna o hash do bloco atual, o seedHash e a condição de limite a ser atendida (“alvo”).
Parâmetros Nenhum
Retorna Array
— Matriz com as seguintes propriedades:
DATA
, 32 Bytes - Cabeçalho do bloco atual pow-hashDATA
, 32 Bytes - O hash da semente usada para o DAG.DATA
, 32 Bytes - A condição de contorno ("alvo"), 2^256 / dificuldade.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [8 "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",9 "0x5EED00000000000000000000000000005EED0000000000000000000000000000",10 "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000"11 ]12}Exibir tudoCopiar
eth_submitWork
Usado para enviar uma solução de prova de trabalho.
Parâmetros
DATA
, 8 Bytes - O nonce encontrado (64 bits)DATA
, 32 Bytes - O pow-hash do cabeçalho (256 bits)DATA
, 32 Bytes - O mix digest (256 bits)
1params: [2 "0x0000000000000001",3 "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",4 "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000",5]Copiar
Retorna Boolean
— retorna true
se a solução fornecida for válida, caso contrário, false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}'3// Result4{5 "id":73,6 "jsonrpc":"2.0",7 "result": true8}Copiar
eth_submitHashrate
Usado para enviar hashrate de mineração.
Parâmetros
Hashrate
, uma representação de string hexadecimal (32 bytes) do hashrateID
, String - Uma ID hexadecimal aleatória (32 bytes) que identifica o cliente
1params: [2 "0x0000000000000000000000000000000000000000000000000000000000500000",3 "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c",4]Copiar
Retorna Boolean
— Retorna true
se o envio foi realizado com sucesso e, caso contrário, false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":73}'3// Result4{5 "id":73,6 "jsonrpc":"2.0",7 "result": true8}Copiar
db_putString (deprecated)
Armazena uma cadeia de caracteres no banco de dados local.
Observação: Essa função foi preterida.
Parâmetros
String
- Nome do banco de dados.String
- Nome da chave.String
- String para armazenar.
1params: ["testDB", "myKey", "myString"]Copiar
Retorna Boolean
— Retorna true
se o valor foi armazenado, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}Copiar
db_getString (deprecated)
Retorna a cadeia de caracteres do banco de dados local. Observação: Essa função foi preterida.
Parâmetros
String
- Nome do banco de dados.String
- Nome da chave.
1params: ["testDB", "myKey"]Copiar
Retorna String
— A cadeia de caracteres armazenada anteriormente.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "myString"8}Copiar
db_putHex (deprecated)
Armazena dados binários no banco de dados local. Observação: Essa função foi preterida.
Parâmetros
String
- Nome do banco de dados.String
- Nome da chave.DADOS
- Os dados a serem armazenados.
1params: ["testDB", "myKey", "0x68656c6c6f20776f726c64"]Copiar
Retorna Boolean
— Retorna true
se o valor foi armazenado, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","myKey","0x68656c6c6f20776f726c64"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}Copiar
db_getHex (deprecated)
Armazena dados binários do banco de dados local. Observação: Essa função foi preterida.
Parâmetros
String
- Nome do banco de dados.String
- Nome da chave.
1params: ["testDB", "myKey"]Copiar
Retorna DATA
— Os dados previamente armazenados.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","myKey"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "0x68656c6c6f20776f726c64"8}Copiar
shh_version (deprecated)
Retorna a versão atual do protocolo Whisper.
Observação: Essa função foi preterida.
Parâmetros Nenhum
Retorna String
— A versão atual do protocolo Whisper
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "2"8}Copiar
shh_post (deprecated)
Envia uma mensagem do Whisper.
Observação: Essa função foi preterida.
Parâmetros
Objeto
- O objeto de postagem do Whisper:
de
:DATA
, 60 Bytes — (opcional) A identidade do remetente.para
:DATA
, 60 Bytes — (opcional) A identidade do destinatário. Quando presente, o Whisper criptografará a mensagem para que apenas o destinatário possa descriptografá-la.tópicos
:Array of DATA
— Matriz de tópicos deDATA
para o destinatário identificar as mensagens.carga
:DATA
— O conteúdo da mensagem.prioridade
:QUANTITY
— O inteiro da prioridade em um intervalo de... (?).ttl
:QUANTITY
— Inteiro do tempo residual em segundos.
1params: [2 {3 from: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",4 to: "0x3e245533f97284d442460f2998cd41858798ddf04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a0d4d661997d3940272b717b1",5 topics: [6 "0x776869737065722d636861742d636c69656e74",7 "0x4d5a695276454c39425154466b61693532",8 ],9 payload: "0x7b2274797065223a226d6",10 priority: "0x64",11 ttl: "0x64",12 },13]Exibir tudoCopiar
Retorna Boolean
— Retorna true
se a mensagem foi enviada, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_post","params":[{"from":"0xc931d93e97ab07fe42d923478ba2465f2..","topics": ["0x68656c6c6f20776f726c64"],"payload":"0x68656c6c6f20776f726c64","ttl":0x64,"priority":0x64}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}Copiar
shh_newIdentity (depreciado)
Cria uma nova identidade Whisper no cliente.
Observação: Essa função foi preterida.
Parâmetros Nenhum
Retorna DATA
, 60 Bytes — O endereço da nova identidade.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newIdentity","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xc931d93e97ab07fe42d923478ba2465f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca9007d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"8}Copiar
shh_hasIdentity (deprecated)
Verifica se o cliente mantém as chaves privadas de uma determinada identidade.
Observação: Essa função foi preterida.
Parâmetros
DATA
, 60 Bytes - O endereço de identidade a ser verificado.
1params: [2 "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",3]Copiar
Retorna Boolean
— Retorna true
se o cliente possui a chave privada para essa identidade, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_hasIdentity","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}Copiar
shh_newGroup (deprecated)
Observação: Essa função foi preterida.
Parâmetros Nenhum
Retorna DATA
, 60 Bytes — O endereço do novo grupo. (?)
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newGroup","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xc65f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca90931d93e97ab07fe42d923478ba2407d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"8}Copiar
shh_addToGroup (deprecated)
Observação: Essa função foi preterida.
Parâmetros
DATA
, 60 Bytes - O endereço de identidade para adicionar a um grupo (?).
1params: [2 "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",3]Copiar
Retorna Boolean
— Retorna true
se a identidade foi adicionada com sucesso ao grupo, caso contrário false
(?).
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_addToGroup","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}Copiar
shh_newFilter (deprecated)
Cria um filtro para notificar quando o cliente recebe a mensagem do Whisper que corresponde às opções do filtro. Observação: Essa função foi preterida.
Parâmetros
Object
- As opções de filtro:
to
:DATA
, 60 Bytes — (opcional) Identidade do destinatário. Quando apresentado, ele tentará descriptografar qualquer mensagem recebida se o cliente possuir a chave privada dessa identidade.tópicos
:Array of DATA
— Matriz de tópicos deDATA
que devem corresponder aos tópicos das mensagens recebidas. Você pode usar as seguintes combinações:[A, B] = A && B
[A, [B, C]] = A && (B || C)
[null, A, B] = ANYTHING && A && B
null
funciona como um curinga
1params: [2 {3 topics: ["0x12341234bf4b564f"],4 to: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",5 },6]Copiar
Retorna QUANTITY
— O filtro recém-criado.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newFilter","params":[{"topics": ['0x12341234bf4b564f'],"to": "0x2341234bf4b2341234bf4b564f..."}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "0x7" // 78}Copiar
shh_uninstallFilter (deprecated)
Desinstala um filtro com a ID fornecida. Deve ser sempre chamado quando o relógio não for mais necessário. Adicionalmente, filtra o tempo limite quando não são solicitados com shh_getFilterChanges por um determinado período. Observação: Essa função foi preterida.
Parâmetros
QUANTITY
- O filtro id.
1params: [2 "0x7", // 73]Copiar
Retorna Boolean
— true
se o filtro foi desinstalado com sucesso, caso contrário false
.
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_uninstallFilter","params":["0x7"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}Copiar
shh_getFilterChanges (deprecated)
Método de sondagem para filtros do Whisper. Retorna novas mensagens desde a última chamada desse método. Observação: chamar o método shh_getMessages redefinirá o buffer desse método para que você não receba mensagens duplicadas. Observação: Essa função foi preterida.
Parâmetros
QUANTITY
- O filtro id.
1params: [2 "0x7", // 73]Copiar
Retorna Array
— Matriz de mensagens recebidas desde a última sondagem:
hash
:DATA
, 32 Bytes (?) — O hash da mensagem.from
:DATA
, 60 Bytes — O remetente da mensagem, se um remetente foi especificado.to
:DATA
, 60 Bytes — O destinatário da mensagem, se um destinatário foi especificado.expiry
:QUANTITY
— Inteiro do tempo em segundos quando esta mensagem deve expirar (?).ttl
:QUANTITY
— Inteiro do tempo que a mensagem deve flutuar no sistema em segundos (?).sent
:QUANTITY
— Inteiro do carimbo de data/hora unix quando a mensagem foi enviada.tópicos
:Array of DATA
— Matriz de tópicos deDATA
contidos na mensagem.carga
:DATA
— O conteúdo da mensagem.workProved
:QUANTITY
— Inteiro do trabalho que esta mensagem exigiu antes de ser enviada (?).
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getFilterChanges","params":["0x7"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "hash": "0x33eb2da77bf3527e28f8bf493650b1879b08c4f2a362beae4ba2f71bafcd91f9",9 "from": "0x3ec052fc33..",10 "to": "0x87gdf76g8d7fgdfg...",11 "expiry": "0x54caa50a", // 142256666612 "sent": "0x54ca9ea2", // 142256502613 "ttl": "0x64", // 10014 "topics": ["0x6578616d"],15 "payload": "0x7b2274797065223a226d657373616765222c2263686...",16 "workProved": "0x0"17 }]18}Exibir tudoCopiar
shh_getMessages (deprecated)
Obtenha todas as mensagens correspondentes a um filtro. Ao contrário de shh_getFilterChanges
, isso retorna todas as mensagens.
Observação: Essa função foi preterida.
Parâmetros
QUANTIDADE
- O filtro id.
1params: [2 "0x7", // 73]Copiar
Retorna Consulte shh_getFilterChanges
Exemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getMessages","params":["0x7"3],"id":73}'Copiar
Consulte o resultado shh_getFilterChanges
Exemplo de utilização
Implementando um contrato usando JSON_RPC
Esta seção inclui uma demonstração de como implantar um contrato usando apenas a interface RPC. Existem rotas alternativas para a implantação de contratos nos quais essa complexidade é abstraída, por exemplo, usando bibliotecas criadas sobre a interface RPC, como web3.js(opens in a new tab) e web3.py(opens in a new tab). Essas abstrações são geralmente mais fáceis de entender e menos propensas a erros, mas ainda é útil entender o que está acontecendo internamente, ou seja, sem que o usuário perceba.
Veja a seguir um contrato inteligente simples chamado Multiply7
que será implantado usando a interface JSON-RPC em um nó Ethereum. Este tutorial pressupõe que o leitor já esteja executando um nó Geth. Mais informações sobre nós e clientes estão disponíveis aqui. Consulte a documentação específica de cada cliente para ver como iniciar o JSON-RPC HTTP para clientes não Geth. A maioria dos clientes atende por padrão no 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}
A primeira coisa a fazer é verificar se a interface HTTP RPC está habilitada. Isso significa que fornecemos ao Geth o sinalizador --http
na inicialização. Neste exemplo, usamos o nó Geth em uma cadeia de desenvolvimento privada. Usando essa abordagem, não precisamos de ether na rede real.
geth --http --dev console 2>>geth.log
Isso iniciará a interface HTTP RPC em http://localhost:8545
.
Podemos verificar se a interface está funcionando recuperando o endereço e o saldo da Coinbase usando curl(opens in a new tab). Observe que os dados nesses exemplos serão diferentes no seu nó local. Se você quiser tentar esses comandos, substitua os parâmetros de solicitação na segunda solicitação curl pelo resultado retornado da primeira.
curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "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"}
Como os números são codificados em hexa, o saldo é retornado em Wei como uma cadeia de caracteres hexadecimal. Se quisermos ter o saldo em ether como um número, podemos usar a Web3 do console Geth.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"
Agora que já temos alguns ethers em nossa cadeia de desenvolvimento privada, podemos implantar o contrato. O primeiro passo é compilar o contrato Multiply7 em byte code, que pode ser enviado para a EVM. Para instalar o solc, o compilador do Solidity, confira a documentação do Solidity(opens in a new tab). (Você pode usar uma versão do solc
mais antiga que corresponda à versão do compilador usada em nosso exemplo(opens in a new tab).)
O próximo passo é compilar o contrato Multiply7 em byte code, que pode ser enviado para a 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
Agora que temos o código compilado, precisamos determinar o quanto a sua implantação custará em gás. A interface RPC tem um método eth_estimateGas
, que nos dará uma estimativa.
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"}
Finalmente, implante o contrato.
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"}
A transação é aceita pelo nó e um hash de transação é retornado. Esse hash pode ser usado para rastrear a transação. O próximo passo é determinar o endereço onde nosso contrato está implantado. Cada transação executada criará uma confirmação de recebimento. Essa confirmação de recebimento contém várias informações sobre a transação, como em qual bloco a transação foi incluída e quanto gás foi usado pela EVM. Se uma transação criar um contrato, ela também conterá o endereço do contrato. Podemos recuperar a confirmação de recebimento com o método 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"}}
Nosso contrato foi criado em 0x4d03d617d700cf81935d7f797f4e2ae719648262
. Um resultado nulo em vez de um recibo significa que a transação ainda não foi incluída em um bloco. Aguarde um momento, verifique se o seu minerador está em execução e tente novamente.
Interagindo com contratos inteligentes
Neste exemplo, enviaremos uma transação usando eth_sendTransaction
para o método multiply
do contrato.
eth_sendTransaction
requer vários argumentos, especificamente from
, to
e data
. From
é o endereço público de nossa conta, e to
é o endereço do contrato. O argumento data
contém um conteúdo que define qual método deve ser chamado e com quais argumentos. É aqui que a ABI (application binary interface ou interface binária do aplicativo)(opens in a new tab) entra em ação. A ABI é um arquivo JSON que estabelece como definir e codificar dados para a EVM.
Os bytes do conteúdo definem qual método no contrato é chamado. Esses são os primeiros 4 bytes do hash Keccak sobre o nome da função e seus tipos de argumento, com codificação hexadecimal. A função multiplicar aceita um uint, que é um alias de uint256. Isso nos deixa com:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"
O próximo passo é codificar os argumentos. Existe apenas um uint256, por exemplo, o valor 6. A ABI tem uma seção que especifica como codificar os tipos uint256.
int<M>: enc(X)
é a codificação Big Endian do complemento de dois de X, preenchida no lado superior (esquerdo) com 0xff para X negativo e com zero > bytes para X positivo, de modo que o tamanho seja um múltiplo de 32 bytes.
Isso codifica em 0000000000000000000000000000000000000000000000000000000000000006
.
Combinando o seletor de função e o argumento codificado, nossos dados serão 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006
.
Isso agora pode ser enviado para o nó:
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"}
Como uma transação foi enviada, um hash de transação foi retornado. A recuperação do recibo:
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}Exibir tudo
O recibo contém um log. Esse log foi gerado pela EVM na execução da transação e incluído no recibo. A função multiply
mostra que o evento Print
foi gerado com a entrada 7 vezes. Como o argumento do evento Print
era um uint256, podemos decodificá-lo conforme as regras da ABI, o que nos deixará com a decimal 42 esperada. Além dos dados, vale ressaltar que os tópicos podem ser usados para determinar qual evento criou o log:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"
Esta foi apenas uma breve introdução a algumas das tarefas mais comuns, demonstrando o uso direto do JSON-RPC.