Configuración de una red de prueba privada de Ethereum

Quiero jugar con algunos contratos inteligentes de Ethereum, sin gastar dinero real antes de que las versiones finales estén listas. Afortunadamente, Ethereum ha sido diseñado de una manera que permite la fácil configuración de nuevas redes, especialmente las privadas, que no tienen conexión a la red principal. Intentaré explicar los primeros pasos aquí, tanto para mí como para cualquier otra persona que busque una forma fácil y segura de jugar con los contratos inteligentes de Ethereum.

Nota: Hay algunos p r objetos que permiten una configuración con un solo clic de una red privada de Ethereum, como Ganache. No voy a hablar de esto, porque me gustaría profundizar un poco más bajo el capó.

¿Qué necesitamos?

OBTENER

Geth significa “Go Ethereum” y es una implementación del protocolo Ethereum de nodo completo, escrito en Go. Es una de las tres implementaciones originales (junto con C ++ y Python). Geth nos permitirá configurar la red de prueba a partir de un llamado “archivo de génesis”. Lo primero es lo primero, vamos a instalarlo. Para los usuarios de macOS como yo, existe una instalación conveniente a través de Homebrew:

Una vez que tengamos instalado Geth, debemos configurar nuestro archivo de génesis.

Archivo Génesis

El archivo genesis es un archivo de configuración JSON que usa Geth para crear el bloque genesis. El propósito de este bloque es definir las reglas del juego, y se parece mucho a esto (gracias, pyethapp):

Establece algunos valores básicos bastante importantes, como la dificultad inicial y el límite de gas . La dificultad, en el sentido de PoW, dicta la entropía de cada siguiente hash, o en términos más simples, cuánta potencia de cálculo se necesita para resolver el siguiente bloque y adivinar la combinación de mixhash y nonce . Queremos que sea lo suficientemente bajo en nuestra red de prueba, de modo que podamos “extraer” usando solo una computadora portátil, sin esperar ni derretirla.

Por otro lado, queremos que el límite de gas sea lo suficientemente alto, de modo que podamos permitir operaciones de complejidad arbitraria, sin tener que reinicializar nuestro formulario de scratch neto. Sin embargo, antes de poner en marcha un contrato inteligente, siempre esté atento a la cantidad de gas que se gasta en las operaciones, porque en la red principal, significa dinero real real.

El objeto alloc es opcional, pero permite configurar un número inicial de carteras, cada una con su propio saldo. Sin embargo, es posible que desee omitir eso, ya que podrá crear fácilmente billeteras dentro de Mist más adelante.

El resto de los valores son prácticamente ceros o algunos hash aleatorios iniciales por los que no tiene que preocuparse mucho. Simplemente copie una muestra como esta, ajuste la dificultad y el límite de gas y comience desde allí. Si desea una explicación más profunda de lo que significa cada una de estas propiedades, encontré esta respuesta aquí muy completa.

Niebla

Mist es un navegador GUI Ethereum Dapp, que contiene su propio nodo Geth integrado, así como un administrador de billetera ETH integrado. Si hasta ahora solo ha usado una billetera ETH, el concepto de un navegador Dapp parecerá desalentador al principio. Además de administrar billeteras, Mist también funciona como una Dapp Store de facto, lo que permite al usuario descubrir y jugar con Dapps ya desarrollados, como CryptoKitties, Augur, Bancor, etc. Lo mejor de todo es que Mist permite crear, implementar y ejecutar funciones en contratos inteligentes. Esto es principalmente para lo que lo usaremos.

Inicialización de la red

Lo primero es lo primero, inicialicemos nuestra red. Necesitaremos una estructura de carpetas inicial, que podría verse así:

Por supuesto, la forma de nombrar los directorios y el archivo de configuración depende completamente de usted. Lo importante es mantener la carpeta donde se almacenará la cadena de bloques separada del archivo de génesis. Con eso en mente, vaya al directorio mytestnet y ejecute el siguiente comando:

Geth iniciará la cadena de bloques y se cerrará. Una vez que se haya inicializado la cadena, puede iniciar una instancia de Geth y mantenerla en ejecución:

Geth se conectará y mantendrá un servidor en funcionamiento. Lo único en lo que debe anotar es la última línea del proceso de conexión, que debería verse así:

El archivo .ipc es lo que usaremos para conectar Mist en el siguiente paso.

Iniciar Mist

Un punto a destacar sobre Mist. Viene con su propia versión de Geth, que, si no se está ejecutando ninguna otra versión en su máquina, se iniciará automáticamente. Esto puede hacer que Mist intente conectarse a la red principal y comience a descargar una copia de la verdadera cadena de bloques de Ethereum. Queremos evitar eso. En su lugar, iniciaremos Mist desde la línea de comando y lo señalaremos al archivo .ipc que nuestra instancia de Geth ha abierto:

Después de un poco de configuración, Mist comenzará. Independientemente de si ha asignado previamente ETH a algunas direcciones en el archivo de génesis, no podrá acceder a ellas. Deberá crear una nueva billetera y extraer algo de ETH.

Una vez que haya configurado su primera billetera, ¿por qué no extrae algo de ETH también? Suponiendo que dejó el valor de dificultad suficientemente bajo, este debería ser un proceso bastante rápido y fácil. Abra una nueva pestaña y active una segunda instancia de Geth como esta:

Se activará una consola, en la que escribirá el siguiente conjunto de comandos:

Después de un tiempo, Mist comenzará a mostrar un número de ETH en constante aumento en su billetera.

Como ejercicio, intente enviar algo de ETH a otra billetera que cree a través de Mist. Para confirmar la transacción, debe iniciar el minero en breve y mantenerlo en funcionamiento hasta que se hayan cumplido todas las confirmaciones. Normalmente, Mist debería ser lo suficientemente receptivo para mostrar esto en tiempo real. A veces, sin embargo, Mist puede dejar de responder o perder la conexión al enchufe. Si eso sucede, simplemente reinícielo y debería estar funcionando nuevamente.

Eso es todo por ahora. En una publicación de seguimiento, discutiré la creación y el despliegue de un contrato inteligente simple en nuestra nueva red de prueba privada. Estén atentos.

Publicado originalmente en preslav.me el 20 de julio de 2018.