Задача
Я хочу сообщить веб-серверу о входящих транзакциях в биткойнах.
Проблемы
Первая проблема заключается в том, что я получаю 6 транзакций при запуске команды в оболочке, но при выполнении сценария я получаю только 5.
Вторая проблема заключается в том, что во время выполнения сценария и отправки другой транзакции на отслеживаемый адрес он не показывает, что обнаружен новый txid.
Я подумал, что это может быть связано с кэшированием вывода subprocess.run()
, и попытался воспроизвести его с помощью другой команды, но это работало нормально.
Сценарий
#! /usr/bin/env python3
import subprocess
import json
import requests
import time
starttime=time.time()
txids = []
while True:
result = subprocess.run(['bitcoin-cli', 'listunspent'], stdout=subprocess.PIPE, input='0 9999999 "[\"BITCOIN_ADDRESS\"]"'.encode('utf-8'))
transactions = json.loads(result.stdout.decode('utf-8'))
for val in transactions:
if val['txid'] not in txids:
print ('found new txid: ' + val['txid'])
val['amount_sat'] = round(val['amount'] * 100000000)
url = 'SERVER_URL'
payload = json.dumps(val)
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, headers=headers, data=payload)
if r.text == 'success':
txids.append(val['txid'])
print ('inserted txid ' + val['txid'])
time.sleep(30.0 - ((time.time() - starttime) % 30.0))