Ir al contenido principal
Change page

API JSON-RPC

Última edición: @chiogonzalezt(opens in a new tab), 26 de abril de 2024

Para que una aplicación de software interactúe con la cadena de bloques de Ethereum (leyendo datos de la blockchain o enviando transacciones a la red), se debe conectar a un nodo de Ethereum.

Para este propósito, cada cliente de Ethereum implementa una especificación JSON-RPC(opens in a new tab) para que haya un conjunto uniforme de métodos que las aplicaciones puedan usar, sin importar la implementación de nodo o cliente específica.

JSON-RPC(opens in a new tab) es un protocolo de llamada de procedimiento remoto (RPC) liviano y sin estado. Define distintas estructuras de datos y las reglas para su procesamiento. Es independiente del transporte en el sentido de que los conceptos se pueden usar dentro del mismo proceso, por sockets, HTTP o distintos entornos de intercambio de mensajes. Utiliza JSON (RFC 4627) como formato de datos.

Implementaciones de cliente

Cada cliente de Ethereum puede utilizar diferentes lenguajes de programación al implementar la especificación JSON-RPC. Consulte documentación de cada cliente para obtener más detalles relacionados con su lenguaje de programación. Recomendamos revisar la documentación de cada cliente para obtener la información más actualizada del soporte de API.

Bibliotecas de conveniencia

Aunque puede elegir interactuar directamente con los clientes de Ethereum a través de la API de JSON-RPC, a menudo hay opciones más fáciles para los desarrolladores de dapps. Existen muchas librerías de JavaScript y API de backend para proporcionar wrappers sobre la API de JSON-RPC. Con estas bibliotecas, los desarrolladores pueden escribir métodos intuitivos de una sola línea en el lenguaje de programación que escojan para realizar peticiones JSON-RPC (debajo del capó) que interactúen con Ethereum.

API de clientes de consenso

Esta página trata principalmente la API de JSON-RPC usada por los clientes de ejecución de Ethereum. Sin embargo, los clientes de consenso también tienen una API de RPC que permite a los usuarios consultar información sobre el nodo, solicitar bloques de Baliza, ver el estado de la Baliza y otra información relacionada con el consenso directamente desde un nodo. Esta API está documentada en la página web de la API de Baliza(opens in a new tab).

También se utiliza una API interna para la comunicación intercliente dentro de un nodo; esto es, permite al cliente de consenso y el cliente de ejecución intercambiar datos. Esta es la llamada "Engine API", y las especificaciones están disponibles en GitHub(opens in a new tab).

Especificaciones de clientes de ejecución

Lea la especificación completa de la API de JSON-RPC en Github(opens in a new tab).

Convenciones

Codificación de valor hexadecimal

Se pasan dos tipos de datos clave por JSON: arrays de bytes sin formato y cantidades. Ambos se pasan con una codificación hexadecimal pero con diferentes requisitos de formato.

Cantidades

Al codificar cantidades (enteros, números): codificar como hexadecimal, agregar prefijo "0x", la representación más compacta (pequeña excepción: el cero debe representarse como "0x0").

He aquí algunos ejemplos:

  • 0x41 (65 en decimal)
  • 0x400 (1024 en decimal)
  • WRONG: 0x (siempre debe tener al menos un dígito - cero es "0x0")
  • WRONG: 0x0400 (no se permiten ceros a la izquierda)
  • WRONG: ff (debe tener el prefijo 0x)

Datos sin formato

Cuando se codifican datos sin formato (arrays de bytes, direcciones de cuentas, hashes, arrays de bytecode): codificar como hex, agregar prefijo "0x", dos dígitos hexadecimales por byte.

Estos son algunos ejemplos:

  • 0x41 (tamaño 1, "A")
  • 0x004200 (tamaño 3, "\0B\0")
  • 0x (tamaño 0, "")
  • WRONG: 0xf0f0f (debe ser un número par de dígitos)
  • WRONG: 004200 (debe tener el prefijo 0x)

El parámetro de bloque por defecto

Los siguientes métodos tienen un parámetro de bloque predeterminado adicional:

Cuando se hacen peticiones que actúan sobre el estado de Ethereum, el último parámetro de bloque por defecto determina la altura del bloque.

Las siguientes opciones son posibles para el parámetro defaultBlock:

  • HEX String: un número de bloque entero
  • String "earliest": para el bloque inicial
  • String "latest": para el último bloque minado
  • String "safe": para el último bloque de encabezado seguro
  • String "finalized": para el último bloque finalizado
  • String "pending": para el estado/transacciones pendientes

Ejemplos

En esta página proporcionamos ejemplos de cómo utilizar los endpoints individuales de la API JSON_RPC usando la herramienta de línea de comandos, curl(opens in a new tab). Estos ejemplos individuales de endpoints se encuentran a continuación en la sección de ejemplos de curl. Más adelante en la página, también proporcionamos un ejemplo de extremo a extremo para compilar y desplegar un contrato inteligente usando un nodo Geth, la API de JSON_RPC y curl.

Ejemplos de Curl

A continuación se proporcionan ejemplos del uso de la API JSON_RPC realizando solicitudes curl(opens in a new tab) a un nodo Ethereum. Cada ejemplo incluye una descripción del endpoint específico, sus parámetros, el tipo de retorno y un ejemplo práctico de cómo debe utilizarse.

Las peticiones curl pueden mostrar un mensaje de error relacionado con el tipo de contenido. Esto se debe a que la opción --data establece el tipo de contenido en application/x-www-form-urlencoded. Si su nodo se queja de esto, establezca manualmente el encabezado colocando -H "Content-Type: application/json" al inicio de la llamada. Los ejemplos tampoco incluyen la combinación de URL/IP y puerto que debe ser el último argumento dado a curl (ej: 127.0.0.1:8545). Una solicitud de curl completa, incluyendo estos datos adicionales, tiene la siguiente forma:

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, historial

Un puñado de métodos JSON-RPC básicos requieren datos de la red Ethereum, y se dividen claramente en tres categorías principales: Gossip, Estado e Historial. Utilice los enlaces de estas secciones para saltar a cada método o utilice la tabla de contenidos para explorar toda la lista de métodos.

Métodos gossip

Estos métodos rastrean la cabeza de la cadena. Así es como las transacciones se abren camino por la red, encuentran su camino en los bloques y cómo los clientes descubren nuevos bloques.

Métodos de estado

Métodos que informan el estado actual de todos los datos almacenados. El "estado" es como una gran porción compartida de RAM, e incluye saldos de cuentas, datos de contratos y estimaciones de gas.

Métodos de historial

Obtiene registros históricos de cada bloque hasta el bloque inicial. Esto es como un gran archivo append-only e incluye todas las cabeceras de bloques, cuerpos de bloques, bloques tíos y recibos de transacción.

Métodos de la API de JSON-RPC

web3_clientVersion

Muestra la versión actual del cliente.

Parámetros

Ninguno

Devuelve

String: La versión actual del cliente

Ejemplo

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

web3_sha3

Muestra el Keccak-256 (no el SHA3-256 estandarizado) de los datos dados.

Parámetros

  1. DATA: los datos por convertir en un hash SHA3
1params: ["0x68656c6c6f20776f726c64"]
Copiar

Devuelve

DATA: El resultado SHA3 de la cadena dada.

Ejemplo

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

net_version

Muestra el ID de red actual.

Parámetros

Ninguno

Devuelve

String: El ID de red actual.

La lista completa de los ID de red actuales está disponible en chainlist.org(opens in a new tab). Algunos comunes son:

  • 1: Red principal de Ethereum
  • 5: Red de prueba Goerli
  • 11155111: Red de prueba Sepolia

Ejemplo

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

net_listening

Muestra true si el cliente está escuchando activamente las conexiones de red.

Parámetros

Ninguno

Devuelve

Boolean: true cuando está escuchando, de lo contrario false.

Ejemplo

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

net_peerCount

Muestra el número de personas conectadas al cliente.

Parámetros

Ninguno

Devuelve

QUANTITY: número entero de pares conectados.

Ejemplo

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

eth_protocolVersion

Muestra la versión actual del protocolo Ethereum. Tenga en cuenta que este método no está disponible en Geth(opens in a new tab).

Parámetros

Ninguno

Devuelve

String: La versión actual del protocolo Ethereum

Ejemplo

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

eth_syncing

Muestra un objeto con datos sobre el estado de sincronización o false.

Parámetros

Ninguno

Devuelve

El retorno de información precisa varía entre las implementaciones del cliente. En todos los clientes aparece False cuando el nodo no se está sincronizando y en todos los clientes aparecen los siguientes campos.

Object|Boolean: un objeto con datos de estado de sincronización o FALSE cuando no se sincroniza:

  • startingBlock: QUANTITY - El bloque en el que comenzó la importación (sólo se reiniciará, después de que la sincronización alcanzó su cabeza)
  • currentBlock: QUANTITY - El bloque actual, igual que eth_blockNumber
  • highestBlock: QUANTITY - El bloque más alto estimado

Sin embargo, los clientes individuales también pueden proporcionar información adicional. Por ejemplo, Geth devuelve lo siguiente:

1{
2 "jsonrpc": "2.0",
3 "id": 1,
4 "result": {
5 "currentBlock": "0x3cf522",
6 "healedBytecodeBytes": "0x0",
7 "healedBytecodes": "0x0",
8 "healedTrienodes": "0x0",
9 "healingBytecode": "0x0",
10 "healingTrienodes": "0x0",
11 "highestBlock": "0x3e0e41",
12 "startingBlock": "0x3cbed5",
13 "syncedAccountBytes": "0x0",
14 "syncedAccounts": "0x0",
15 "syncedBytecodeBytes": "0x0",
16 "syncedBytecodes": "0x0",
17 "syncedStorage": "0x0",
18 "syncedStorageBytes": "0x0"
19 }
20}
Mostrar todo
Copiar

Cuando Besu devuelve:

1{
2 "jsonrpc": "2.0",
3 "id": 51,
4 "result": {
5 "startingBlock": "0x0",
6 "currentBlock": "0x1518",
7 "highestBlock": "0x9567a3",
8 "pulledStates": "0x203ca",
9 "knownStates": "0x200636"
10 }
11}
Mostrar todo
Copiar

Consulte la documentación de su cliente en específico para más información.

Ejemplo

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

eth_coinbase

Muestra la dirección coinbase del cliente.

Parámetros

Ninguno

Retornos

DATA, 20 bytes - la dirección actual de Coinbase.

Ejemplo

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

eth_chainId

Muestra el ID de cadena utilizado para firmar transacciones protegidas contra repetición.

Parámetros

Ninguno

Retornos

chainId: valor hexadecimal como una cadena que representa el número entero del ID de cadena actual.

Ejemplo

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

eth_mining

Aparece true si el cliente está minando activamente nuevos bloques. Esto solo puede aparecer como true para redes de prueba de trabajo y puede que no esté disponible para algunos clientes desde La Fusión.

