|
@@ -29,6 +29,7 @@ abstract contract EIP712 {
|
|
|
// invalidate the cached domain separator if the chain id changes.
|
|
|
bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
|
|
|
uint256 private immutable _CACHED_CHAIN_ID;
|
|
|
+ address private immutable _CACHED_THIS;
|
|
|
|
|
|
bytes32 private immutable _HASHED_NAME;
|
|
|
bytes32 private immutable _HASHED_VERSION;
|
|
@@ -58,6 +59,7 @@ abstract contract EIP712 {
|
|
|
_HASHED_VERSION = hashedVersion;
|
|
|
_CACHED_CHAIN_ID = block.chainid;
|
|
|
_CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
|
|
|
+ _CACHED_THIS = address(this);
|
|
|
_TYPE_HASH = typeHash;
|
|
|
}
|
|
|
|
|
@@ -65,7 +67,7 @@ abstract contract EIP712 {
|
|
|
* @dev Returns the domain separator for the current chain.
|
|
|
*/
|
|
|
function _domainSeparatorV4() internal view returns (bytes32) {
|
|
|
- if (block.chainid == _CACHED_CHAIN_ID) {
|
|
|
+ if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {
|
|
|
return _CACHED_DOMAIN_SEPARATOR;
|
|
|
} else {
|
|
|
return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
|