¡Esta es la PARTE 4 de la guía de The Product Manager para la serie Blockchain ! Si de alguna manera llegaste a mi publicación por primera vez, ¡Bienvenido! Le recomiendo que comience desde la parte 1 y luego lea la parte 2 y la parte 3 antes de leer esta publicación. Sin embargo, si eres del tipo explorador, ¡sigue leyendo!
( Actualización : aquí está lo último: la parte 5 de la serie blockchain )
En la Parte 3 de esta serie, analizamos la mecánica de Ethereum y también hablamos sobre el concepto de cuentas de Ethereum, contratos inteligentes y gas : el combustible que ayuda a que todas estas piezas funcionen juntas. Ha sido mucho leer hasta ahora, pero si bien puede leer todo el contenido de blockchain disponible en Internet, nada ayuda a comprender blockchains mejor que construir uno usted mismo. Así que eso es lo que hice. Simplemente puede seguir esta publicación y construir un pequeño prototipo para ver cómo se une todo lo que hemos hablado hasta ahora.
Esto es lo que lograremos en esta publicación,
Lo haremos,
Hemos visto esto antes , pero básicamente la red de cadena de bloques de Ethereum es simplemente un montón de EVM (Ethereum Virtual Machines) o "nodos" conectados a todos los demás nodos para crear una malla. Cada nodo ejecuta una copia de toda la cadena de bloques y compite para extraer el siguiente bloque o validar una transacción. Cada vez que se agrega un nuevo bloque, la cadena de bloques se actualiza y se propaga a toda la red, de modo que cada nodo esté sincronizado.
Para convertirse en un nodo en la red de Ethereum, su computadora deberá descargar y actualizar una copia de toda la cadena de bloques de Ethereum. Para lograr esto, Ethereum proporciona herramientas que puede descargar, conectarse a la red Ethereum y luego interactuar con ella. Estos son:
Geth : "... si tiene experiencia en desarrollo web y está interesado en crear interfaces para dapps, debería experimentar con Geth ".
Eth — “… Si desea mayor seguridad mediante la ejecución de dos implementaciones diferentes en paralelo o se toma en serio la minería de GPU, entonces el cliente C++ “Eth” es para usted. ”
Pyethapp: "... Si es un desarrollador de Python que quiere crear aplicaciones descentralizadas o está interesado en Ethereum para fines académicos o de investigación, este es un gran cliente "
Eventualmente, cada una de estas herramientas nos brindará acceso a una consola , un entorno de JavaScript que contiene todas las características principales que necesitaríamos más adelante, así que supongo que no importa qué herramienta elija para configurar su cadena de bloques, eventualmente deberíamos converger en la consola.
Simplemente elegí Geth porque tengo cierta comprensión del desarrollo web. El resto de esta publicación asume que estamos usando Geth para interactuar con la red Ethereum.
La implementación de Go de Ethereum se llama Geth
Geth es una herramienta de interfaz de línea de comandos (CLI) que se comunica con la red Ethereum y actúa como enlace entre su computadora, su hardware y el resto de los nodos ethereum o computadoras de la red.
Si otro nodo extrae un bloque, su programa Geth lo recogerá y luego pasará la nueva información a su GPU o CPU para actualizar la cadena de bloques. Con Geth, puedes
Homebrew, el gestor de paquetes perdido para macOS
Aquí están las instrucciones sobre cómo instalar Geth en una Mac. Simplemente usé Homebrew, lo que hace que la instalación de Geth (realmente cualquier cosa) sea realmente fácil. Si tiene una Mac pero no tiene Homebrew, debe instalarlo primero.
Aquí están los últimos binarios estables para Windows y Linux para que los descargue. Y esto es lo que debe hacer después de haberlo descargado.
Una vez que haya instalado Geth_,_ técnicamente puede conectarse a la red principal o pública de la cadena de bloques de Ethereum y ejecutar un nodo completo de Ethereum. Pero no queremos hacer eso todavía porque si está leyendo este artículo, es probable que no tenga éter (la criptomoneda de Ethereum), y sin éter realmente no puede hacer mucho en la cadena de bloques principal.
Yo tampoco tenía ninguna, pero Ethereum te permite crear tu propia red blockchain ' privada ', una especie de versión de desarrollo/puesta en escena de la red principal. Esta red privada es exactamente como la cadena principal de Ethereum desde el punto de vista de la funcionalidad, excepto que las transacciones y los contratos inteligentes implementados en esta red solo son accesibles para los nodos que están conectados a esta red privada. Eso es lo que haremos: crearemos una cadena de bloques privada.
Geth le permite configurar una cadena de bloques Ethereum "privada" o "red de prueba". Es la mejor manera de aprender los conceptos de blockchain que escuchas y lees en Internet. Puede crear contratos inteligentes, realizar transacciones y aplicaciones uniformemente distribuidas, sin necesidad de éter real_. En realidad, puede CREAR su propio éter falso, preasignar éter a su cuenta y luego usarlo para realizar transacciones, transferencias o implementar contratos inteligentes.
cadena de bloques
Como probablemente ya sepa, una cadena de bloques no es más que un libro de contabilidad digital en el que las transacciones se registran de forma cronológica y pública. Estas transacciones se registran en bloques y los nodos de una red distribuida compiten para encontrar el siguiente bloque válido. Una vez que se encuentra un bloque válido, se agrega a la cadena de bloques y esta información se transmite a la red. Luego, cada nodo actualiza su cadena de bloques a la última copia.
Cada cadena de bloques comienza con un Bloque Génesis, el primer bloque de la cadena, el bloque CERO, el único bloque que no tiene un predecesor.
Entonces, para crear nuestra cadena de bloques privada, crearemos un bloque de génesis. Para hacer esto, crearemos un archivo de génesis personalizado y le pediremos a Geth que use ese archivo de génesis para crear nuestro propio bloque de génesis, que a su vez será el comienzo de nuestra cadena de bloques privada personalizada.
Así es como se ve un archivo de Génesis:
{"config": {"chainId": 987,"homesteadBlock": 0,"eip155Block": 0,"eip158Block": 0},"dificultad": "0x400","gasLimit": "0x8000000", //establecer esto realmente alto para probar "alloc": {}
}}
y esto es lo que significan los atributos…
config: el bloque de configuración define la configuración de nuestra cadena personalizada y tiene ciertos atributos para crear una cadena de bloques privada
- chainId : identifica nuestra cadena de bloques, la cadena principal de Ethereum tiene su propia ID, pero le daremos un valor único para nuestra cadena privada.
- homesteadBlock : Homestead es la segunda versión principal de la plataforma Ethereum y es el primer lanzamiento de producción de Ethereum. Incluye varios cambios de protocolo. Como ya estamos en la versión homestead, este atributo es 0
.
- eip155Block/eip158Block: la versión de Homestead se lanzó con algunos cambios de protocolo incompatibles con versiones anteriores y, por lo tanto, requiere una bifurcación dura. Estos cambios/mejoras de protocolo se proponen a través de un proceso de Propuestas de mejora de Ethereum (EIP). Sin embargo, nuestra cadena no será difícil de bifurcar para estos cambios, así que déjelo como 0
- **dificultad:**Este valor se utiliza para controlar el tiempo de generación de Bloques de una Blockchain. Cuanto mayor sea la dificultad, estadísticamente más cálculos debe realizar un minero para descubrir un bloque válido. En nuestra red de prueba, mantendremos este valor bajo para evitar esperar durante las pruebas, ya que se requiere la generación de un bloque válido para ejecutar una transacción en la cadena de bloques.
- **gasLimit: ** este valor especifica el límite actual de toda la cadena de gasto de 'Gas' por bloque. El gas es el combustible de Ethereum que se gasta durante las transacciones. Marcaremos este valor lo suficientemente alto en nuestro caso para evitar estar limitado durante las pruebas.
- alloc: aquí es donde puede crear su billetera y llenarla previamente con éter falso. Sin embargo, para esta publicación, extraeremos nuestro éter localmente rápidamente, por lo que no usaremos esta opción.
En este punto, avancemos y creemos nuestro archivo CustomGenesis.json
. Simplemente usé un editor de texto y lo almacené en una carpeta en mi computadora.
A continuación, abra la terminal y, suponiendo que haya instalado Geth, simplemente ejecute este fragmento
geth — identidad “suIdentidad” — init /ruta_a_la_carpeta/CustomGenesis.json — datadir /ruta_a_su_directorio_de_datos/ACPrivateChain
Este fragmento le indica a Geth que use el archivo CustomGenesis.json
que creó como el primer bloque de su cadena de bloques personalizada. Luego, también especificamos un directorio de datos donde se almacenarán los datos de nuestra cadena privada. Geth creará el directorio de datos por usted. Simplemente elija una ubicación que esté separada de la carpeta pública de la cadena Ethereum, si tiene una
Una vez que ejecute este fragmento en la ventana de su terminal, debería ver a Geth conectarse al archivo de génesis y proporcionar la confirmación del mismo.
mi ventana de terminal que muestra el estado de génesis exitoso escrito
Ok, en este punto hemos configurado el comienzo de la cadena privada. A continuación, iniciaremos nuestra red privada para poder extraer nuevos bloques que se agregarán a nuestra cadena privada.
Para hacer esto, ejecute este comando en su terminal
geth -- datadir /ruta_a_su_directorio_de_datos/ACPrivateChain -- networkid 9876
Este fragmento le dice a geth que inicie nuestra red privada y use el directorio que acabamos de especificar para acceder a los detalles de nuestra cadena de bloques privada.
Tenga en cuenta que también especificamos un parámetro llamado networkid
. Esto marca la identidad de su red Ethereum. Hemos usado 9876 en este ejemplo, pero DEBE reemplazarlo con un número aleatorio de su elección para crear su propia red y evitar que otros se conecten sin darse cuenta a su red.
La red principal de Ethereum tiene un networkid=1
. Aquí hay una lista de ID de red y las redes correspondientes.
0: Olympic, red de prueba pública previa al lanzamiento de Ethereum 1
: Frontier, Homestead, Metropolis, la red principal pública de Ethereum 1
: Classic, la red principal pública (no bifurcada) de Ethereum Classic, ID de cadena _61 _1
: Expanse, una implementación alternativa de Ethereum, ID de cadena _2 _2
: Morden, la red de prueba pública de Ethereum, ahora Ethereum Classic, red de prueba 3
: Ropsten, la red de prueba pública de Ethereum entre clientes 4
: Rinkeby, la red de prueba pública de Geth Ethereum 42
: Kovan, la red de prueba pública de Parity Ethereum 7762959
: Musicoin, la cadena de bloques de música
De todos modos, una vez que ejecute el comando en su terminal, su red privada se activará. Esto es lo que muestra mi terminal después de ejecutar el fragmento.
Otra cosa importante. Cada vez que desee acceder a su cadena privada, deberá ejecutar estos dos fragmentos tal cual y en ese orden, ya que Geth NO recuerda los parámetros de su red blockchain privada. Por lo tanto, le sugiero que guarde los pasos de configuración a continuación, para que pueda acceder a ellos más tarde.
#1 geth — identidad “suIdentidad” — init /ruta_a_la_carpeta/CustomGenesis.json — datadir /ruta_a_su_directorio_de_datos/SU_CARPETA
#2 geth -- datadir /path_to_your_data_directory/ACPrivateChain -- networkid TU_RED_ID
Si ha seguido adelante, en este punto, ¡tiene una cadena de bloques privada y una red privada en funcionamiento! Ahora, podemos comenzar a interactuar con nuestra cadena privada y nuestra red privada a través de cuentas.
Ahora crearemos una cuenta para manipular nuestra red blockchain. Si ha estado siguiendo esta serie, hablamos de cuentas en nuestra última publicación.
Tipos de cuentas en Ethereum
Una vez que haya abierto su primera instancia de geth, abra otra consola/terminal y escriba lo siguiente:
geth adjuntar /ruta_a_su_directorio_de_datos/SU_CARPETA /geth.ipc
Esto conectará su segunda consola a la instancia de Geth que se ejecuta en su primera ventana de terminal (asegúrese de que realmente se esté ejecutando). Deberías obtener una consola Javascript así
Una vez que tenga la consola de javascript, estará listo para crear una cuenta.
personal.nuevaCuenta()
Se le pedirá que configure una contraseña, después de lo cual se generará una nueva cuenta. ¡Simple!
Ahora, guarde este número de cuenta ya que lo necesitará muy a menudo. Además, recuerda tu contraseña porque la necesitarás para acceder a tu cuenta. Pero tu ya lo sabias.
Luego, verifique cuánto ether tiene esta cuenta usando la siguiente línea de código
eth.getBalance("INGRESE_SU_CUENTA_NÚMERO_AQUÍ")
esto es lo que tengo
Su saldo debe ser 0
. Con razón, ya que no tendría ningún éter cuando cree una cuenta por primera vez.
Hay 2 formas de obtener éter en su cuenta, o alguien le envía algo, o usted extrae bloques de transacciones y obtiene recompensas con éter a su vez.
Como está solo en su red privada en este momento, su única opción en este momento es extraer algunos bloques y obtener una recompensa.
La minería en la cadena de bloques real o principal de Ethereum es bastante difícil y necesitaría hardware especializado, como GPU dedicadas. Sin embargo, la extracción de bloques en una cadena privada es fácil de hacer, ya que especificamos que el nivel de dificultad es muy bajo en nuestro archivo de génesis, ¿recuerdas? Simplemente podemos comenzar a minar usando el siguiente código
minero.start()
En este punto, si observa la otra consola que ejecuta la instancia de Geth, verá que su minero extrae bloques con éxito. Espera de 10 a 15 segundos y verifica tu saldo nuevamente.
¡Guau! Aparecen muchos éteres en su nueva cuenta. (Recuerde que este es un éter falso, no puede usar este éter para realizar transacciones en la red principal de Ethereum), pero puede usarlo para probar nuestras diversas funciones de la cadena de bloques, incluidas las transferencias, la implementación de contratos, etc.
Finalmente, detenga el minero usando el script miner.stop() .
¡Acabas de construir tu primera cadena de bloques ethereum privada y extraer algo de ether! Hay muchos detalles, pero espero que algo de esto tenga sentido y les haya dado un poco más de claridad sobre cómo funcionan las cadenas de bloques.
En la próxima publicación, agregaremos otro nodo a nuestra cadena de bloques privada, escribiremos e implementaremos contratos inteligentes y demostraremos cómo llamar al contrato.
¿Quieres saber cuándo hay una nueva publicación? Solo sigue la pizarra :)