From 0ec0cc512df951fa94a39ed9068f5d5112b6e32b Mon Sep 17 00:00:00 2001 From: Alexander Sysoev Date: Thu, 2 Feb 2023 17:24:08 +0300 Subject: [PATCH] Add support for encrypted wallet (#20) Signed-off-by: cyc60 --- src/common/accounts.py | 36 ++++++++++++++++++++++++++++++++++-- src/config/settings.py | 6 ++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/common/accounts.py b/src/common/accounts.py index 22a4d061..318b61e2 100644 --- a/src/common/accounts.py +++ b/src/common/accounts.py @@ -1,5 +1,37 @@ +import json +import os.path + from eth_account import Account +from eth_account.account import LocalAccount + +from src.config.settings import ( + WALLET_KEYSTORE_PASSWORD_PATH, + WALLET_KEYSTORE_PATH, + WALLET_PRIVATE_KEY, +) + + +def get_operator_account() -> LocalAccount: + if WALLET_PRIVATE_KEY: + return Account().from_key(WALLET_PRIVATE_KEY) + + if WALLET_KEYSTORE_PATH and WALLET_KEYSTORE_PASSWORD_PATH: + if not os.path.isfile(WALLET_KEYSTORE_PATH): + raise ValueError(f"Can't open WALLET_KEYSTORE_PATH file. " + f' Path: {WALLET_KEYSTORE_PATH}') + if not os.path.isfile(WALLET_KEYSTORE_PASSWORD_PATH): + raise ValueError(f"Can't open WALLET_KEYSTORE_PASSWORD_PATH file. " + f'Path: {WALLET_KEYSTORE_PASSWORD_PATH}') + + with open(WALLET_KEYSTORE_PATH, 'r', encoding='utf-8') as f: + keyfile_json = json.load(f) + with open(WALLET_KEYSTORE_PASSWORD_PATH, 'r', encoding='utf-8') as f: + password = f.read().strip() + key = Account().decrypt(keyfile_json, password) + return Account().from_key(key) + + raise ValueError('Provide WALLET_PRIVATE_KEY setting or combination of ' + 'WALLET_KEYSTORE_PATH and WALLET_KEYSTORE_PASSWORD_PATH settings') -from src.config.settings import OPERATOR_PRIVATE_KEY -operator_account = Account().from_key(OPERATOR_PRIVATE_KEY) +operator_account = get_operator_account() diff --git a/src/config/settings.py b/src/config/settings.py index 57ce32e2..45cd8a45 100644 --- a/src/config/settings.py +++ b/src/config/settings.py @@ -21,8 +21,10 @@ # deposit data DEPOSIT_DATA_PATH = config('DEPOSIT_DATA_PATH') -# operator -OPERATOR_PRIVATE_KEY = config('OPERATOR_PRIVATE_KEY') +# wallet private key +WALLET_PRIVATE_KEY = config('WALLET_PRIVATE_KEY', default=None) +WALLET_KEYSTORE_PATH = config('WALLET_KEYSTORE_PATH', default=None) +WALLET_KEYSTORE_PASSWORD_PATH = config('WALLET_KEYSTORE_PASSWORD_PATH', default=None) # remote IPFS IPFS_FETCH_ENDPOINTS = config(