From 2a5c4fde7f6c93bd84ce2a7856070384890990f2 Mon Sep 17 00:00:00 2001 From: rndquu Date: Wed, 6 Dec 2023 13:08:23 +0300 Subject: [PATCH] fix: hash string array --- src/NftReward.sol | 12 +++++++++--- test/NftReward.t.sol | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/NftReward.sol b/src/NftReward.sol index 580e745..b1c0af1 100644 --- a/src/NftReward.sol +++ b/src/NftReward.sol @@ -78,13 +78,19 @@ contract NftReward is ERC721, Ownable, Pausable, EIP712 { * @return Mint request digest which should be signed by `minter` */ function getMintRequestDigest(MintRequest calldata _mintRequest) public view returns (bytes32) { + // for `string[]` array type we need to hash all the array values first + bytes32[] memory valuesHashed = new bytes32[](_mintRequest.values.length); + for (uint256 i = 0; i < _mintRequest.values.length; i++) { + valuesHashed[i] = keccak256(bytes(_mintRequest.values[i])); + } + // return final hash return _hashTypedDataV4(keccak256(abi.encode( - keccak256("MintRequest(address beneficiary,uint256 deadline,bytes32[] keys,uint256 nonce,string[] values"), + keccak256("MintRequest(address beneficiary,uint256 deadline,bytes32[] keys,uint256 nonce,string[] values)"), _mintRequest.beneficiary, _mintRequest.deadline, - _mintRequest.keys, + keccak256(abi.encodePacked(_mintRequest.keys)), _mintRequest.nonce, - _mintRequest.values + keccak256(abi.encodePacked(valuesHashed)) ))); } diff --git a/test/NftReward.t.sol b/test/NftReward.t.sol index a359ddb..190d5fa 100644 --- a/test/NftReward.t.sol +++ b/test/NftReward.t.sol @@ -47,7 +47,7 @@ contract NftRewardTest is Test { // get mint request digest which should be signed bytes32 digest = nftReward.getMintRequestDigest(mintRequest); - assertEq(digest, 0xddc32c7e599cc39e82377aa8b3feaf2b2c178e5a1883bed3b11bb3b563698fc7); + assertEq(digest, 0x2c680706f2350ed5622f229af6736cd20626f7b9b4569b2fd5abb7e086886dc3); } function testGetTokenDataKeys_ReturnAllTokenDataKeys() public {