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
- usefulness: 72
- safety: 85
- liveness: 76
- authenticity: 70
- extensibility: 74
- bytecodeDiscipline: 92
- practical: 78
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