Skip to content

signable_bytes() and to_message_json() throw exceptions #14

@anomit

Description

@anomit

Code in question:

from eip712_structs import EIP712Struct, Address, String, Uint


class Identity(EIP712Struct):
    userId = Uint(256)
    wallet = Address()


class Message(EIP712Struct):
    actionType = String()
    timestamp = Uint(256)
    authorizer = Identity


class EIP712Domain(EIP712Struct):
    name = String()
    version = String()
    chainId = Uint(256)
    verifyingContract = Address()


verifying_contract_domain = EIP712Domain(
    name='VerifierApp101',
    version='1',
    chainId=8995,
    verifyingContract='0x8c1eD7e19abAa9f23c476dA86Dc1577F1Ef401f5'
)

user_identification = Identity(userId=123, wallet='0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC')
msg = Message(actionType='Action7440', timestamp=1570112162, authorizer=Identity)

print(msg.to_message_json(verifying_contract_domain))
print(msg.signable_bytes(verifying_contract_domain))

msg.to_message_json(verifying_contract_domain) throws the following exception:

Traceback (most recent call last):
  File "submit_proof.py", line 32, in <module>
    print(msg.to_message_json(verifying_contract_domain))
  File "/Users/anomit/.pyenv/versions/ev-cli/lib/python3.6/site-packages/eip712_structs/struct.py", line 188, in to_message_json
    return json.dumps(message, cls=BytesJSONEncoder)
  File "/Users/anomit/.pyenv/versions/3.6.5/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/Users/anomit/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Users/anomit/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Users/anomit/.pyenv/versions/ev-cli/lib/python3.6/site-packages/eip712_structs/types.py", line 244, in default
    return super(BytesJSONEncoder, self).default(o)
  File "/Users/anomit/.pyenv/versions/3.6.5/lib/python3.6/json/encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'OrderedAttributesMeta' is not JSON serializable

msg.signable_bytes(verifying_contract_domain) throws:

Traceback (most recent call last):
  File "submit_proof.py", line 32, in <module>
    print(msg.signable_bytes(verifying_contract_domain))
  File "/Users/anomit/.pyenv/versions/ev-cli/lib/python3.6/site-packages/eip712_structs/struct.py", line 200, in signable_bytes
    result = b'\x19\x01' + domain.hash_struct() + self.hash_struct()
  File "/Users/anomit/.pyenv/versions/ev-cli/lib/python3.6/site-packages/eip712_structs/struct.py", line 132, in hash_struct
    return keccak(b''.join([self.type_hash(), self.encode_value()]))
  File "/Users/anomit/.pyenv/versions/ev-cli/lib/python3.6/site-packages/eip712_structs/struct.py", line 61, in encode_value
    encoded_values.append(sub_struct.hash_struct())
TypeError: hash_struct() missing 1 required positional argument: 'self'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions