Electrum

ElectrumX 方法 blockchain.address.get_balance 刪除,如何獲取公共地址的腳本雜湊並獲取餘額?

  • March 17, 2021

閱讀 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}}

我的問題是:

  1. 公共地址的“腳本雜湊”是什麼意思?
  2. 是否需要使用事務雜湊,就像在程式碼中一樣?
  3. 為什麼使用 tx hash 時"result":{"confirmed":0,"unconfirmed":0} 即使地址有資金也總是顯示。
  4. 可以僅從公共地址獲取腳本雜湊嗎?

非常感謝。

好吧,已經很久了,但我已經能夠自己找到方法了。

獲取腳本雜湊的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)

謝謝你。

引用自:https://bitcoin.stackexchange.com/questions/103273