Parámetros

Ninguno

Retornos

Boolean: muestra true si cliente está minando, de lo contrario aparece falso.

Ejemplo

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

eth_hashrate

Retorna el número de hashes por segundo con los que el nodo está minando. Esto solo puede aparecer como true para redes de prueba de trabajo y puede que no esté disponible para algunos clientes desde La Fusión.

Parámetros

Ninguno

Retornos

QUANTITY: número de hashes por segundo.

Ejemplo

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

eth_gasPrice

Devuelve un estimado del precio actual por gas en wei. Por ejemplo, el cliente Besu examina los últimos 100 bloques y devuelve el precio promedio por unidad de gas por defecto.

Parámetros

Ninguno

Retornos

CANTIDAD: número entero del precio actual de gas en wei.

Ejemplo

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

eth_accounts

Retorna una lista de direcciones de propiedad del cliente.

Parámetros

Ninguno

Retornos

Array of DATA, 20 Bytes - direcciones de propiedad del cliente.

Ejemplo

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

eth_blockNumber

Retorna el número de bloque más reciente.

Parámetros

Ninguno

Retornos

QUANTITY: número entero del número de bloque actual en el que se encuentra el cliente.

Ejemplo

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

eth_getBalance

Retorna el saldo de la cuenta de la dirección dada.

Parámetros

  1. DATA, 20 Bytes - dirección en la que se verifica el saldo.
  2. QUANTITY|TAG: número de bloque entero o la cadena "latest", "earliest" o "pending" , consulte el parámetro de bloque predeterminado
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]
Copiar

Retornos

QUANTITY: número entero del saldo actual en wei.

Ejemplo

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

eth_getStorageAt

Retorna el valor de una posición de almacenamiento en una dirección dada.

Parámetros

  1. DATA, 20 Bytes - dirección de almacenamiento.
  2. QUANTITY: número entero de la posición en el almacenamiento.
  3. QUANTITY|TAG: número de bloque entero o la cadena "latest", "earliest" o "pending" , consulte el parámetro de bloque predeterminado

Retornos

DATA: el valor de esta posición de almacenamiento.

Ejemplo El calculo de la posición correcta depende del almacenamiento a recuperar. Considere el siguiente contrato implementado en 0x295a70b2de5e3953354a6a8344e616ed314d7251 por la dirección 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 el valor de pos0 es sencillo:

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

Recuperar un elemento del mapa es más difícil. La posición de un elemento de un mapa se calcula con:

1keccack(LeftPad32(key, 0), LeftPad32(map position, 0))
Copiar

Esto signifíca que para recuperar el almacenamiento en pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] necesitamos calcular la posición con:

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

La consola geth que viene con la biblioteca web3 puede ser utilizada para hacer el cálculo:

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

Ahora para obtener el almacenamiento:

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

eth_getTransactionCount

Muestra el número de transacciones enviadas de una dirección.

Parámetros

  1. DATA, 20 Bytes - dirección.
  2. QUANTITY|TAG: número de bloque entero o la cadena "latest", "earliest" o "pending" , consulte el parámetro de bloque predeterminado
1params: [
2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
3 "latest", // state at the latest block
4]
Copiar

Retornos

QUANTITY: número entero de las transacciones enviadas desde esta dirección.

Ejemplo

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

eth_getBlockTransactionCountByHash

Muestra el número de transacciones en un bloque de un bloque que coinicide con el hash del bloque dado.

Parámetros

  1. DATA, 32 Bytes - hash de un bloque
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]
Copiar

Retornos

QUANTITY: número entero de transacciones de este bloque.

Ejemplo

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

eth_getBlockTransactionCountByNumber

Muestra el número de transacciones de un bloque que coincide con el número de bloque dado.

Parámetros

  1. QUANTITY|TAG: número entero de un número de bloque, o la cadena "earliest", "latest" o "pending", como en el parámetro de bloque predeterminado.
1params: [
2 "0xe8", // 232
3]
Copiar

Retornos

QUANTITY: número entero de transacciones de este bloque.

Ejemplo

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

eth_getUncleCountByBlockHash

Muestra el número de tíos en un bloque a partir de un bloque que coincide con el hash del bloque dado.

Parámetros

  1. DATA, 32 Bytes - hash de un bloque
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]
Copiar

Retornos

QUANTITY: número entero de «tíos» en este bloque.

Ejemplo

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

eth_getUncleCountByBlockNumber

Muestra el número de tíos de un bloque que coincide con el número del bloque dado.

Parámetros

  1. CANTIDAD|TAG - número entero de un número de bloque, o la cadena "más reciente", "más antiguo" o "pendiente'', vea el parámetro de bloque por defecto
1params: [
2 "0xe8", // 232
3]
Copiar

Retornos

QUANTITY: número entero de «tíos» en este bloque.

Ejemplo

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

eth_getCode

Muestra el código en una dirección dada.

Parámetros

  1. DATA, 20 Bytes - dirección
  2. QUANTITY|TAG: número de bloque entero o la cadena "latest", "earliest" o "pending" , consulte el parámetro de bloque predeterminado
1params: [
2 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
3 "0x2", // 2
4]
Copiar

Retornos

DATA: el código de una dirección dada.

Ejemplo

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

eth_sign

El método de firma calcula una firma especifíca de Ethereum con: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).

Añadiendo un prefijo al mensaje, hace que la firma calculada sea reconocible como una firma especifíca de Ethereum. Esto previene el uso inadecuado donde una dapp maliciosa pueda firmar datos arbitrarios (ej: transacción) y use la firma para hacerse pasar por la víctima.

