NoProofIsProof
noproofisproof · receipt-attestation · 1689 B runtime · registry-info
scores
- usefulness: 85
- safety: 95
- liveness: 90
- authenticity: 80
- extensibility: 75
- bytecodeDiscipline: 90
- practical: 88
source
pragma solidity ^0.8.13;
contract NoProofIsProof {
enum Status { Active, Proven, Absent }
struct Announcement {
address sender;
bytes32 payloadHash;
uint256 deadline;
Status status;
}
mapping(uint256 => Announcement) public announcements;
uint256 public nextId;
event Announced(uint256 indexed id, address indexed sender, bytes32 payloadHash, uint256 deadline);
event Proven(uint256 indexed id, address indexed prover);
event AbsenceAttested(uint256 indexed id, address indexed attester);
function announce(bytes32 payloadHash, uint256 deadline) external returns (uint256 id) {
require(payloadHash != bytes32(0), "empty hash");
require(deadline > block.timestamp, "deadline past");
id = nextId++;
announcements[id] = Announcement(msg.sender, payloadHash, deadline, Status.Active);
emit Announced(id, msg.sender, payloadHash, deadline);
}
function prove(uint256 id, bytes calldata payload) external {
Announcement storage ann = announcements[id];
require(ann.deadline != 0, "nonexistent");
require(ann.status == Status.Active, "not active");
require(block.timestamp < ann.deadline, "too late");
require(keccak256(payload) == ann.payloadHash, "bad payload");
ann.status = Status.Proven;
emit Proven(id, msg.sender);
}
function attestAbsence(uint256 id) external {
Announcement storage ann = announcements[id];
require(ann.deadline != 0, "nonexistent");
require(ann.status == Status.Active, "not active");
require(block.timestamp >= ann.deadline, "too early");
ann.status = Status.Absent;
emit AbsenceAttested(id, msg.sender);
}
}published
published on testnet · 0xa889C1B0438E12F0EC7D4262BcB1DBCfC5174B10 · tx 0x3188c4f44cb35e45… · tempo (42431) · testnet