Checking/polling a balance of an address in Electrum via the command line/RPC

5

Suppose, I've dynamically -- via the command line/RPC -- created an address or payment_query in Electrum. And saved its details in a database along with the amount of bitcoins I expect to receive.

How can then check/poll if that amount of bitcoins has arrived to that address? Also via the command line/RPC.

I don't want to be notified by Electrum, rather I want to poll Electrum daemon myself. Hence an http request-callback which Electrum can send to a URL isn't an option I'm looking for. Also, at the moment, I don't have a blockchain locally. Maybe later I'll add it, though.

Kolayn

Posted 2017-02-21T02:54:10.090

Reputation: 51

I'd like to know this too. If you get something please update this thread.Jirico 2017-08-31T01:04:50.700

Answers

2

There are several ways depending on what you are using. If you are wanting to query the daemon - one must assume you are running a Linux box or VPS

You do not want or need an " address balance " - you need YOUR wallet balance

This question has already been partially answered here => How would one monitor an address for a transaction and 1 confirmation in PHP?

The best way however is to use what the Electrum docs recommend - a curl call like this => curl --data-binary '{"id":"curltext","method":"getbalance","params":{"funded":true}}' http://127.0.0.1:7777

If you are using PHP - it would look something like this:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:7777");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"id\":\"curltext\",\"method\":\"getbalance\",\"params\":{\"funded\":true}}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);

You could make this inside a try-catch and trigger it by a cron job running at whatever interval you want to check

What comes back is a JSON-RPC file which you can decode into an array

$result =  json_decode($response, true);

and plug that into another variable for the single thing or things you want to work on from there

$wanted = $result["result"]["xxxxxxxxx"];

any of the parameters can be passed as a variable to the curl call

for instance to add a request it would go like this:

curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"id\":\"curltext\",\"method\":\"addrequest\",\"params\":{\"amount\":\"$how_much\",\"memo\":\"$your_memo->some_data_field\"}}");

You just need to run a "getbalance " - or any - command see what it returns and adjust your code to pull the returned value from "result" - you just test for a greater than " 0 " and then empty the wallet by sending it to another wallet and wait for the next payment

You could then use that data to trigger a "do something" like the email example in the above link from the middle example there.

wilburunion

Posted 2017-02-21T02:54:10.090

Reputation: 83

turns out that electrum doesn't have to be in daemon mode to receive api requests, but it has to be in daemon mode before it supports them.user3338098 2018-10-29T17:59:16.450

1

Just found out how to look for an address balance using Electrum RPC:

{"id":"myquery","method":"getaddressbalance","params":["14vuRY354EaxDu4WrgjtvoDEwntDNwMVbx"]}

Jirico

Posted 2017-02-21T02:54:10.090

Reputation: 61

1

Jirico's answer is the right one. Gotta make sure you put the address you're querying in params.

If you need more depth than just a balance, you can also getaddresshistory

{"id":"myquery","method":"getaddresshistory","params":["14vuRY354EaxDu4WrgjtvoDEwntDNwMVbx"]}

You can find a list of commands here: An Introduction to the Electrum Python Console

J A Gonzalez

Posted 2017-02-21T02:54:10.090

Reputation: 11

I just tried it and I got: {"result": [], "id": "curltext", "error": null} since I tried it on an empty address. What version of Electrum are you using?J A Gonzalez 2018-10-18T19:54:24.860