У минулій частині ми зупинилися на тому, що не погано було б дізнатися про факт платежу від 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. Головне, щоб ваша програма могла бути запущена з командного рядка.
Читайте також
Apple опублікували нові правила про криптовалютні програми
Згідно з інформацією TechCrunch, ряд розробників Apple нещодавно об'єднали зусилля для створення "Союзу розробників". Союз звернувся до Apple із проханням надати користувачам Apple Store можливість завантажувати безкоштовні пробні версії їхніх програм. Це один із перших випадків, ...
Приймаємо оплату в bitcoin: Частина друга. Інструменти та підготовка
Можливо мені не вдалося налякати вас достатньою мірою, щоб ви відмовилися від цієї шаленої ідеї - приймати оплату в bitcoin. Ну тоді я маю для вас ще одну порцію головного болю на п'яту точку.
