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 getpass
from pathlib import Path
import rich
from web3 import Web3
from Crypto.Cipher import AES
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")
web3 = Web3(Web3.HTTPProvider(rpc_url))
if web3.is_connected():
print("[green]Успешное подключение к сети Ethereum[/]")
print("[green1]Подключено![/]")
else:
print("[red]Ошибка подключения к сети![/]")
web3 = None
@@ -67,6 +65,23 @@ def import_wallet():
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):
print("[bold cyan]Введите пароль для шифрования кошелька: [/]", end='')
password = getpass.getpass(prompt="")
@@ -77,7 +92,7 @@ def save_wallet(account):
with open(filename, 'w') as f:
json.dump({"address": account.address, "data": encrypted}, f)
print(f"[green]Кошелек сохранен: {account.address}[/]")
print(f"[green1]Кошелек сохранен: {account.address}[/]")
def select_wallet():
@@ -88,7 +103,7 @@ def select_wallet():
return
for i, fname in enumerate(files):
print(f"[orange1][{i}] {Path(fname).stem}[/]")
print(f"[orange1][{i+1}] {Path(fname).stem}[/]")
try:
choice = int(Prompt.ask("[bold cyan]Выберите номер кошелька[/]"))
@@ -96,9 +111,8 @@ def select_wallet():
print("[red]Неверный номер.[/]")
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)
print(f"[green]Кошелек выбран: {selected_wallet['address']}[/]")
def get_balance():
@@ -111,7 +125,7 @@ def get_balance():
def send_transaction():
if not selected_wallet:
print("[red]Кошелек не выбран.[/]")
print("[red1]Кошелек не выбран.[/]")
return
to = Prompt.ask("[bold cyan]Введите адрес получателя[/]")
@@ -141,16 +155,16 @@ def send_transaction():
private_key = decrypt_wallet(selected_wallet['data'], password)
del password
except:
print("[red]Неверный пароль![/]")
print("[red1]Неверный пароль![/]")
return
try:
signed = web3.eth.account.sign_transaction(tx, private_key)
del private_key
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:
print(f"[red]{error.message}[/]")
print(f"[red1]{error.message}[/]")
finally:
gc.collect()
@@ -164,6 +178,7 @@ def main():
b. Просмотр баланса
s. Отправка средств
i. Импорт существующего кошелька
d. Удаление кошелька
q. Выход
""")
@@ -179,18 +194,24 @@ def main():
if web3 and selected_wallet:
get_balance()
else:
print("[red]Необходимо подключиться к сети и выбрать кошелек[/]")
print("[red1]Необходимо подключиться к сети и выбрать кошелек[/]")
elif choice == 's':
if web3 and selected_wallet:
send_transaction()
else:
print("[red]Необходимо подключиться к сети и выбрать кошелек[/]")
print("[red1]Необходимо подключиться к сети и выбрать кошелек[/]")
elif choice == 'i':
import_wallet()
elif choice == 'd':
if not selected_wallet:
select_wallet()
if selected_wallet:
delete_wallet()
else:
print("[red1]Необходимо выбрать кошелек[/]")
elif choice == 'q':
break
else:
print("[red]Неверный выбор[/]")
if __name__ == "__main__":