huemulCoin, la segunda criptomoneda chilena

Héctor Palma Téllez
devsChile
Published in
9 min readOct 31, 2017

Siguiendo el ejemplo de Chaucha, en devsChile también pensamos crear una criptomoneda que sea propia de la comunidad y que impulse ciertos tipos de transacciones entre usuarios del Slack (esto último aún en definición).

Afortunadamente, en menos de un par de horas es posible estudiar y entender lo suficiente para crear una criptomoneda válida con el estándar que utilizan los tokens en la red de Ethereum. La versión actual del estándar es para creación de tokens se llama ERC20, que no es más que una guía a la hora de definir el comportamiento y creación de una criptomoneda en esta red.

Así se ve una cuenta nueva vacía en Metamask, en la red Ropsten

Para pruebas, utilizaremos Metamask, una extensión para Chrome que permite acceder a wallets de Ethereum. Además, permite crear nuevos wallets en caso de ser necesario y cuenta con opciones para no operar en la red principal de Ethereum, que es donde haremos las pruebas.

Arriba a la izquierda es donde elegimos en qué red posicionarnos para hacer transacciones, para este tutorial usaremos la Ropsten Test Net. Ya que las pruebas no son gratis-gratis, necesitamos tener más que 0 ETH para poder cubrir los costos. Como estamos en una red de prueba, existen ETH falsos válidos en esta red, que debemos cargar utilizando faucets. El faucet elegido para este caso es el Ethereum Ropsten Faucet, desde ahí podemos cargarle 3 ETH (como se ve en esta transacción).

Saldo total después de usar la faucet

Después de eso, ya contamos con fondos suficientes para continuar con los pasos siguientes.

Las particularidades de mi token

Lo principal a definir antes de generar un token con este método son las características que le permiten a una criptomoneda ser únicas. Para ejemplo usaremos las características del Bitcoin:

  • Nombre: Bitcoin
  • Símbolo: BTC
  • Decimales: 8
  • Cantidad total: 21.000.000

Las dos primeras son bastante evidentes y simples de definir, las dos últimas no tanto: la cantidad total (o total supply) es la cantidad máxima que existirá de esta moneda en circulación de acuerdo a la definición de su creación. La cantidad de decimales es cuánto es el mínimo de esta moneda que puedes tener; así, por ejemplo, si elegimos 0 decimales, no puedes tener 0.5 de la moneda; es nada o algo.

El estándar en decimales actualmente es 18, como puedes ver en OmiseGO y TenX. Pero es algo que cada proyecto decide, por ejemplo, Bitquence y Metal han decidido tener solo 8 decimales.

Si has llegado hasta aquí, considérate un 100tifiko :nofake:

Escribamos en Solidity

La definición de la moneda ocurre en un archivo que llamaremos contrato. El detalle del contrato está escrito en Solidity, un lenguaje muy parecido a JavaScript, que tiene menos de 4 años de edad. No hay que entender todo el contenido del documento para este ejemplo, ya que seguiremos un documento estándar.

El contrato completo está en este gist pero la parte importante es:

function HuemulCoin() {
balances[msg.sender] = 17373831;
totalSupply = 17373831;
name = “Huemul Coin”;
decimals = 3;
symbol = “HML”;
}

Para más contexto aquí hay un extracto del contrato de DentaCoin:


2. name Dentacoin
3. totalSupply 8000000000000
4. decimals 0

10. symbol ٨
Los admins peleando por definir el símbolo de huemulCoin.

🔥La prueba🔥

La dirección actual que usemos en MetaMask al momento de realizar las pruebas se convertirá en el propietario, por lo que es importante tomar todas las medidas necesarias para proteger y resguardar la información de acceso a esta dirección.

La herramienta desde la que generaremos la publicación del contrato es el Solidity Remix Compiler. La función de este compilador es revisar el código de nuestro contrato y publicarlo a la blockchain luego de realizadas las modificaciones necesarias. En este editor de código pegaremos el código completo de nuestro contrato.

Luego, hay que ir a Settings a la derecha y elegir la versión del compilador. Para mayor seguridad, elegiremos la última que no tiene nightly en su nombre. En este caso es la 0.4.18. Las demás casillas deben quedar sin marcar.

La versión de Solidity que elegimos en el compilador es necesaria para más tarde verificar el contrato en Etherscan.

El siguiente paso es ir a la pestaña Run, debemos asegurarnos que el environment sea Injected Web3 (esto selecciona a MetaMask como intermediario), ahí podemos elegir qué dirección usar, elegir un límite de gas y un límite al precio del gas que utilizaremos.

¡Bravo! ¡Si has leído hasta aquí eres todo un Mr. Robot! Queda poco 👏🏽

¿Qué es el gas?

Las transacciones no son gratuitas; como dijimos al comienzo, el gas es la forma en la que estos costos se materializan, utilizando ETH. Para obtener un precio menor, podemos reducir el límite y el precio máximo de estos parámetros, pero existe el riesgo de que si están demasiado bajos, la transacción falle y no se devuelve el 100% de lo invertido. En caso de que la transacción sea exitosa, se devolverá a la dirección de origen todo el gas no utilizado. Para un cálculo más exacto, puedes usar la ETH Gas Station Calculator.

En el select abajo de las opciones de wallet, gas y dirección de propietario, hay 3 opciones. Debemos elegir la que se llama como nuestro token (en nuestro caso, huemulCoin). En el campo at address pegamos la dirección actual de nuestra wallet y le damos clic a Create, lo que generará la ventana que tenemos a la izquierda.

Aquí tenemos otra posibilidad de definir los costos de gas involucrados para reducir lo que pagaremos. Como estamos en una red de prueba, no es un tema al que debamos prestarle tanta atención.

Al hacer clic en Submit, debemos ir a Metamask y hacer clic en la última transacción en proceso, lo que nos llevará a algo así:

Creación del contrato en la red de Ropsten

Esta transacción al finalizar terminó costando 0.039271048 ETH, unos 12 dólares o $7.500 pesos chilenos.

¿Dónde está la plata?

De acuerdo al código del contrato, estipulamos que el monto total posible fuera creado y enviado a la dirección del creador. Sin embargo, al ser esta una moneda nueva, no existe registro en el wallet de que deba estar esperando una transferencia, por lo que debemos manualmente indicarle la dirección del contrato.

Saldo total de $HML

En MetaMask, tenemos dos pestañas: para ver saldos y movimientos. En la izquierda está lo común junto a todas las transacciones realizadas, en la derecha están los tokens que debemos agregar manualmente. Ahí pegamos la dirección del contrato que aparece en la transacción. Esto generará automáticamente que se llenen los campos de símbolo y decimales, que de otra forma habría que ingresar manualmente.

¡:YA:!, con este paso ya hemos generado un token válido que puede ser transferido y potencialmente tiene un valor comparable a otras criptomonedas, pero ese tema viene ya después, de acuerdo a oferta y demanda, aparición y administración por parte de exchanges y si es que el token tiene algún fin específico.

¿Creíste que quedaba poco para terminar este artículo?

Enviando $HML

Para enviar este token (como fue creado en la red de prueba Ropsten) debemos crear un wallet en la misma red. Usaremos MyEtherWallet en una sesión de Chrome incógnito para este propósito. Acá sí manualmente tenemos que agregar el contrato, el símbolo y la cantidad de decimales para poder recibir huemulCoin.

Transacción desde MyEtherWallet para enviar $HML

Ahora tenemos otro pequeño obstáculo: Metamask muestra el saldo de un token ERC20, pero al momento de utilizarlo, sólo sirve para enviar ETH. Acá volvemos a usar MyEtherWallet con acceso a través de Metamask, ya que MyEtherWallet sí permite enviar tokens ERC20. Hay que repetir el paso de agregar el token, lo que cargará el saldo asociado a la dirección. Luego, a la izquierda llenamos los datos: a qué dirección enviar, monto y tipo de token. Por defecto estará marcado ETH, pero tendremos opciones después de agregar nuestro token nuevo.

Luego de generar la transacción, confirmamos con enviar y aparecerá una ventana de Metamask con los detalles, donde tenemos la última oportunidad de revisar los datos y modificar la cantidad de gas que queremos gastar (similar a la creación del contrato). Después, al hacer clic en Submit ya estará la transacción en proceso y ya la podremos ver en Etherscan. Este último hito confirma que todos los pasos básicos para la generación de un token se han realizado y ya podemos comenzar a generar transacciones en la red de Ethereum con nuestra moneda personalizada.

Verificación del token

Existe un paso adicional que, en caso de crear un token que queremos utilizar en fines más serios, debe ser tomado en cuenta. Este paso es la verificación del código fuente de nuestro contrato. Es opcional, porque el token está listo para ser usado y podríamos repartirlo entre amigos o usarlo como moneda de cambio sin ningún problema, con el único requisito: los usuarios deben tener un wallet compatible con tokens ERC20.

Para verificar el contrato, debemos ir a la transacción inicial de su creación, elegir la pestaña Contract Code y luego hacer clic en Verify And Publish.

Campos necesarios para la verificación del contrato

Utilizamos los mismos campos que ya definimos antes y el contrato lo podemos traer del mismo gist. Y listo nuestro contrato ha pasado la verificación

Basta de pruebas

Ahora que hicimos todos los pasos sin tener que corregir errores, podemos movernos al mundo real: la red principal de Ethereum.

Aquí es donde no existen faucets para cargar ETH de prueba, por lo que hay que utilizar platita real. Para este paso sí es más importante revisar bien dónde poder conseguir pequeños ahorros al momento de enviar la transacción de publicación del contrato a la red principal.

Como nuestro contrato ya aprobó no tener problemas, es cosa de repetir los pasos anteriormente mencionados esta vez en la red principal, incluyendo la verificación final.

Un paso extra es la verificación propia de Etherscan, donde podemos agregar enlaces sociales relacionados a la organización o persona detrás del token creado. Esta verificación te permite, además, agregar el logo de tu moneda en Etherscan, como hacen tokens como NEO.

Luego de salir al aire

Para confirmar que huemulCoin existe, puedes ver:

Preguntas Posibles

  • ¿Se puede minar?
    Esta moneda no, pero si creas una propia, con algunas modificaciones, podrías.
  • ¿Cuánto cuesta crear una criptomoneda ERC20?
    El contrato para la publicación de huemulCoin terminó costando menos de 4 dólares, después de mover un par de parámetros (e intentos fallidos por falta de suficiente gas). Aquí puedes ver la transacción.
  • ¿Cómo minimizar el precio en la creación del contrato?
    Existen varias formas de llegar a un costo final de publicación menor del contrato. En resumen, si no te importa esperar un par de minutos, puedes reducir el monto de gas máximo a gastar. Aparte, busca qué partes de tu contrato se pueden reducir o hacer más compacto.
  • ¿Cómo compro huemulCoin?
    Pregunta en #moneas.

Referencias

--

--