From 1ec275069957d6abc6f9cb6161f3a638b4d0e1f4 Mon Sep 17 00:00:00 2001 From: Alexander Kolotov Date: Fri, 25 May 2018 18:06:23 +0300 Subject: [PATCH] initial development of tools --- erc20/utils/__init__.py | 0 erc20/utils/getenv.py | 105 ++++++++++++++++++++++++++++++++++++++++ erc20/utils/web3.py | 14 ++++++ 3 files changed, 119 insertions(+) create mode 100644 erc20/utils/__init__.py create mode 100644 erc20/utils/getenv.py create mode 100644 erc20/utils/web3.py diff --git a/erc20/utils/__init__.py b/erc20/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/erc20/utils/getenv.py b/erc20/utils/getenv.py new file mode 100644 index 0000000..dd64fad --- /dev/null +++ b/erc20/utils/getenv.py @@ -0,0 +1,105 @@ +# This module initializes data to work in the bridge envirionment + +from toml import load +from os.path import isfile +from os import getenv +from dotenv import load_dotenv +from json import load as jload + +from utils.web3 import ( + toChecksumAddress, + connectionToRPCProvider, +) + +class BridgeEnv(): + + def _fromEnv(self): + self.home_rpc_provider = getenv("HOME_RPC_URL") + self.foreign_rpc_provider = getenv("FOREIGN_RPC_URL") + self.home_bridge = toChecksumAddress(getenv("HOME_BRIDGE_ADDRESS")) + self.foreign_bridge = toChecksumAddress(getenv("FOREIGN_BRIDGE_ADDRESS")) + self.validator = toChecksumAddress(getenv("VALIDATOR_ADDRESS")) + + return True + + def _fromToml(self, _conf): + self.home_rpc_provider = _conf["home"]["rpc_host"] + ":" + str(_conf["home"]["rpc_port"]) + self.foreign_rpc_provider = _conf["foreign"]["rpc_host"] + ":" + str(_conf["foreign"]["rpc_port"]) + # Assuming that the validator is the same for both sides of bridge + self.validator = toChecksumAddress(_conf["foreign"]["account"]) + + try: + db = load(self.test_env["bridge_db"]) + except: + return False + + self.home_bridge = toChecksumAddress(db["home_contract_address"]) + self.foreign_bridge = toChecksumAddress(db["foreign_contract_address"]) + + return True + + def _getActorAddress(self): + try: + with open(self.test_env["actor_keystore"]) as f: + ks = jload(f) + f.close() + except: + return False + + self.actor_address = toChecksumAddress("0x" + ks["address"]) + + return True + + + def initEnv(self, _environment=None): + if _environment: + f = _environment + else: + f = 'bridge/test_env_db.toml' + + try: + self.test_env = load(f) + except: + return (False, "Cannot load " + f) + + bridge_config_file = self.test_env['bridge_config'] + + if not isfile(bridge_config_file): + return (False, bridge_config_file + " not found") + + config_type = None + + try: + bridge_config = load(bridge_config_file) + config_type = "toml" + except: + try: + load_dotenv(bridge_config_file) + config_type = "env" + except: + return False + + retval = False + + if not self._getActorAddress(): + return retval + + if config_type == "env": + retval = self._fromEnv() + else: + retval = self._fromToml(bridge_config) + + return retval + + def connectionToHome(self): + self.home_channel = None + if (self.home_rpc_provider) and (not self.home_channel): + self.home_channel = connectionToRPCProvider(self.home_rpc_provider) + return self.home_channel + + def connectionToForeign(self): + self.foreign_channel = None + if (self.foreign_rpc_provider) and (not self.foreign_channel): + self.foreign_channel = connectionToRPCProvider(self.foreign_rpc_provider) + return self.foreign_channel + diff --git a/erc20/utils/web3.py b/erc20/utils/web3.py new file mode 100644 index 0000000..be55358 --- /dev/null +++ b/erc20/utils/web3.py @@ -0,0 +1,14 @@ +# This module is wrapper for web3.py module + +from web3 import Web3 + +def toChecksumAddress(_addr): + return Web3.toChecksumAddress(_addr) + +def connectionToRPCProvider(_rpc_link): + ch = None + try: + ch = Web3(Web3.HTTPProvider(_rpc_link)) + except e: + pass + return ch