MetaMask / MetaMask/eth-sig-util
Bool encoding ("0" & "false") discrepancy on TypedDataUtils.eip712Hash
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 583
- Forks
- 228
- Avg merge
- 11h 22m
- Merged PRs (30d)
- 7
Description
I was testing `bool` property encoding using `TypedDataUtils.eip712Hash` but I noticed different output when I change "false" to 0.
Proof
1)
```
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"
2) 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 ](https://eips.ethereum.org/EIPS/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
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the TypedDataUtils.eip712Hash entry point and reproduce the two examples using data_false as numeric 0 and string "false". Compare the resulting bool encoding with the EIP-712 rule that bool values match uint256 0 or 1; the issue is done when equivalent false inputs produce the same hash.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- blockchain, cryptography
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100