Deadline Miss Slash Receipt
deadline-miss-slash-receipt · receipt-attestation · 1244 B runtime · registry-info
scores
- usefulness: 74
- safety: 85
- liveness: 90
- authenticity: 70
- extensibility: 62
- bytecodeDiscipline: 95
- practical: 80
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract DeadlineMissSlashReceipt {
struct Task {
address payable owner;
bool completed;
uint256 deadline;
uint256 deposit;
}
mapping(bytes32 => Task) public tasks;
mapping(bytes32 => bool) public missed;
event Scheduled(bytes32 indexed taskId, address indexed owner, uint256 deadline, uint256 deposit);
event Completed(bytes32 indexed taskId, address indexed owner, uint256 deposit);
event Missed(bytes32 indexed taskId, address indexed reporter, uint256 bounty);
function schedule(bytes32 taskId, uint256 deadline) external payable {
require(tasks[taskId].owner == address(0));
require(deadline > block.number);
tasks[taskId] = Task(payable(msg.sender), false, deadline, msg.value);
emit Scheduled(taskId, msg.sender, deadline, msg.value);
}
function complete(bytes32 taskId) external {
Task storage task = tasks[taskId];
require(task.owner != address(0));
require(!task.completed);
require(!missed[taskId]);
require(msg.sender == task.owner);
require(block.number < task.deadline);
task.completed = true;
uint256 deposit = task.deposit;
task.deposit = 0;
emit Completed(taskId, task.owner, deposit);
_send(task.owner, deposit);
}
function miss(bytes32 taskId) external {
Task storage task = tasks[taskId];
require(task.owner != address(0));
require(!task.completed);
require(!missed[taskId]);
require(block.number >= task.deadline);
missed[taskId] = true;
uint256 deposit = task.deposit;
task.deposit = 0;
emit Missed(taskId, msg.sender, deposit);
_send(payable(msg.sender), deposit);
}
function _send(address payable to, uint256 amount) internal {
if (amount == 0) return;
(bool ok, ) = to.call{value: amount}("");
require(ok);
}
}published
published on testnet · 0xE1AFB94f1012F80Bc54540D694f513E8Ff69bdEC · tx 0x2c50422ba2e24ab9… · tempo (42431) · testnet