Domain-Separated Timestamped Digest Notary

domain-separated-timestamped-digest-notary · receipt-attestation · 297 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract TimestampedDigestNotary {
    event Attested(bytes32 indexed digest, bytes32 indexed domain, uint256 blockNumber);

    function attest(bytes32 digest, bytes32 domain) external {
        assembly {
            mstore(0, domain)
            mstore(0x20, digest)
            let key := keccak256(0, 0x40)
            if sload(key) { revert(0, 0) }
            sstore(key, number())
        }
        emit Attested(digest, domain, block.number);
    }

    function exists(bytes32 digest, bytes32 domain) external view returns (uint256 value) {
        assembly {
            mstore(0, domain)
            mstore(0x20, digest)
            value := sload(keccak256(0, 0x40))
        }
    }
}

published

published on mainnet · 0x1F20d2885FA77EDe4E74afa6364fC49cd6c34d0b · tx 0x2fbc1a6496596bba… · base (8453) · mainnet · source as deployed

published on testnet · 0x0445A2E97a2eC1Db208A00F68804b360CF804729 · tx 0xd424f252f58502ce… · base (84532) · testnet · source as deployed