8

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.

UTF-8
  • 3,224
  • 1
  • 15
  • 29
Kolayn
  • 81
  • 1
  • 3

3 Answers3

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.

user3338098
  • 125
  • 1
  • 8
wilburunion
  • 103
  • 7
1

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

{"id":"myquery","method":"getaddressbalance","params":["14vuRY354EaxDu4WrgjtvoDEwntDNwMVbx"]}
Jirico
  • 61
  • 3
  • Hi, I have an electrum server (electrs by blockstream) running with this parameter --cookie=mynode:mypassword would it be possible to share the curl command, adding also this cookie auth to send the request? Would be awesome. – firepol Jul 23 '20 at 22:29
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

  • 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 Oct 18 '18 at 19:54