From 4a74d8d5e46ae85d795cc23e5fbd5cdeeb55c6a3 Mon Sep 17 00:00:00 2001 From: saucepoint Date: Sat, 3 Aug 2024 22:15:36 -0400 Subject: [PATCH] assembly optimization, pr nits --- .forge-snapshots/PositionManager_permit.snap | 2 +- .../PositionManager_permit_secondPosition.snap | 2 +- .../PositionManager_permit_twice.snap | 2 +- src/base/EIP712.sol | 16 ++++++++++++---- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.forge-snapshots/PositionManager_permit.snap b/.forge-snapshots/PositionManager_permit.snap index c3bc0823..8ebdf959 100644 --- a/.forge-snapshots/PositionManager_permit.snap +++ b/.forge-snapshots/PositionManager_permit.snap @@ -1 +1 @@ -79636 \ No newline at end of file +79566 \ No newline at end of file diff --git a/.forge-snapshots/PositionManager_permit_secondPosition.snap b/.forge-snapshots/PositionManager_permit_secondPosition.snap index fa2386f9..972b19ad 100644 --- a/.forge-snapshots/PositionManager_permit_secondPosition.snap +++ b/.forge-snapshots/PositionManager_permit_secondPosition.snap @@ -1 +1 @@ -62524 \ No newline at end of file +62454 \ No newline at end of file diff --git a/.forge-snapshots/PositionManager_permit_twice.snap b/.forge-snapshots/PositionManager_permit_twice.snap index 7cfd8d74..a3347104 100644 --- a/.forge-snapshots/PositionManager_permit_twice.snap +++ b/.forge-snapshots/PositionManager_permit_twice.snap @@ -1 +1 @@ -45412 \ No newline at end of file +45342 \ No newline at end of file diff --git a/src/base/EIP712.sol b/src/base/EIP712.sol index 6c0148ab..5b4ea0f5 100644 --- a/src/base/EIP712.sol +++ b/src/base/EIP712.sol @@ -15,8 +15,8 @@ contract EIP712 is IEIP712 { uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; - bytes32 private constant _TYPE_HASH = - keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); + /// @dev equal to keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)") + bytes32 private constant _TYPE_HASH = 0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866; constructor(string memory name) { _HASHED_NAME = keccak256(bytes(name)); @@ -37,7 +37,15 @@ contract EIP712 is IEIP712 { } /// @notice Creates an EIP-712 typed data hash - function _hashTypedData(bytes32 dataHash) internal view returns (bytes32) { - return keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), dataHash)); + function _hashTypedData(bytes32 dataHash) internal view returns (bytes32 digest) { + // equal to keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), dataHash)); + bytes32 domainSeparator = DOMAIN_SEPARATOR(); + assembly ("memory-safe") { + let fmp := mload(0x40) + mstore(fmp, hex"1901") + mstore(add(fmp, 0x02), domainSeparator) + mstore(add(fmp, 0x22), dataHash) + digest := keccak256(fmp, 0x42) + } } }