Es un paquete para poder trabajar con tokens y ethereum , para enviar y recibir.
Instalar desde npm:
npm i erc20-wallet -s
Luego debemos importar el paquete a nuestro proyecto
let erc20 = require('erc20-wallet');
Una vez que lo importemos ahora si podemos empezar a trabajar con el.
1.- Lo primero que debemos hacer es crear el seed de 12 palabras. Para poder crearlo debemos ingresar un password y una palabra alfanumerica para encriptar el seed con esos parametros. Ese seed el usuario debe guardarlo ya que con el restaura la wallet en cualquier momento. Primero creamos el password y la palabra alfanumerica de la siguiente manera:
erc20.password = 'mypassword';
erc20.mySeed = 'mipalabraalfanumerica8989';
Despues de ingresar mi password y mi palabra alfanumerica , proseguimos a crear el seed de la siguiente manera:
await erc20.createSeed().then((response) => {
erc20.seed = response;
}).catch((error) => {
console.error(error);
});
Nota : El seed te recomiendo guardarlo en la variable erc20.seed ya que lo vamos a necesitar para crear el keystore o el wallet mas adelante.
Ahora nos toca crear el keystore o el wallet , la primera vez que lo creamos debemos guardarlo en un archivo localmente para posteriormente solo lo mandamos a llamar y no creamos el seed o un nuevo wallet. Se crea de la siguiente manera:
await erc20.createdStored().then((response) => {
erc20.keystore = response;
}).catch((error) => {
console.error(error);
});
La respuesta debemos guardarla en la variable erc20.keystore ya que lo mandaremos a llamar despues.
Ahora nos toca crear las direcciones de ethereum , aqui debemos definir la cantidad de wallets a crear y despues mandar a llamar el metodo para crearlas , para configurar la cantidad es de la siguiente manera:
erc20.numAddr = 10;
await erc20.generateAddress().then((response) => {
erc20.address = response;
}).catch((error) => {
console.error(error);
});
Esto nos creara 10 wallets y nos regresara un json de la siguiente manera:
[
{ address: '0xxxxxxxxxxxxxxxxxxxxxxxxxx' },
{ address: '0xxxxxxxxxxxxxxxxxxxxxxxxxx' },
{ address: '0xxxxxxxxxxxxxxxxxxxxxxxxxx' }
]
Una vez terminando este proceso , seguimos con el paso donde ya se creo el seed, se crearon las wallets y direcciones, ahora solo nos falta guardar el keystore en un archivo local, ya que ese archivo lo mandaremos a llamar cada vez que requiramos hacer algo , estos pasos anteriores , solamente son la primera vez que se configura todo. Lo siguiente es con el keystore guardado en el archivo.
Para guardar el keystore en un archivo, primero debemos mandarlo a llamar para que nos cree un json stringify, lo mandamos a crear de la siguiente manera:
await erc20.encodeJson().then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
La respuesta la mandamos a guardar en un archivo.
Ahora para decodificarlo y configurarlo para las demas acciones es de la siguiente manera:
erc20.keystoreJson = 'Aqui va el contenido del archivo que guardamos';
await erc20.decodeJson().then((response) => {
erc20.keystore = response;
}).catch((error) => {
console.error(error);
});
En donde dice erc20.keystoreJson va el contenido que guardamos en el archivo. La respuesta debemos guardarla en erc20.keystore , ya que es donde se guarda el keystore para ser llamado para envio de transaciones.
Debemos configurar la direccion del contrato inteligente, asi mismo las decimales , el simbolo y el nombre , se hace de la siguiente manera:
erc20.tokenAddr = 'Direcion eth del token';
erc20.tokenDecimals = 18; //las decimales del token
erc20.tokenSymbol = ''; //El simbolo del token
erc20.tokenName = ''; // El nombre del token
Si solamente sabes la direccion , configura la direccion del token , y existe un metodo que te regresa las decimales, el simbolo y el nombre del token , se llama de la siguiente manera:
erc20.tokenAddr = 'Direcion eth del token';
await erc20.getDataToken().then((response) => {
erc20.tokenSymbol = response.symbol;
erc20.tokenName = response.name;
erc20.tokenDecimals = response.decimals;
}).catch((error) => {
console.error(error);
});
El metodo te regresa la info y los guardas en sus respectivas variables.
Para ver balances configurar primero el provider, es decir la red o un nodo de geth , en este caso yo recomiendo usar infigura , se configura de la siguiente manera:
erc20.provider = 'https://ropsten.infura.io/v3/d487f3a42598413dbc5d5c5aff7edaae';
En este caso estoy usando la red de pruebas ropsten , registrate en infura, crea un proyecto y configuralo , en el caso que sea mainet , pones el provider de mainet.
Para poder ver el saldo eth de una direccion se hace de la siguiente manera:
await erc20.getBalanceAddress('address').then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
En donde dice address alli va la direccion de ethereum , el te regresara la cantidad de saldo en eth.
Para poder ver el saldo de tokens de una direccion se hace de la siguiente manera:
await erc20.getTokenAddress('address').then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
En donde dice address alli va la direccion de ethereum , el te regresara la cantidad de saldo de tokens.
Primero debes configurar el provider, visto en el paso anterior.
Antes de enviar ethereum te recomiendo calcular el gaslimit y gasprice , esto sirve para calcular que comision nos cobrara la red de ethereum, debemos mandar nuestra direccion de la cual enviaremos, tambien la direccion destino y la cantidad de eth a enviar.
await erc20.calculateGasLimitEth('DireccionLocal', 'DireccionDestinatario', cantidad).then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Esto nos regresara un json con los datos de gasLimit y gasPrice que al momento de enviar la transaccion debemos enviar, estos datos son los calculados de la red actual. La respuesta del json es la siguiente:
{ gasLimit: 21000, gasPrice: 1050000000 }
Esta es una respuesta que nos devolvio el calculo.
Ahora para enviar una transacion debemos ingresar nuestro password con el cual creamos nuestra wallet , mi direcion de origen , direcion destino , cantidad, gasPrice y gasLimit , para enviar se hace de la siguiente manera:
await erc20.sendETH('password', 'DireccionLocal', 'DireccionDestinatario', cantidad, gasPrice, gasLimit).then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Este te regresara el hash si la transaccion fue exitosa.
Primero debes configurar el provider, visto en el paso anterior.
Antes de enviar tokens te recomiendo calcular el gaslimit y gasprice , esto sirve para calcular que comision nos cobrara la red de ethereum, debemos mandar nuestra direccion de la cual enviaremos, tambien la direccion destino y la cantidad de eth a enviar.
await erc20.calculateGasLimitToken('DireccionLocal', 'DireccionDestinatario', cantidad).then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Esto nos regresara un json con los datos de gasLimit y gasPrice que al momento de enviar la transaccion debemos enviar, estos datos son los calculados de la red actual. La respuesta del json es la siguiente:
{ gasLimit: 40308, gasPrice: 1050000000 }
Esta es una respuesta que nos devolvio el calculo.
Ahora para enviar una transacion debemos ingresar nuestro password con el cual creamos nuestra wallet , mi direcion de origen , direcion destino , cantidad, gasPrice y gasLimit , para enviar se hace de la siguiente manera:
await erc20.sendTokens('password', 'DireccionLocal', 'DireccionDestinatario', cantidad, gasPrice, gasLimit).then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Este te regresara el hash si la transaccion fue exitosa.
Primero debemos crear una cuenta en etherscan.io y crear una api , o en su defecto dejar la default, lo que si debemos configurar es la red, decir si es ropsten o mainet y el timeout, se hace de la siguiente manera:
erc20.apikeyEtherScan = 'YourApiKey';
erc20.networkEtherScan = 'ropsten';
erc20.timeoutScan = 3000;
Las redes que soporta son : morden //Esta es la mainet ropsten rinkeby
Esto es para regresar el listado de transacciones enviadas y recibidas de una direccion. Se hace la llamada de la siguiente manera:
En DireccionLocal va mi direccion.
await erc20.getTxtEth('DireccionLocal').then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Esto nos regresara un json de la siguiente manera:
[ { type: 'Sent',
blockNumber: '7327297',
timeStamp: '1581701462',
hash:
'0xeb144420c9edba10281646b357877ac0debeec5ecdde6174b87175ec8f746b07',
nonce: 18,
from: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
to: '0xf3edd3916edcc0ee8f76ad0d33f2bcf0c424d899',
value: 0.001,
gas: 21630,
gasPrice: 1.197971241e-9,
isError: 0,
confirmations: 62 },
{ type: 'Received',
blockNumber: '7270076',
timeStamp: '1580945739',
hash:
'0xa2d4969333699440f54a1e7fc634cb19ccee5b9baf5d8a246fc3e8b82d79d706',
nonce: 29486096,
from: '0x81b7e08f65bdf5648606c89998a9cc8164397647',
to: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
value: 1,
gas: 21000,
gasPrice: 2e-9,
isError: 0,
confirmations: 57283 },
{ type: 'Received',
blockNumber: '7270075',
timeStamp: '1580945723',
hash:
'0xbef98dca4a169799b813f26a95b9db040cd7a842915959a29114b3ca4cfe6a7d',
nonce: 29486094,
from: '0x81b7e08f65bdf5648606c89998a9cc8164397647',
to: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
value: 1,
gas: 21000,
gasPrice: 2e-9,
isError: 0,
confirmations: 57284 },
{ type: 'Received',
blockNumber: '7270073',
timeStamp: '1580945690',
hash:
'0xca72913e032b0dc96da8861470d83733f10c8b0e58a8a202ebe0a76e06d86314',
nonce: 29486092,
from: '0x81b7e08f65bdf5648606c89998a9cc8164397647',
to: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
value: 1,
gas: 21000,
gasPrice: 2e-9,
isError: 0,
confirmations: 57286 },
{ type: 'Received',
blockNumber: '7269361',
timeStamp: '1580936345',
hash:
'0x0a43818a1d4a8e1ae5049c09d2ef854225ec4829b012f545dcfc05a05321d279',
nonce: 41,
from: '0x8ab9af40b0e5ef87a8ab94149ff9cb06d5fcd599',
to: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
value: 0.05,
gas: 21000,
gasPrice: 6e-9,
isError: 0,
confirmations: 57998 } ]
Este es un ejemplo , isError si es 1 es transaccion erronea, si es 0 es transaccion exitosa.
Esto es para regresar el listado de transacciones enviadas y recibidas de una direccion. Se hace la llamada de la siguiente manera:
En DireccionLocal va mi direccion.
await erc20.getTxtTokens('DireccionLocal').then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
Esto nos regresara un json de la siguiente manera:
[ { type: 'Sent',
blockNumber: '7310213',
timeStamp: '1581481211',
hash:
'0x50c9c168a02ff2a3855650f8941f6b01280bdb0e831569a78f7d505350704148',
nonce: 17,
from: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
to: '0x5bc6452d23386effed5651912b3fdac2f4595f67',
value: 1,
gas: 57583,
gasPrice: 5.5e-9,
isError: 0,
confirmations: 17173 },
{ type: 'Received',
blockNumber: '7269372',
timeStamp: '1580936482',
hash:
'0x598da68aabb7837c766805f722ae1956eed70ab936de8faf6765fd991ff7517f',
nonce: 42,
from: '0x8ab9af40b0e5ef87a8ab94149ff9cb06d5fcd599',
to: '0xd353a3fd2a91dbc1faea041b0d1901a7a0978434',
value: 15,
gas: 80083,
gasPrice: 8e-9,
isError: 0,
confirmations: 58014 } ]
Este es un ejemplo , isError si es 1 es transaccion erronea, si es 0 es transaccion exitosa.
Debemos enviar las 12 palabras clabes que guardamos de nuestro seed, y crear un password
erc20.seed = 'MIs 12 palabras';
erc20.password = 'Un password';
Despues creamos el keystore , y una vez hecho eso lo demas de crear las wallets y demas es lo mismo que los pasos anteriores
await erc20.createdStored().then((response) => {
erc20.keystore = response;
}).catch((error) => {
console.error(error);
});
Para un error escribir directamente el problema en github issues o enviarlo al correo miguel@lomeli.io. Si desea contribuir con el proyecto por favor enviar un email.
#Miguel Lomeli , #MiguelLomeli , #Lomeli , #Toopago , #ethereum , #tokens , #wallets , #erc20