Оторвусь от темы технологического стека и расскажу про nSequence (Sequence number) и Replace-By-Fee (RBF)
⬇️⬇️⬇️
nSequence – это относительная блокировка времени на уровне транзакций. Это число, предназначенное для обновления неподтвержденных транзакций с временной блокировкой до их завершения.
Нажимая кнопку "Отправить BTC", транзакция попадает в мемпул, но так как ты не один такой, то приходиться ждать, когда твою транзакцию подтвердят майнеры, и поэтому ты можешь совершить Replace-By-Fee (RBF) - транзакцию.
RBF — замена существующей транзакции новой транзакцией с повышением комиссии.Именно здесь и применяется nSequence. Ты можешь менять
Sequence number и определять порядковый номер своей операции или можешь сделать его старше.
Впервые эти две функции были описаны в
BIP-0125Замена означает, что в новой транзакции будут использованы те же входы что и в старой транзакции. И только одна транзакция будет добавлена в блокчейн.
Для замены в данных транзакциях предусмотрено специальное int поле nSequence, которое сигнализирует о том, какая транзакция старше какой. Чтоб транзакция была потенциально заменяемой, значение nSequence должно быть меньше (0xffffffff — 1). Сейчас обычно большинство программ исполняют nSequence как максимум – (0xffffffff — 1).
Sequence number была разработана Сатоши Накамото и существовала всегда. Она была доработана до RBF и включена в код Bitcoin Core 0.12 и старше.
- При замене транзакции не все ноды согласятся ретранслировать новую версию, ссылаясь на mempool-conflict
- Некоторые ноды примут транзакцию, и ретранслируют ее в сеть
- Информационные ресурсы типа
blockchain.info будут прямым текстом писать DOUBLE SPEND
- Не все пулы будут майнить эту транзакцию, справедливо считая её даблспендом. Некоторые пулы будут ее майнить, но это может занять больше времени (по сравнению со временем если вся сеть будет её майнить)
- Если новая транзакция будет таки включена в блок — это абсолютно валидно и не противоречит правилам сети. Любые претензии потенциально обманутых нигде не принимаются
В настоящее время nSequence используется только для отключения времени блокировки в транзакции.