Nota: La dirección con la que se firma debe estar desbloqueada.

Parámetros

  1. DATA, 20 Bytes - dirección
  2. DATA, N Bytes - mensaje a firmar

Retornos

DATA: Firma

Ejemplo

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

eth_signTransaction

Firma una transacción que pueda enviarse a la red más adelante usando eth_sendRawTransaction.

Parámetros

  1. Object: Objeto de la transacción
  • type:
  • from: DATA, 20 Bytes - La dirección desde donde la transacción es enviada.
  • to: DATA, 20 Bytes - (opcional cuando se crea un nuevo contrato) La dirección a la cual se envía la transacción.
  • gas: QUANTITY: (opcional, por defecto; 90000) Entero del gas propuesto para ejecutar la transacción. Devuelve el gas no utilizado.
  • gasPrice: QUANTITY: (opcional, predeterminado: Por determinar) Entero del precio del gas utilizado para cada gas pagado en Wei.
  • value: QUANTITY: (opcional) entero del valor enviado con esta transacción, en Wei.
  • data: DATA: el código compilado de un contrato O el hash del método de firma invocado y los parámetros codificados.
  • nonce: QUANTITY: (opcional) Entero del nonce. Esto permitirá sobrescribir sus propias transacciones pendientes que usen el mismo nonce.

Retornos

DATA, el objeto transaccional codificado con RLP y firmado por la cuenta en específico.

Ejemplo

1// Solicitud
2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'
3// Resultado
4{
5 "id": 1,
6 "jsonrpc": "2.0",
7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
8}
Copiar

eth_sendTransaction

Crea una nueva transacción de llamada de mensaje o un nuevo contrato, si el campo de datos contiene código y lo firma usando la cuenta especificada en from.

Parámetros

  1. Object: Objeto de la transacción
  • from: DATA, 20 Bytes - La dirección desde donde la transacción es enviada.
  • to: DATA, 20 Bytes - (opcional cuando se crea un nuevo contrato) La dirección a la cual se envía la transacción.
  • gas: QUANTITY: (opcional, por defecto; 90000) Entero del gas propuesto para ejecutar la transacción. Devuelve el gas no utilizado.
  • gasPrice: QUANTITY: (opcional, por defecto: Por determinar) entero del precio del gas usado por cada gas pagado.
  • value: QUANTITY: (opcional) Entero del valor enviado con la transacción.
  • input: DATA. El código compilado de un contrato O el hash del método de firma invocado y los parámetros codificados.
  • nonce: QUANTITY: (opcional) Entero del nonce. Esto permitirá sobrescribir sus propias transacciones pendientes que usen el mismo nonce.
1params: [
2 {
3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
5 gas: "0x76c0", // 30400
6 gasPrice: "0x9184e72a000", // 10000000000000
7 value: "0x9184e72a", // 2441406250
8 input:
9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
10 },
11]
Mostrar todo
Copiar

Retornos

DATA, 32 Bytes - El hash de la transacción el hash cero si la transacción no está disponible aún.

Use eth-getTransactionReceipt para conseguir la dirección del contrato, después de que la transacción se minó, cuando creó un contrato.

Ejemplo

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

eth_sendRawTransaction

Crea una nueva transacción de llamada de mensaje o la creación de un contrato para transacciones firmadas.

Parámetros

  1. DATA: los datos de la transacción con firma.
1params: [
2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
3]
Copiar

Retornos

DATA, 32 Bytes - El hash de la transacción el hash cero si la transacción no está disponible aún.

Use eth-getTransactionReceipt para conseguir la dirección del contrato, después de que la transacción se minó, cuando creó un contrato.

Ejemplo

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

eth_call

Ejecuta una nueva llamada de mensaje inmediatamente sin crear una transacción en la cadena de bloques. Con frecuencia es usado para ejecutar funciones de solo lectura en los contratos, por ejemplo, el balanceOf para un contrato ERC-20.

Parámetros

  1. Object: El objeto de la llamada en la transacción
  • from: DATA, 20 Bytes - (opcional) La dirección desde donde se envía la transacción.
  • to: DATA, 20 Bytes - La dirección a la cual se envía la transacción.
  • gas: QUANTITY - (opcional) Entero del gas proporcionado para la ejecución de la transacción. eth_call consume cero gas, pero este parámetro tal vez sea necesario para algunas ejecuciones.
  • gasPrice QUANTITY - (opcional) Entero del precio del gas usado por cada gas pagado
  • value: QUANTITY - (opcional) Entero del valor enviado con la transacción
  • input: DATA - (opcional) Hash de la firma del método y los parámetros codificados. Para más información, consulte la ABI de contratos de Ethereum en la doumentación de Solidity(opens in a new tab).
  1. QUANTITY|TAG: número de bloque entero o la cadena "latest", "earliest" o "pending" , consulte el parámetro de bloque predeterminado

Retornos

DATA: el valor de un contrato ejecutado.

Ejemplo

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

eth_estimateGas

Genera y retorna el valor estimado de gas necesario para permitir que se complete la transacción. La transacción no se añadirá a la cadena de bloques. Puede ser que esa estimación sea significativamente más alta que la cantidad actual de gas usada por la transacción por una variedad de razones, incluidos los mecanismos de la EVM y el desempeño del nodo.

Parámetros

