remove wallet
This commit is contained in:
51
wallet.py
51
wallet.py
@@ -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__":
|
||||||
|
|||||||
Reference in New Issue
Block a user