¿Qué significa cada parámetro de genesis.json?

Estoy tratando de configurar genesis.json para mi red privada. ¿Qué significa cada parámetro y qué valor puedo establecer en genesis.json?

  • nonce: algun dato?
  • marca de tiempo: en cualquier momento?
  • parentHash: ¿algún hash?
  • extraData: poner algún dato si desea agregar? ¿Cuál es el tamaño máximo?
  • gasLimit: ¿Cuál es el número máximo?
  • dificultad: ¿Cuál es el número más bajo?
  • mixhash: ¿Qué es esto?
  • coinbase: dirección de Ethereum para coinbase, ¿verdad?
  • alloc: primera asignación de éter

Muestra el archivo genesis json de Cómo crear una cadena privada de Ethereum . El documento oficial para la red privada genesis json está aquí. Conexión a la red

{
    "nonce": "0xdeadbeefdeadbeef",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x0",
    "gasLimit": "0x8000000",
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {
    }
}

Respuestas (2)

Bloque Génesis Explicación

mixhash Un hash de 256 bits que prueba, combinado con nonce, que se ha llevado a cabo una cantidad suficiente de cómputo en este bloque: la Prueba de trabajo (PoW). La combinación de noncey mixhashdebe satisfacer una condición matemática descrita en el Yellowpaper, 4.3.4. Validez de encabezado de bloque, (44). Permite verificar que el Bloque realmente ha sido minado criptográficamente, por lo que desde este aspecto es válido.

nonce Un hash de 64 bits que prueba, combinado con el mix-hash, que se ha llevado a cabo una cantidad suficiente de cómputo en este bloque: la prueba de trabajo (PoW). La combinación de noncey mixhashdebe satisfacer una condición matemática descrita en el Yellowpaper, 4.3.4. Block Header Validity, (44), y permite verificar que el Bloque realmente ha sido minado criptográficamente y por lo tanto, desde este aspecto, es válido. Es noncela prueba de trabajo de minería criptográficamente segura que demuestra más allá de toda duda razonable que se ha gastado una cantidad particular de cómputo en la determinación del valor de este token. (Página amarilla, 11.5. Prueba de trabajo de minería).

dificultad Un valor escalar correspondiente al nivel de dificultad aplicado durante el noncedescubrimiento de este bloque. Define el objetivo de minería, que se puede calcular a partir del nivel de dificultad del bloque anterior y la marca de tiempo. Cuanto mayor sea la dificultad, estadísticamente más cálculos debe realizar un minero para descubrir un bloque válido. Este valor se utiliza para controlar el tiempo de generación de bloques de una cadena de bloques, manteniendo la frecuencia de generación de bloques dentro de un rango objetivo. En la red de prueba, mantenemos este valor bajo para evitar esperas durante las pruebas, ya que se requiere el descubrimiento de un Bloque válido para ejecutar una transacción en Blockchain.

alloc Permite definir una lista de carteras precargadas. Esa es una funcionalidad específica de Ethereum para manejar el período de "pre-venta de Ether". Dado que podemos extraer Ether local rápidamente, no usamos esta opción.

coinbase La dirección de 160 bits a la que se han transferido todas las recompensas (en Ether) recolectadas de la extracción exitosa de este bloque. Son una suma de la recompensa minera en sí y los reembolsos de ejecución de la transacción del Contrato. A menudo denominado "beneficiario" en las especificaciones, a veces "etherbase" en la documentación en línea. Esto puede ser cualquier cosa en el Bloque Génesis, ya que el valor lo establece la configuración del Minero cuando se crea un nuevo Bloque.

marca de tiempo Un valor escalar igual a la salida razonable de la time()función Unix en el inicio de este bloque. Este mecanismo impone una homeostasis en términos de tiempo entre bloques. Un período más pequeño entre los dos últimos bloques da como resultado un aumento en el nivel de dificultad y, por lo tanto, se requiere un cálculo adicional para encontrar el siguiente bloque válido. Si el período es demasiado largo, se reduce la dificultad y el tiempo esperado para el siguiente bloque. El sello de tiempo también permite verificar el orden de los bloques dentro de la cadena (Papel amarillo, 4.3.4. (43)).

parentHash El hash Keccak de 256 bits del encabezado del bloque principal completo (incluidos su noncey mixhash). Puntero al bloque principal, construyendo así efectivamente la cadena de bloques. En el caso del bloque Génesis, y solo en este caso, es 0.

extraData Un opcional gratuito, pero máx. Espacio de 32 bytes de largo para guardar cosas inteligentes para la eternidad. :)

gasLimit Un valor escalar igual al límite actual de gasto de gas por bloque en toda la cadena. Alto en nuestro caso para evitar estar limitado por este umbral durante las pruebas. Nota: esto no indica que no debamos prestar atención al consumo de Gas de nuestros Contratos.

¿Qué significa "config" como "config": { "homesteadBlock": "10" }?

Además de los campos descritos por niksmac:

config Configuración para describir la propia cadena. Específicamente, la identificación de la cadena, los motores de consenso a usar, así como los números de bloque de cualquier bifurcación dura relevante.


El significado/especificación de "config" en genesis.json

Ver config.go:

type ChainConfig struct {
    ChainId *big.Int `json:"chainId"` // Chain id identifies the current chain and is used for replay protection

    HomesteadBlock *big.Int `json:"homesteadBlock,omitempty"` // Homestead switch block (nil = no fork, 0 = already homestead)
    DAOForkBlock   *big.Int `json:"daoForkBlock,omitempty"`   // TheDAO hard-fork switch block (nil = no fork)
    DAOForkSupport bool     `json:"daoForkSupport,omitempty"` // Whether the nodes supports or opposes the DAO hard-fork

    // EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
    EIP150Block *big.Int    `json:"eip150Block,omitempty"` // EIP150 HF block (nil = no fork)
    EIP150Hash  common.Hash `json:"eip150Hash,omitempty"`  // EIP150 HF hash (fast sync aid)

    EIP155Block *big.Int `json:"eip155Block,omitempty"` // EIP155 HF block
    EIP158Block *big.Int `json:"eip158Block,omitempty"` // EIP158 HF block

    // Various consensus engines
    Ethash *EthashConfig `json:"ethash,omitempty"`
    Clique *CliqueConfig `json:"clique,omitempty"`
}
Esto completa mi respuesta. +1
Gracias :-) Creo que este campo podría no haber existido cuando originalmente escribiste tu respuesta muy completa.
@niksmac ¿Puede agregar "minGasLimit" a su lista? Además: ¿puede "nonce" tener algún valor?
@niksmac Un poco fuera de tema, pero es posible que sepa: ¿hay alguna manera de establecer el "límite de gas de bloque" en el archivo de génesis?