У каждого блока есть выбранный родитель (выбранный алгоритмом GHOSTDAG).
virtual — виртуальный блок, указывающий на все текущие вершины локальной ноды.
Как и у любого другого блока, у виртуального есть выбранный родитель (также известный как выбранный наконечник).
Начиная с этого наконечника, можно пройти по пути «выбранных родительских» ссылок, это «выбранная цепочка».
Обратите внимание, что по умолчанию выбранная цепочка может измениться (поскольку меняется виртуальная точка зрения), это называется реорганизацией. В широкой DAG часто случаются небольшие реорганизации, однако безопасность GHOSTDAG подразумевает, что цепочка надежна — то есть она очень быстро стабилизируется до небольшого суффикса.
Выбранная цепочка — это то, что определяет порядок событий в DAG, а блоки в ней (она же блоки цепочки) играют особую роль в том смысле, что мы (рекурсивно) принимаем их точку зрения.
Набор слияния цепного блока C определяется как набор блоков в прошлом C (т. е. достижимых из C) но не в прошлом выбранного родителя C. Обратите внимание, что набор слияния включает в себя сам выбранный родитель (который является предыдущий блок цепи).
Мы говорим, что C является блоком слияния блока Bв его наборе слияния.
Мы говорим, что C является принимающим блоком для действительных транзакций, поступающих из B.
Порядок слияния GHOSTDAG: сортирует набор слияния в порядке возрастания по синей работе, а тай-брейки по хэшу (лексикографически).
Из контекста цепного блока C, каждыйBв слиянии имеет 2 классификации:
Bсиний? что означает, чтоB имеет хорошие связи и способствует безопасности;B в окне DAA C (грубо говоря, блоки вне окна DAA — это блоки, между майнингом и публикацией которых прошло не менее 45 минут, то есть они сильно отключены).P.S. Если блок синий, он также наверняка находится в окне DAA (код этого не предполагает, но это правда). Выбранный родитель по определению отображается синим цветом и находится в окне DAA.
Каждый синий блок Bвознаграждается C следующим образом:
C рассчитывает субсидию coinbase на основе графика эмиссии и текущего балла DAA.C суммирует комиссии со всех принятых транзакций, которые были включены BКроме того, C вознаграждает себя за каждый блок Rв наборе слияния, который является красным (не синим), если он находится в окне DAA C.
C выполняет итерацию слияния в порядке GHOSTDAG, как определено выше: для каждого синего блока он добавляет выходную запись к его coinbase tx с рассчитанным вознаграждением. Если есть красные блоки + DAA, он добавляет еще один вывод, выплачивая себе вознаграждение.
Если C не является цепным блоком, то, несмотря на тот факт, что он выполняет все те же действия, его транзакции coinbase и самовознаграждения не считаются действительными после того, как структура DAG стабилизируется и, таким образом, отбрасывается каждой нодой.
Итак, если у вас есть добытый хэш блока B, и вы хотите рассчитать точное вознаграждение, связанное с ним:
C который объединил BB находится в C.MergesetReds -> нет награды.B находится в C.MergesetBlues ->найти положение i от B в C.MergesetBlues. i-й вывод в coinbase от C это тот, который выплачивает вознаграждение B.B сам по себе является цепным блоком и имеет объединенные красные блоки, которые также находятся в окне DAA, а затем coinbase B у себя должна быть последняя запись, платящая майнеру B (это можно проверить, проверив, что у coinbase |B.MergsetBlues| + 1 записи).