API JSON-RPC
Última actualización de la página: 27 de octubre de 2025
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-RPCopens in a new tab, por lo que existe un conjunto uniforme de métodos en los que las aplicaciones pueden confiar, independientemente de la implementación específica del nodo o del cliente.
JSON-RPCopens in a new tab es un protocolo de llamada a procedimiento remoto (RPC) ligero 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 la documentación de cliente individual para obtener más detalles relacionados con lenguajes de programación específicos. Recomendamos revisar la documentación de cada cliente para obtener la información más actualizada del soporte de API.
Librerías 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 de API de backend que proporcionan envoltorios 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 cliente 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 Beacon APIopens 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. Esto se llama la «API del motor» y las especificaciones están disponibles en GitHubopens in a new tab.
Especificación del cliente de ejecución
Lea la especificación completa de la API JSON-RPC en GitHubopens in a new tab. Esta API está documentada en la página web de la API de ejecuciónopens in a new tab e incluye un Inspector para probar todos los métodos disponibles.
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").
Estos son 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, "0B0")
- 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
Los siguientes métodos tienen un parámetro de bloque:
Cuando se realizan solicitudes que consultan el estado de Ethereum, el parámetro de bloque proporcionado determina la altura del bloque.
Las siguientes opciones son posibles para el parámetro de bloque:
HEX String: un número de bloque enteroString "earliest"para el bloque más antiguo/génesisString "latest": para el último bloque propuestoString "safe": para el último bloque principal seguroString "finalized": para el último bloque finalizadoString "pending": para el estado/transacciones pendientes
Ejemplos
En esta página ofrecemos ejemplos sobre cómo usar los puntos de conexión individuales de la API de JSON_RPC usando la herramienta de línea de comandos, curlopens in a new tab. Estos ejemplos de puntos de conexión individuales se encuentran a continuación en la sección 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 utilizando un nodo Geth, la API JSON_RPC y curl.
Ejemplos de Curl
A continuación se proporcionan ejemplos del uso de la API JSON_RPC realizando solicitudes curlopens in a new tab a un nodo de 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 la cabecera colocando -H "Content-Type: application/json" al inicio de la llamada. Los ejemplos tampoco incluyen la combinación URL/IP y puerto, que debe ser el último argumento que se le da a curl (p. 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:8545Gossip, 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
JSON-RPC API Playground
Puede usar la herramienta de pruebaopens in a new tab para descubrir y probar los métodos de la API. También le muestra qué métodos y redes son compatibles con varios proveedores de nodos.
Métodos de la API 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}web3_sha3
Devuelve el Keccak-256 (no el SHA3-256 estandarizado) de los datos proporcionados.
Parámetros
DATA: los datos que se van a convertir en un hash SHA3
1params: ["0x68656c6c6f20776f726c64"]Devuelve
DATA: el resultado SHA3 de la cadena dada.
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Resultado4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}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.orgopens in a new tab. Algunos comunes son:
1: red principal de Ethereum11155111: red de prueba de Sepolia560048: red de prueba de Hoodi
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Resultado4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
Devuelve true si el cliente está escuchando activamente las conexiones de red.
Parámetros
Ninguno
Devuelve
Booleano: true cuando está escuchando; de lo contrario, false.
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Resultado4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
Muestra el número de personas conectadas al cliente.
Parámetros
Ninguno
Devuelve
QUANTITY: entero del número de pares conectados.
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Resultado4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}eth_protocolVersion
Muestra la versión actual del protocolo Ethereum. Tenga en cuenta que este método no está disponible en Gethopens in a new tab.
Parámetros
Ninguno
Devuelve
String: la versión actual del protocolo de Ethereum
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Resultado4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
Devuelve un objeto con datos sobre el estado de la sincronización o false.
Parámetros
Ninguno
Devuelve
El retorno de información precisa varía entre las implementaciones del cliente. Todos los clientes devuelven False cuando el nodo no se está sincronizando, y todos los clientes devuelven 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 (solo se restablecerá después de que la sincronización llegue a su cabecera)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 todoCuando 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 todoConsulte 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 todoeth_coinbase
Muestra la dirección coinbase del cliente.
Probar el punto de conexión en el campo de pruebasopens in a new tabNota: Este método ha quedado obsoleto a partir de la v1.14.0 y ya no es compatible. Cualquier intento de implementar este método resultara en un error de «método no admitido».
Parámetros
Ninguno
Devuelve
DATA, 20 bytes: la dirección de coinbase actual.
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}eth_chainId
Muestra el ID de cadena utilizado para firmar transacciones protegidas contra repetición.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
Ninguno
Devuelve
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}eth_mining
Devuelve true si el cliente está minando activamente nuevos bloques. Esto solo puede devolver true para las redes de prueba de trabajo y puede que no esté disponible en algunos clientes desde La Fusión.
Parámetros
Ninguno
Devuelve
Booleano: devuelve true si el cliente está minando; de lo contrario, false.
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}eth_hashrate
Retorna el número de hashes por segundo con los que el nodo está minando. Esto solo puede devolver true para las redes de prueba de trabajo y puede que no esté disponible en algunos clientes desde La Fusión.
Parámetros
Ninguno
Devuelve
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}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.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
Ninguno
Devuelve
QUANTITY: entero del precio del gas actual 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}eth_accounts
Retorna una lista de direcciones de propiedad del cliente.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
Ninguno
Devuelve
Array de DATA, 20 bytes: direcciones 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}eth_blockNumber
Devuelve el número del bloque más reciente.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
Ninguno
Devuelve
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}eth_getBalance
Devuelve el saldo de la cuenta en una dirección determinada.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 20 bytes: dirección en la que se comprueba el saldo.QUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe", o"finalized"; consulte el parámetro de bloque
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Devuelve
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}eth_getStorageAt
Retorna el valor de una posición de almacenamiento en una dirección dada.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 20 bytes: dirección del almacenamiento.QUANTITY: número entero de la posición en el almacenamiento.QUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe","finalized"; consulte el parámetro de bloque
Devuelve
DATA: el valor en esta posición de almacenamiento.
Ejemplo
Calcular la posición correcta depende del almacenamiento que se vaya a recuperar. Considere el siguiente contrato desplegado en 0x295a70b2de5e3953354a6a8344e616ed314d7251 por la dirección 0x391694e7e0b0cce554cb130d723a9d27458f9298.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {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"}Recuperar un elemento del mapa es más difícil. La posición de un elemento de un mapa se calcula con:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))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)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"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"}eth_getTransactionCount
Devuelve el número de transacciones enviadas desde una dirección.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 20 bytes: dirección.QUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe"o"finalized"; consulte el parámetro de bloque
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block4]Devuelve
QUANTITY: entero del número de 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}eth_getBlockTransactionCountByHash
Muestra el número de transacciones en un bloque de un bloque que coinicide con el hash del bloque dado.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: hash de un bloque
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Devuelve
QUANTITY: entero del número de transacciones en este bloque.
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}eth_getBlockTransactionCountByNumber
Muestra el número de transacciones de un bloque que coincide con el número de bloque dado.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
QUANTITY|TAG: entero de un número de bloque, o la cadena"earliest","latest","pending","safe"o"finalized", como en el parámetro de bloque.
1params: [2 "0x13738ca", // 203962343]Devuelve
QUANTITY: entero del número de transacciones en este bloque.
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 1398}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.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: hash de un bloque
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Devuelve
QUANTITY: número entero del número de tíos en este bloque.
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}eth_getUncleCountByBlockNumber
Muestra el número de tíos de un bloque que coincide con el número del bloque dado.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
QUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe"o"finalized"; consulte el parámetro de bloque
1params: [2 "0xe8", // 2323]Devuelve
QUANTITY: número entero del número 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": "0x0" // 08}eth_getCode
Muestra el código en una dirección dada.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 20 bytes: direcciónQUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe"o"finalized"; consulte el parámetro de bloque
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 61397074]Devuelve
DATA: el código de la dirección dada.
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
El método de firma calcula una firma específica 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 evita un uso indebido en el que una dapp maliciosa puede firmar datos arbitrarios (p. ej., una transacción) y usar la firma para suplantar a 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
Devuelve
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}eth_signTransaction
Firma una transacción que se puede enviar a la red más tarde con eth_sendRawTransaction.
Parámetros
Objeto: el objeto de la transacción
tipo:from:DATA, 20 bytes: la dirección desde la que se envía la transacción.to:DATA, 20 bytes: (opcional al crear un nuevo contrato) la dirección a la que se dirige la transacción.gas:QUANTITY: (opcional, predeterminado: 90000) número entero del gas proporcionado para la ejecución de la transacción. Devuelve el gas no utilizado.gasPrice:QUANTITY: (opcional, predeterminado: por determinar) número entero del gasPrice utilizado para cada gas pagado, en Wei.value:QUANTITY: (opcional) número entero del valor enviado con esta transacción, en Wei.data:DATA: el código compilado de un contrato O el hash de la firma del método invocado y los parámetros codificados.nonce:QUANTITY: (opcional) número entero de un nonce. Esto permitirá sobrescribir sus propias transacciones pendientes que usen el mismo nonce.
Devuelve
DATA, el objeto de la transacción codificado en RLP firmado por la cuenta especificada.
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}eth_sendTransaction
Crea una nueva transacción de llamada de mensaje o la creación de un contrato, si el campo de datos contiene código, y lo firma usando la cuenta especificada en from.
Parámetros
Objeto: el objeto de la transacción
from:DATA, 20 bytes: la dirección desde la que se envía la transacción.to:DATA, 20 bytes: (opcional al crear un nuevo contrato) la dirección a la que se dirige la transacción.gas:QUANTITY: (opcional, predeterminado: 90000) número entero del gas proporcionado para la ejecución de la transacción. Devuelve el gas no utilizado.gasPrice:QUANTITY: (opcional, predeterminado: por determinar) número entero del gasPrice utilizado por cada gas pagado.value:QUANTITY: (opcional) entero del valor enviado con esta transacción.input:DATA: el código compilado de un contrato O el hash de la firma del método invocado y los parámetros codificados.nonce:QUANTITY: (opcional) número entero de un 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 todoDevuelve
DATA, 32 bytes: el hash de la transacción, o el hash cero si la transacción no está disponible todavía.
Use eth_getTransactionReceipt para obtener la dirección del contrato, después de que la transacción fuera propuesta en un bloque, cuando usted 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}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 firmada.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]Devuelve
DATA, 32 bytes: el hash de la transacción, o el hash cero si la transacción no está disponible todavía.
Use eth_getTransactionReceipt para obtener la dirección del contrato, después de que la transacción fuera propuesta en un bloque, cuando usted 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}eth_call
Ejecuta una nueva llamada de mensaje inmediatamente sin crear una transacción en la cadena de bloques. A menudo se utiliza para ejecutar funciones de contratos inteligentes de solo lectura, por ejemplo, balanceOf para un contrato ERC-20.
Parámetros
Objeto: el objeto de la llamada de transacción
from:DATA, 20 bytes: (opcional) la dirección desde la que se envía la transacción.to:DATA, 20 bytes: la dirección a la que se dirige la transacción.gas:QUANTITY: (opcional) número 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 gasPrice utilizado para cada gas pagadovalue:QUANTITY: (opcional) entero del valor enviado con esta transaccióninput:DATA: (opcional) hash de la firma del método y parámetros codificados. Para más detalles, consulte la ABI del contrato de Ethereum en la documentación de Solidityopens in a new tab.
QUANTITY|TAG: número de bloque entero, o la cadena"latest","earliest","pending","safe"o"finalized"; consulte el parámetro de bloque
Devuelve
DATA: el valor de retorno del 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}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.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
Consulte los parámetros de eth_call, con la excepción de que todas las propiedades son 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 es mayor que el límite de gas del bloque pendiente.
Devuelve
QUANTITY: la cantidad de gas utilizado.
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}eth_getBlockByHash
Retorna información acerca de un bloque por hash.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: hash de un bloque.Booleano: si estrue, devuelve los objetos de transacción completos; si esfalse, solo los hashes de las transacciones.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Devuelve
Objeto: un objeto de bloque, o null cuando no se encontró ningún bloque:
number:QUANTITY: el número del bloque.nullcuando es un bloque pendiente.hash:DATA, 32 bytes: hash del bloque.nullcuando es un bloque pendiente.parentHash:DATA, 32 bytes: hash del bloque principal.nonce:DATA, 8 bytes: hash de la prueba de trabajo generada.nullcuando es un bloque pendiente,0x0para bloques de prueba de participación (desde La Fusión)sha3Uncles:DATA, 32 bytes: SHA3 de los datos de tíos en el bloque.logsBloom:DATA, 256 bytes: el filtro de bloom para los registros del bloque.nullcuando es un bloque 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 al que se le dieron las recompensas de bloque.difficulty:QUANTITY: entero de la dificultad para este bloque.totalDifficulty:QUANTITY: entero de la dificultad total de la cadena hasta este bloque.extraData:DATA: el campo de «datos extra» de este bloque.size:QUANTITY: entero del tamaño de este bloque en bytes.gasLimit:QUANTITY: el límite de gas máximo permitido en este bloque.gasUsed:QUANTITY: el total de gas usado por todas las transacciones en este bloque.timestamp:QUANTITY: la marca de tiempo de Unix del momento en que se recopiló el bloque.transactions:Array: un array de objetos de transacción, o hashes de transacción de 32 bytes dependiendo del último parámetro dado.uncles:Array: un array de hashes de tíos.
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Resultado4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "difficulty": "0x4ea3f27bc",9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",10 "gasLimit": "0x1388",11 "gasUsed": "0x0",12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",16 "nonce": "0x689056015818adbe",17 "number": "0x1b4",18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",21 "size": "0x220",22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",23 "timestamp": "0x55ba467c",24 "totalDifficulty": "0x78ed983323d",25 "transactions": [26 ],27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",28 "uncles": [29 ]30 }31}Mostrar todoeth_getBlockByNumber
Retorna información acerca de un bloque por número de bloque.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
QUANTITY|TAG: entero de un número de bloque, o la cadena"earliest","latest","pending","safe"o"finalized", como en el parámetro de bloque.Booleano: si estrue, devuelve los objetos de transacción completos; si esfalse, solo los hashes de las transacciones.
1params: [2 "0x1b4", // 4363 true,4]Devuelve Consulte eth_getBlockByHash
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Resultado, consulte eth_getBlockByHash
eth_getTransactionByHash
Muestra la información acerca de una transacción requerida por el hash de transacción.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: hash de una transacción
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Devuelve
Objeto: 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.nullcuando está pendiente.blockNumber:QUANTITY: número de bloque donde estaba esta transacción.nullcuando está pendiente.from:DATA, 20 bytes: dirección del remitente.gas:QUANTITY: gas proporcionado por el remitente.gasPrice:QUANTITY: precio del gas proporcionado por el remitente en Wei.hash:DATA, 32 bytes: hash de la transacción.input:DATA: los datos enviados junto con la transacción.nonce:QUANTITY: el número de transacciones realizadas por el remitente antes de esta.to:DATA, 20 bytes: dirección del receptor.nullcuando es una transacción de creación de contrato.transactionIndex:QUANTITY: entero de la posición del índice de transacciones en el bloque.nullcuando está pendiente.value:QUANTITY: valor transferido en Wei.v:QUANTITY: ID de recuperación de ECDSAr:QUANTITY: firma r de ECDSAs:QUANTITY: 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 todoeth_getTransactionByBlockHashAndIndex
Muestra información acerca de una transacción por hash de bloque y la posición del índice de la transacción.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: hash de un bloque.QUANTITY: entero de la posición del índice de la transacción.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Devuelve Consulte eth_getTransactionByHash
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Resultado, consulte 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.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
QUANTITY|TAG: un número de bloque, o la cadena"earliest","latest","pending","safe"o"finalized", como en el parámetro de bloque.QUANTITY: la posición del índice de la transacción.
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]Devuelve Consulte eth_getTransactionByHash
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'Resultado, consulte eth_getTransactionByHash
eth_getTransactionReceipt
Muestra el recibo de una transacción por hash de transacción.
Nota: el recibo no está disponible para transacciones pendientes.
Parámetros
DATA, 32 bytes: hash de una transacción
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Devuelve
Objeto: un objeto de recibo de transacción, o null cuando no se encontró ningún recibo:
transactionHash:DATA, 32 bytes: hash de la transacción.transactionIndex:QUANTITY: 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 esta transacción.from:DATA, 20 bytes: dirección del remitente.to:DATA, 20 bytes: dirección del receptor. null cuando se trata de una transacción de creación de contrato.cumulativeGasUsed:QUANTITY: la cantidad total de gas utilizado cuando esta transacción se ejecutó en el bloque.effectiveGasPrice:QUANTITY: la suma de la tarifa base y la propina pagada por unidad de gas.gasUsed:QUANTITY: la cantidad de gas utilizado 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: un array de objetos de registro, que esta transacción generó.logsBloom:DATA, 256 bytes: filtro de Bloom para que los clientes ligeros recuperen rápidamente los registros relacionados.type:QUANTITY: entero del tipo de transacción,0x0para transacciones heredadas,0x1para tipos de lista de acceso,0x2para comisiones dinámicas.
También devuelve uno de los siguientes:
root:DATA32 bytes de raíz de estado postransacción (pre-Byzantium)status:QUANTITY:1(éxito) o0(fallo)
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 todoeth_getUncleByBlockHashAndIndex
Devuelve información sobre un tío de un bloque por hash y posición del índice del tío.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
DATA, 32 bytes: el hash de un bloque.QUANTITY: la posición del índice del tío.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 04]Devuelve Consulte eth_getBlockByHash
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Resultado, consulte eth_getBlockByHash
Nota: un tío no contiene transacciones individuales.
eth_getUncleByBlockNumberAndIndex
Devuelve información sobre un tío de un bloque por número y posición de índice del tío.
Probar el punto de conexión en el campo de pruebasopens in a new tabParámetros
QUANTITY|TAG: un número de bloque, o la cadena"earliest","latest","pending","safe","finalized", como en el parámetro de bloque.QUANTITY: la posición del índice del tío.
1params: [2 "0x29c", // 6683 "0x0", // 04]Devuelve Consulte eth_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}'Resultado, consulte 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 comprobar si el estado ha cambiado, llame a eth_getFilterChanges.
Nota sobre la especificación de filtros de temas: Los temas dependen del orden. Una transacción con un registro con los temas [A, B] coincidirá con los siguientes filtros de temas:
[]«cualquier cosa»[A]«A en primera posición (y cualquier cosa después)»[null, B]«cualquier cosa en la primera posición Y B en la segunda posición (y cualquier cosa después)»[A, B]«A en primera posición Y B en segunda posición (y cualquier cosa después)»[[A, B], [A, B]]«(A O B) en primera posición Y (A O B) en segunda posición (y cualquier cosa después)»- Parámetros
Objeto: las opciones del filtro:
fromBlock:QUANTITY|TAG: (opcional, predeterminado:"latest") número de bloque entero, o"latest"para el último bloque propuesto,"safe"para el último bloque seguro,"finalized"para el último bloque finalizado, o"pending","earliest"para transacciones que aún no están en un bloque.toBlock:QUANTITY|TAG: (opcional, predeterminado:"latest") número de bloque entero, o"latest"para el último bloque propuesto,"safe"para el último bloque seguro,"finalized"para el último bloque finalizado, o"pending","earliest"para transacciones que aún no están en un bloque.address:DATA|Array, 20 bytes: (opcional) dirección del contrato o una lista de direcciones desde las que deben originarse los registros.topics:Array de DATA: (opcional) un array de temasDATAde 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 todoDevuelve
QUANTITY: un 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}eth_newBlockFilter
Crea un nuevo filtro en el nodo que notifica cuando llega un nuevo bloque. Para comprobar si el estado ha cambiado, llame a eth_getFilterChanges.
Parámetros Ninguno
Devuelve
QUANTITY: un 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}eth_newPendingTransactionFilter
Crea un filtro en el nodo para notificar cuando llegan nuevas transacciones pendientes. Para comprobar si el estado ha cambiado, llame a eth_getFilterChanges.
Parámetros Ninguno
Devuelve
QUANTITY: un 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}eth_uninstallFilter
Desinstala un filtro con un ID dado. Debe invocarse siempre cuando ya no se necesite observación. Además, los filtros se agotan cuando no se solicitan con eth_getFilterChanges durante un período de tiempo.
Parámetros
QUANTITY: el ID de filtro.
1params: [2 "0xb", // 113]Devuelve
Booleano: true si el filtro se desinstaló correctamente; de lo contrario, false.
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}eth_getFilterChanges
Método de sondeo para un filtro, que retorna un array de registros que ocurrieron desde el último sondeo.
Parámetros
QUANTITY: el ID de filtro.
1params: [2 "0x16", // 223]Devuelve
Array: un array de objetos de registro, o un array vacío si nada ha cambiado desde la última encuesta.
-
Para los filtros creados con
eth_newBlockFilter, los resultados son hashes de bloque (DATA, 32 bytes), p. ej.,["0x3454645634534..."]. -
Para los filtros creados con
eth_newPendingTransactionFilter, los resultados son hashes de transacciones (DATA, 32 bytes), p. ej.,["0x6345343454645..."]. -
Para los filtros creados con los registros
eth_newFilterson objetos con los siguientes parámetros:removed:TAG:truecuando el registro se eliminó, debido a una reorganización de la cadena.falsesi es un registro válido.logIndex:QUANTITY: entero de la posición del índice del registro en el bloque.nullcuando es un registro pendiente.transactionIndex:QUANTITY: entero de la posición del índice de transacciones desde la que se creó el registro.nullcuando es un registro pendiente.transactionHash:DATA, 32 bytes: hash de las transacciones desde las que se creó este registro.nullcuando es un registro pendiente.blockHash:DATA, 32 bytes: hash del bloque donde estaba este registro.nullcuando está pendiente.nullcuando es un registro pendiente.blockNumber:QUANTITY: el número de bloque donde estaba este registro.nullcuando está pendiente.nullcuando es un registro pendiente.address:DATA, 20 bytes: dirección de la que se originó este registro.data:DATA: datos de registro de longitud variable no indexados. (En solidity: cero o más argumentos de registro no indexados de 32 bytes).topics:Array de DATA: un array de 0 a 4 argumentos de registro indexadosDATAde 32 bytes. (En solidity: el primer tema es el hash de la firma del evento (p. ej.,Deposit(address,bytes32,uint256)), excepto si declaró el evento con el especificadoranonymous.)
-
Ejemplo
1// Solicitud2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Resultado4{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 todoeth_getFilterLogs
Devuelve una matriz de todos los registros que coinciden con el filtro con el ID dado.
Parámetros
QUANTITY: el ID de filtro.
1params: [2 "0x16", // 223]Devuelve Consulte eth_getFilterChanges
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Resultado, consulte eth_getFilterChanges
eth_getLogs
Devuelve una matriz de todos los registros que coinciden con un objeto de filtro dado.
Parámetros
Objeto: las opciones del filtro:
fromBlock:QUANTITY|TAG: (opcional, predeterminado:"latest") número de bloque entero, o"latest"para el último bloque propuesto,"safe"para el último bloque seguro,"finalized"para el último bloque finalizado, o"pending","earliest"para transacciones que aún no están en un bloque.toBlock:QUANTITY|TAG: (opcional, predeterminado:"latest") número de bloque entero, o"latest"para el último bloque propuesto,"safe"para el último bloque seguro,"finalized"para el último bloque finalizado, o"pending","earliest"para transacciones que aún no están en un bloque.address:DATA|Array, 20 bytes: (opcional) dirección del contrato o una lista de direcciones desde las que deben originarse los registros.topics:Array de DATA: (opcional) un array de temasDATAde 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, futuro) con la adición de EIP-234,blockHashserá una nueva opción de filtro que restringe los registros devueltos al bloque único con el hash de 32 bytesblockHash. UsarblockHashes equivalente afromBlock=toBlock= el número de bloque con el hashblockHash. SiblockHashestá presente en los criterios del filtro, no se permiten nifromBlocknitoBlock.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Devuelve Consulte eth_getFilterChanges
Ejemplo
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Resultado, consulte eth_getFilterChanges
Ejemplo de uso
Desplegar un contrato usando JSON_RPC
Está sección incluye una demostración de cómo implementar un contrato usando solo la interfaz RPC. Hay rutas alternativas para desplegar contratos donde esta complejidad se abstrae, por ejemplo, usando librerías construidas sobre la interfaz RPC, como web3.jsopens in a new tab y web3.pyopens 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 desplegará usando la interfaz JSON-RPC en un nodo de Ethereum. Este tutorial asume que el lector actualmente corre un nodo Geth. Hay más información sobre nodos y clientes disponible aquí. Consulte la documentación individual del cliente para ver cómo iniciar el JSON-RPC HTTP para clientes que no son Geth. La mayoría de los clientes sirven por defecto 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.logEsto iniciará la interfaz HTTP RPC en http://localhost:8545.
Podemos verificar que la interfaz está en funcionamiento recuperando la dirección de coinbase (obteniendo la primera dirección del array de cuentas) y el saldo mediante curlopens 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_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}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 Solidityopens in a new tab. (Puede que desee utilizar una versión anterior de solc para que coincida con la versión del compilador utilizada en nuestro ejemploopens in a new tab.)
El siguiente paso es compilar el contrato Multiply7 a código de bytes que se puede 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:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Ahora 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 se creó en 0x4d03d617d700cf81935d7f797f4e2ae719648262. Un resultado nulo en lugar de un recibo significa que la transacción aún no se ha incluido en un bloque. Espere un momento y compruebe si su cliente de consenso se está ejecutando y vuelva a intentarlo.
Interactuar con contratos inteligentes
En este ejemplo enviaremos una transacción usando eth_sendTransaction al método multiply del contrato.
eth_sendTransaction requiere varios argumentos, concretamente 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 qué método se debe llamar y con qué argumentos. Aquí es donde entra en juego la ABI (interfaz binaria de 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 dos big-endian de X, rellenada en el lado de orden superior (izquierda) con 0xff para X negativo y con bytes cero para X positivo, de tal manera que la longitud sea un múltiplo de 32 bytes.
Esto se codifica como 0000000000000000000000000000000000000000000000000000000000000006.
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 todoEl 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 se generó el evento Print con la entrada multiplicada por 7. Dado que el argumento para el evento Print era un uint256, podemos decodificarlo de acuerdo con las reglas de la ABI, lo que nos dejará con el decimal esperado 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.