Скрытый номер фиксации для каждой транзакции фиксации — это младшие 48 битов:
SHA256(payment_basepoint from open_channel || payment_basepoint from accept_channel)
Он закодирован в полях времени блокировки и последовательности (по 24 бита каждое) транзакции фиксации. Я не понимаю, зачем это нужно, в BOLT rfc написано:
Это скрывает количество обязательств, сделанных в канале в случае одностороннего закрытия, но все же предоставляет полезный индекс для обоих узлов (которые знают payment_basepoints), чтобы быстро найти отмененную транзакцию обязательства.
Почему TXID обязательства TX не подходит в качестве ключа поискового индекса?
Глядя на код c-lightning, я нахожу этот вызов :
txs[0] = commit_tx(ctx, &channel->funding_txid,
channel->funding_txout,
channel->funding_msat / 1000,
channel->funder,
channel->config[!side].to_self_delay,
&keyset,
channel->view[side].feerate_per_kw,
channel->config[side].dust_limit_satoshis,
channel->view[side].owed_msat[side],
channel->view[side].owed_msat[!side],
committed,
htlcmap,
commitment_number ^ channel->commitment_number_obscurer,
side);
в частности следующую строку:
commitment_number ^ channel->commitment_number_obscurer
Отслеживая commitment_number
переменную, я подсказываю, что это действительно целое число. Если вы видите, как часто в коде приходится проверять, что две транзакции фиксации непосредственно следуют друг за другом, имеет смысл использовать незатененное целое число вместо txid. Рассмотрим, например, этот блок кода :
/* FIXME: Document this requirement in BOLT 2! */
/* We can't send two commits in a row. */
if (peer->revocations_received != peer->next_index[REMOTE] - 1) {
assert(peer->revocations_received
== peer->next_index[REMOTE] - 2);
peer->commit_timer_attempts++;
Позже это скрывается, поскольку информация о том, сколько существовало tx-фиксаций, не должна быть общедоступной. Насколько я понимаю, он скрыт с помощью OTP через XOR. OTP - это тот, который вы упомянули выше. Идея состоит в том, чтобы иметь целое число, которое можно использовать, но скрыть его при отправке в блокчейн. Однако я не нашел в коде места, где скрытое значение берется и обрабатывается до чистого значения.
Надеюсь, это поможет (:
Джеймс С.
Рене Пикхардт
Джеймс С.
Джеймс С.