API JSON-RPC
Última edición: @EmelyGarcia(opens in a new tab), 6 de agosto 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 enteroString "earliest"
: para el bloque inicialString "latest"
: para el último bloque minadoString "safe"
: para el último bloque de encabezado seguroString "finalized"
: para el último bloque finalizadoString "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.
- 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 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// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}Copiar
web3_sha3
Muestra el Keccak-256 (no el SHA3-256 estandarizado) de los datos dados.
Parámetros
DATA
: los datos por convertir en un hash SHA3
1params: ["0x68656c6c6f20776f726c64"]Copiar
Devuelve
DATA
: El resultado SHA3 de la cadena dada.
Ejemplo
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
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 Ethereum5
: Red de prueba Goerli11155111
: Red de prueba Sepolia
Ejemplo
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
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// 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
Muestra el número de personas conectadas al cliente.
Parámetros
Ninguno
Devuelve
QUANTITY
: número entero de pares conectados.
Ejemplo
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
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// 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
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_blockNumberhighestBlock
: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 todoCopiar
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 todoCopiar
Consulte la documentación de su cliente en específico para más información.
Ejemplo
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}Mostrar todoCopiar
eth_coinbase
Muestra la dirección coinbase del cliente.
Parámetros
Ninguno
Retornos
DATA
, 20 bytes - la dirección actual de Coinbase.
Ejemplo
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
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// 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
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// 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 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// 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
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// 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 una lista de direcciones de propiedad del cliente.
Parámetros
Ninguno
Retornos
Array of DATA
, 20 Bytes - direcciones de propiedad del cliente.
Ejemplo
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 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// 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 el saldo de la cuenta de la dirección dada.
Parámetros
DATA
, 20 Bytes - dirección en la que se verifica el saldo.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// 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 el valor de una posición de almacenamiento en una dirección dada.
Parámetros
DATA
, 20 Bytes - dirección de almacenamiento.QUANTITY
: número entero de la posición en el almacenamiento.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:85452{"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"2undefined3> 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:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}Copiar
eth_getTransactionCount
Muestra el número de transacciones enviadas de una dirección.
Parámetros
DATA
, 20 Bytes - dirección.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 block4]Copiar
Retornos
QUANTITY
: número entero de las transacciones enviadas desde esta dirección.
Ejemplo
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
Muestra el número de transacciones en un bloque de un bloque que coinicide con el hash del bloque dado.
Parámetros
DATA
, 32 Bytes - hash de un bloque
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]Copiar
Retornos
QUANTITY
: número entero de transacciones de este bloque.
Ejemplo
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
Muestra el número de transacciones de un bloque que coincide con el número de bloque dado.
Parámetros
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", // 2323]Copiar
Retornos
QUANTITY
: número entero de transacciones de este bloque.
Ejemplo
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
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
DATA
, 32 Bytes - hash de un bloque
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]Copiar
Retornos
QUANTITY
: número entero de «tíos» en este bloque.
Ejemplo
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
Muestra el número de tíos de un bloque que coincide con el número del bloque dado.
Parámetros
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", // 2323]Copiar
Retornos
QUANTITY
: número entero de «tíos» en este bloque.
Ejemplo
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
Muestra el código en una dirección dada.
Parámetros
DATA
, 20 Bytes - direcciónQUANTITY|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", // 24]Copiar
Retornos
DATA
: el código de una dirección dada.
Ejemplo
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
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
DATA
, 20 Bytes - direcciónDATA
, N Bytes - mensaje a firmar
Retornos
DATA
: Firma
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Resultado4{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
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// Solicitud2curl -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// Resultado4{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
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", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Mostrar todoCopiar
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// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Resultado4{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
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// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Resultado4{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
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 pagadovalue
:QUANTITY
- (opcional) Entero del valor enviado con la transaccióninput
: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).
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// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Resultado4{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// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Resultado4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}Copiar
eth_getBlockByHash
Retorna información acerca de un bloque por hash.
Parámetros
DATA
, 32 Bytes - Hash de un bloque.Boolean
: si estrue
muestra los objetos de transacción completos, si esfalse
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// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Resultado4{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 todoCopiar
eth_getBlockByNumber
Retorna información acerca de un bloque por número de bloque.
Parámetros
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.Boolean
: si estrue
muestra los objetos de transacción completos, si esfalse
solo los hashes de las transacciones.
1params: [2 "0x1b4", // 4363 true,4]Copiar
RetornaVeaeth_getBlockByHash
Ejemplo
1// Request2curl -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
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 ECDSAr
:QUANTITY
- firma r de ECDSAs
:CANTIDAD
- firma s de ECDSA
Ejemplo
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}Mostrar todoCopiar
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
DATA
, 32 Bytes - hash de un bloque.QUANTITY
: número entero de la posición del índice de la transacción.
1params: [2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",3 "0x0", // 04]Copiar
Muestra Vea eth_getTransactionByHash
Ejemplo
1// Request2curl -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
QUANTITY|TAG
: un número de bloque o la cadena"earliest"
,"latest"
o"pending"
, como en el parámetro de bloque predeterminado.QUANTITY
: la posición del índice de la transacción.
1params: [2 "0x29c", // 6683 "0x0", // 04]Copiar
Muestra Vea eth_getTransactionByHash
Ejemplo
1// Request2curl -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
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 contrarionull
.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) o0
(falla)
Ejemplo
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}Mostrar todoCopiar
eth_getUncleByBlockHashAndIndex
Muestra información sobre un tío de un bloque por hash y posición del índice del tío.
Parámetros
DATA
, 32 Bytes - El hash de un bloque.QUANTITY
: Posición de índice del tío.
1params: [2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",3 "0x0", // 04]Copiar
RetornaVeaeth_getBlockByHash
Ejemplo
1// Request2curl -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
QUANTITY|TAG
: un número de bloque o la cadena"earliest"
,"latest"
o"pending"
, como en el parámetro de bloque predeterminado.QUANTITY
: Posición de índice del tío.
1params: [2 "0x29c", // 6683 "0x0", // 04]Copiar
RetornaVeaeth_getBlockByHash
Nota: Un tío no contiene transacciones individuales.
Ejemplo
1// Request2curl -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
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 deDATA
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 todoCopiar
Muestra QUANTITY
: ID de filtro.
Ejemplo
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
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// 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
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// 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 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
QUANTITY
: ID de filtro.
1params: [2 "0xb", // 113]Copiar
Muestra Boolean
- true
si el filtro fue satisfactoriamente desinstalado; caso contrariofalse
.
Ejemplo
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 sondeo para un filtro, que retorna un array de registros que ocurrieron desde el último sondeo.
Parámetros
QUANTITY
: ID de filtro.
1params: [2 "0x16", // 223]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 BytesDATA
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 especificadoranonymous
)
- Ejemplo
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}Mostrar todoCopiar
eth_getFilterLogs
Devuelve una matriz de todos los registros que coinciden con el filtro con el ID dado.
Parámetros
QUANTITY
: ID de filtro.
1params: [2 "0x16", // 223]Copiar
Muestra Ver eth_getFilterChanges
Ejemplo
1// Request2curl -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
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 deDATA
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 bytesblockHash
. UsarblockHash
es equivalente afromBlock
=toBlock
= el número de bloque con hashblockHash
. SiblockHash
está presente en los criterios de filtro, no se permiten nifromBlock
nitoBlock
.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Copiar
Muestra Ver eth_getFilterChanges
Ejemplo
1// Request2curl -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: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}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.
Temas relacionados
- Especificación JSON_RPC(opens in a new tab)
- Nodos y clientes
- API de JavaScript
- API de back-end
- Clientes de ejecución