Получение завершенных данных блока

Я пытаюсь получить данные блока (внешние данные) для завершенных блоков только на клиенте (а не во время выполнения). Я вижу, что есть конечная точка RPC с именем chain_getBlock. Правильно ли я полагаю, что эта конечная точка не фильтрует только завершенные блоки?

И если это так, достаточно ли проверить, не имеет ли Justification значение None, если меня интересуют только завершенные блоки?

Спасибо


person Nahu    schedule 23.07.2020    source источник


Ответы (1)


Решение:

Я бы получил внешнюю часть доработанной головы:

  • chain_getFinalizedHead, чтобы получить хеш лучшего завершенного блока.
  • Передайте этот хэш блока в chain_getBlock, чтобы получить подписанный блок.

chain_getFinalizeHead использует локальную информацию клиента, поэтому она не поступает из среды выполнения.

Контекст:

В описываемом вами варианте использования я не думаю, что имеет смысл использовать поле обоснования для проверки того, завершен ли блок. Большинство блоков из цепочки на основе GRANDPA не будет иметь оправдания по нескольким причинам:

  • Обоснование может вообще не существовать, потому что GRANDPA завершает цепочку, а не блок. (то есть вы всегда можете доказать, что блок Canon № 5 является окончательным, обосновав блок Canon № 10, и на практике завершение происходит каждые несколько блоков, а не каждый блок.)
  • Текущая реализация GRANDPA должна хранить обоснование только для первого блока сеанса в цепочке, когда набор полномочий GRANDPA может измениться. Клиенты синхронизации должны проверять окончательность каждого изменения набора полномочий GRANDPA, и для этого они используют обоснование, хранящееся в цепочке.
  • В настоящее время периодические подтверждения хранятся в цепочке с большей частотой, чем смена сеанса.

Стоит отметить, что клиент сохраняет обоснование рядом с каждым блоком в своей локальной БД, но, за исключением случаев, упомянутых выше, они не являются частью состояния выполнения.

Благодарим Андре Сильву, поскольку большая часть этого ответа - это информация, которую он мне объяснил.

person zeke    schedule 30.07.2020
comment
Спасибо за ваш ответ. Просто чтобы подтвердить, если мне нужно только обоснование от клиента (а не состояние выполнения), должно ли оно всегда быть заполнено? - person Nahu; 28.08.2020
comment
Нет, он не всегда будет заполнен, потому что не существует обоснования для каждого блока. На практике у клиента есть обоснование для каждых нескольких блоков, потому что он завершает только каждые несколько блоков. (Концепция, упомянутая в первом пункте). - person zeke; 01.09.2020