Что такое цепочка?

Если я запускаю вызов RPC getBlockна клиенте bitcoin-qt, он дает мне поле с именем chainwork, содержащее хэш. Я не могу найти никакой информации, о чем это значение.

Запрос:

getblock 0000000000000000073dacdd0178da5158bd78c543fbc79bd0dacf56a2021bcc

Результат:

{
"hash" : "0000000000000000073dacdd0178da5158bd78c543fbc79bd0dacf56a2021bcc",
"confirmations" : 1,
"size" : 182400,
"height" : 304962,
"version" : 2,
"merkleroot" : "b144b39759d4669cb92ca8b9084d68d1f05f1e28e16887bf062f37e3b5f79fd2",
"tx" : [
"3edc72d280edd0a7719670a5f0c97e8991a5bcfcfcfa77620969643f04d021a3",
"841840f8a7863c8fb99e26975d45ff9151b0a5f021fb479aa9ff91a138d3cd3f",
"a01af3f203313cdab4e8977cd2dccbd416872c9d9f76968fc7009f47ad630199"
],
"time" : 1402334610,
"nonce" : 2351732739,
"bits" : "185d859a",
"difficulty" : 11756551916.90395200,
"chainwork" : "0000000000000000000000000000000000000000000086859f7a841475b236fd",
"previousblockhash" : "000000000000000031132699bcb917e7e6ce3cc6cce1f20b6ad36a437436c821"
}
Не уверен, что речь идет о цепочке или о лучшей цепочке в лог-файлах биткойн-qt. На bitcointalk говорится, что шестнадцатеричные данные лучшей цепочки — это только первые байты необработанного блока. Я проверил, является ли цепочка первыми байтами блока, но она не совпадает. Также лучшая цепочка не является значением блоков, она определяет блок, в то время как цепочка меняется в каждом блоке. Но может это сумма работы вложенной в эту цепочку, завтра проверю

Ответы (2)

Ценность цепочки — это всего лишь общий объем работы в цепочке.

Это общее количество хэшей, которые, как ожидается, потребуются для создания текущей цепочки, в шестнадцатеричном формате.

Преобразовав 0000000000000000000000000000000000000000000086859f7a841475b236fdв десятичную систему, вы получите 635262017308958427068157 или 635262 экзахэша.

При скорости хэширования в июне 2014 года (100 петахеш/с) для выполнения такого количества хэшей потребовалось бы всего 73 дня, в то время как на самом деле это заняло более 5 лет. Однако скорость хэширования росла так быстро, что влияние более чем нескольких месяцев назад незначительно.

Это количество одиночных хэшей или количество двойных хэшей SHA-256? Или, если задать другой вопрос, считается ли двойное хэширование заголовка SHA-256 одним или двумя хэшами?
@StephenM347, на самом деле это не имеет значения, поскольку цепочка используется только для сравнения разных цепочек. Но на практике двойная операция SHA-256 считается за 1.

Ответ Питера хорош, значение цепочки — это ожидаемый объем работы в цепочке, выраженный в виде 32-байтового целого числа, для работы по вычислению двойных хэшей SHA-256.

Цепочка используется для определения правильной цепочки, самое большое значение цепочки означает самую сильную или правильную цепочку.

Кстати, Сатоши изначально не понимал, что выбор правильной цепочки простым подсчетом блоков позволяет проводить очень простые атаки. Версия 0.1 просто считала блоки. Вот почему в документе просто написано «самый длинный». Идея «цепной работы» была добавлена ​​чуть позже. Подробнее об этом см . здесь .

Я просто хочу дать некоторую информацию о том, как возникает эта ценность «цепной работы» , для лучшего или более глубокого понимания того, что это такое.

Давайте взглянем на заголовок генезисного блока Сатоши (часть связанной информации):

$ bitcoin-cli getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

$ bitcoin-cli getblockheader 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
{
  ...
  "height": 0,
  ...
  "bits": "1d00ffff",
  "difficulty": 1,
  "chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
  ...
}

Как вы видите выше, блок генезиса имеет сложность «1» и цепочку [0x01,0001,0001]. Если у вас есть вопрос о том, что такое «трудность», вы можете взглянуть на этот ответ . Итак, правильное определение:

difficulty '1' = chainwork amount [0x01,0001,0001]

Затем, каждый раз, когда генерируется новый блок, мы просто накапливаем цепочку со значением поля «сложность» нового блока, но помните, что для каждой «1» сложности мы добавляем количество цепочки [0x01,0001,0001].

По мере роста цепочки блоков сложность будет постепенно увеличиваться (а иногда и немного уменьшаться).

Перед первым изменением времени сложности высота цепного блока достигла 32255.

$ bitcoin-cli getblockhash 32255
00000000984f962134a7291e3693075ae03e521f0ee33378ec30a334d860034b

$ bitcoin-cli getblockheader 00000000984f962134a7291e3693075ae03e521f0ee33378ec30a334d860034b
{
  ...
  "height": 32255,
  ...
  "bits": "1d00ffff",
  "difficulty": 1,
  "chainwork": "00000000000000000000000000000000000000000000000000007e007e007e00”,
  ...
}

Как вы можете видеть выше, значение цепочки равно [0x7e00,0x7e00,0x7e00], что точно равно высоте[32255]+1 (для блока генезиса), умноженной на [0x01,0001,0001].

[0x7e00,0x7e00,0x7e00] = 32256 * [1.0] * [0x01,0001,0001]

Тогда давайте взглянем на блок 32256:

$ bitcoin-cli getblockhash 32256
000000004f2886a170adb7204cb0c7a824217dd24d11a74423d564c4e0904967

$ bitcoin-cli getblockheader 000000004f2886a170adb7204cb0c7a824217dd24d11a74423d564c4e0904967
{
  ...
  "height": 32256,
  ...
  "bits": "1d00d86a",
  "difficulty": 1.182899534312841,
  "chainwork": "00000000000000000000000000000000000000000000000000007e01acd42dd2”,
  ...
}

В блоке 32256, поскольку сложность увеличивается с 1,0 до 1,182899534312841, тогда

 [chainwork value] = [previous chainwork value] + [difficulty] * [0x01,0001,0001]
 [0x7e01,acd4,2dd2] = [0x7e00,0x7e00,0x7e00] + [1.182899534312841] * [0x01,0001,0001]
Проголосовал за дополнительную информацию.