DEV Community

Cover image for Como firmar una transacción con web3 en Ropsten con Node.js
Rodrigo Garcia Trejo
Rodrigo Garcia Trejo

Posted on

Como firmar una transacción con web3 en Ropsten con Node.js

Hola amigos!!, como ya vieron el título de esta publicación, hoy les voy a enseñar a hacer una transacción entre cuentas de ROPSTEN
utilizando Node, Infura, WEB3 y Metamask.

Comenzare por explicar brevemente que son cada una de estas cosas.

¿Qué es web3?

Son una combinación de librerías que permiten interactuar entre un nodo local o remoto de Ethereum usando HTTP, IPC o Web Socket.

Básicamente web3 nos va a dar el poder de hacer transacciones de criptomonedas a través de una red de prueba como por ejemplo: Kovan o Ropsten.

aa

¿Qué es Metamask?

Metamask es un complemento de Google Chrome y Firefox y edge al parecer, que sirve de puente entre tu ordenador y la blockchain de Ethereum. En pocas palabras algo que te ayuda a transferir y revisar tus criptomonedas (Ether) que tienes disponible, eso y otras cosas mas que hablaremos algun dia.

Alt Text

¿Qué es infura?

Infura es una plataforma que proporciona un conjunto de herramientas e infraestructuras que permiten a los desarrolladores llevar fácilmente su aplicación blockchain de la prueba, a la implementación a escala, con acceso simple y confiable a Ethereum

 

¿Y que necesito para realizar una transferencia de ether?

Bueno, lo mas importante es crear 2 cuentas de Ropsten en Metamask, las cuales les puedes asignar el nombre que quieras y para ello necesitaremos su clave publica que se encuentra mas o menos ahí.
 

Alt Text
 
 

y necesitaremos una clave privada de una de las cuentas, esa la obtienes dando clic en los 3 puntitos y en detalles de la cuenta y en exportar clave privada, le asignan una contraseña y listooo!! ya tienes la clave, (NO LA COMPARTAS MI QUERIDO AMIG@)
 

Alt Text

 
 

Lo mas importante para hacer transferencia de Ether, es tener Ether y para ello necesitamos que nos donen y para ello existen las fuentes como https://faucet.metamask.io/ a las cuales les solicitamos que nos envien ether, solo puedes utilizarlos una vez por dia.

Cuenta en INFURA

También necesitaremos tener una cuenta en INFURA la cual nos permitirá acceder al nodo de Ropsten, para ello tenemos que ir a la página infura y crear una cuenta, es muy facil!!, cuando ya tengas una cuenta necesitaremos tener un endpoint de ropsten eso lo encuentras en la sección de settings y en ENDPOINTS seleccionas ROPSTEN

Alt Text

y guardas esa dirección por que lo necesitaremos mas adelante.

 
Una vez que tengas lo siguiente podremos continuar.
1.- 2 Claves publicas y 1 privada
2.- Obtener ether y asignárselo a una cuenta.
3.- 1 cuenta en Infura con el Endpoint de Ropsten

 

Primero crearemos una carpeta en el escritorio (o donde quieras) y mediante el **cmd* nos dirigimos a esa carpeta y ejecutamos el comando

npm init -y
Enter fullscreen mode Exit fullscreen mode

e instalamos las siguientes dependencias

npm install web3,  ethereumjs-tx
Enter fullscreen mode Exit fullscreen mode

Después creamos una carpeta llamada src y dentro crean un archivo llamado index.js

de manera que quede de la siguiente manera.

.node_modules
.src
..index.js
.package.json

Codigo del index.js


// REQUERIMOS WEB3
const Web3 = require("web3");

// REQUERIMOS ETHEREUMTXJS-TX (ESTA LIBRERIA NOS PERMITE FIRMAR LA TRANSACCIÓN)

const EthereumTx = require("ethereumjs-tx").Transaction;

// NOS CONECTAMOS A LA RED DE ROPSTEN, AQUÍ COLOCAMOS NUESTRO ENDPOINT DE INFURA

const web3 = new Web3(
  "https://ropsten.infura.io/v3/ammmkmmj2kj3hh1ggff0ee864f8145ed"
);

// cuenta publica 1
const address1 = "AQUÍ PONEN SU CUENTA PUBLICA";

// cuenta publica 2
const address2 = "AQUÍ PONEN SU CUENTA PUBLICA NUMERO DOS";

// ESTA ES LA CLAVE PRIVADA 
const address1Key = new Buffer.from(
  "AQUI PONEN SU CLAVE PRIVADA",
  "hex"
);

web3.eth.getTransactionCount(address1, function (error, txCount) {

  // EN CASO DE QUE EXITA UN ERROR, LO MUESTRA EN CONSOLA
  if (error != null) {
    console.log("El error es : ", error);
  }

// RAWTX ES LA ESTRUCTURA QUE NECESITMOS PARA SABER A DONDE LO ENVIAMOS EN ESTE CASO ENVIAMOS A addres2 Y EN value ENVIAMOS 1 ETHER EN HEXADECIMAL
  let rawTx = {
    nonce: web3.utils.toHex(txCount),
    gasPrice: web3.utils.toHex(web3.utils.toWei("2", "gwei")),
    gasLimit: web3.utils.toHex(21000),
    to: address2,
    value: web3.utils.toHex("1000000000000000000"),
  };

// ASIGNAMOS A QUE NODO NOS ESTAMOS CONECTANDO EN ESTA CASO ES ROPSTEN

  const tx = new EthereumTx(rawTx, { chain: "ropsten" });

// FIRMAMOS LA TRANSFERENCIAS 
  tx.sign(address1Key);

  let serializedTx = tx.serialize();

  web3.eth
    .sendSignedTransaction("0x" + serializedTx.toString("hex"))
    .on("receipt", console.log);
});

Enter fullscreen mode Exit fullscreen mode

Solo resta ejecutar el comando node src/index.js y debe de realizarse la transferencia de Ether entre las cuentas, si todo se ejecuta correctamente, habremos realizado una transferencia de ether entre nuestras cuentas, podremos corroborar visitando METAMASK y consultar nuestro saldo.

Bueno, hasta aquí dejo esta publicación y espero seguir subiendo publicaciones de BLOCKCHAIN, saludos!!!.

Discussion (1)

Collapse
jarmagno profile image
Juan Manuel Armagno

Hola! cómo se puede hacer esto mismo "Como firmar una transacción con web3 en Ropsten con Node.js" pero con un ERC20? Gracias.