Consulte los parámetros eth_call, excepto que todas las propiedades sean opcionales. Si no se especifica ningún límite de gas, geth usa el límite de gas del bloque pendiente como límite superior. Como resultado, la estimación devuelta podría no ser suficiente para ejecutar la llamada/transacción cuando la cantidad de gas sea mayor que el límite de gas del bloque pendiente.

Retornos

QUANTITY: monto de gas usado.

Ejemplo

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

eth_getBlockByHash

Retorna información acerca de un bloque por hash.

Parámetros

  1. DATA, 32 Bytes - Hash de un bloque.
  2. Boolean: si es true muestra los objetos de transacción completos, si es false solo los hashes de las transacciones.
1params: [
2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
3 false,
4]
Copiar

Retornos

Object: Un objeto de bloque, o null cuando no se encuentra ningún bloque:

  • number: QUANTITY - número de bloque. null cuando el bloque está pendiente.
  • hash: DATA, 32 Bytes - hash del bloque. null cuando el bloque está pendiente.
  • parentHash: DATA, 32 Bytes - hash del bloque principal.
  • nonce: DATA, 8 Bytes - hash de la prueba de trabajo generada. null cuando el bloque está pendiente.
  • sha3Uncles: DATA, 32 Bytes - SHA3 de los datos de tíos en el bloque.
  • logsBloom: DATA, 256 Bytes - el filtro bloom para los registros del bloque. null cuando el bloque está pendiente.
  • transactionsRoot: DATA, 32 Bytes - la raíz del trie de transacciones del bloque.
  • stateRoot: DATA, 32 Bytes - la raíz del trie de estado final del bloque.
  • receiptsRoot: DATA, 32 Bytes - la raíz del trie de recibos del bloque.
  • miner: DATA, 20 Bytes - la dirección del beneficiario a quien se entregaron las recompensas de minado.
  • difficulty: QUANTITY - número entero de la dificultad de este bloque.
  • totalDifficulty: QUANTITY - número entero de la dificultad total de la cadena hasta este bloque.
  • extraData: DATA - el campo de "datos extra" de este bloque.
  • size: QUANTITY - número entero del tamaño de este bloque en bytes.
  • gasLimit: QUANTITY - el máximo gas permitido en este bloque.
  • ggasUsed: QUANTITY - el total de gas usado por todas las transacciones en este bloque.
  • timestamp: QUANTITY - la marca de tiempo unix del momento en que se recopiló el bloque.
  • transactions: Array - Matriz de los objetos de transacción, o hashes de transacción de 32 bytes dependiendo del último parámetro dado.
  • uncles: Array - Matriz de hashes tíos.

Ejemplo

1// Solicitud
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
3// Resultado
4{
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}
Mostrar todo
Copiar

eth_getBlockByNumber

Retorna información acerca de un bloque por número de bloque.

Parámetros

  1. QUANTITY|TAG: número entero de un número de bloque, o la cadena "earliest", "latest" o "pending", como en el parámetro de bloque predeterminado.
  2. Boolean: si es true muestra los objetos de transacción completos, si es false solo los hashes de las transacciones.
1params: [
2 "0x1b4", // 436
3 true,
4]
Copiar

RetornaVeaeth_getBlockByHash

Ejemplo

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

Resultado ver eth_getBlockByHash

eth_getTransactionByHash

Muestra la información acerca de una transacción requerida por el hash de transacción.

Parámetros

  1. DATA, 32 Bytes - hash de una transacción
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]
Copiar

Retornos

Object: un objeto de transacción, o null cuando no se encontró la transacción:

  • blockHash: DATA, 32 Bytes - hash del bloque donde estaba esta transacción. null cuando está pendiente.
  • blockNumber: QUANTITY - número de bloque donde estaba está transacción. null cuando está pendiente.
  • from: DATA, 20 Bytes - dirección del emisor.
  • gas: QUANTITY - gas proporcionado por el emisor.
  • gasPrice: QUANTITY - precio del gas proporcionado por el emisor en Wei.
  • hash: DATA, 32 Bytes - hash de la transacción.
  • input: DATA - los datos que se mandan junto con la transacción.
  • nonce: QUANTITY - el número de transacciones hechas por el emisor antes de esta.
  • to: DATA, 20 Bytes - dirección del receptor. null cuando se trata de una operación de creación de contrato.
  • transactionIndex: QUANTITY - número entero de la posición del índice de transacciones en el bloque. null cuando está pendiente.
  • value: QUANTITY - valor transferido en Wei.
  • v: QUANTITY - ID de recuperación de ECDSA
  • r: QUANTITY - firma r de ECDSA
  • s: CANTIDAD - firma s de ECDSA

Ejemplo

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

eth_getTransactionByBlockHashAndIndex

Muestra información acerca de una transacción por hash de bloque y la posición del índice de la transacción.

Parámetros

  1. DATA, 32 Bytes - hash de un bloque.
  2. QUANTITY: número entero de la posición del índice de la transacción.
1params: [
2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
3 "0x0", // 0
4]
Copiar

Muestra Vea eth_getTransactionByHash

Ejemplo

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

Resultado ver eth_getTransactionByHash

eth_getTransactionByBlockNumberAndIndex

Muestra información acerca de una transacción por número de bloque y la posición del índice de transacción.

Parámetros

  1. QUANTITY|TAG: un número de bloque o la cadena "earliest", "latest" o "pending" , como en el parámetro de bloque predeterminado.
  2. QUANTITY: la posición del índice de la transacción.
1params: [
2 "0x29c", // 668
3 "0x0", // 0
4]
Copiar

Muestra Vea eth_getTransactionByHash

Ejemplo

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

