Commit d5007be5 authored by James Kim's avatar James Kim

progress on ClaimableInviteEIP712TypedData

parent f72b6a11
......@@ -8,6 +8,9 @@ import { OptimistInviter } from "../universal/op-nft/OptimistInviter.sol";
import { Optimist } from "../universal/op-nft/Optimist.sol";
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
import { TestERC1271Wallet } from "../testing/helpers/TestERC1271Wallet.sol";
import {
ClaimableInviteEIP712TypedData
} from "../testing/helpers/ClaimableInviteEIP712TypedData.sol";
contract OptimistInviter_Initializer is Test {
event InviteClaimed(address indexed issuer, address indexed claimer);
......@@ -22,6 +25,8 @@ contract OptimistInviter_Initializer is Test {
bytes32 EIP712_DOMAIN_TYPEHASH;
ClaimableInviteEIP712TypedData claimableInviteEIP712TypedData;
address internal alice_inviteGranter;
address internal sally;
address internal ted;
......@@ -80,6 +85,11 @@ contract OptimistInviter_Initializer is Test {
vm.expectEmit(true, true, true, true, address(optimistInviter));
emit Initialized(1);
optimistInviter.initialize("OptimistInviter");
claimableInviteEIP712TypedData = new ClaimableInviteEIP712TypedData(
"OptimistInviter",
optimistInviter.version()
);
}
/**
......@@ -170,7 +180,7 @@ contract OptimistInviter_Initializer is Test {
claimableInvite,
_getSignature(
_issuerPrivateKey,
_getEIP712Digest(
claimableInviteEIP712TypedData.getDigestWithDomain(
claimableInvite,
_eip712Name,
_eip712Version,
......@@ -273,48 +283,48 @@ contract OptimistInviter_Initializer is Test {
assertEq(_getInviteCount(_to), 3);
}
/**
* @notice Gets the hashed typed object for a EIP712 signature.
*/
function _getStructHash(OptimistInviter.ClaimableInvite memory _claimableInvite)
internal
view
returns (bytes32)
{
return
keccak256(
abi.encode(
optimistInviter.CLAIMABLE_INVITE_TYPEHASH(),
_claimableInvite.issuer,
_claimableInvite.nonce
)
);
}
/**
* @notice Gets the signable digest for a EIP712 signature.
*/
function _getEIP712Digest(
OptimistInviter.ClaimableInvite memory _claimableInvite,
bytes memory _name,
bytes memory _version,
uint256 _chainid,
address _verifyingContract
) internal view returns (bytes32) {
bytes32 domainSeparator = keccak256(
abi.encode(
EIP712_DOMAIN_TYPEHASH,
keccak256(_name),
keccak256(_version),
_chainid,
_verifyingContract
)
);
return
keccak256(
abi.encodePacked("\x19\x01", domainSeparator, _getStructHash(_claimableInvite))
);
}
// /**
// * @notice Gets the hashed typed object for a EIP712 signature.
// */
// function _getStructHash(OptimistInviter.ClaimableInvite memory _claimableInvite)
// internal
// view
// returns (bytes32)
// {
// return
// keccak256(
// abi.encode(
// optimistInviter.CLAIMABLE_INVITE_TYPEHASH(),
// _claimableInvite.issuer,
// _claimableInvite.nonce
// )
// );
// }
// /**
// * @notice Gets the signable digest for a EIP712 signature.
// */
// function _getEIP712Digest(
// OptimistInviter.ClaimableInvite memory _claimableInvite,
// bytes memory _name,
// bytes memory _version,
// uint256 _chainid,
// address _verifyingContract
// ) internal view returns (bytes32) {
// bytes32 domainSeparator = keccak256(
// abi.encode(
// EIP712_DOMAIN_TYPEHASH,
// keccak256(_name),
// keccak256(_version),
// _chainid,
// _verifyingContract
// )
// );
// return
// keccak256(
// abi.encodePacked("\x19\x01", domainSeparator, _getStructHash(_claimableInvite))
// );
// }
}
contract OptimistInviterTest is OptimistInviter_Initializer {
......@@ -570,12 +580,9 @@ contract OptimistInviterTest is OptimistInviter_Initializer {
bytes memory signature = _getSignature(
carolPrivateKey,
_getEIP712Digest(
claimableInviteEIP712TypedData.getDigest(
claimableInvite,
bytes("OptimistInviter"),
bytes(optimistInviter.version()),
block.chainid,
address(optimistInviter)
)
);
......
//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import { OptimistInviter } from "../../universal/op-nft/OptimistInviter.sol";
/**
* Helper contract that generates the EIP712 digest for a ClaimableInvite.
*/
library ClaimableInviteEIP712TypedData {
bytes32 public constant CLAIMABLE_INVITE_TYPEHASH =
keccak256("ClaimableInvite(address issuer,bytes32 nonce)");
bytes32 public constant EIP712_DOMAIN_TYPEHASH =
keccak256(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
);
function _getStructHash(OptimistInviter.ClaimableInvite memory _claimableInvite)
internal
pure
returns (bytes32)
{
return
keccak256(
abi.encode(
CLAIMABLE_INVITE_TYPEHASH,
_claimableInvite.issuer,
_claimableInvite.nonce
)
);
}
/**
* @notice Computes the EIP712 digest with the given domain parameters.
* Used for testing that different domain parameters fail.
*/
function getDigest(
OptimistInviter.ClaimableInvite calldata _claimableInvite,
bytes memory _name,
bytes memory _version,
uint256 _chainid,
address _verifyingContract
) public pure returns (bytes32) {
bytes32 domainSeparator = keccak256(
abi.encode(
EIP712_DOMAIN_TYPEHASH,
keccak256(_name),
keccak256(_version),
_chainid,
_verifyingContract
)
);
return ECDSA.toTypedDataHash(domainSeparator, _getStructHash(_claimableInvite));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment