На что ссылаются Ethhash и CliqueConfig в конфигурации генезиса?

Я не вижу никакой реальной документации о том, что это такое или к чему они относятся.

Вот структура в configфайле:

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

Могу ли я получить техническую информацию о том, что это такое, как они работают и что они делают?

Ответы (1)

Ethash — это алгоритм Proof-of-Work, используемый Ethereum. Обоснование дизайна и объяснение алгоритма в псевдокоде можно найти на вики (и обсуждалось в предыдущих вопросах — см.: Какую функцию доказательства работы использует Ethereum? ).

Clique — это протокол, используемый в тестовой сети Ethereum Proof-of-Authority под названием Rinkeby.

Если вы действительно спрашиваете, что эти две переменные приравнивают к коду, то логический вывод, если вы будете следовать коду в этом файле (т.е. config.go), будет созданием genesis.jsonфайла с engineполем, зависящим от того, какой тип цепочка, для которой вы его создаете.

// 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,
    )
}