Skip to content

Bool encoding ("0" & "false") discrepancy on TypedDataUtils.eip712Hash #303

@gokhanaliccii

Description

@gokhanaliccii

I was testing bool property encoding using TypedDataUtils.eip712Hash but I noticed different output when I change "false" to 0.

Proof

 const hash = TypedDataUtils.eip712Hash(
    {
      types: {
        EIP712Domain: [
          {
            name: 'name',
            type: 'string',
          },
          {
            name: 'version',
            type: 'string',
          },
          {
            name: 'chainId',
            type: 'uint256',
          },
          {
            name: 'verifyingContract',
            type: 'address',
          },
        ],
        Message: [
          { name: 'data_true', type: 'bool' },
          { name: 'data_false', type: 'bool' },
        ],
      },
      primaryType: 'Message',
      domain: {
        name: 'com.test.test',
        version: '1',
        chainId: 1,
        verifyingContract: '0xc000000000000000000000000000000000000000',
      },
      message: {
        data_true: 'true',
        data_false: 0,
      },
      
    },
    SignTypedDataVersion.V4,
  ).toString('hex');

  console.log(`result bool ->  ${hash}`)

This gives "0737ed294ff3a12f840067c728e500008f23a7b79f4a62c09b5d1bbca85ddb2e"

  1. Change data_false: 0 to data_false: 'false' then the output is changed to "1a3a9fdfbecde2bb500792a5cdfc2d0deca9401edafa4186d71f5842ecf12d0b"

Seems "false" is wrongly mapped, when I give "false" and "1" it gives the same output

PS: According to Eip-712 spec bool values should be encoded same as uint256 0 or 1. I tested uint256 0 and 1 values and I confirm it gives correct output

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions