У минулій частині ми зупинилися на тому, що не погано було б дізнатися про факт платежу від bitcoind замість того, щоб перебирати всі видані адреси.
Повний цикл статей для розробників платіжного шлюзу для bitcoin читайте тут:
ПРИЙМАЄМО ОПЛАТУ В: ТЕОРЕТИЧНА
ПРИЙМАЄМО ОПЛАТУ В BITCOIN: ЧАСТИНА ДРУГА. ІНСТРУМЕНТИ І ПІДГОТОВКА
ПРИЙМАЄМО ОПЛАТУ В BITCOIN: ЧАСТИНА ТРЕТЯ, СВІЙ TEST З БЛЕКДЖЕКОМ
По-перше, таким перебором ми уповільнюємо всю систему, і при великій кількості платежів. А по-друге, цілком достатньо "по-перше".
Я згадав у минулій статті, що bitcoind все ж таки вміє надсилати повідомлення, хоча і робить це дещо своєрідно. Технічно при виникненні певних подій відбувається запуск системної команди (програми) з передачею даних як аргумент командного рядка. Наскільки такі події три: alertnotify, blocknotify та walletnotify. Нас цікавлять два останні.
Для отримання повідомлень нам потрібно у файлі конфігурації bitcoin.conf вказати відповідно:
walletnotify=command1 %s blocknotify=command2 %s
Що це нам дасть і як це працює? За будь-якої транзакції, пов'язаної з нашим гаманцем, тобто з будь-якою адресою, виданою нашим bitcoind, буде виконана команда
command1, вказана для walletnotify, причому як параметр %s буде підставлений хеш транзакції. Звісно, хотілося б, щоб були і сама адреса та сума – але маємо те, що маємо. Маючи TxId, ми вже можемо отримати повну інформацію про транзакцію, включаючи всі адреси та суми.
Тепер про нюанси.
Команда буде запущена максимум два рази. Іноді – один. Перший раз - при отриманні непідтвердженої транзакції та додаванні її в mempool. Другий раз - при включенні транзакції до блоку, тобто при отриманні першого підтвердження. У деяких випадках перше повідомлення може не прийти взагалі.. А як нам бути, якщо ми хочемо вважати платіж досконалим після канонічних шести підтверджень?
Тут нам на допомогу приходить blocknotify. Команда command2 буде виконуватися при додаванні кожного нового підписаного блоку, і хеш блоку приходитиме замість параметра %s. Далі ми можемо або перевірити всі наші зареєстровані транзакції на кількість підтверджень (так, така інформація в транзакції надходить від bitcoind), або переглядати кожен блок щодо наявності в ньому транзакцій з нашими адресами (довго, не ефективно, але іноді необхідно)
Як буде реалізовано програмну частину, що реалізує повідомлення, - повністю віддано на відкуп розробника. Це може бути хоч bash-скрипт, хоч програма на C/C++, хоч PHP. Головне, щоб ваша програма могла бути запущена з командного рядка.
Читайте також
Golang у крипті: коли швидкість і передбачуваність важливіша за моду
Якщо ви коли-небудь запускали кампанію, яка “все зробила правильно”, а сайт у самий пік раптово почав гальмувати – ви вже розумієте, звідки взагалі береться розмова про мову розробки. У такі моменти з'ясовується неприємна річ...
Сканер блоків (Blockchain explorer) своїми руками: небагато теорії
Минулої статті ми розглянули причини, з яких нам може знадобитися свій блокрозвідка. Зауважу, що список цей далеко не повний, але вважатимемо, що ми визначилися - нам потрібне своє джерело даних про транзакції та їх зв'язки з адресами.