Resultado ver eth_getTransactionByHash

eth_getTransactionReceipt

Muestra el recibo de una transacción por hash de transacción.

Tenga presente que el recibo no está disponible para transacciones pendientes.

Parámetros

  1. DATA, 32 Bytes - hash de una transacción
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]
Copiar

Muestra Object: objeto de recibo de transacción o null cuando no se encontró un recibo:

  • transactionHash: DATA, 32 Bytes - hash de la transacción.
  • transactionIndex: QUANTITY - número entero de la posición del índice de transacciones en el bloque.
  • blockHash: DATA, 32 Bytes - hash del bloque donde estaba esta transacción.
  • blockNumber: QUANTITY - número de bloque donde estaba está transacción.
  • from: DATA, 20 Bytes - dirección del emisor.
  • to: DATA, 20 Bytes - dirección del receptor. null cuando se trata de una transacción de creación de contrato.
  • acumulativeGasUsed : QUANTITY - La cantidad total de gas utilizado cuando esta transacción se ejecutó en el bloque.
  • PeffectiveGasPrice : QUANTITY - La suma de la tarifa base y propina pagada por unidad de gas.
  • gasUsed: QUANTITY - La cantidad de gas usado solo por esta transacción específica.
  • contractAddress: DATA, 20 Bytes - La dirección del contrato creada, si la transacción fue una creación de contrato; de lo contrario null.
  • logs: Array - Array de los objetos del registro que generó esta transacción.
  • logsBloom: DATA, 256 Bytes - filtro Bloom para clientes ligeros para recuperar rápidamente los registros relacionados.
  • type: QUANTITY - número entero del tipo de transacción, 0x0 para transacciones heredadas, 0x1 para tipos de lista de acceso, 0x2 para las tasas dinámicas.

También muestra una de las siguientes :

  • root : DATA 32 bytes de ruta de estado postransacción (prebizantino)
  • status: QUANTITY 1 (éxito) o 0 (falla)

Ejemplo

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'
3// Result
4{
5 "jsonrpc": "2.0",
6 "id": 1,
7 "result": {
8 "blockHash":
9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",
10 "blockNumber": "0xeff35f",
11 "contractAddress": null, // string of the address if it was created
12 "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 filter
20 "status": "0x1",
21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
22 "transactionHash":
23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",
24 "transactionIndex": "0x66",
25 "type": "0x2"
26 }
27}
Mostrar todo
Copiar

eth_getUncleByBlockHashAndIndex

Muestra información sobre un tío de un bloque por hash y posición del índice del tío.

Parámetros

  1. DATA, 32 Bytes - El hash de un bloque.
  2. QUANTITY: Posición de índice del tío.
1params: [
2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",
3 "0x0", // 0
4]
Copiar

RetornaVeaeth_getBlockByHash

Ejemplo

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

Resultado ver eth_getBlockByHash

Nota: Un tío no contiene transacciones individuales.

eth_getUncleByBlockNumberAndIndex

Muestra información sobre un tío de un bloque por número y posición de índice del tío.

Parámetros

  1. QUANTITY|TAG: un número de bloque o la cadena "earliest", "latest" o "pending" , como en el parámetro de bloque predeterminado.
  2. QUANTITY: Posición de índice del tío.
1params: [
2 "0x29c", // 668
3 "0x0", // 0
4]
Copiar

RetornaVeaeth_getBlockByHash

Nota: Un tío no contiene transacciones individuales.

Ejemplo

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

Resultado ver eth_getBlockByHash

eth_newFilter

Crea un objeto de filtro, basado en las opciones de filtrado, que notifica cuando haya un cambio en el estado (registros). Para revisar si hubo un cambio en el estado, compruebe eth_getFilterChanges.

Nota sobre la especificación de filtros de temas: Los Los temas dependen del orden. Una transacción con un registro con los temas [A, B] coincidirá con los siguientes filtros de temas:

  • [] "cualquiera"
  • [A] "A el la primera posición (¿y algo después?)"
  • [null, B] "cualquier cosa en primera posición Y B en segunda posición (¿y algo después?)"
  • [A, B] "A en primera posición Y B en segunda posición (¿y algo después?)"
  • [[A, B], [A, B]] "(A ó B) en primera posición Y (A ó B) en segunda posición (¿y algo después?)"
  • Parámetros
  1. Object - Las opciones del filtro:
  • fromBlock: QUANTITY|TAG - (opcional, por defecto: "latest"</0>) número entero de bloque, o "latest" para el último bloque minado, o "pending", "earliest" para las transacciones no minadas aún.
  • toBlock: QUANTITY|TAG - (opcional, por defecto: "latest") número entero de bloque, o "latest" para el último bloque minado o "pending", "earliest" para las transacciones que no se han minado aún.
  • address: DATA|Array, 20 Bytes - (opcional) Dirección de contrato o una lista de las direcciones desde donde deben originarse los registros.
  • topics: Array de DATA, - (opcional) Array de temas de DATA de 32 bytes. Los temas dependen del orden. Cada tema puede también ser un array de DATA con opciones "or" (o).
1params: [
2 {
3 fromBlock: "0x1",
4 toBlock: "0x2",
5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",
6 topics: [
7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
8 null,
9 [
10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",
12 ],
13 ],
14 },
15]
Mostrar todo
Copiar

Muestra QUANTITY: ID de filtro.

Ejemplo

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

eth_newBlockFilter

Crea un nuevo filtro en el nodo que notifica cuando llega un nuevo bloque. Para revisar si hubo un cambio en el estado, compruebe eth_getFilterChanges.

