Foto de Erwan Hesry en Unsplash

Cómo lanzar tu primer token

Este es el segundo tutorial de la serie de tutoriales de bitfwd donde enseñamos a los usuarios cotidianos (¡sí! Ese es usted, mi querido lector) cómo interactuar con blockchain. Este es un tutorial más avanzado y requerirá más herramientas que antes, pero haré todo lo posible para guiarlo a través de los pasos. ¡Vamos a empezar!

Al tratar de ser lo más inclusivo posible, he hecho este tutorial extremadamente minucioso. Para usuarios más avanzados, siéntase libre de pasar al Paso 4, donde aprenderá a usar saldos de exportación.

Una nota sobre cómo pedir ayuda

Cuando solicito ayuda, solo tengo una regla: tratar de incluir tanta información como sea posible. (Por ejemplo, la dirección del contrato, los errores que aparecen en su terminal, su tipo de dispositivo). De esta manera, no necesitaremos ir y venir en los comentarios. Siéntase libre de unirse a nuestro telegrama y pedir ayuda allí. Contestaré tan pronto como tenga tiempo.

Prerrequisitos

Debe seguir el tutorial de Moritz Neto sobre cómo implementar su propio contrato.

Lo que aprenderás hoy

  1. Aprenderá los conceptos básicos de cómo navegar en la línea de comandos.
  2. Aprenderá los conceptos básicos sobre cómo bifurcar y clonar repositorios en Github.
  3. Aprenderá cómo instalar Nodejs a través de un administrador de versiones llamado NVM.
  4. Aprenderá a usar Parity (una implementación de geth de Rust) para extraer saldos de cuentas de la cadena de bloques Ethereum.
  5. Aprenderá a ejecutar Parity para poder transmitir transacciones localmente desde su computadora.
  6. Aprenderá sobre el tamaño decimal de la ficha, que aparece en cada contrato.
  7. Aprenderá (¡por fin!) Sobre cómo preparar la secuencia de comandos de lanzamiento aéreo para lanzar tokens por usted.
  8. También aprenderá cómo puede implementar su propia función personalizada de lanzamiento aéreo para que pueda determinar cuántas fichas debe lanzar cada usuario.

Paso I: Navegando por la línea de comando.

Abra un terminal y comience escribiendo:

pwd

Esto significa "directorio de trabajo de impresión" y le dice dónde se encuentra actualmente. Elija un nombre para el directorio donde desea almacenar su código y escriba para crear la carpeta. (mkdir = ¿Crear directorio, ponerse al día?)

mkdir "cool-folder-name-here"

Ahora, vamos al directorio con el siguiente comando.

cd "cool-folder-name-here"

Esto significa "cambiar directorio" y moverá su ubicación actual a la carpeta recién creada. Puede verificar esto ejecutando pwd nuevamente. Este será el alcance de los comandos de terminal que aprenderá hoy, pero si desea obtener más información, consulte este recurso y las páginas de manual. Como ejercicio, intente averiguar qué hace el comando "ls".

Asegúrate de tener también instalado git. Puede encontrar los archivos de instalación aquí.

Paso II: Bifurcación y clonación.

Ahora que tenemos nuestro terminal listo, necesitamos obtener el código en nuestras computadoras. Este proceso se llama clonación. Dado que podríamos hacer cambios en el código, es mejor clonar una bifurcación del código que la propia base de código. La bifurcación nos permite hacer modificaciones al código sin afectar el repositorio original.

Aprendiendo a bifurcar ...

Inicie sesión en Github y visite el repositorio de código. En la esquina superior derecha hay un botón de bifurcación en el que puede hacer clic para bifurcar el repositorio en su cuenta.

Cuando termine de bifurcarse, notará que lo ha redirigido a su propia copia del repositorio (puede decir que es una copia porque en la URL, tendrá su nombre en el medio en lugar de bitfwdcommunity).

Cerca del lado derecho central de la pantalla hay un botón de "clonar o descargar" en el que hará clic. Asegúrese de seleccionar "Clonar con HTTPS". Copie el enlace y péguelo en el terminal con este comando.

clon de git "pegar-la-url-aquí"

Cuando presionas enter, te pedirá tu nombre de usuario y luego tu contraseña (usa tu nombre de usuario y contraseña de Github). Tenga en cuenta que las contraseñas no se muestran cuando las escribe en la terminal. Cuando haya terminado, comenzará a descargar el repositorio de código en su computadora. Una vez que haya terminado, escriba el siguiente comando:

cd Airdropper

Esto lo llevará al repositorio de Airdropper, donde ejecutará los comandos necesarios para usar esta herramienta. Ahora abra la carpeta Airdropper en su herramienta de edición de texto favorita (mi favorita es Atom).

Paso III: Instalación de Nodejs.

