Ir al contenido principal

Enviar transacciones usando la Web3

transaccionesweb3.jsalchemy
Principiante
Elan Halpern
Documentos de Alchemy(opens in a new tab)
4 de noviembre de 2020
10 minuto leído minute read

Esta es un guia apta para principiantes sobre cómo enviar transacciones de Ethereum usando la Web3. Hay tres pasos esenciales para enviar una transacción a la cadena de bloques de Ethereum, que son: crear, firmar y emitir. Explicaremos los tres pasos y esperamos responder a cualquier duda que puedas tener. En este tutorial, usaremos Alchemy(opens in a new tab) para enviar nuestras transacciones a la red de Ethereum. Puede crear una cuenta de Alchemy aquí(opens in a new tab).

NOTA: Esta guía es para firmar sus transacciones en el backend para su aplicación. Si quiere integrar la firma de sus transacciones en el frontend, consulteIntegrar Web3 con un proveedor de navegador(opens in a new tab).

Los fundamentos

Como la mayoría de desarrolladores de cadena de bloques cuando comienzan, es posible que haya indagado sobre cómo enviar una transacción (algo que debería ser muy sencillo) y que se haya topado con una gran cantidad de guías, cada una de ellas diciendo cosas diferentes, que le dejan a uno un poco aturdido y confundido. Por lo tanto, si se encuentra en esa situación, no desespere. ¡Todos lo hemos pasado por ello en algún momento! Así que, antes de comenzar, aclaremos algunos puntos:

1.Alchemy no almacena sus claves privadas

  • Esto significa que Alchemy no puede firmar ni enviar transacciones en su nombre. Es así por motivos de seguridad. Alchemy nunca le pedirá que comparta su clave privada, ni tampoco debería compartir nunca su clave privada con un nodo alojado (ni con nadie).
  • Puede leer desde la cadena de bloques usando la API del nucleo de Alchemy, pero para escribirlo, necesitará usar algo más para firmar sus transacciones antes de enviarlas mediante Alchemy (esto es lo mismo para cualquier otro servicio de nodo).

2.¿Qué es un «signatario»?

3.¿Por qué tengo que firmar mis transacciones?

  • Todo usuario que quiera enviar una transacción en la red Ethereum debe firmarla (utilizando su clave privada), para validar que la transacción proviene de quien afirma proceder.
  • Es sumamente importante proteger esta clave privada, ya que tener acceso a ella otorga el control absoluto de su cuenta de Ethereum y le permite a usted (o a cualquier persona con acceso) realizar transacciones en su nombre.

4.¿Cómo puedo proteger mi clave privada?

  • Hay muchas formas de proteger tu clave privada y de utilizarla para enviar transacciones. En este tutorial utilizaremos un archivo .env. Sin embargo, también puede utilizar un proveedor independiente que almacene claves privadas, utilizar un banco de claves u otras opciones.

5. ¿Cuál es la diferencia entre eth_sendTransaction y eth_sendRawTransaction?

eth_sendTransaction y eth_sendRawTransaction son funciones de la API de Ethereum que emiten una transacción en la red de Ethereum para que se añada a un nuevo bloque. Se diferencian en cómo gestionan la firma de las transacciones.

Cuando se utiliza web3, se puede acceder a eth_sendRawTransaction a través de la función web3.eth.sendSignedTransaction(opens in a new tab).

Esto es lo que vamos a usar en este tutorial.

6.¿Qué es la biblioteca Web3?

Bien, ahora que ya hemos resuelto algunas de estas dudas, comencemos con el tutorial. ¡No dude preguntar sus dudas en cualquier momento a través del canal discord(opens in a new tab) de Alchemy!

7. ¿Cómo enviar transacciones seguras, privadas y con gas optimizado? {how-to-send-secure-gas-optimized-and-private-transactions}

NOTA: Para consultar esta guía, debe tener una cuenta de Alchemy, una dirección de Ethereum o una cartera MetaMask, NodeJs, y npm instaladas. De lo contrario, siga estos pasos:

  1. Cree una cuenta gratuita de Alchemy(opens in a new tab)
  2. Crea una cuenta de Metamask(opens in a new tab) (u obtenga una dirección de Ethereum)
  3. Siga estos pasos para instalar NodeJs y NPM(opens in a new tab)

Pasos para enviar su transacción

1.Crea una aplicación de Alchemy en la red de pruebas de Sepolia

