From 4cee6afb59e069141f2b1ccce3d8c0bca1a9993f Mon Sep 17 00:00:00 2001 From: adorda <angdmz@gmail.com> Date: Tue, 30 Jul 2019 12:05:22 -0300 Subject: [PATCH] Validator, field y arreglo de bug de signers --- gateway/fields.py | 8 ++++++++ gateway/gateway.py | 5 ++++- gateway/utils.py | 17 +++++++++++++++++ gateway/validators.py | 9 +++++++++ setup.py | 5 +++-- 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 gateway/validators.py diff --git a/gateway/fields.py b/gateway/fields.py index e69de29..4a207e4 100644 --- a/gateway/fields.py +++ b/gateway/fields.py @@ -0,0 +1,8 @@ +from django.db.models.fields import CharField +from gateway.validators import validate_address + + +class AddressField(CharField): + def __init__(self, *args, **kwargs): + self.default_validators.append(validate_address) + super().__init__(*args, **kwargs) diff --git a/gateway/gateway.py b/gateway/gateway.py index 621f731..fe43567 100644 --- a/gateway/gateway.py +++ b/gateway/gateway.py @@ -159,7 +159,7 @@ class Gateway: def block_is_canonical_poa(self, block_number): last_block_number = self.get_last_blocknumber() tx_block_number = block_number - required_block_difference = math.ceil(self.get_signers_count() / 2) + 1 + required_block_difference = math.ceil(len(self.get_signers()) / 2) + 1 return (last_block_number - tx_block_number) > required_block_difference def pending_transactions(self): @@ -171,6 +171,9 @@ class Gateway: return txs def get_signers_count(self): + return len(self.get_signers()) + + def get_signers(self): return self.w3.manager.request_blocking("clique_getSigners", []) def get_smart_contract_bytecode(self, smart_contract_address): diff --git a/gateway/utils.py b/gateway/utils.py index f81b8a6..c3d2d22 100644 --- a/gateway/utils.py +++ b/gateway/utils.py @@ -36,3 +36,20 @@ def hex32bytes_string(some_hex32bytes): return Web3.toText(some_hex32bytes.decode().strip('\\\u0000')) except UnicodeDecodeError as ude: return some_hex32bytes + + +class HexBytesToDict: + def dehex_dict(self, dictionary): + for k, v in dictionary.items(): + if isinstance(v, dict): + self.dehex_dict(dictionary[k]) + elif isinstance(v, list): + self.dehex_list(dictionary[k]) + elif isinstance(v, HexBytes): + dictionary[k] = v.hex() + + def dehex_list(self, sequence): + i = 0 + while i < len(sequence): + sequence[i] = sequence[i].decode() + i = i + 1 diff --git a/gateway/validators.py b/gateway/validators.py new file mode 100644 index 0000000..1e662bb --- /dev/null +++ b/gateway/validators.py @@ -0,0 +1,9 @@ +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ +from gateway.gateway import AddressValidation + + +def validate_address(value): + validator = AddressValidation() + if not validator.is_valid(value): + raise ValidationError(_('%(value)s is not a valid address'), params={'value': value}) diff --git a/setup.py b/setup.py index 6df36b3..94ab5a1 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( name='django-ethgateway', - version='0.0.2', + version='0.0.4', packages=find_packages(), include_package_data=True, license='GNU GPL License', # example license @@ -20,7 +20,8 @@ setup( author_email='agustindorda@gmail.com', install_requires=[ 'aiohttp==3.5.4', - 'web3==4.6.0' + 'web3==4.6.0', + 'Django==2.1.7' ], classifiers=[ 'Framework :: Django', -- GitLab