Sighash Receipt Relay

sighash-receipt-relay · receipt-attestation · 702 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract SighashReceiptRelay {
    event Receipt(
        bytes32 indexed receiptId,
        address indexed submitter,
        address indexed signer,
        bytes32 digest,
        uint256 expiry,
        uint256 salt,
        uint256 blockNumber,
        uint256 timestamp,
        uint256 chainId
    );

    function submitReceipt(
        bytes32 digest,
        address signer,
        uint256 expiry,
        uint256 salt,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bytes32 receiptId) {
        require(signer != address(0));
        bytes32 payload = keccak256(abi.encodePacked(digest, signer, expiry, salt, block.chainid));
        require(ecrecover(payload, v, r, s) == signer);

        receiptId = keccak256(abi.encodePacked(digest, signer, expiry, salt, block.number, block.chainid));

        emit Receipt(
            receiptId,
            msg.sender,
            signer,
            digest,
            expiry,
            salt,
            block.number,
            block.timestamp,
            block.chainid
        );
    }

    receive() external payable {
        revert();
    }
}