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

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

02018-07-31

Літи. Нова мова смарт-контрактів

На даний момент у мережі Ethereum опубліковано більш ніж 1700 децентралізованих програм (DApps), і їх кількість не перестає збільшуватися. І хоча всі Dapps покладаються на смарт контракти, надійність самих смарт контрактів стоїть під питанням – кіберзлочинці заробили вже понад...

Ethereum, Розробнику
02018-06-15

Приймаємо оплату в bitcoin: Частина Третя, свій testnet. З блекджеком

У минулій статті я розповів, як встановити bitcoind (ну як мінімум на Ubuntu Linux) і як підключиться до testnet. Але testnet – гарне рішення, коли ви проводите тести готового сайту, вже розгорнутого на сервері в інтернеті. А ось для локальної розробки це далеко не найзручніше рішення.

Розробнику

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

Нове відео на каналі