Electrum
ElectrumX 方法 blockchain.address.get_balance 刪除,如何獲取公共地址的腳本雜湊並獲取餘額?
閱讀 ElectrumX 文件,發現獲取任何公共地址餘額的方法是:
blockchain.address.get_balance
,但被刪除。現在,我知道這blockchain.scripthash.get_balance
是獲取任何公共地址餘額的方法,但它需要一個“scriphash”。檢查腳本散列的文件顯示了散列地址以獲取腳本散列的步驟。
使用此 python 程式碼,我可以獲得電子伺服器數據:
import json from time import sleep port = 50001 host = '127.0.0.1' content = { "method": "blockchain.scripthash.get_balance", "params": ["af6df685465a42b753bf72dfdf36c43ea3c2931025411940609da6f2404b00c4"], # this is a tx_hash "id": 0 } def electrumx(host, port, content): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.sendall(json.dumps(content).encode('utf-8')+b'\n') sleep(0.5) sock.shutdown(socket.SHUT_WR) res = "" while True: data = sock.recv(1024) if (not data): break res += data.decode() print(res) sock.close() electrumx(host, port, content)
使用事務雜湊,它會拋出一些結果,而不是所涉及的任何地址的餘額:
{"id":0,"jsonrpc":"2.0","result":{"confirmed":0,"unconfirmed":0}}
我的問題是:
- 公共地址的“腳本雜湊”是什麼意思?
- 是否需要使用事務雜湊,就像在程式碼中一樣?
- 為什麼使用 tx hash 時
"result":{"confirmed":0,"unconfirmed":0}
即使地址有資金也總是顯示。- 可以僅從公共地址獲取腳本雜湊嗎?
非常感謝。
好吧,已經很久了,但我已經能夠自己找到方法了。
獲取腳本雜湊的python函式是這樣的:
from pycoin.symbols.btc import network import hashlib def get_script_hash(addr): script = network.parse.address(addr).script() return hashlib.sha256(script).digest()[::-1].hex()
從本地電子伺服器檢查公共地址餘額的完整程式碼是:
import socket import json from time import sleep from pycoin.symbols.btc import network import hashlib port = 50001 host = '127.0.0.1' def get_script_hash(addr): script = network.parse.address(addr).script() return hashlib.sha256(script).digest()[::-1].hex() def electrumx(host, port, content): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.sendall(json.dumps(content).encode('utf-8') + b'\n') sleep(0.5) sock.shutdown(socket.SHUT_WR) res = "" while True: data = sock.recv(1024) if not data: break res += data.decode() print(res) balance = eval(res)['result'] print(f'{addr} has {balance["confirmed"] / 100000000} confirmed bitcoins') print(f'{addr} has {balance["unconfirmed"] / 100000000} unconfirmed bitcoins') sock.close() if __name__ == "__main__": addr = "1x8cQ1gKJ5dwBRr1mjsYfsJbWBHJDnxg9" script_hash = get_script_hash(addr) content = { "method": "blockchain.scripthash.get_balance", "params": [script_hash], "id": 0} electrumx(host, port, content)
謝謝你。