Este script de lanzamiento aéreo se ejecuta en Nodejs, que recomiendo que instales a través del Administrador de versiones de nodo. La razón por la que instalaremos Nodejs usando NVM en lugar de cualquier otra forma es porque permite un desarrollo más sostenible. NVM le permite tener un control de grano fino sobre qué versión de nodo está utilizando, lo cual es útil si está trabajando en proyectos con muchas versiones de nodo diferentes como dependencias.

Para instalarlo, usará el siguiente comando

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | golpetazo

Reinicia tu terminal cuando hayas terminado. ¡Ahora puedes instalar nodejs! Puedes hacer esto con un simple

nodo de instalación de nvm

Paso IV: Exportar saldos de cuenta

Para poder enviar con éxito nuestro increíble token a otros, primero debemos obtener una lista de todas las direcciones a las que deseamos enviar. La forma más fácil de lograr esto es utilizando la función de estado de exportación de Parity.

Lo primero que debe hacer es instalar la paridad.

Después de haberlo instalado, debe sincronizarlo con el bloque del que desea tomar una instantánea. Esto significa que si desea extraer todos los saldos en el bloque 2 000 000, debe sincronizar al menos el bloque 2 000 000. Tenga en cuenta que debe ejecutarlo con el modo de archivo y fat-db activado. El comando que usará para lograr esto es:

paridad -pruning = archive -fat-db = on -chain = ropsten

Puede usar la cadena que desee, pero en este tutorial usaremos ropsten. Para confirmar que la paridad tiene la configuración correcta, se iniciará con un montón de configuraciones que se muestran. Habrá una línea que dice "Configuración de base de datos de estado". Comprueba que esto dice archive y fat-db.

La razón por la que queremos activar el modo de archivo y fat-db es porque no queremos eliminar el estado trie donde se almacena toda la información de la balanza. Cuando la paridad exporta el estado, genera el saldo iterando sobre el estado trie. Una vez que haya sincronizado el bloque en el que desea exportar el estado, puede dejar de sincronizar la paridad.

Supongamos que deseamos que nuestros saldos exportados cumplan con las siguientes reglas:

  1. Queremos saldos en el bloque 2 000 000.
  2. Queremos saldos superiores a 1000 RtETH
  3. Queremos saldos por debajo de 500 000 RtETH

Dadas estas reglas, usaríamos el siguiente código:

estado de exportación de paridad --chain = ropsten -no-storage -no-code -min-balance = 1000 -max-balance = 500000 -at = 2000000 balances.json

Este proceso puede tardar varias horas en completarse.

Al hacerlo, descubrirá que es importante establecer un saldo máximo; de lo contrario, algunos usuarios con saldos enormes pueden terminar con todos sus tokens.

Paso V: Transmitiendo Transacciones

La transmisión de transacciones a la red Ethereum se puede realizar de dos maneras a través de un nodo remoto como Infura o mediante un modo de paridad local. Como estaremos transmitiendo muchas transacciones, es mejor usar su propio nodo. Si ha sincronizado su nodo de paridad usando fat-db y con el modo de archivo activado, se sincroniza mucho más lento de lo que lo haría si estuviera en modo rápido. Para restablecer su nodo y hacer que la sincronización warp vuelva al estado más reciente, puede eliminar la base de datos y luego volver a iniciarla con los siguientes comandos.

paridad db kill -chain = ropsten
paridad -chain = ropsten -pruning = fast -fat-db = off

Deje que esto se ejecute en segundo plano mientras preparamos el resto de las herramientas.

Paso VI: Tamaño decimal del token

Antes de comenzar a configurar el Airdropper, hablaré un poco sobre el campo de decimales en el contrato del token. El campo de decimales básicamente describe cuán divisible será su token. La razón por la que esto es importante es porque no todas las fichas deberían ser divisibles (por ejemplo, ¿quieres una ficha divisoria de "unicornio"?). El valor predeterminado para decimales es 18. El impacto del campo de decimales es que todos los valores de token deben tener esto en cuenta (es decir, tener 18 ceros adicionales).

Paso VII: Preparando el Airdropper

Vamos a configurar el lanzador aéreo ahora. El archivo principal está en index.js. Echemos un vistazo a las líneas 18–23, que contienen algunas variables que podemos modificar. Comenzaremos haciendo un lanzamiento aéreo muy básico de 1 token a cada usuario.

AIRDROP_QTY se refiere a la cantidad fija de tokens que está soltando a cada usuario. El valor predeterminado se establece en 1.
DURACIÓN es el tiempo entre envíos de transacciones.
GAS_LIMIT y GAS_PRICE son los límites y precios respectivos que está dispuesto a pagar por su transacción. Puede verificar para ver cuántas transacciones pendientes hay en etherscan antes de estimar cuánto gas está dispuesto a pagar por transacción. El valor predeterminado en el que lo dejé es 5gwei.

Como ejemplo, si su contrato tiene 1 000 000 tokens, deberá establecer el valor INITIAL_TOKENS en 1 000 000 000 000 000 000 000 000. (1 000 000 * 10 ^ d, donde d son los valores decimales en su contrato , siendo 18 el valor predeterminado).

