remove wallet

This commit is contained in:
2025-07-17 11:26:38 +03:00
parent 6b0937930c
commit 801cc3fc27

View File

@@ -3,8 +3,6 @@ import os
import json import json
import getpass import getpass
from pathlib import Path from pathlib import Path
import rich
from web3 import Web3 from web3 import Web3
from Crypto.Cipher import AES from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2 from Crypto.Protocol.KDF import PBKDF2
@@ -48,7 +46,7 @@ def connect_to_network():
rpc_url = Prompt.ask("[bold cyan]Введите RPC URL[/]", default="https://ethereum-rpc.publicnode.com") rpc_url = Prompt.ask("[bold cyan]Введите RPC URL[/]", default="https://ethereum-rpc.publicnode.com")
web3 = Web3(Web3.HTTPProvider(rpc_url)) web3 = Web3(Web3.HTTPProvider(rpc_url))
if web3.is_connected(): if web3.is_connected():
print("[green]Успешное подключение к сети Ethereum[/]") print("[green1]Подключено![/]")
else: else:
print("[red]Ошибка подключения к сети![/]") print("[red]Ошибка подключения к сети![/]")
web3 = None web3 = None
@@ -67,6 +65,23 @@ def import_wallet():
save_wallet(account) save_wallet(account)
def delete_wallet():
global selected_wallet
address = Prompt.ask("[red1]При удалении кошелька доступ к средствам будет потерян, введите номер кошелька для подтверждения операции")
if address != selected_wallet['address']:
print("[red]Операция отменена")
return
file_path = os.path.join(WALLETS_DIR, selected_wallet['address']+'.json')
if os.path.exists(file_path):
os.remove(file_path)
selected_wallet = None
print(f"[green1]Кошелек удален[/]")
def save_wallet(account): def save_wallet(account):
print("[bold cyan]Введите пароль для шифрования кошелька: [/]", end='') print("[bold cyan]Введите пароль для шифрования кошелька: [/]", end='')
password = getpass.getpass(prompt="") password = getpass.getpass(prompt="")
@@ -77,7 +92,7 @@ def save_wallet(account):
with open(filename, 'w') as f: with open(filename, 'w') as f:
json.dump({"address": account.address, "data": encrypted}, f) json.dump({"address": account.address, "data": encrypted}, f)
print(f"[green]Кошелек сохранен: {account.address}[/]") print(f"[green1]Кошелек сохранен: {account.address}[/]")
def select_wallet(): def select_wallet():
@@ -88,7 +103,7 @@ def select_wallet():
return return
for i, fname in enumerate(files): for i, fname in enumerate(files):
print(f"[orange1][{i}] {Path(fname).stem}[/]") print(f"[orange1][{i+1}] {Path(fname).stem}[/]")
try: try:
choice = int(Prompt.ask("[bold cyan]Выберите номер кошелька[/]")) choice = int(Prompt.ask("[bold cyan]Выберите номер кошелька[/]"))
@@ -96,9 +111,8 @@ def select_wallet():
print("[red]Неверный номер.[/]") print("[red]Неверный номер.[/]")
return return
with open(os.path.join(WALLETS_DIR, files[choice])) as f: with open(os.path.join(WALLETS_DIR, files[choice-1])) as f:
selected_wallet = json.load(f) selected_wallet = json.load(f)
print(f"[green]Кошелек выбран: {selected_wallet['address']}[/]")
def get_balance(): def get_balance():
@@ -111,7 +125,7 @@ def get_balance():
def send_transaction(): def send_transaction():
if not selected_wallet: if not selected_wallet:
print("[red]Кошелек не выбран.[/]") print("[red1]Кошелек не выбран.[/]")
return return
to = Prompt.ask("[bold cyan]Введите адрес получателя[/]") to = Prompt.ask("[bold cyan]Введите адрес получателя[/]")
@@ -141,16 +155,16 @@ def send_transaction():
private_key = decrypt_wallet(selected_wallet['data'], password) private_key = decrypt_wallet(selected_wallet['data'], password)
del password del password
except: except:
print("[red]Неверный пароль![/]") print("[red1]Неверный пароль![/]")
return return
try: try:
signed = web3.eth.account.sign_transaction(tx, private_key) signed = web3.eth.account.sign_transaction(tx, private_key)
del private_key del private_key
tx_hash = web3.eth.send_raw_transaction(signed.raw_transaction) tx_hash = web3.eth.send_raw_transaction(signed.raw_transaction)
print(f"[green]Транзакция отправлена! TX Hash: {tx_hash.hex()}[/]") print(f"[green1]Транзакция отправлена! TX Hash: {tx_hash.hex()}[/]")
except Exception as error: except Exception as error:
print(f"[red]{error.message}[/]") print(f"[red1]{error.message}[/]")
finally: finally:
gc.collect() gc.collect()
@@ -164,6 +178,7 @@ def main():
b. Просмотр баланса b. Просмотр баланса
s. Отправка средств s. Отправка средств
i. Импорт существующего кошелька i. Импорт существующего кошелька
d. Удаление кошелька
q. Выход q. Выход
""") """)
@@ -179,18 +194,24 @@ def main():
if web3 and selected_wallet: if web3 and selected_wallet:
get_balance() get_balance()
else: else:
print("[red]Необходимо подключиться к сети и выбрать кошелек[/]") print("[red1]Необходимо подключиться к сети и выбрать кошелек[/]")
elif choice == 's': elif choice == 's':
if web3 and selected_wallet: if web3 and selected_wallet:
send_transaction() send_transaction()
else: else:
print("[red]Необходимо подключиться к сети и выбрать кошелек[/]") print("[red1]Необходимо подключиться к сети и выбрать кошелек[/]")
elif choice == 'i': elif choice == 'i':
import_wallet() import_wallet()
elif choice == 'd':
if not selected_wallet:
select_wallet()
if selected_wallet:
delete_wallet()
else:
print("[red1]Необходимо выбрать кошелек[/]")
elif choice == 'q': elif choice == 'q':
break break
else:
print("[red]Неверный выбор[/]")
if __name__ == "__main__": if __name__ == "__main__":