У минулій частині ми зупинилися на тому, що не погано було б дізнатися про факт платежу від 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. Головне, щоб ваша програма могла бути запущена з командного рядка.
Читайте також
Літи. Нова мова смарт-контрактів
На даний момент у мережі Ethereum опубліковано більш ніж 1700 децентралізованих програм (DApps), і їх кількість не перестає збільшуватися. І хоча всі Dapps покладаються на смарт контракти, надійність самих смарт контрактів стоїть під питанням – кіберзлочинці заробили вже понад...
Приймаємо оплату в bitcoin: Частина Третя, свій testnet. З блекджеком
У минулій статті я розповів, як встановити bitcoind (ну як мінімум на Ubuntu Linux) і як підключиться до testnet. Але testnet – гарне рішення, коли ви проводите тести готового сайту, вже розгорнутого на сервері в інтернеті. А ось для локальної розробки це далеко не найзручніше рішення.
