Що таке підтвердження транзакції в блокчейні
Підтвердження — це кількість блоків, що з’явилися в мережі після блоку з вашою транзакцією; чим їх більше, тим менша ймовірність її скасування.
Коли транзакцію включено в блок, вона отримує перше підтвердження. Кожен наступний блок додає ще одне. У мережах з ймовірнісною фінальністю, як-от Bitcoin, кілька останніх блоків теоретично можуть бути замінені під час реорганізації ланцюга, тому продавці чекають кількох підтверджень, перш ніж вважати платіж остаточним.
Для Bitcoin блок з’являється в середньому раз на 10 хвилин, а давня практика — вважати транзакцію надійною після 6 підтверджень, хоча для невеликих сум часто достатньо менше. В Ethereum після переходу на Proof of Stake є поняття фіналізації: блок стає незворотним приблизно через дві епохи — це порядку 13 хвилин. У Solana є рівні processed, confirmed і finalized, а TON досягає фінальності за секунди.
Фінальність — це момент, після якого транзакцію не можна скасувати без порушення правил протоколу. Саме вона, а не просто поява в мемпулі чи першому блоці, має бути підставою для видачі товару. Видача «на нулі підтверджень» відкриває двері атакам подвійного витрачання.
Ще одна пастка — довіра одному вузлу. Якщо ваш RPC-провайдер повертає хибні дані чи відстає, система може зарахувати транзакцію, якої немає в основному ланцюгу. Надійні платіжні системи перевіряють платіж через кілька незалежних джерел. Корисно також окремо обробляти випадок, коли транзакція зникла з ланцюга після реорганізації: статус платежу має повернутися в очікування, а не лишитися «оплачено».
Moonvex зараховує платіж лише після того, як його підтвердили два незалежні провайдери вузлів, і тоді ж надсилає вебхук мерчанту.
Як працювати з підтвердженнями
- Не видавати товар за транзакцію, яка ще в мемпулі.
- Задавати поріг підтверджень відповідно до мережі та суми.
- Перевіряти платіж більш ніж через один вузол.
- Показувати клієнту статус «очікуємо підтвердження», щоб він не платив вдруге.