Parameters Ninguno

Muestra QUANTITY: ID de filtro.

Ejemplo

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

eth_newPendingTransactionFilter

Crea un filtro en el nodo para notificar cuando llegan nuevas transacciones pendientes. Para revisar si hubo un cambio en el estado, compruebe eth_getFilterChanges.

Parameters Ninguno

Muestra QUANTITY: ID de filtro.

Ejemplo

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

eth_uninstallFilter

Desinstala un filtro con un ID dado. Debe invocarse siempre cuando ya no se necesite observación. Los filtros adicionales vencen cuando no tienen solicitud de eth_getFilterChanges por un período de tiempo.

Parámetros

  1. QUANTITY: ID de filtro.
1params: [
2 "0xb", // 11
3]
Copiar

Muestra Boolean - true si el filtro fue satisfactoriamente desinstalado; caso contrariofalse.

Ejemplo

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

eth_getFilterChanges

Método de sondeo para un filtro, que retorna un array de registros que ocurrieron desde el último sondeo.

Parámetros

  1. QUANTITY: ID de filtro.
1params: [
2 "0x16", // 22
3]
Copiar

Muestra Array: Array de objetos de registro o un array vacío si no cambió nada desde el último sondeo.

  • Para los filtros creados con eth_newBlockFilter, los resultados son hashes de bloque (DATA, 32 bytes), p. ej., ["0x3454645634534..."].
  • Para filtros creados con eth_newPendingTransactionFilter los resultados son hashes de transacciones(DATA, 32 Bytes), por ejemplo, ["0x6345343454645..."].
  • Para filtros creados con eth_newFilter los registros son objetos con los siguientes parametros:
    • removed: TAG - true cuando el registro fue removido debido a una reorganización de la cadena. false si el registro es válido.
    • logIndex: QUANTITY - número entero de la posición del índice del registro en el bloque. null cuando el registro está pendiente.
    • transactionIndex: QUANTITY - número entero de posición de índice de transacciones desde donde se creó el registro. null cuando el registro está pendiente.
    • transactionHash: DATA, 32 Bytes - hash de transacciones desde donde se creó el registro. null cuando el registro está pendiente.
    • blockHash: DATA, 32 Bytes - hash del bloque donde estaba este registro. null cuando está pendiente. null cuando el registro está pendiente.
    • blockNumber: QUANTITY - número de bloque donde estaba este registro. null cuando está pendiente. null cuando el registro está pendiente.
    • address: DATA, 20 Bytes - dirección donde se originó este regustro.
    • data: DATA - Contiene cero o más de 32 Bytes argumentos no indexados del registro.
    • topics: Array de DATA - Array de 0 a 4 32 Bytes DATA de argumentos de registros indexados. (En Solidity: El primer tema es el hash de la firma del evento (ej.: Deposit(address,bytes32,uint256)), excepto que declare el evento con el especificador anonymous)
  • Ejemplo
1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc":"2.0",
7 "result": [{
8 "logIndex": "0x1", // 1
9 "blockNumber":"0x1b4", // 436
10 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
12 "transactionIndex": "0x0", // 0
13 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
16 },{
17 ...
18 }]
19}
Mostrar todo
Copiar

eth_getFilterLogs

Devuelve una matriz de todos los registros que coinciden con el filtro con el ID dado.

Parámetros

  1. QUANTITY: ID de filtro.
1params: [
2 "0x16", // 22
3]
Copiar

Muestra Ver eth_getFilterChanges

Ejemplo

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

Resultado ver eth_getFilterChanges

eth_getLogs

Devuelve una matriz de todos los registros que coinciden con un objeto de filtro dado.

Parámetros

  1. Object - Las opciones del filtro:
  • fromBlock: QUANTITY|TAG - (opcional, por defecto: "latest"</0>) número entero de bloque, o "latest" para el último bloque minado, o "pending", "earliest" para las transacciones no minadas aún.
  • toBlock: QUANTITY|TAG - (opcional, por defecto: "latest") número entero de bloque, o "latest" para el último bloque minado o "pending", "earliest" para las transacciones que no se han minado aún.
  • address: DATA|Array, 20 Bytes - (opcional) Dirección de contrato o una lista de las direcciones desde donde deben originarse los registros.
  • topics: Array de DATA, - (opcional) Array de temas de DATA de 32 bytes. Los temas dependen del orden. Cada tema puede también ser un array de DATA con opciones "or" (o).
  • blockhash: DATA, 32 Bytes - (opcional, future) Con la adición de EIP-234, blockHash será una nueva opción de filtro que restringe los registros retornados al bloque único con el hash de 32 bytes blockHash. Usar blockHash es equivalente a fromBlock = toBlock = el número de bloque con hash blockHash. Si blockHash está presente en los criterios de filtro, no se permiten ni fromBlock ni toBlock.
1params: [
2 {
3 topics: [
4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
5 ],
6 },
7]
Copiar

Muestra Ver eth_getFilterChanges

Ejemplo

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

Resultado ver eth_getFilterChanges

Ejemplo de uso

Implementar un contrato usando JSON_RPC

Está sección incluye una demostración de cómo implementar un contrato usando solo la interfaz RPC. Existen rutas alternativas para implementar contratos donde esta complejidad no está en juego: por ejemplo, usar biblioteas creadas sobre la interfaz RPC como web3.js(opens in a new tab) y web3.py(opens in a new tab). Estas abstracciones son generalmente fáciles de entender y menos propensas a errores, pero sigue siendo de ayuda entender qué es lo que sucede "debajo del capó".

