Как стать автором
Обновить

Комментарии 5

Не лучше ли использовать time.Now().UnixNano() вместо time.Now().Unix()?
Хотя, даже с UnixNano(), по-моему, это довольно сомнительное место в предложенном подходе.
Что будет если параллельно будут сформированы новые блоки с одинковыми данными в AddBlock()?
Очень интересно погрузиться в структуру из нутри. Жду продолжение.
func (b *Block) SetHash() {
    timestamp := []byte(strconv.FormatInt(b.Timestamp, 10))
    headers := bytes.Join([][]byte{b.PrevBlockHash, b.Data, timestamp}, []byte{})
    hash := sha256.Sum256(headers)
    b.Hash = hash[:]
}

В описанном примере велика вероятность, что память для headers будет выделена на стеке и это никак не нагрузить GC. В общем случае так делать не надо. Интерфейс hash.Hash расширяет io.Writer и этим стоит пользоваться.
что то мне подсказывает, что вычисление ХЭШа, как раз таки, операция весьма не сложная.
Именно поэтому скорости вычисления ХЭШей столь велики на видекартах (мегахэшей/сек)

Сложность в другом: сложность найти «правильный» ХЭШ. То есть такой (на примере биткоина), который не превышает определенного значения (содержит определенное кол-во нулей в своем начале. Типа вот такого: 000000000000000kgggjhfsyywG). И чем больше нулей в начале, тем сложнее… Потому как надо «попадать» результатом все время в меньшее множество возможных правильных ХЭШей.

Именно эта сложность и гарантирует то, что никто не сможет изменить прошлые данные ибо ни один участник сети не обладает достаточной скоростью для того, чтобы обогнать остальную сеть, начав изменять что то в прошлом.

ну как то так в общем )))
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации