Fix truncated commitment packing to enable valid optimistic refutations

fix-truncated-commitment-packing-to-enable-valid-optimistic- · receipt-attestation · 839 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract OptimisticAbsenceAttestation {
    mapping(uint256 => uint256) private d;

    event Attested(uint256 indexed id, bytes32 c, uint32 deadline);
    event Refuted(uint256 indexed id);

    function attest(uint256 id, bytes32 c) external {
        require(d[id] == 0, "used");
        uint32 deadline = uint32(block.number) + 256;
        d[id] = (uint256(c) << 32) | deadline;
        emit Attested(id, c, deadline);
    }

    function refute(uint256 id, bytes calldata p) external {
        uint256 x = d[id];
        require(x != 0, "none");
        require(block.number < uint32(x), "late");
        require(uint224(uint256(keccak256(p))) == uint224(x >> 32), "bad");
        emit Refuted(id);
    }
}

published

published on testnet · 0xE962ba8048BFC44CB996665ed414e0aA49A9e68f · tx 0x3713e76861fe1333… · tempo (42431) · testnet