Mis dos primeras semanas en web3

Tabla de contenidos

.



¿Por qué web3?

Como mucha gente me interesé por las criptomonedas cuando ya se hicieron famosas, especialmente famosas en torno a los precios del Bitcoin. Hace unos 2 años empecé a leer sobre el tema, invertí algo de dinero sobrante, obtuve algún pequeño beneficio y profundicé en el tema durante un tiempo.

Después de ese tiempo me involucré más y más en el seguimiento de las discusiones técnicas y los desarrolladores (sobre todo JavaScript / TypeScript) en Twitter. En los últimos meses la discusión sobre la internet descentralizada se estaba apoderando realmente de mi tablero de burbujas de Twitter, sobre todo gracias a Nader Dabit al que seguía antes de que se lanzara de lleno a la web3.

El concepto de Internet descentralizada, alternativa al oligopolio de las grandes empresas tecnológicas (Amazon, Google, Microsoft) parecía muy interesante. Luego empecé a leer sobre Finanzas Descentralizadas (DeFi), contratos inteligentes, NFTs – todo parece ser ideas que tienen un potencial real para cambiar el internet como lo conocemos hoy en día.

Me gusta aprender sobre el tema en los ejemplos reales, ensuciándome las manos y cometiendo errores. Así que he decidido dedicar parte de mi tiempo libre a aprender más sobre el tema.



Pocos artículos con los que empecé

.

Por supuesto que había más, me chupó la madriguera de discusiones, hilos y artículos sobre web3 en twitter. No anoté todos los que leí pero estos 3 los recuerdo.



Primeros pasos

  • Documentos de Ethereum – Estos los empecé a leer inmediatamente después de que decidiera aprender más sobre web3. Es un gran recurso y francamente me sorprendió que estuviera tan bien escrito. Usted aprenderá allí sobre las cuentas, los bloques, la minería, la acuñación, los contratos inteligentes, el gas y más. Lo recomiendo encarecidamente.

Me uní a algunos grandes canales de Discord – es más fácil ayudarse mutuamente y aprender de los errores de los demás, pocos puedo recomendar:

.

  • Buildspace – el texto de su página web lo dice todo: “Si eres un desarrollador que siente curiosidad por web3 pero no estás seguro de por dónde empezar, este es tu sitio. Aprende + empieza a construir cosas geniales ahora mismo, gana NFTs, accede a oportunidades de trabajo secretas en cripto.”.
  • Desarrollador DAO – Tienes que acuñar un token gratis para unirte a la comunidad pero merece la pena. Uno de los creadores es el mencionado anteriormente Nader Dabit.



Primer proyecto

En BlockchainJS hubo una discusión sobre cómo empezar a aprender sobre web3 y qué tutorial ver. Todos decidimos que buildspace es el mejor recurso y empezamos a construir nuestra primera app, compartiendo experiencia en el servidor.

La app es Wave Portal:

    • Utilizar Solidity básico para desarrollar el contrato inteligente
    • Ejecutar y probar el contrato localmente
    • Escribir y desplegar contrato inteligente en blockchain para rastrear qué usuario nos saludó, desde qué dirección de billetera.
    • Desplegar el contrato en la red Ethereum Rinkeby – que es una red de prueba en la que usamos eth falsos
    • Conectar el monedero a la app
    • Recompensar aleatoriamente a los useres que nos saludaron con eth rinkeby falsos
    • Construir el frontend en React y conectarlo con el contrato desplegado

.

  • Dejar que los usuarios envíen un mensaje junto con su saludo. Tener esos datos guardados en la blockchain. Mostrar esos datos en nuestra web para que cualquiera pueda venir a ver toda la gente que nos ha saludado y sus mensajes.



Notas

    • Transacción – es cualquier acción que queramos realizar en Ethereum blockchain. Por ejemplo: desplegar contrato inteligente, enviar a alguien ETH, en nuestra app es añadir ondas desde la aplicación

.

  • Etherscan es una herramienta que te ayuda a ver los datos relativos a cualquier transacción pendiente o confirmada del blockchain de Ethereum. Dado que Ethereum es una blockchain pública y abierta, cada vez que alguien interactúa con ella, la acción se registra en el historial de transacciones y está abierta para que cualquiera pueda verla.



Mining

Cualquier transacción en blockchain necesita ser minada por mineros. Esto significa que la recogen, realizan los cálculos para añadirlos al bloque utilizando la potencia del ordenador y reclaman la recompensa por ello. Una vez que la transacción es minada, se transmite a la blockchain como una transacción legítima. A partir de ahí, todo el mundo actualiza su copia de la blockchain.

El WavePortal está construido sobre la red de prueba de Ethereum Rinkeby, por lo que no tuve que utilizar el valor real de ETH. Las redes de prueba son ejecutadas por mineros reales e imitan los escenarios del mundo real. Así que esta es la forma en que la transacción completa se añade a blockchain:

  1. Difundir la transacción (onda con el mensaje fue hecho por la dirección de la cartera de los usuarios específicos)
  2. Esperar a que sea recogida por los mineros reales
  3. Esperar a que sea minado
  4. Esperar a que se emita de nuevo a la blockchain diciendo a todos los demás mineros que actualicen sus copias

