Bibliotecas de API de JavaScript
Para que una aplicación web interactúe con la cadena de bloques de Ethereum (es decir, lea datos de la cadena de bloques y/o envíe transacciones a la red), debe conectarse a un nodo de Ethereum.
Para este propósito, cada cliente de Ethereum implementa la especificación JSON-RPC, por lo que hay un conjunto uniforme de métodos en los que las aplicaciones pueden confiar.
Si quieres usar JavaScript para conectarte con un nodo de Ethereum, es posible usar JavaScript puro, pero existen varias bibliotecas de conveniencia dentro del ecosistema que lo hacen mucho más fácil. Con estas bibliotecas, los desarrolladores pueden escribir métodos intuitivos de una sola línea para inicializar solicitudes JSON-RPC (internamente) que interactúan con Ethereum.
Ten en cuenta que desde La Fusión, se requieren dos piezas de software de Ethereum conectadas (un cliente de ejecución y un cliente de consenso) para ejecutar un nodo. Asegúrate de que tu nodo incluya tanto un cliente de ejecución como uno de consenso. Si tu nodo no está en tu máquina local (por ejemplo, tu nodo se está ejecutando en una instancia de AWS), actualiza las direcciones IP en el tutorial en consecuencia. Para obtener más información, consulta nuestra página sobre cómo ejecutar un nodo.
Requisitos previos
Además de entender JavaScript, podría ser útil entender la pila de Ethereum y los clientes de Ethereum.
¿Por qué usar una biblioteca?
Estas bibliotecas abstraen gran parte de la complejidad de interactuar directamente con un nodo de Ethereum. También proporcionan funciones de utilidad (por ejemplo, convertir ETH a Gwei) para que, como desarrollador, puedas pasar menos tiempo lidiando con las complejidades de los clientes de Ethereum y más tiempo enfocado en la funcionalidad única de tu aplicación.
Características de las bibliotecas
Conectarse a nodos de Ethereum
Usando proveedores, estas bibliotecas te permiten conectarte a Ethereum y leer sus datos, ya sea a través de JSON-RPC, Infura, Etherscan, Alchemy o MetaMask.
Advertencia: Web3.js fue archivado el 4 de marzo de 2025. Lee el anuncio (opens in a new tab). Considera usar bibliotecas alternativas como ethers.js (opens in a new tab) o viem (opens in a new tab) para proyectos nuevos.
Ejemplo con Ethers
// Un BrowserProvider envuelve un proveedor estándar de Web3, que es
// lo que MetaMask inyecta como window.ethereum en cada página
const provider = new ethers.BrowserProvider(window.ethereum)
// El complemento de MetaMask también permite firmar transacciones para
// enviar ether y pagar para cambiar el estado dentro de la cadena de bloques.
// Para esto, necesitamos el firmante de la cuenta...
const signer = provider.getSigner()
Ejemplo con Web3js
var web3 = new Web3("http://localhost:8545")
// or
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
// cambiar de proveedor
web3.setProvider("ws://localhost:8546")
// or
web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
// Usando el proveedor IPC en node.js
var net = require("net")
var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // ruta de mac os
// or
var web3 = new Web3(
new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
) // ruta de mac os
// en windows la ruta es: "\\\\.\\pipe\\geth.ipc"
// en linux la ruta es: "/users/myuser/.ethereum/geth.ipc"
Una vez configurado, podrás consultar la cadena de bloques para obtener:
- números de bloque
- estimaciones de gas
- eventos de contratos inteligentes
- ID de la red
- y más...
Funcionalidad de billetera
Estas bibliotecas te brindan la funcionalidad para crear billeteras, administrar claves y firmar transacciones.
Aquí hay un ejemplo de Ethers
// Crear una instancia de billetera a partir de un mnemónico...
mnemonic =
"announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
walletMnemonic = Wallet.fromPhrase(mnemonic)
// ...o a partir de una clave privada
walletPrivateKey = new Wallet(walletMnemonic.privateKey)
walletMnemonic.address === walletPrivateKey.address
// true
// La dirección como una Promesa según la API del Firmante
walletMnemonic.getAddress()
// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
// Una dirección de Billetera también está disponible de forma síncrona
walletMnemonic.address
// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// Los componentes criptográficos internos
walletMnemonic.privateKey
// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
walletMnemonic.publicKey
// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
// El mnemónico de la billetera
walletMnemonic.mnemonic
// {
// locale: 'en',
// path: 'm/44\'/60\'/0\'/0/0',
// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
// }
// Nota: Una billetera creada con una clave privada no
// tiene un mnemónico (la derivación lo impide)
walletPrivateKey.mnemonic
// null
// Firmando un mensaje
walletMnemonic.signMessage("Hello World")
// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
tx = {
to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
value: utils.parseEther("1.0"),
}
// Firmando una transacción
walletMnemonic.signTransaction(tx)
// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
// El método connect devuelve una nueva instancia de la
// Billetera conectada a un proveedor
wallet = walletMnemonic.connect(provider)
// Consultando la red
wallet.getBalance()
// { Promise: { BigNumber: "42" } }
wallet.getTransactionCount()
// { Promise: 0 }
// Enviando ether
wallet.sendTransaction(tx)
Lee la documentación completa (opens in a new tab)
Una vez configurado, podrás:
- crear cuentas
- enviar transacciones
- firmar transacciones
- y más...
Interactuar con funciones de contratos inteligentes
Las bibliotecas de clientes de JavaScript permiten que tu aplicación llame a funciones de contratos inteligentes leyendo la Interfaz Binaria de Aplicación (ABI) de un contrato compilado.
La ABI explica esencialmente las funciones del contrato en un formato JSON y te permite usarlo como un objeto normal de JavaScript.
Así que el siguiente contrato de Solidity:
contract Test {
uint a;
address d = 0x12345678901234567890123456789012;
constructor(uint testInt) { a = testInt;}
event Event(uint indexed b, bytes32 c);
event Event2(uint indexed b, bytes32 c);
function foo(uint b, bytes32 c) returns(address) {
Event(b, c);
return d;
}
}
Daría como resultado el siguiente JSON:
[{
"type":"constructor",
"payable":false,
"stateMutability":"nonpayable"
"inputs":[{"name":"testInt","type":"uint256"}],
},{
"type":"function",
"name":"foo",
"constant":false,
"payable":false,
"stateMutability":"nonpayable",
"inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
"outputs":[{"name":"","type":"address"}]
},{
"type":"event",
"name":"Event",
"inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
},{
"type":"event",
"name":"Event2",
"inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
"anonymous":false
}]
Esto significa que puedes:
- Enviar una transacción al contrato inteligente y ejecutar su método
- Llamar para estimar el gas que tomará la ejecución de un método cuando se ejecute en la EVM
- Desplegar un contrato
- Y más...
Funciones de utilidad
Las funciones de utilidad te brindan atajos prácticos que hacen que construir con Ethereum sea un poco más fácil.
Los valores de ETH están en Wei por defecto. 1 ETH = 1,000,000,000,000,000,000 Wei – ¡esto significa que estás lidiando con muchos números! web3.utils.toWei convierte ether a Wei por ti.
Y en ethers se ve así:
// Obtener el saldo de una cuenta (por dirección o nombre ENS)
balance = await provider.getBalance("ethers.eth")
// { BigNumber: "2337132817842795605" }
// A menudo necesitarás formatear la salida para el usuario
// que prefiere ver los valores en ether (en lugar de Wei)
ethers.utils.formatEther(balance)
// '2.337132817842795605'
- Funciones de utilidad de Web3js (opens in a new tab)
- Funciones de utilidad de Ethers (opens in a new tab)
Bibliotecas disponibles
Web3.js - API de JavaScript de Ethereum.
Ethers.js - Implementación completa de billetera de Ethereum y utilidades en JavaScript y TypeScript.
- Inicio de Ethers.js (opens in a new tab)
- Documentación (opens in a new tab)
- GitHub (opens in a new tab)
The Graph - Un protocolo para indexar datos de Ethereum e IPFS y consultarlos usando GraphQL.
- The Graph (opens in a new tab)
- Explorador de Graph (opens in a new tab)
- Documentación (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Alchemy SDK - Envoltorio (wrapper) alrededor de Ethers.js con API mejoradas.
viem - Interfaz de TypeScript para Ethereum.
Codex - API de datos de cadena de bloques enriquecidos en tiempo real en docenas de cadenas.
- Documentación (opens in a new tab)
- Explorador (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Drift - Metabiblioteca de TypeScript con almacenamiento en caché integrado, hooks y simulaciones (mocks) de prueba.
Lecturas adicionales
¿Conoces algún recurso de la comunidad que te haya ayudado? ¡Edita esta página y agrégalo!
Temas relacionados
Tutoriales relacionados
- Configurar Web3js para usar la cadena de bloques de Ethereum en JavaScript – Instrucciones para configurar web3.js en tu proyecto.
- Llamar a un contrato inteligente desde JavaScript – Usando el token DAI, mira cómo llamar a la función de contratos usando JavaScript.
- Enviar transacciones usando web3 y Alchemy – Guía paso a paso para enviar transacciones desde el backend.
Tutoriales: API de JavaScript y WebSockets en Ethereum
- Usar WebSockets – Cómo usar WebSockets con Alchemy para suscribirse a eventos de Ethereum y hacer solicitudes JSON-RPC en tiempo real.