diff --git a/gateway/gateway.py b/gateway/gateway.py index fe4356759c7c9ff4035d94359e2c91477b3d7cb5..1ba879ca5f02b2c012eebea2aef103784849c1bc 100644 --- a/gateway/gateway.py +++ b/gateway/gateway.py @@ -48,6 +48,10 @@ class NoConnectionException(Exception): pass +class UnlockAccountException(Exception): + pass + + class Gateway: is_poa = False @@ -122,6 +126,20 @@ class Gateway: logger.debug("Transaction hash: {}".format(tx_hash.hex())) return tx_hash + def execute_transaction_with_unlock(self, function, passphrase, timeout, transaction_data): + logger.debug("Executing transaction for function {} / tx data {}".format(str(function), str(transaction_data))) + try: + self.w3.personal.unlockAccount(transaction_data['from'], passphrase, timeout) + except Exception as uae: + raise UnlockAccountException("Passphrase is incorrect") + try: + function.call(transaction_data) + except ValueError as ve: + raise InvalidTransactionException(ve.args[0]['message']) + tx_hash = function.transact(transaction_data) + logger.debug("Transaction hash: {}".format(tx_hash.hex())) + return tx_hash + def call_transaction(self, function, transaction_data=None, exception_message=""): if transaction_data is None: transaction_data = {}