Bibliotecas de API de JavaScript
Última actualización de la página: 22 de octubre de 2025
Para que una aplicación web interactúe con la cadena de bloques de Ethereum (es decir, leer datos de la cadena de bloques y/o enviar 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 quiere usar JavaScript para conectar con un nodo de Ethereum, puede usar VanillaJS (Vanilla JavaScript). Sin embargo, hay varias bibliotecas de conveniencia que existen dentro del ecosistema que simplifican esto mucho más. Con estas bibliotecas, los desarrolladores pueden crear métodos intuitivos de una sola línea para inicializar solicitudes JSON-RPC (de manera interna) que interactúan con Ethereum.
Tenga 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úrese de que su nodo incluya tanto un cliente de ejecución como un cliente de consenso. Si su nodo no está en su máquina local (p. ej., su nodo se está ejecutando en una instancia de AWS), actualice las direcciones IP en el tutorial según corresponda. Para más información, consulte nuestra página sobre cómo ejecutar un nodo.
Requisitos previos
Además de entender JavaScript, podría ser útil entender el stack de Ethereum y los clientes de Ethereum.
¿Por qué usar una biblioteca?
Estas bibliotecas eliminan en gran parte la complejidad de interactuar directamente con un nodo Ethereum. También proporcionan funciones utilitarias (por ejemplo, convertir ETH a Gwei), para que como desarrollador dedique menos tiempo a las complejidades de los clientes de Ethereum y pueda enfocarse más en la funcionalidad única de su aplicación.
Características de la biblioteca
Conectarse a los nodos de Ethereum
Mediante proveedores, estas bibliotecas le permiten conectarse a Ethereum y leer sus datos, ya sea sobre JSON-RPC, INFURA, Etherscan, Alchemy o MetaMask.
Advertencia: Web3.js se archivó el 4 de marzo de 2025. Lea el anuncioopens in a new tab. Considere usar bibliotecas alternativas como ethers.jsopens in a new tab o viemopens in a new tab para nuevos proyectos.
Ejemplo de Ethers
1// Un BrowserProvider envuelve un proveedor estándar de Web3, que es2// lo que MetaMask inyecta como window.ethereum en cada página3const provider = new ethers.BrowserProvider(window.ethereum)45// El plugin de MetaMask también permite firmar transacciones para6// enviar ether y pagar para cambiar el estado dentro de la cadena de bloques.7// Para esto, necesitamos el firmante de la cuenta...8const signer = provider.getSigner()Ejemplo de Web3js
1var web3 = new Web3("http://localhost:8545")2// o3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// cambiar proveedor6web3.setProvider("ws://localhost:8546")7// o8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Utilizando un proveedor IPC en node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // ruta para macOS13// o14var web3 = new Web3(new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)) 15// ruta para macOS16// en Windows, la ruta es: "\\\\.\\pipe\\geth.ipc"17// en Linux, la ruta es: "/users/myuser/.ethereum/geth.ipc"Mostrar todoUna vez configurado, estará habilitado a consultar en la cadena de bloques:
- números de bloque
- estimaciones del gas
- eventos de contrato inteligente
- id de la red
- y más...
Funcionalidad de la billetera
Estas bibliotecas le darán la funcionalidad para crear billeteras, administrar claves y firmar transacciones.
A continuación se incluyen algunos ejemplos de Ethers
1// Crear una instancia de billetera desde una frase mnemónica...2mnemonic =3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"4walletMnemonic = Wallet.fromPhrase(mnemonic)56// ...o desde una clave privada7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// La dirección como una Promesa por la API del Firmante13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// Una dirección de Billetera también está disponible sincrónicamente17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Los componentes criptográficos internos21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// La frase mnemónica de la billetera27walletMnemonic.mnemonic28// {29// locale: 'en',30// path: 'm/44\'/60\'/0\'/0/0',31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'32// }3334// Nota: Una billetera creada con una clave privada no35// tiene una frase mnemónica (la derivación lo impide)36walletPrivateKey.mnemonic37// null3839// Firmar un mensaje40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Firmar una transacción49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// El método de conexión devuelve una nueva instancia de la53// Billetera conectada a un proveedor54wallet = walletMnemonic.connect(provider)5556// Consultar la red57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Enviar ether63wallet.sendTransaction(tx)Mostrar todoLea la documentación completaopens in a new tab
Una vez configurado, podrá:
- crear cuentas
- enviar transacciones
- firmar transacciones
- y más...
Interactuar con las funciones de los contratos inteligentes
Las bibliotecas de clientes Javascript permiten que su aplicación invoque funciones de contratos inteligentes mediante la lectura de la Interfaz Binaria de Aplicación (ABI) de un contrato compilado.
La ABI esencialmente explica las funciones del contrato en un formato JSON y le permite usarlo como un objeto JavaScript normal.
Así que el siguiente contrato de Solidity:
1contract Test {2 uint a;3 address d = 0x12345678901234567890123456789012;45 constructor(uint testInt) { a = testInt;}67 event Event(uint indexed b, bytes32 c);89 event Event2(uint indexed b, bytes32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 return d;14 }15}Mostrar todoResultaría en el siguiente JSON:
1[{2 "type":"constructor",3 "payable":false,4 "stateMutability":"nonpayable"5 "inputs":[{"name":"testInt","type":"uint256"}],6 },{7 "type":"function",8 "name":"foo",9 "constant":false,10 "payable":false,11 "stateMutability":"nonpayable",12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],13 "outputs":[{"name":"","type":"address"}]14 },{15 "type":"event",16 "name":"Event",17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],18 "anonymous":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]Mostrar todoEsto significa que puede:
- Enviar una transacción al contrato inteligente y ejecutar su método
- Promover la estimación del gas que tomará un método de ejecución cuando se ejecute en la máquina virtual EVM
- Desplegar un contrato
- Y más...
Funciones de utilidad
Las funciones de utilidad le dan atajos prácticos que hacen que la construcción o creación sea más fácil con Ethereum.
Los valores de ETH vienen en Wei por defecto. 1 ETH = 1.000.000.000.000.000.000 WEI (esto significa que está trabajando con muchos números) web3.utils.toWei convierte ether a wei por usted.
Y en ethers esto sería así:
1// Obtener el saldo de una cuenta (por dirección o nombre ENS)2balance = await provider.getBalance("ethers.eth")3// { BigNumber: "2337132817842795605" }45// A menudo tendrás que formatear la salida para el usuario6// que prefiere ver los valores en Ether (en lugar de Wei)7ethers.utils.formatEther(balance)8// '2.337132817842795605'Bibliotecas disponibles
Web3.js - API de JavaScript para Ethereum.
Ethers.js - Implementación completa de la billetera de Ethereum y utilidades en JavaScript y TypeScript.
- Página de inicio de Ethers.jsopens in a new tab
- Documentaciónopens in a new tab
- GitHubopens in a new tab
The Graph - Un protocolo para indexar datos de Ethereum e IPFS y consultarlos usando GraphQL.
- The Graphopens in a new tab
- Explorador de Graphopens in a new tab
- Documentaciónopens in a new tab
- GitHubopens in a new tab
- Discordopens in a new tab
Alchemy SDK - Envoltorio para Ethers.js con API mejoradas.
viem - Interfaz de TypeScript para Ethereum.
Drift - Meta-biblioteca de TypeScript con caché, hooks y simulacros de prueba incorporados.
Lecturas adicionales
¿Conoce algún recurso de la comunidad que le haya sido de ayuda? ¡Edite esta página y agréguela!
Temas relacionados
Tutoriales relacionados
- Configure Web3js para usar la blockchain de Ethereum en JavaScript – Instrucciones para configurar web3.js en su proyecto.
- Llamar a un smart contract desde JavaScript – Usando el token DAI, vea cómo llamar funciones de contratos utilizando JavaScript.
- Enviar transacciones con web3 y Alchemy – Guía paso a paso para enviar transacciones desde el backend.