主页 > imtoken钱包ios版 > 问题:如何迭代比特币私钥,然后查询对应地址有多少余额,最后将币转出

问题:如何迭代比特币私钥,然后查询对应地址有多少余额,最后将币转出

imtoken钱包ios版 2023-03-29 07:55:06

问题:如何迭代比特币私钥,然后查询对应地址有多少余额,最后将币转出 1:迭代私钥:

私钥是一个有限集,可以从1到2^256(实际是1.158 * 10^77)中选择一个数来生成私钥

这里是借助pycoin库生成的,因为私钥有不止一种编码方式,所以一个数可以得到多对公私钥(见《精通比特币》第70页表4-2)

from pycoin.key.Key import Key
def get_bitcoin_key_pair(i):
    k = Key(num)
    addr, priv = k.address(), k.wif()
    addr2, priv2 = k.address(use_uncompressed=True), k.wif(use_uncompressed=True)
    return [{
        'privkey': priv,
        'address': addr
    }, {
        'privkey': priv2,
        'address': addr2
    }]

2:查询余额:

这里可以使用bitcoin+electrumx来实现(都是使用supervisor拉起)比特币私钥如何导入比特币私钥如何导入,因为单独的bitcoin节点不提供查询任何地址余额的接口,electrumx有

比特币 私钥_比特币私钥如何导入_比特币私钥是什么

安装主管

pip3 install supervisor
echo_supervisord_conf > ~/conf/supervisord.conf
root@debian:~# cat >> ~/conf/supervisord.conf << EOF
> [include]
> files = *.ini
> EOF
supervisord -c ~/conf/supervisord.conf

安装比特币

为了不浪费生命,直接下载比特币的可执行二进制包

#  ~/conf/bitcoind.ini
[program:bitcoind]
command=/root/bitcoin-0.16.0/bin/bitcoind -rpcuser=YOUR_RPC_USER -rpcpassword=YOUR_RPC_PASSWD

比特币私钥是什么_比特币私钥如何导入_比特币 私钥

process_name=bitcoind numprocs=1 autostart=yes autorestart=true redirect_stderr=true stdout_logfile=/root/.bitcoin/error.log

并使用 supervisor 将比特币拉高

supervisorctl reread
supervisorctl update bitcoind

然后是electrumx:下载地址

# ~/conf/electrumx.ini
[program:electrumx]
command=/root/electrumx/electrumx_server.py
directory=/root/electrumx
environment=DB_DIRECTORY="/root/.electrumx",DAEMON_URL="http://YOUR_RPC_USER:YOUR_RPC_PASSWD@127.0.0.1:8332/",COIN="BitcoinSegwit",ALLOW_ROOT="1",HOST="0.0.0.0",TCP_PORT="50001"

比特币 私钥_比特币私钥是什么_比特币私钥如何导入

process_name=electrumx numprocs=1 autostart=yes autorestart=true redirect_stderr=true stdout_logfile=/root/.electrumx/log.log

并使用supervisor拉起electrumx

supervisorctl reread
supervisorctl update electrumx

electrumx同步所有区块后才会提供rpc接口

然后关闭electrumx界面查看比特币地址余额

import asyncio
class Bitcoin:
    def __init__(self, loop):

比特币私钥如何导入_比特币 私钥_比特币私钥是什么

self.loop = loop self.leveldb_host = '127.0.0.1' self.electrumx_port = 50001 async def get_bitcoin_balance(self, addr): reader, writer = await asyncio.open_connection(self.electrumx_host, self.electrumx_port, loop=self.loop) params = { 'jsonrpc': '2.0', 'method': 'blockchain.address.get_balance', 'params': [addr], 'id': addr } writer.write(json.dumps(params).encode()+b'\n') logger.info('data send') data = await reader.read(1024) writer.close() logger.error('bitcoin_balace: {}'.format(json.loads(data)))

比特币私钥是什么_比特币 私钥_比特币私钥如何导入

data = json.loads(data) res = { 'confirmed': data['result']['confirmed'], 'unconfirmed': data['result']['unconfirmed'] } return res async def test(self): await self.get_bitcoin_balance('17eLjNhftbJd826mc1Pdz62Ni2G7MZYi3Q') if __name__ == '__main__': loop = asyncio.get_event_loop() bitcoin = Bitcoin(loop) loop.run_until_complete(bitcoin.test()) loop.close()

3:转币到您的账户

代码实现待实现(可以先将第二步的私钥记录到文件中导入钱包转账)

整体代码: