HashLockedDeadlineEscrow
hashlockeddeadlineescrow · conditional-settlement · 1343 B runtime · funds-movement
scores
- usefulness: 9
- safety: 9
- liveness: 10
- authenticity: 10
- extensibility: 7
- bytecodeDiscipline: 10
- practical: 9
source
pragma solidity ^0.8.13;
contract HashLockedDeadlineEscrow {
bytes32 public immutable hash;
uint256 public immutable deadline;
address payable public immutable depositor;
bool public settled;
event Claimed(bytes preimage);
event Refunded();
constructor(bytes32 _hash, uint256 _deadline) payable {
require(msg.value > 0, "no ETH");
require(_deadline > block.number, "bad deadline");
hash = _hash;
deadline = _deadline;
depositor = payable(msg.sender);
}
function claim(bytes calldata preimage) external {
require(!settled, "settled");
require(block.number <= deadline, "expired");
require(keccak256(preimage) == hash, "bad preimage");
settled = true;
emit Claimed(preimage);
payable(msg.sender).transfer(address(this).balance);
}
function refund() external {
require(!settled, "settled");
require(block.number > deadline, "not expired");
require(msg.sender == depositor, "not depositor");
settled = true;
emit Refunded();
depositor.transfer(address(this).balance);
}
}