Lock.sol 902 B

123456789101112131415161718192021222324252627282930313233343536
  1. // SPDX-License-Identifier: UNLICENSED
  2. pragma solidity >=0.8.9;
  3. error InvalidUnlockTime(uint256 unlockTime);
  4. error NotOwner(address owner);
  5. error UnlockTimeNotReached(uint256 unlockTime);
  6. contract Lock {
  7. uint256 public unlockTime;
  8. address payable public owner;
  9. event Withdrawal(uint256 amount, uint256 when);
  10. constructor(uint256 _unlockTime) payable {
  11. if (block.timestamp >= _unlockTime) {
  12. revert InvalidUnlockTime(_unlockTime);
  13. }
  14. unlockTime = _unlockTime;
  15. owner = payable(msg.sender);
  16. }
  17. function withdraw() public {
  18. if (block.timestamp < unlockTime) {
  19. revert UnlockTimeNotReached(unlockTime);
  20. }
  21. if (msg.sender != owner) {
  22. revert NotOwner(owner);
  23. }
  24. emit Withdrawal(address(this).balance, block.timestamp);
  25. owner.transfer(address(this).balance);
  26. }
  27. }