Что означает каждый параметр genesis.json?

Я пытаюсь настроить genesis.json для своей частной сети. Что означает каждый параметр и какое значение я могу установить в genesis.json?

  • одноразовый номер: какие-либо данные?
  • отметка времени: в любое время?
  • parentHash: любой хэш?
  • extraData: укажите какие-либо данные, если хотите добавить? какой максимальный размер?
  • gasLimit: Какое максимальное количество?
  • сложность: какое самое маленькое число?
  • миксхэш: что это?
  • coinbase: адрес Ethereum для coinbase, верно?
  • alloc: первое распределение эфира

Пример json-файла генезиса из How To Create A Private Ethereum Chain . Официальный документ для генерации частной сети json находится здесь. Подключение к сети

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

Ответы (2)

Генезисный блок Объяснение

mixhash 256-битный хеш, который в сочетании с , доказывает, nonceчто в этом блоке было выполнено достаточное количество вычислений: Proof-of-Work (PoW). Комбинация nonceи mixhashдолжна удовлетворять математическому условию, описанному в желтой книге, 4.3.4. Валидность заголовка блока, (44). Это позволяет удостовериться, что Блок действительно был криптографически добыт, поэтому с этой точки зрения он действителен.

nonce 64-битный хэш, который в сочетании с хэшем микса доказывает, что в этом блоке был выполнен достаточный объем вычислений: Proof-of-Work (PoW). Комбинация nonceи mixhashдолжна удовлетворять математическому условию, описанному в желтой книге, 4.3.4. Валидность заголовка блока, (44), и позволяет убедиться, что блок действительно был криптографически добыт и, таким образом, с этой точки зрения действителен. Это nonceкриптографически безопасное доказательство работы майнинга, которое доказывает вне разумных сомнений, что при определении стоимости этого токена было затрачено определенное количество вычислений. (Yellowpager, 11.5. Горное доказательство работы).

сложность Скалярное значение, соответствующее уровню сложности, применяемому при nonceобнаружении этого блока. Он определяет цель майнинга, которую можно рассчитать на основе уровня сложности предыдущего блока и метки времени. Чем выше сложность, тем статистически больше вычислений должен выполнить майнер, чтобы обнаружить действительный блок. Это значение используется для управления временем генерации блоков в блокчейне, поддерживая частоту генерации блоков в целевом диапазоне. В тестовой сети мы сохраняем это значение низким, чтобы избежать ожидания во время тестов, поскольку для выполнения транзакции в блокчейне требуется обнаружение действительного блока.

alloc Позволяет определить список предварительно заполненных кошельков. Это специальная функция Ethereum для обработки периода «предварительной продажи эфира». Поскольку мы можем быстро добывать локальный эфир, мы не используем этот вариант.

coinbase 160-битный адрес, на который были переведены все вознаграждения (в эфире), полученные в результате успешного майнинга этого блока. Они представляют собой сумму самого вознаграждения за майнинг и возмещения за исполнение контрактной транзакции. Часто называют «бенефициаром» в спецификациях, иногда «etherbase» в онлайн-документации. Это может быть что угодно в генезис-блоке, поскольку значение устанавливается настройкой майнера при создании нового блока.

timestamp Скалярное значение, равное разумному выходу time()функции Unix в начале этого блока. Этот механизм обеспечивает гомеостаз с точки зрения времени между блоками. Меньший период между двумя последними блоками приводит к увеличению уровня сложности и, следовательно, к дополнительным вычислениям, необходимым для нахождения следующего допустимого блока. Если период слишком велик, сложность и ожидаемое время до следующего блока уменьшаются. Временная метка также позволяет проверить порядок блоков в цепочке (Yellowpaper, 4.3.4. (43)).

parentHash 256-битный хэш Keccak всего заголовка родительского блока (включая его nonceи mixhash). Указатель на родительский блок, тем самым эффективно выстраивая цепочку блоков. В случае блока Genesis, и только в этом случае, это 0.

extraData Необязательный бесплатный, но макс. 32-байтовое пространство для хранения умных вещей для вечности. :)

gasLimit Скалярное значение, равное текущему пределу расхода газа на блок для всей цепочки. Высокий в нашем случае, чтобы не ограничиваться этим порогом во время тестов. Примечание: это не означает, что мы не должны обращать внимание на потребление Газа в наших Контрактах.

Что означает «config», например «config»: { «homesteadBlock»: «10» }?
Смотрите этот ответ: ethereum.stackexchange.com/questions/15682/…

В дополнение к полям, описанным niksmac:

config Конфигурация для описания самой цепочки. В частности, идентификатор цепочки, используемые механизмы консенсуса, а также номера блоков любых соответствующих хардфорков.


Значение/спецификация «config» в genesis.json

См 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"`
}
Это завершает мой ответ. +1
Спасибо :-) Я думаю, что этого поля могло не быть, когда вы изначально написали свой очень исчерпывающий ответ.
@niksmac Можете ли вы добавить «minGasLimit» в свой список? Также: может ли «nonce» быть любым значением?
@niksmac Немного не по теме, но вы, возможно, знаете: есть ли способ установить «лимит блочного газа» в файле генезиса?