https://kaspa-mdbook.aspectron.com/
KIP — это организованный способ предложения улучшений протокола Kaspa. Поскольку у Kaspa нет центрального органа, любой может предложить KIP, и если сообществу это понравится, оно получит финансирование. На данный момент было 2 КИПа:
Или просто «виртуальный», это виртуальный блок, указывающий на все текущие концы локальной ноды.
Синий балл — это количество синих блоков в прошлой локальной ноде с точки зрения этой ноды.
Алгоритм регулировки сложности — алгоритм на основе движущегося окна, который заботится о регулировке сложности майнинга Kaspa, чтобы гарантировать, что средняя скорость блокировки будет такой, какая должна быть (1, 2, 32 в секунду или любое другое текущее установленное значение). Ширина окна составляет 2641 блок (синие + те красные, которые помещаются внутри окна, считая в обратном порядке с точки зрения виртуального).
Оценка DAA равна синей оценке + количеству красных блоков, которые были успешно объединены и вознаграждены, и это число контролирует скорость эмиссии через сам DAA.
У каждого блока есть выбранный родитель (выбранный алгоритмом 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 записи).Размер окна DAA составляет 2641 блоков.
Средний размер прошедшего временного окна составляет 263 блока.
Транзакция, отправленная в мемпул, истекает через 60 блоков, если она не включена в blockDAG.
Прямо сейчас (по состоянию на 05 мая 2022 г.) он рассчитывается как 0,0001 Kaspa за каждый UTXO, использованный в этой транзакции.
Да, это решение кошелька/ноды. Кошелек решает, сколько он платит, но в ноде также есть механизм защиты от спама, который фильтрует транзакции с низкой комиссией. Вы можете изменить минимальную комиссию через командную строку.
Они отклонят его из своего мемпула, но не отклонят, если он исходит из блока. Поэтому, если ваша нода проводит транзакции с низкой комиссией, все будут их принимать. Так что, если, например, мы хотим уменьшить минимальную плату, мы можем выпустить обновление, и будет достаточно, если большинство пользователей обновятся, чтобы работать, и вы не будете разделены, если не обновитесь.
Да, это теоретически возможно.
Если в мемпуле достаточно транзакций, чтобы заполнить блок, майнер просто выбирает самые высокооплачиваемые транзакции. Если транзакция превышает минимальную комиссию ноды, это не означает, что она будет добыта, это просто означает, что нода добавит ее в свой мемпул и передаст своим партнерам. Минимальная плата за ретрансляцию является мерой защиты от спама, а не политикой майнинга.
Было несколько дискуссий о реализации чего-то вроде этого https://arxiv.org/abs/1709.08881 для лучшего рынка комиссий.
Посмотрите этот фрагмент исходного кода: https://github.com/kaspanet/kaspad/blob/dev/util/difficulty/difficulty.go.
Вот краткое описание того, как работает сетевая подсистема ноды Kaspa:
https://github.com/kaspanet/kaspad/blob/master/domain/dagconfig/params.go#L216
https://github.com/kaspanet/kaspad/blob/master/app/protocol/flows/v5/register.go#L50
TargetOutboundPeers(по умолчанию 8).
https://github.com/kaspanet/kaspad/blob/master/app/protocol/flows/v5/ping/send.go#L41
https://github.com/kaspanet/kaspad/blob/master/app/protocol/flowcontext/blocks.go#L125https://github.com/kaspanet/kaspad/blob/master/app/protocol/flowcontext/transactions.go#L70