wouah 1 million qui dorment bien tranquillement
je crois comprendre que le wallet n'est pas chiffré. dans ce cas, j'ai un vieux bout de code Python qui peux t'aider.
j'ai jamais réussi à m'en sortir avec pywallet, surtout quand la db est corrompue ou d'une mauvaise version. du coup j'avais écris à l'arrache le code suivant qui scanne un wallet au complet et extrait les clés privées, sans s'occuper de la structure ou de la version du wallet. la version d'origine de mon code rebalançait les commandes d'import en rpc sur un nouveau wallet, j'ai désactivé cette partie, tu auras juste les commandes/clé privées qui s'afficheront à l'écran.
pour l'utiliser dans ton cas, tu as juste à modifier le chemin de ton wallet.dat en ligne 15, et à le lancer avec python2.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
#from jsonrpc import ServiceProxy, JSONRPCException
import re
import binascii
import hashlib
import struct
def main(args):
# rpcaddress = 'http://user:
[email protected]:9988'
# client = ServiceProxy(rpcaddress)
file = open('/home/executter/.bitcoin/wallet.dat', 'rb')
binary_data = file.read()
file.close()
keys = re.findall(b'(?=\x30\x81[\xB4-\xD3]\x02\x01\x01\x04([\x01-\x20])([\x00-\xFF]{32}))', binary_data)
for key in keys:
size = int('0x0'+binascii.hexlify(key[0]).decode('utf8'), 16)
private_key = key[1][:size]
private_key = str(private_key.rjust(32, '\x00'))
wif = private_key_to_wif(private_key)
command = 'importprivkey %s "" false' % wif
print(command)
# try:
# client.importprivkey(wif, "", False)
# except JSONRPCException as e:
# print e.error
return 0
def private_key_to_wif(private_key):
version = b'\x80'
checksum = hashlib.sha256(hashlib.sha256(version+private_key+b'\x01').digest()).digest()[:4]
return base58encode(version+private_key+b'\x01'+checksum)
def base58encode(b):
"""Encode bytes to a base58-encoded string"""
b58_digits = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
# Convert big-endian bytes to integer
n = int('0x0' + binascii.hexlify(b).decode('utf8'), 16)
# Divide that integer into bas58
res = []
while n > 0:
n, r = divmod(n, 58)
res.append(b58_digits[r])
res = ''.join(res[::-1])
# Encode leading zeros as base58 zeros
czero = 0
pad = 0
for c in b:
if c == czero: pad += 1
else: break
return b58_digits[0] * pad + res
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
1NHvzhH6NDNAwJFijURqscguQqBq2sJt6X, merci