Я видел транзакции в обозревателе блоков, где транзакция находится в мемпуле (неподтвержденная), но один из выходов уже отображается как потраченный, мне любопытно, как это работает. Этот вопрос является дубликатом этого вопроса, но ответ не совсем удовлетворяет мое замешательство. Я думаю о том, насколько этот процесс допустим в сочетании с перечисленными здесь правилами протокола для сообщений «tx» , в частности правилом 9, 10, 12.
Для каждого входа, если указанный выход существует в любом другом tx в пуле, отклоните эту транзакцию.
Для каждого входа просмотрите основную ветвь и пул транзакций, чтобы найти указанную выходную транзакцию. Если выходная транзакция отсутствует для какого-либо входа, это будет потерянная транзакция. Добавьте к потерянным транзакциям, если соответствующей транзакции там еще нет.
- Для каждого входа, если указанный выход не существует (например, никогда не существовал или уже был потрачен), отклонить эту транзакцию.
Вопросы:
Нет правила, требующего, чтобы транзакция имела подтверждение перед тем, как будет потрачена.
Вот связанный с этим вопрос, который, вероятно, покажется вам интересным:
что происходит с транзакциями в мемпуле, когда истекает срок действия их родительской транзакции?
Пункт 9 означает: в мемпуле, если есть две транзакции, имеющие входные данные, которые ссылаются на один и тот же выход, отклонить транзакцию, которая прибыла позже. Технически каждый узел проверяет это условие перед добавлением транзакции в мемпул. Это предотвращает двойные расходы.
Точка 10 просто хранит в узле ту транзакцию, чьи входные данные относятся к выходным неподтвержденным транзакциям (т.е. присутствующим внутри пула). Если узел не может найти родительскую транзакцию, текущая транзакция сохраняется в пуле потерянных транзакций.
Пункт 12 аналогичен пункту 9, за исключением того, что на этом шаге узел ищет предыдущий блок, чтобы отклонить эту транзакцию в случае двойной проверки.
Принц М
m1xolyd1an
Принц М