wallet utils
This commit is contained in:
parent
9817546064
commit
b384ac562c
@ -1,6 +1,4 @@
|
|||||||
#!env/bin/python3
|
#!env/bin/python3
|
||||||
#same as qt but for command line, useful if you are going to fix various wallet
|
|
||||||
#also easier to read the code
|
|
||||||
from electrum.storage import WalletStorage
|
from electrum.storage import WalletStorage
|
||||||
from electrum.util import MyEncoder
|
from electrum.util import MyEncoder
|
||||||
import json
|
import json
|
||||||
@ -12,11 +10,18 @@ default_fees= 100
|
|||||||
|
|
||||||
def fix_will_settings_tx_fees(json_wallet):
|
def fix_will_settings_tx_fees(json_wallet):
|
||||||
tx_fees = json_wallet.get('will_settings',{}).get('tx_fees',False)
|
tx_fees = json_wallet.get('will_settings',{}).get('tx_fees',False)
|
||||||
|
have_to_update=False
|
||||||
if tx_fees:
|
if tx_fees:
|
||||||
json_wallet['will_settings']['baltx_fees']=json_wallet.get('will_settings',{}).get('tx_fees',default_fees)
|
json_wallet['will_settings']['baltx_fees']=tx_fees
|
||||||
del json_wallet['will_settings']['tx_fees']
|
del json_wallet['will_settings']['tx_fees']
|
||||||
return True
|
have_to_update=True
|
||||||
return False
|
for txid,willitem in json_wallet['will'].items():
|
||||||
|
tx_fees=willitem.get('tx_fees',False)
|
||||||
|
if tx_fees:
|
||||||
|
json_wallet['will'][txid]['baltx_fees']=tx_fees
|
||||||
|
del json_wallet['will'][txid]['tx_fees']
|
||||||
|
have_to_update=True
|
||||||
|
return have_to_update
|
||||||
|
|
||||||
def uninstall_bal(json_wallet):
|
def uninstall_bal(json_wallet):
|
||||||
del json_wallet['will_settings']
|
del json_wallet['will_settings']
|
||||||
@ -32,6 +37,15 @@ def save(json_wallet,storage):
|
|||||||
sort_keys=bool(human_readable),
|
sort_keys=bool(human_readable),
|
||||||
cls=MyEncoder,
|
cls=MyEncoder,
|
||||||
))
|
))
|
||||||
|
def read_wallet(path,password=False):
|
||||||
|
storage=WalletStorage(path)
|
||||||
|
if storage.is_encrypted():
|
||||||
|
if password==False:
|
||||||
|
password = getpass.getpass("Enter wallet password: ", stream = None)
|
||||||
|
storage.decrypt(password)
|
||||||
|
data=storage.read()
|
||||||
|
json_wallet=json.loads('['+data+']')[0]
|
||||||
|
return json_wallet
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if len(sys.argv) <3:
|
if len(sys.argv) <3:
|
||||||
@ -43,13 +57,7 @@ if __name__ == '__main__':
|
|||||||
exit(1)
|
exit(1)
|
||||||
command = sys.argv[1]
|
command = sys.argv[1]
|
||||||
path = sys.argv[2]
|
path = sys.argv[2]
|
||||||
|
json_wallet = read_wallet(path)
|
||||||
storage=WalletStorage(path)
|
|
||||||
if storage.is_encrypted():
|
|
||||||
password = getpass.getpass("Enter wallet password: ", stream = None)
|
|
||||||
storage.decrypt(password)
|
|
||||||
data=storage.read()
|
|
||||||
json_wallet=json.loads(data)
|
|
||||||
have_to_save=False
|
have_to_save=False
|
||||||
if command == 'fix':
|
if command == 'fix':
|
||||||
have_to_save = fix_will_settings_tx_fees(json_wallet)
|
have_to_save = fix_will_settings_tx_fees(json_wallet)
|
||||||
@ -1,10 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
#this script will help to fix tx_fees wallet bug
|
|
||||||
#also added an uninstall button to remove any bal data from wallet
|
|
||||||
#still very work in progress.
|
|
||||||
#
|
|
||||||
#have to be executed from electrum source code directory in example /home/user/projects/electrum/
|
|
||||||
#
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
@ -14,8 +8,7 @@ from PyQt6.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QHBoxLayout
|
|||||||
from PyQt6.QtCore import Qt
|
from PyQt6.QtCore import Qt
|
||||||
from electrum.storage import WalletStorage
|
from electrum.storage import WalletStorage
|
||||||
from electrum.util import MyEncoder
|
from electrum.util import MyEncoder
|
||||||
|
from bal_wallet_utils import fix_will_settings_tx_fees,uninstall_bal,read_wallet
|
||||||
default_fees = 100
|
|
||||||
|
|
||||||
class WalletUtilityGUI(QMainWindow):
|
class WalletUtilityGUI(QMainWindow):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -94,8 +87,8 @@ class WalletUtilityGUI(QMainWindow):
|
|||||||
file_path, _ = QFileDialog.getOpenFileName(
|
file_path, _ = QFileDialog.getOpenFileName(
|
||||||
self,
|
self,
|
||||||
"Select Wallet",
|
"Select Wallet",
|
||||||
"",
|
"*",
|
||||||
"Electrum Wallet (*.dat)"
|
"Electrum Wallet (*)"
|
||||||
)
|
)
|
||||||
if file_path:
|
if file_path:
|
||||||
self.wallet_path_edit.setText(file_path)
|
self.wallet_path_edit.setText(file_path)
|
||||||
@ -110,37 +103,6 @@ class WalletUtilityGUI(QMainWindow):
|
|||||||
def log_message(self, message):
|
def log_message(self, message):
|
||||||
self.output_text.append(message)
|
self.output_text.append(message)
|
||||||
|
|
||||||
def fix_will_settings_tx_fees(self, json_wallet):
|
|
||||||
tx_fees = json_wallet.get('will_settings',{}).get('tx_fees',False)
|
|
||||||
if tx_fees:
|
|
||||||
json_wallet['will_settings']['baltx_fees'] = json_wallet.get('will_settings',{}).get('tx_fees', default_fees)
|
|
||||||
del json_wallet['will_settings']['tx_fees']
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def uninstall_bal(self, json_wallet):
|
|
||||||
if 'will_settings' in json_wallet:
|
|
||||||
del json_wallet['will_settings']
|
|
||||||
if 'will' in json_wallet:
|
|
||||||
del json_wallet['will']
|
|
||||||
if 'heirs' in json_wallet:
|
|
||||||
del json_wallet['heirs']
|
|
||||||
return True
|
|
||||||
|
|
||||||
def save_wallet(self, json_wallet, storage):
|
|
||||||
try:
|
|
||||||
human_readable = not storage.is_encrypted()
|
|
||||||
storage.write(json.dumps(
|
|
||||||
json_wallet,
|
|
||||||
indent=4 if human_readable else None,
|
|
||||||
sort_keys=bool(human_readable),
|
|
||||||
cls=MyEncoder,
|
|
||||||
))
|
|
||||||
return True
|
|
||||||
except Exception as e:
|
|
||||||
self.log_message(f"Save error: {str(e)}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
def fix_wallet(self):
|
def fix_wallet(self):
|
||||||
self.process_wallet('fix')
|
self.process_wallet('fix')
|
||||||
|
|
||||||
@ -180,24 +142,25 @@ class WalletUtilityGUI(QMainWindow):
|
|||||||
|
|
||||||
# Read wallet
|
# Read wallet
|
||||||
data = storage.read()
|
data = storage.read()
|
||||||
json_wallet = json.loads(data)
|
json_wallet = json.loads('[' + data + ']')[0]
|
||||||
|
|
||||||
have_to_save = False
|
have_to_save = False
|
||||||
message = ""
|
message = ""
|
||||||
|
|
||||||
if command == 'fix':
|
if command == 'fix':
|
||||||
have_to_save = self.fix_will_settings_tx_fees(json_wallet)
|
have_to_save = fix_will_settings_tx_fees(json_wallet)
|
||||||
message = "Fix applied successfully" if have_to_save else "No fix needed"
|
message = "Fix applied successfully" if have_to_save else "No fix needed"
|
||||||
|
|
||||||
elif command == 'uninstall':
|
elif command == 'uninstall':
|
||||||
have_to_save = self.uninstall_bal(json_wallet)
|
have_to_save = uninstall_bal(json_wallet)
|
||||||
message = "BAL uninstalled successfully" if have_to_save else "No BAL settings found to uninstall"
|
message = "BAL uninstalled successfully" if have_to_save else "No BAL settings found to uninstall"
|
||||||
|
|
||||||
if have_to_save:
|
if have_to_save:
|
||||||
if self.save_wallet(json_wallet, storage):
|
try:
|
||||||
|
save_wallet(json_wallet, storage)
|
||||||
self.log_message(f"SUCCESS: {message}")
|
self.log_message(f"SUCCESS: {message}")
|
||||||
else:
|
except Exception as e:
|
||||||
self.log_message("ERROR: Failed to save wallet")
|
self.log_message(f"Save error: {str(e)}")
|
||||||
else:
|
else:
|
||||||
self.log_message(f"INFO: {message}")
|
self.log_message(f"INFO: {message}")
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user