diff --git a/gateway/fields.py b/gateway/fields.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4a207e424b718e4ea086e5b9696b70514ad399f6 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 621f731142b1d9e2cfd02a2bc2d6b89309ae674a..fe4356759c7c9ff4035d94359e2c91477b3d7cb5 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 f81b8a6942225ae5ae699bc034dd18cacd1cde0b..c3d2d22c563c6d8e435073fcf0f54acd9ceca450 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 0000000000000000000000000000000000000000..1e662bb0c2460c90e1b83de878c79aee6ebfcd0f
--- /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 6df36b30b95a5df1862fe2c4e4b49cd9bbd77188..94ab5a1505ba36d4655d40c5f0fcc89a3ec6ab4e 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',