Cómo: crear su propia cadena de bloques privada de Ethereum

Lo más destacado del desarrollo de esta semana

  • Lanzando hoy una actualización de Dust Server para incluir recompensas de inicio de sesión basadas en la zona horaria local del cliente
  • Las actualizaciones de clientes de Android e iOS están actualmente en QA y se lanzarán la próxima semana, incluidas las explosiones promocionadas ahora marcadas como "promocionadas", los Dusters heredados ahora obtendrán recompensas y otras mejoras de rendimiento y correcciones de errores.
  • Diseño de análisis de recompensas en preparación para cambiar a mainnet
  • Desarrollar un método para pagar los costos de gas Ethereum con un token ERC-20
  • Investigando diferentes mecanismos para almacenar contenido en blockchain

Cómo: blockchain

Esta publicación marca el primero de una nueva serie "Cómo" que estamos comenzando en un esfuerzo por proporcionar algunas instrucciones fáciles de leer que cubran temas que nuestros desarrolladores encontraron particularmente mal documentados en línea. A medida que avanzamos más allá de la venta de tokens, nuestro enfoque ahora es ayudar a otros equipos de desarrolladores interesados ​​en integrar GMT en sus aplicaciones. Con ese fin, estamos aumentando nuestra producción de contenido técnico para facilitar la incorporación de nuevos desarrolladores que buscan probar suerte con la tecnología blockchain.

Si tiene un tema en particular que le gustaría ver detallado en una publicación de Cómo hacerlo, nos encantaría saber de usted en info@mercuryprotocol.com.

"Hola, Testnet"

Esta es una guía para iniciar su propia cadena de bloques Ethereum personalizada en Mac, que no debe confundirse con el inicio de un nodo en la cadena de bloques principal de Ethereum. Aquí estamos comenzando una cadena de bloques completamente nueva y separada que no puede interactuar con la red principal de Ethereum.

Iniciar su propia cadena de bloques Ethereum es útil, educativo y más seguro que el testnet público. Aprender a configurar un testnet privado proporciona tangibilidad a conceptos abstractos, como la minería, los pares de red e incluso el geth datadir.

Prerrequisitos

Necesitas tener instalado Geth. La forma más fácil de hacerlo es a través de homebrew.

  1. Abra la Terminal e instale homebrew
ruby -e "$ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2. Ahora instale geth

Brew tap ethereum / ethereum
instalar cerveza ethereum

Crear archivo de Génesis

El bloque Genesis es el primer bloque de la cadena, el archivo Genesis es un archivo JSON que define las características de ese bloque inicial y, posteriormente, el resto de la cadena de bloques.

  1. Crea un directorio para guardar tus archivos de red
mkdir my-eth-chain
cd my-eth-chain

2. Crea tu archivo de génesis

toque myGenesis.json

3. Abra su archivo de génesis y pegue lo siguiente

{
   "config": {
      "chainId": 1994,
      "homesteadBlock": 0,
      "eip155Block": 0,
      "eip158Block": 0,
      "byzantiumBlock": 0
   },
   "dificultad": "400",
   "gasLimit": "2000000",
   "alloc": {
      "7b684d27167d208c66584ece7f09d8bc8f86ffff": {
          "saldo": "100000000000000000000000"
      },
      "ae13d41d66af28380c7af6d825ab557eb271ffff": {
          "saldo": "120000000000000000000000"
      }
   }
}

config

  • chainId: este es el identificador de su cadena y se utiliza en la protección de reproducción.
  • homesteadBlock, eip155Block, eip158Block, byzantiumBlock: estos se relacionan con la bifurcación y el control de versiones de la cadena, por lo que en nuestro caso dejemos 0 ya que estamos comenzando una nueva cadena de bloques.

dificultad

Esto dicta lo difícil que es minar un bloque. Establecer este valor bajo (~ 10–10000) es útil en una cadena de bloques privada, ya que le permite extraer bloques rápidamente, lo que equivale a transacciones rápidas y un montón de ETH para probar. A modo de comparación, el archivo Ethereum mainnet Genesis define una dificultad de 17179869184.

gasLimit

Esta es la cantidad total de gas que se puede usar en cada bloque. Con una dificultad de minería tan baja, los bloques se moverán bastante rápido, pero aún debe establecer este valor bastante alto para evitar alcanzar el límite y ralentizar su red.

alloc

Aquí puede asignar ETH a direcciones específicas. Esto no creará la cuenta para usted, así que asegúrese de que sea una cuenta que ya tenga control. Necesitará agregar la cuenta a su cadena privada para poder usarla, y para hacerlo necesita acceso al archivo de almacén de claves / utc. Por ejemplo, Geth y MyEtherWallet le dan acceso a este archivo cuando crea una cuenta, pero Metamask y Coinbase no. Las direcciones proporcionadas no son direcciones reales, son solo ejemplos. Aquí asignamos 100,000 y 120,000 ETH respectivamente.

Comience su nodo!

Ahora comienza la verdadera diversión, estamos listos para encender nuestra nueva cadena de bloques Ethereum.

1. Crea una instancia de tu directorio de datos

geth --datadir ./myDataDir init ./myGenesis.json

