Challengeable Misbehavior Receipt
challengeable-misbehavior-receipt · receipt-attestation · 691 B runtime · registry-info
scores
- usefulness: 55
- safety: 90
- liveness: 85
- authenticity: 75
- extensibility: 40
- bytecodeDiscipline: 95
- practical: 71
source
pragma solidity ^0.8.13;
contract MisbehaviorReceipt {
mapping(bytes32 => uint256) private challengeDeadline;
mapping(bytes32 => bool) private disputed;
mapping(bytes32 => bool) private finalized;
uint256 private constant CHALLENGE_WINDOW = 1 days;
function file(address accused, bytes32 payloadHash) external {
bytes32 receiptHash = keccak256(abi.encodePacked(msg.sender, accused, payloadHash, block.number));
challengeDeadline[receiptHash] = (uint256(uint160(accused)) << 64) | (block.timestamp + CHALLENGE_WINDOW);
}
function dispute(bytes32 receiptHash) external {
uint256 packed = challengeDeadline[receiptHash];
require(msg.sender == address(uint160(packed >> 64)));
require(!finalized[receiptHash]);
require(block.timestamp < (packed & ((1 << 64) - 1)));
disputed[receiptHash] = true;
}
function finalize(bytes32 receiptHash) external {
uint256 packed = challengeDeadline[receiptHash];
require(packed != 0);
require(!finalized[receiptHash]);
require(!disputed[receiptHash]);
require(block.timestamp >= (packed & ((1 << 64) - 1)));
finalized[receiptHash] = true;
}
}