¿A qué se refieren Ethhash y CliqueConfig en la configuración de génesis?

No veo ninguna documentación real sobre qué son o a qué se refieren.

Aquí está la estructura en el configarchivo:

// Various consensus engines
Ethash *EthashConfig `json:"ethash,omitempty"`
Clique *CliqueConfig `json:"clique,omitempty"`

¿Puedo obtener un desglose técnico de lo que son, cómo funcionan y qué hacen?

Respuestas (1)

Ethash es el algoritmo de prueba de trabajo utilizado por Ethereum. La justificación del diseño y una explicación del algoritmo en pseudocódigo se pueden encontrar en la wiki (y se ha discutido en preguntas anteriores; consulte: ¿Qué función de prueba de trabajo usa Ethereum? ).

Clique es el protocolo utilizado en la red de pruebas de prueba de autoridad de Ethereum, llamada Rinkeby.

Si realmente está preguntando a qué equivalen esas dos variables en términos de código, entonces la conclusión lógica, si sigue el código en ese archivo (es decir config.go), es la creación del genesis.jsonarchivo, y el enginecampo depende de qué tipo de cadena para la que lo estás creando.

// String implements the fmt.Stringer interface.
func (c *ChainConfig) String() string {
    var engine interface{}
    switch {
    case c.Ethash != nil:
        engine = c.Ethash
    case c.Clique != nil:
        engine = c.Clique
    default:
        engine = "unknown"
    }
    return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Engine: %v}",
        c.ChainId,
        c.HomesteadBlock,
        c.DAOForkBlock,
        c.DAOForkSupport,
        c.EIP150Block,
        c.EIP155Block,
        c.EIP158Block,
        c.ByzantiumBlock,
        engine,
    )
}