Vaya a su panel de control de Alchemy(opens in a new tab) y cree una nueva aplicación, seleccionando Sepolia (u otra red de pruebas) para su red.

2.Solicitar ETH desde un grifo Sepolia

Sigue las instrucciones en el faucet (o grifo) Sepolia de Alchemy(opens in a new tab) para recibir ETH. Asegúrese de incluir su dirección Ethereum de Sepolia (desde MetaMask) y no otra red. Después de seguir las indicaciones, compruebe dos veces que ha recibido los ETH en su cartera.

3. Crea un nuevo directorio de proyecto y cden él

Cree un nuevo directorio de proyecto desde la ventana de comandos (terminal para macs) y navega hasta ella:

1mkdir sendtx-example
2cd sendtx-example

4.Instale Alchemy Web3 (o cualquier biblioteca en Web3)

Ejecute el siguiente comando en el directorio del proyecto que instalará Alchemy Web3(opens in a new tab):

Observe que si quiere utilizar la biblioteca de ethers.js, debe seguir estas instrucciones(opens in a new tab).

1npm install @alch/alchemy-web3

5.Instala dotenv

Utilizaremos un archivo .env para almacenar de manera segura nuestra clave API y clave privada.

1npm install dotenv --save

6. Cree el archivo .env

Cree un archivo .env en el directorio de su proyecto y añada lo siguiente (sustituyendo "your-api-url" y "your-private-key")

1API_URL = "your-api-url"
2PRIVATE_KEY = "your-private-key"
¡No exponga su .env! Asegúrese de que nunca comparte ni expone su archivo .env con nadie, si ello conlleva revelar sus secretos. Si está haciendo un control de la versión, añada .env a un archivo gitignore(opens in a new tab).

7. Cree el archivo sendTx.js

Vale, ahora que su información confidencial ya está protegida en un archivo .env, iniciemos la programación. Para nuestro ejemplo de envío de transacción, enviaremos ETH de vuelta al grifo Sepolia.

Cree un archivo sendTx.js, que es donde configuraremos y enviaremos nuestra transacción de muestra, y añádale las siguientes líneas de código:

1async function main() {
2 require('dotenv').config();
3 const { API_URL, PRIVATE_KEY } = process.env;
4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
5 const web3 = createAlchemyWeb3(API_URL);
6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address
7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0
9
10 const transaction = {
11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth
12 'value': 1000000000000000000, // 1 ETH
13 'gas': 30000,
14 'nonce': nonce,
15 // optional data field to send message or execute smart contract
16 };
17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
21 if (!error) {
22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
23 } else {
24 console.log("❗Something went wrong while submitting your transaction:", error)
25 }
26 });
27}
28
29main();
Mostrar todo

Asegúrese de reemplazar la dirección en la línea 6 por su propia dirección pública.

Ahora, antes de pasar a la ejecución de este código, hablaremos sobre algunos de los componentes.

Una nota sobre los datos Hay dos tipos principales de transacciones que se pueden enviar en Ethereum.

8. Ejecuta el código usando node sendTx.js

Navegue hasta la terminal o línea de comandos y ejecute:

1node sendTx.js

9.Consulta tu transacción en el Mempool

Abra la página de la Zona de espera(opens in a new tab) en su panel de control de Alchemy y filtre la aplicación que creó para encontrar su transacción. Aquí es donde podemos ver la transición de nuestra transacción desde un estado pendiente a un estado acuñado (si tiene éxito) o a un estado descartado si no tiene éxito. Asegúrese de conservarlo en «Todos» para reflejar las transacciones «acuñadas», «pendientes» y «descartadas». También puede buscar su transacción por transacciones enviadas a la dirección 0x31b98d14007bdee637298086988a0bbd31184523 .

Para ver los detalles de su transacción una vez que la haya encontrado, seleccione el hash de tx, que debería llevarle a una pantalla parecida a esta:

Captura de pantalla de la Zona de espera

Aquí puede ver su transacción en Etherscan pulsando el icono dentro de un círculo rojo.

¡Enhorabuena! Acabas de realizar tu primera transacción en Ethereum con Alchemy 🎉

Si desea ver comentarios y sugerencias sobre esta guía, envíe un mensaje a Elan en el canal Discord(opens in a new tab) de Alchemy.

Publicado originalmente en https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy(opens in a new tab)

Última edición: @nhsz(opens in a new tab), 15 de agosto de 2023

¿Le ha resultado útil este tutorial?