Principales malentendidos conceptuales sobre genesis.json

Me está costando mucho entender el genesis.jsonarchivo.

Suposición: me parece que sirve tanto para inicializar el primer bloque, como para establecer parámetros de configuración para el resto de la cadena. ¿Verdadero o falso?

Preguntas:

  1. ¿El primer bloque en la cadena de bloques de la red principal de Ethereum es siempre el mismo , independientemente de qué más haya en el archivo genesis.json? ¿Cómo lo afecta específicamente el archivo genesis.json?
  2. Si se acepta un nuevo EIP, es posible que el archivo genesis.json cambie. Específicamente, ¿cómo haría esto que el primer bloque se viera diferente? ¿Verdad?
  3. ¿Por qué hay cosas como nonce, mixHashy coinbaseopciones para poner en el archivo genesis.json? ¿Para qué sirven si el primer bloque no se puede minar?
  4. ¿Por qué necesito un archivo genesis.json si termino "sincronizándome" con mis compañeros y descargando toda su cadena de bloques de todos modos? ¿Estoy realmente creando el primer bloque yo mismo a través de genesis.json y luego sincronizando el resto con mis compañeros?
  5. En la red principal de Ethereum, el bloque de génesis asigna ether a ciertas cuentas. ¿Hay un archivo genesis.json correspondiente que tenga esas cuentas en la alloc {}sección? ¿O ese primer bloque se creó de alguna manera sin este archivo?

Respuestas (1)

  • me parece que sirve tanto para inicializar el primer bloque, como para establecer parámetros de configuración para el resto de la cadena. ¿Verdadero o falso?

Verdadero.

  • ¿El primer bloque en la cadena de bloques de la red principal de Ethereum es siempre el mismo, independientemente de qué más haya en el archivo genesis.json? ¿Cómo lo afecta específicamente el archivo genesis.json?

Tu pregunta es engañosa. Para ser un par de la red principal, necesita exactamente el mismo archivo de génesis que todos en la red. Si no, entonces no serás un compañero.

  • Si se acepta un nuevo EIP, es posible que el archivo genesis.json cambie. Específicamente, ¿cómo haría esto que el primer bloque se viera diferente? ¿Verdad?

No lo creo, empezaste con un archivo de génesis específico, terminas con él o cambias completamente la cadena

  • ¿Por qué hay opciones como "nonce", "mixHash" y "coinbase" para poner en el archivo genesis.json? ¿Para qué sirven si el primer bloque no se puede minar?

mira esto

  • ¿Por qué necesito un archivo genesis.json si termino "sincronizándome" con mis compañeros y descargando toda su cadena de bloques de todos modos? ¿Estoy realmente creando el primer bloque yo mismo a través de genesis.json y luego sincronizando el resto con mis compañeros?

Porque para indicar si puede sincronizar, necesitamos una forma de saber si desea sincronizar con esta cadena específica. El archivo de génesis es como el ID de la cadena. Digamos que tengo 2 cadenas privadas, cada una con el mismo ID de cadena pero con una configuración diferente en el archivo de génesis: algunos de mis nodos se conectarán a la cadena A y otros a la cadena B, según la génesis que les di. Si intenta sincronizar con un par que tiene un archivo de génesis diferente, será rechazado.

En realidad, no "creas" el primer bloque. El archivo de génesis es solo una identificación y una descripción de la cadena ANTES del bloque 0.

  • En la red principal de Ethereum, el bloque de génesis asigna ether a ciertas cuentas. ¿Hay un archivo genesis.json correspondiente que tenga esas cuentas en la sección alloc {}? ¿O ese primer bloque se creó de alguna manera sin este archivo?

Creo que tienes un malentendido entre el bloque y el archivo de génesis. Como se dijo anteriormente, el archivo de génesis es una descripción de la cadena ANTES del primer bloque. Si el archivo de génesis tiene algunas direcciones asignadas, el estado de la cadena tendrá estas direcciones con un saldo específico, a partir del bloque 0.


Aquí hay un ejemplo del primer bloque de una cadena privada, con direcciones preasignadas, como puede ver, es solo un bloque normal sin ninguna transacción. Lo único específico es parentHash. Como no existe pero proviene del archivo de génesis.

{
  difficulty: 1024,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  hash: "0xd3f87ee4cf1e44bc4024a519d91b08efdf187fa05f3a7a39efd1e4f73c29426a",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x0000000000000000000000000000000000000000",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 507,
  stateRoot: "0x041288fa59918e8775cddb418d92c1ef125438a1d9f2e4d481fae84ab85fcd22",
  timestamp: 0,
  totalDifficulty: 1024,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}
Dos puntos principales: 1) "¿Por qué hay opciones como "nonce", "mixHash" y "coinbase" para poner en el archivo genesis.json?" --> El enlace que proporcionó acaba de definir esos términos. La definición de mixhash es "... demuestra que se ha realizado una cantidad suficiente de cálculos en este bloque:" ¿Qué bloque? 2) Nuevamente, hace una distinción entre el primer bloque y el archivo de génesis. Pero, el archivo de génesis define qué cuentas comienzan con ether. Y por lo tanto, define la transacción que ocurre en el primer bloque. ¿Correcto?
Qué bloque: según tengo entendido -> El bloque antes del bloque 0 El archivo de génesis no solo indica qué cuenta tiene qué saldo, es una descripción de la cadena y el estado antes del bloque 0. No habrá ninguna transacción en el bloque 0. Te daré un ejemplo en la respuesta del bloque 0 de mi cadena privada con direcciones preasignadas.