El siguiente es un contrato inteligente sencillo llamado Multiply7 que se implementará usando la interfaz JSON-RPC en un nodo Ethereum. Este tutorial asume que el lector actualmente corre un nodo Geth. Más información sobre nodos y clientes disponible aquí. Consulte la documentación de cada cliente individual para ver cómo iniciar el JSON-RCP HTTP para clientes no Geth. La mayoría de clientes por defecto sirven en 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}

Lo primero que debe hacer es asegurarse de que la interfaz HTTP RPC esté habilitada. Esto significa que proporcionamos a Geth el indicador --http al inicio. En este ejemplo usamos el nodo Geth en una cadena de desarrollo privada. Con este enfoque, no necesitamos ether en la red real.

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

Esto iniciará la interfaz HTTP RPC en http://localhost:8545.

Podemos verificar que la interfaz se está ejecutando recuperando la dirección y el saldo de Coinbase usando curl(opens in a new tab). Tenga en cuenta que los datos usados en este ejemplo pueden ser diferentes en su nodo local. Si desea probar estos comandos, reemplace los parámetros de solicitud en la segunda solicitud curl con el resultado devuelto por la primera.

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

Debido a que los números están codificados en formato hexadecimal, el saldo se muestra en wei como una cadena hexadecimal. Si queremos tener el saldo en ether como número, podemos usar web3 desde la consola Geth.

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

Ahora que hay algo de ether en nuestra cadena de desarrollo privado, podemos implementar el contrato. El primer paso es compilar el contrato Multiply7 en un código de bytes que se pueda enviar a la EVM. Para instalar solc, el compilador de Solidity, siga la documentación de Solidity(opens in a new tab). (Es posible que desee utilizar una versión anterior de solc para que coincida con la versión del compilador utilizada para nuestro ejemplo(opens in a new tab).)

El siguiente paso es compilar el contrato Multiply7 en código de bytes que se pueda enviar a la 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

Ahora que tenemos el código compilado, necesitamos determinar cuánto gas cuesta implementarlo. La interfaz RPC tiene un método eth_estimateGas que nos dará una estimación.

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

Y finalmente implementamos el 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"}

La transacción es aceptada por el nodo y se devuelve un hash de la transacción. Esta hash puede usarse para rastrear la transacción. El siguiente paso es determinar la dirección donde se implementa el contrato. Cada transacción ejecutada debe crear un recibo. Este recibo contiene información sobre la transacción como en qué bloque fue incluida la transacción y cuánto gas usó la EVM. Si una transacción crea un contrato, también contendrá la dirección del contrato. Podemos recuperar el recibo con el 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"}}

Nuestro contrato fue creado en 0x4d03d617d700cf81935d7f797f4e2ae719648262. Un resultado nulo en lugar de un recibo significa que la transacción no ha sido incluida en un bloque todavía. Espere un momento y verifique si su minero se está ejecutando y vuelva a intentarlo.

Interactuar con contratos inteligentes

En este ejemplo enviaremos una transacción utilizando eth_sendTransaction al método multiply del contrato.

eth_sendTransaction requiere varios argumentos, específicamente from, to y data. From es la dirección pública de nuestra cuenta y to es la dirección del contrato. El argumento data contiene una carga útil que define a qué método se debe llamar y con qué argumentos. Aquí es donde entra en juego la ABI (interfaz binaria de la aplicación)(opens in a new tab). La ABI es un archivo JSON que define cómo definir y codificar datos para la EVM.

Los bytes de la carga útil definen qué método del contrato se invoca. Estos son los primeros 4 bytes del hash de Keccak sobre el nombre de la función y sus tipos de argumentos, codificados en formato hexadecimal. La función de multiplicación acepta un uint que es un alias para uint256. Esto nos deja con:

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

El siguiente paso es codificar los argumentos. Solo hay un uint256, digamos, el valor 6. La ABI tiene una sección que especifica cómo codificar tipos uint256.

int<M>: enc(X) es la codificación en complemento a 2 big-endian de X, rellenada en el lado de orden superior (izquierda) con 0xff para X negativo y con cero > bytes para X positivo tal que la longitud sea un múltiplo de 32 bytes.

Esto se codifica a 000000000000000000000000000000000000000000000000000000000000000006.

Combinando el selector de funciones y el argumento codificado, nuestros datos serán 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.

Esto ahora puede enviarse 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"}

Desde que la transacción fue enviada, se devolvió un hash de transacción. Recuperar el recibo da:

1{
2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
3 blockNumber: 268,
4 contractAddress: null,
5 cumulativeGasUsed: 22631,
6 gasUsed: 22631,
7 logs: [{
8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",
9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
10 blockNumber: 268,
11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",
12 logIndex: 0,
13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],
14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
15 transactionIndex: 0
16 }],
17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
18 transactionIndex: 0
19}
Mostrar todo

El recibo contiene un registro. Este registro fue generado por la EVM en la ejecución de la transacción e incluido en el recibo. La función multiply muestra que el evento Print fue elevado con la entrada multiplicada por 7 veces. Dado que el argumento del evento Print fue un uint256, podemos decodificarlo de acuerdo con las reglas de ABI, lo que nos dejará con el decimal eperado 42. Además de los datos, vale la pena señalar que los temas se pueden usar para determinar qué evento creó el registro:

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

Esta fue solo una breve introducción a algunas de las tareas más comunes, demostrando el uso directo de JSON-RPC.

¿Le ha resultado útil este artículo?