Приймаємо оплату в bitcoin: Частина шоста. Нюанси, знову нюанси

Приймаємо оплату в bitcoin: Частина шоста. Нюанси, знову нюанси

У минулій частині ми зупинилися на тому, що не погано було б дізнатися про факт платежу від 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. Головне, щоб ваша програма могла бути запущена з командного рядка.

Читайте також

5172026-02-11

Golang у крипті: коли швидкість і передбачуваність важливіша за моду

Якщо ви коли-небудь запускали кампанію, яка “все зробила правильно”, а сайт у самий пік раптово почав гальмувати – ви вже розумієте, звідки взагалі береться розмова про мову розробки. У такі моменти з'ясовується неприємна річ...

Розробнику, Технології, Ethereum, Навчання
1872024-02-25

Сканер блоків (Blockchain explorer) своїми руками: небагато теорії

Минулої статті ми розглянули причини, з яких нам може знадобитися свій блокрозвідка. Зауважу, що список цей далеко не повний, але вважатимемо, що ми визначилися - нам потрібне своє джерело даних про транзакції та їх зв'язки з адресами.

Навчання, Біткоін, Ethereum, Розробнику,

Останні статті з розділу Розробнику