Как генерируется набор данных 1 ГБ, который используется алгоритмом Ethash?

Я хочу понять алгоритмически, как генерируется набор данных 1GB и как он обновляется на основе данных блоков в Ethash. Я также хотел бы видеть, где в коде он реализован в Go-Etherum. Было бы хорошо, если бы ссылка на эту часть кода была связана с ответом.

5 голосов | спросил spharish 25 AMpTue, 25 Apr 2017 10:02:09 +030002Tuesday 2017, 10:02:09

1 ответ


4

Алгоритм

Алгоритм подробно объясняется с использованием псевдокода (Python) в вики-страницы Ethash страница . Также существует связанная с этим страница Дизайн Обоснование .

Эти страницы красиво написаны, сжаты и должны охватывать все, что вам нужно знать, поэтому я не буду их перефразировать здесь. (Pun не предназначен, но я буду притворяться, что это так.) Вместо этого я сосредоточусь на местах кода ниже.


Код

Код находится в consensus/ethash в репозитории go-ethereum.

Основной файл, который вам интересен, это ethash.go . Здесь есть несколько интересных мест.

Что делает следующее:

// New creates a full sized ethash PoW scheme.
func New(cachedir string, cachesinmem, cachesondisk int, dagdir string, dagsinmem, dagsondisk int) *Ethash {

Что делает следующее:

// dataset tries to retrieve a mining dataset for the specified block number
// by first checking against a list of in-memory datasets, then against DAGs
// stored on disk, and finally generating one if none can be found.
func (ethash *Ethash) dataset(block uint64) []uint32 {

Вы можете продолжить эту окончательную функцию далее для вызовов как memoryMapAndGenerate() и переданный в generator().


Edit:

И часть кода, которая фактически связывает два раздела, выше, вместе - и делает мой ответ реальным ответом, а не двумя слегка несогласованными абзацами - можно найти в algorithm.go . Кредит идет к Петеру, который действительно знает, о чем говорит. : -)

ответил Richard Horrocks 25 AMpTue, 25 Apr 2017 11:04:46 +030004Tuesday 2017, 11:04:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132