Como firmar una transacción con web3 en Ropsten con Node.js
Rodrigo Garcia Trejo
Posted on October 23, 2020
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.
¿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.
¿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í.
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@)
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
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
e instalamos las siguientes dependencias
npm install web3, ethereumjs-tx
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);
});
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!!!.
Posted on October 23, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.