¿Pero cómo probarlo localmente para ver si la ondulación funciona? Tendría que tener ETH para pagar transacciones en el mundo real usaría ETH*.*
Para añadir ETH falsos a la dirección de mi cartera necesitaba reclamar ETH falsos de algo que se llama faucet. Había pocos recomendados por el equipo de buildspace.



Desplegar contrato

  • Para desplegar un contrato necesitamos iniciar sesión en la red para autentificarnos como usuario – ahí es donde necesitamos la clave pública y privada de la billetera.
  • Después de desplegar, recibía la dirección del contrato – podía buscarla en https://etherscan.io/ . En mi caso era https://rinkeby.etherscan.io/ – etherscan para la red de prueba de Rinkeby.
  • Cuando estaba construyendo el contrato inteligente y alguna versión básica ya estaba desplegada en la blockchain – cada vez que quería hacer un cambio tenía que redesplegar todo el contrato. Básicamente era nuevo, no la versión actualizada de uno antiguo.
    ¿Por qué? Porque los contratos inteligentes son inmutables, no pueden cambiar.
    Así que si yo saludara unas cuantas veces a una versión anterior del contrato, tendría que olvidarme de él, ya no lo utilizaría. Después de la redistribución vincularía mi aplicación con un contrato nuevo y brillante.



Límite-de-gas

La siguiente parte de la aplicación de construcción era enviar eth (desde la red de pruebas) a la persona que saludaba en mi portal de forma aleatoria. El problema es: si el contrato envía un premio entonces el que saludó necesita pagar más gas ya que estamos ejecutando más código

    • Estimar la gasolina es un problema difícil y una solución fácil para esto es establecer un límite.
    • En el lado del cliente añadí wavePortalContract.wave(message, { gasLimit: 300000 }) para hacer que el usuario pague una cantidad de gas establecida de 300.000. Y, si no lo usan todo en la transacción, se les devolverá automáticamente.
    • Así, si una transacción cuesta 250.000 de gas entonces después de que esa transacción se finalice se devolverán esos 50.000 de gas sobrantes que el usuario no utilizó

.



Contrato-de-financiación

¿Por qué? Para enviar ETH a alguien, nuestro contrato necesita tener ETH en él.* No estamos enviando el eth directamente desde nuestra cuenta. El propio contrato tiene su propio saldo, proporcionado por nosotros 🙂

Cómo funciona esto es que cuando desplegamos el contrato por primera vez, lo “financiamos”.

Configurar el constructor correctamente hace que el contrato sea pagable:

constructor() payable {
  console.log("We have been constructed!");
}

Después de desplegar el contrato financiado – podemos comprobarlo en Etherscan para ver el balance. En mi caso se ve como en la pantalla de abajo – financié mi contrato con 0.01 ETH falsos. Le falta 0.0002 eth porque fue dado al azar a algunos de los “wavers” en mi aplicación.

En Rinkeby Etherscan también puede validar el propio contrato y ver las transacciones que se han realizado.



Problema de números aleatorios

No es mío, cita directa de buildspace. es bastante interesante:

    • Normalmente cuando generas un número aleatorio normalmente en un programa, tomará un montón de números diferentes de tu ordenador como fuente de aleatoriedad como: la velocidad de los ventiladores, la temperatura de la CPU, el número de veces que has pulsado “L” a las 3:52PM desde que compraste el ordenador, tu velocidad de internet, y toneladas de otros #s que son difíciles de controlar. Toma todos estos números que son “aleatorios” y los pone juntos en un algoritmo que genera un número que cree que es el mejor intento de un número verdaderamente “aleatorio”

.

  • En la blockchain, no hay casi ninguna fuente de aleatoriedad. Todo lo que ve el contrato, lo ve el público. Debido a esto, alguien podría jugar con el sistema con sólo mirar el contrato inteligente, ver en qué números se basa para la aleatoriedad, y luego la persona podría darle los números exactos que necesita para ganar.



Herramientas

    • Entorno de desarrollo de Ethereum. Construye un servidor local de blockchain y despliega contratos
      https://hardhat.org/
    • Lado del cliente realizado con React js
    • Metamask – billetera de ETH
    • Alchemy – https://www.alchemy.com/ – capa de blockchain – en lugar de configurar AWS , Google Cloud o MS Azure.
      Alchemy nos ayuda a difundir nuestra transacción de creación de contratos para que pueda ser recogida por los mineros lo antes posible

.

  • Etherscan es un lugar que simplemente nos muestra el estado de la blockchain y nos ayuda a ver en qué punto se encuentra nuestra transacción.
    El etherscan para rinkeby testnet: https://rinkeby.etherscan.io/
  • Fábricas



Sitio web final



¿Qué es lo siguiente?

    • Zombies criptográficos
    • Aplicación web3 para mostrar mi colección de NFT construida con Solidity
    • Aprender más sobre solidity
Categorías : # Blockchain, # dapp

Deja una respuesta

Tu dirección de correo electrónico no será publicada.