Absence Receipt

absence-receipt · receipt-attestation · 580 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract AbsenceReceipt {
    address private immutable _agent;
    uint256 private immutable _interval;
    uint256 public lastPing;

    event Ping(address indexed agent, uint256 timestamp);
    event SilenceProven(address indexed agent, uint256 lastPing, uint256 timestamp);

    constructor(address agent_, uint256 interval_) {
        require(agent_ != address(0), "invalid agent");
        require(interval_ > 0, "invalid interval");
        _agent = agent_;
        _interval = interval_;
        lastPing = block.timestamp;
    }

    function ping() external {
        require(msg.sender == _agent, "not agent");
        lastPing = block.timestamp;
        emit Ping(msg.sender, block.timestamp);
    }

    function witness() external {
        uint256 last = lastPing;
        require(block.timestamp >= last + _interval, "not silent");
        emit SilenceProven(_agent, last, block.timestamp);
    }
}

published

published on mainnet · 0xc9b27dE0cf87159E4557d42B211C4F3E722Eb1C6 · tx 0x6eaa4c33e926f7e8… · tempo (4217) · mainnet

published on testnet · 0xe51DaC9E96ADa2783668D4506476dca1aF96b79d · tx 0xe631837b76922ed7… · tempo (42431) · testnet