ElectrumX服务器jsonRPC身份验证

时间:2019-08-21 08:12:24

标签: python server bitcoin json-rpc

无法连接到电子服务器

错误: HTTPConnectionPool(host ='electrum.eff.ro',port = 50002):URL超过最大重试次数:/(由NewConnectionError(':导致无法建立新连接:[WinError 10061]无法建立连接,因为目标机器主动拒绝它'))

连接在python中完成:

electrum wallet jsonRPC authentication

import requests
import json


def main():
    url = "http://electrum.eff.ro:50002"
    payload = json.dumps(
        {
            "id": 0,
            "method": "server.version",
            "params": ["1.9.5", "0.6"]
        }
    )
    headers = {'content-type': "application/json", 'cache-control': "no-cache"}

    try:
        response = requests.request("POST", url, data=payload, headers=headers, auth=(rpc_user, rpc_password))
        return json.loads(response.text)
    except requests.exceptions.RequestException as e:
        print(e)
    except:
        print('No response from Wallet, check Bitcoin is running on this machine')


rpc_user = 'foo'
rpc_password = 'bar'

if __name__ == "__main__":
    answer = main()

这样的错误一直显示。

UPD:

服务器:     url =“ http://fortress.qtornado.com:443

错误:

('连接已中止。',RemoteDisconnected('远端封闭的连接无响应'))

如果连接HTTPS:

url =“ http s ://fortress.qtornado.com:443”

错误:

HTTPSConnectionPool(host ='fortress.qtornado.com',port = 443):URL超过最大重试次数:/(由SSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:自签名证书( _ssl.c:1051)')))

如何使用ssl证书进行连接?

1 个答案:

答案 0 :(得分:0)

解决问题的示例: https://github.com/cluelessperson/grappler

比特币测试网

import grappler
from base58 import b58decode_check
from binascii import hexlify
from hashlib import sha256
import codecs


a = grappler.ElectrumXConnector(
    # host="fortress.qtornado.com", # bitcoin mainnet
    host='tn.not.fyi',
    port=55002,
    # port=443,
    ssl=True,
    timeout=5
)


OP_DUP = b'76'
OP_HASH160 = b'a9'
BYTES_TO_PUSH = b'14'
OP_EQUALVERIFY = b'88'
OP_CHECKSIG = b'ac'
DATA_TO_PUSH = lambda address: hexlify(b58decode_check(address)[1:])
sig_script_raw = lambda address: b''.join((OP_DUP, OP_HASH160, BYTES_TO_PUSH, DATA_TO_PUSH(address), OP_EQUALVERIFY, OP_CHECKSIG))
script_hash = lambda address: sha256(codecs.decode(sig_script_raw(address), 'hex_codec')).digest()[::-1].hex()


a.send("server.version")
a.send("server.banner")
a.send('blockchain.scripthash.get_balance', script_hash('mksHkTDsauAP1L79rLZUQA3u36J3ntLtJx'))
a.send('blockchain.scripthash.get_mempool', script_hash('mksHkTDsauAP1L79rLZUQA3u36J3ntLtJx'))
a.send('blockchain.scripthash.subscribe', script_hash('mksHkTDsauAP1L79rLZUQA3u36J3ntLtJx'))