2. Inicie su nodo par Ethereum.

Networkid ayuda a garantizar la privacidad de su red. Puede usar cualquier número aquí (donde usamos "1114"), pero otros pares que se unan a su red deben usar el mismo.

geth --datadir ./myDataDir --networkid 1114 consola 2 >> myEth.log

La salida debería verse así:

¡Bienvenido a la consola Geth JavaScript!
instancia: Geth / v1.7.3-stable-4bb3c89d / darwin-amd64 / go1.8.3
base de monedas: 0xae13d41d66af28380c7af6d825ab557eb271ffff
en el bloque: 5 (jue, 07 de diciembre de 2017 17:08:48 PST)
datadir: / Users / test / my-eth-chain / myDataDir
módulos: admin: 1.0 clique: 1.0 debug: 1.0 eth: 1.0 miner: 1.0 net: 1.0 personal: 1.0 rpc: 1.0 txpool: 1.0 web3: 1.0
>

Esta es la consola geth JavaScript. Cualquier comando con el símbolo> debe escribirse aquí.

3. Muestra tus registros de Ethereum

  • Abre otra ventana de terminal
  • cd a my-eth-chain
  • Escriba tail -f myEth.log

4. Importar / crear una cuenta

  • Si asignó ETH en el archivo Genesis, importe la cuenta correspondiente arrastrando el archivo UTC al directorio myDataDir / keystored y vaya al paso 5.
  • En la consola de geth JavaScript, cree una cuenta:
    > personal.newAccount ("")
  • ¡No olvides esta frase de contraseña! Escribirá mucho esto, por lo que para esta red de prueba puede mantenerlo simple.

5. Establecer cuenta predeterminada

  • Verifique su cuenta predeterminada, escriba
    > eth.coinbase
  • Si esta dirección es la misma que la del paso 4, omita el resto del paso 5.
  • Para configurar su cuenta predeterminada, escriba
    > miner.setEtherbase (web3.eth.accounts [0])

6. Comienza a minar

  • Verifique su saldo con
    > eth.getBalance (eth.coinbase)
  • correr
    > miner.start ()
  • Mire su otra ventana de terminal, debería ver alguna acción de minería en los registros. Verifique su saldo nuevamente y debería ser más alto.
  • Para finalizar la minería, escriba
    > miner.stop ()

Opcional: Agregar otros pares

Agregue más nodos a su red privada de Ethereum.

1. Comience otro compañero

  • En su misma máquina, cree una instancia de un nuevo datadir:
geth --datadir ./peer2DataDir init ./myGenesis.json
  • Inicie el segundo par en un puerto diferente:
geth --datadir ./peer2DataDir --networkid 1114 --port 30304 consola 2 >> myEth2.log

2. Muestra tus registros de Ethereum

  • Abre otra ventana de terminal
  • cd a my-eth-chain
  • Escriba tail -f myEth2.log

3. Únete al 1er compañero

  • En la consola geth JavaScript de su primer par, escriba:
> admin.nodeInfo.enode
  • La salida se verá así: "enode: // dcff6d9dcb14eeb1d1b7575b0653fa1025ad1b7722c6d652d0449f0966e97931bdf037e5542086e7b9e0bec056566522c6c0cc4d73d8e4186a88a8aaaaaaaaaaaaa!
  • En la consola geth JavaScript de su nuevo segundo par, escriba:
> Admin.addPeer ( “eNodo: //b56882b93f4f97dd69f98c1dca1bd751c72374b5a8b5852288a56059a8cbc63614afd57274cfa7695178cf292aad9e682f0117044f9a28c9e098da688c8dfd89@127.0.0.1: 30303”)
  • Asegúrese de reemplazar "enode: // ... @" arriba con el resultado de admin.nodeInfo.enode que es específico para usted. Como se muestra arriba, el "[::]" se reemplaza con "127.0.0.1:30303", que es el IP: Puerto del primer par.

4. Verifique que sus nodos se estén comunicando

  • En la consola geth JavaScript de su nuevo segundo par, escriba:
> admin.peers
  • La salida debería mostrar que el par 2 está conectado a 127.0.0.1: 30303

Útil: comandos de la consola geth

admin.nodeInfo.enode
net.listening
net.peerCount
admin.peers
eth.coinbase
eth.getBalance (eth.coinbase)
personal
cuentas eth.
miner.setEtherbase (web3.eth.accounts [0])
miner.setEtherbase (“0xae13d41d66af28380c7af6d825ab557eb271ffff”)
miner.start ()
miner.stop ()
minero.hashrate
eth.getBlock (0)
eth.getBlock ("último")
eth.blockNumber
web3.eth.getBlock (BLOCK_NUMBER) .hash
eth.syncing
debug.verbosity (6) // nivel de registro más alto, 3 es el predeterminado

¡Comparte tus pensamientos con nosotros en cualquiera de los canales de la comunidad vinculados a continuación!

Conectar

Flojo
Telegrama
Gorjeo
Reddit
Facebook
LinkedIn

Obtenga más información sobre el Protocolo de Mercurio
Lea el documento técnico del Protocolo de Mercurio