Bitcoin Forum
June 06, 2023, 06:28:58 AM *
News: Latest Bitcoin Core release: 25.0 [Torrent]
   Home   Help Search Login Register More  
Pages: [1]
Author Topic: How to use walletnotify and blocknotify?  (Read 6434 times)
cryptoxloubis (OP)
Offline Offline

Activity: 1
Merit: 1

View Profile
February 04, 2014, 12:52:00 PM
Merited by ETFbitcoin (1)

Well I am developing an application that I want the user to deposit some coins (same for withdrawal). I want to do 2 things:

  • When I ack that the deposit has taken place I want to create an "unconfirmed" record to an SQL db with the details of the transaction and change the balance of the user (0 confirms ATM).
  • Afterwards I want to "monitor" these transactions in order to confirm that they had actually taken place i.e. the number of confirmations are >= MIN_CONFIRMS. This confirmation merely changes the status of the record created on no.1 to confirmed.

I have read that with the walletnotify option, a program can be run every time a wallet transaction changes (Can anyone clarify when a wallet transaction changes?). This program (in the walletnotify option) must be really simple and fast thus I cannot use it to achieve no.1 because in order to get the details of the transaction I have to make RPC call which is slow.

On the other hand there is the blocknotify option that specifies a program to run every time the best block changes (I still need clarification on when the best block changes?).

So how one can achieve these 2 things using walletnotify and/or blocknotify?


P.S. Newbie here, so be gentle Wink
Hero Member
Offline Offline

Posts: 1686032938

View Profile Personal Message (Offline)

Reply with quote  #2

Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
Full Member
Offline Offline

Activity: 238
Merit: 105

View Profile
February 04, 2014, 03:38:10 PM

How I currently do it:-

blocknotify=/home/bitcoin/ %s
walletnotify=/home/bitcoin/ %s
alertnotify=/home/bitcoin/ %s

Then the .sh's are as follows:-
curl "" -d "$@"
curl "" -d "$@"
curl "" -d "$@"

In the program itself, I listen on local host like this:-
//HTTP objects
var http = require('http');
var httpServer = http.createServer(function (req, res) {
dealWithHTTP(req, res);
}).listen("9485", "", 511, function (err) {
if(err) {
console.log("HTTP ERROR:-", err);

Then the 'dealwithhttp' is basically a switch statement based on /alert, /block, or, /wallet. /Alert sends me a message directly, /wallet (I.E. payment incoming) applies an update to the DB based on the arguments (Post data), and, messages me also (I like to know!), finally, /block looks for any unconfirmed addresses, and, rechecks them with the bitcoind. Maybe not the best way of doing it, but, a way. As you said you didn't want to do another RPC call, I can't help you, but, least this is a starting place.

(Can anyone clarify when a [i]wallet transaction changes[/i]?).

From what I've seen, once when it receives a payment, once when it receives the first confirmation (I.E. first time it sees it past the broadcast), and once when you send a payment.

Please ask for a signed message from my on-site Bitcoin address (Check my profile) before doing any offsite trades with me.
Pages: [1]
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!