Luego, necesitamos configurar nuestro archivo de configuración personalizado. Cree un nuevo archivo en el directorio raíz (al lado de index.js) llamado "config.js". Se verá algo como esto …

module.exports = {
    privateKey: "ponga-su-clave-privada-aquí",
    contractAddress: "ponga-su-dirección-de-contrato-desplegada-aquí",
    abi: "pon tu contrato desplegado-abi-aquí"
}

Si en su lugar usó una semilla, puede eliminar el campo privateKey y reemplazarlo con un campo semilla y Airdropper seguirá funcionando. Si no conservó una copia de su ABI, deberá volver a compilar el contrato en la remezcla y copiar la ABI (está debajo del campo de código de bytes).

Una vez que haya creado un archivo config.js y haya terminado de personalizar los campos modificables, ahora podrá lanzar tokens (¡finalmente!). Justo antes de llegar, revisaremos una lista de verificación final para asegurarnos de que todo salga bien ...

Lista de verificación de Airdrop

  1. Nodo de paridad totalmente sincronizado. (Puede verificar qué bloque está haciendo y compararlo con etherscan).
  2. Suficientes RtETHs en su cuenta con los tokens. Puede obtener más de nuestro grifo. Como estimación aproximada, 3000 transacciones en 5gwei cada una costará alrededor de 0.5 RtETH (¡así que asegúrese de tener suficiente!)
  3. La página de su cuenta se abre en etherscan (¡en ropsten!) Para que pueda ver las transacciones pendientes que se transmiten a la red ethereum.

Si tiene ambas cosas, estará listo para ejecutar Airdropper con el siguiente comando.

nodo index.js

Notará que la secuencia de comandos comenzará a "colgarse" y en este punto puede actualizar la página ropsten etherscan y comenzar a ver las transacciones pendientes. A medida que se extrae cada transacción, se imprime el hash de la transacción y los datos de índice. a tu terminal. Déjelo correr por un momento y cuando termine, terminará solo.

Puede buscar su contrato de token aquí. Cuando visita la dirección, puede hacer clic en el campo Titulares de tokens y luego puede ver la distribución de tokens de todos los tokens. Cuando finalice su contrato, verá que los tokens se distribuyen en función del saldo total de RtETH. Notarás que todos tus tokens todavía están con tu cuenta (¡porque solo enviamos uno a todos los demás!)

Paso VIII: función de lanzamiento personalizado

En la práctica, no solo quieres que todos tengan un token. Tal vez tengas una idea genial sobre cómo deberían distribuirse los tokens. Por ejemplo, tal vez piense que los usuarios deberían recibir recompensas de tokens proporcionalmente en función de la cantidad de RtETH que tengan. Por ejemplo, si solo hay dos usuarios a los que desea lanzar desde el aire y uno posee el 10% del RtETH total y el otro posee el 90% del RtETH, entonces deben recibir el 10% de los tokens y el 90% de los tokens, respectivamente.

Afortunadamente para ti, ya he implementado esta función para ti. Ahora, antes de que podamos lanzar nuestros tokens nuevamente, deberá volver a implementar sus contratos y actualizar la dirección en su archivo config.js. También deberá asegurarse de que el valor INITIAL_TOKENS en el archivo index.js en la línea 23 coincida con el saldo exacto que ha acuñado. Esto es importante ya que este valor se usa en la función de cálculo de token.

Como ejemplo, si su contrato tiene 1 000 000 tokens, deberá establecer el valor INITIAL_TOKENS en 1 000 000 000 000 000 000 000 000. (1 000 000 * 10 ^ d, donde d son los valores decimales en su contrato , siendo 18 el valor predeterminado).

Función de lanzamiento personalizado

Para actualizar nuestra función de cálculo de token, iremos a la función llamada "cálculoDrop" y comentaremos la línea 90 sin comentar la línea 84–89. Esta función aquí toma el saldo total y el saldo proporcional y devuelve la cantidad de tokens necesarios para enviar a esta persona. Una vez que haya hecho esto, vuelva a revisar la lista de verificación y luego podrá ejecutar el código.

Ahora puede verificar su contrato de tokens en Etherscan nuevamente y esta vez, verá que los tokens están mucho más distribuidos.

Fichas bastante distribuidas.

Si está preparado para el desafío, intente escribir su propia función de distribución de tokens (y luego envíe un PR y luego podremos tener una biblioteca completa de funciones de lanzamiento personalizado);)

Conclusión

¡Bueno, eso es todo! Ahora ya habrá aprendido cómo implementar su primer contrato Y distribuir sus tokens de manera equitativa. ¿No quedó nada claro en este tutorial? ¿Tienes preguntas sobre cómo implementarlo? ¡Házmelo saber en los comentarios!

Si te gustó este contenido (o quieres que responda tus preguntas más rápido;) ¡dame algunos aplausos! Si estás interesado en todo lo relacionado con blockchain, sígueme en Twitter.