Created
September 5, 2021 15:20
-
-
Save KrzysztofWelc/590b4467d68825cb7e7d2310d7fd284f to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.0; | |
contract TimeLock{ | |
address payable beneficiary; | |
uint256 releaseTime; | |
constructor(address payable _beneficiary, uint256 _releaseTime) public{ | |
require(_releaseTime > block.timestamp); | |
beneficiary = _beneficiary; | |
releaseTime = _releaseTime; | |
} | |
function release() public{ | |
require(block.timestamp >= releaseTime); | |
beneficiary.transfer(address(this).balance); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.0; | |
contract Escrow{ | |
address agent; | |
mapping(address => uint256) public deposits; | |
modifier onlyAgent(){ | |
require(msg.sender == agent); | |
_; | |
} | |
constructor() public{ | |
agent = msg.sender; | |
} | |
function deposit | |
(address payee ) public onlyAgent payable{ | |
uint256 amount = msg.value; | |
deposits[payee] = deposits[payee] +amount; | |
} | |
function withdraw(address payable payee) public onlyAgent{ | |
uint256 payment = deposits[payee]; | |
deposits[payee] = 0; | |
payee.transfer(payment); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.0; | |
contract Token{ | |
string public name = "Token"; | |
string public symbol = "DAPP"; | |
uint256 public decimals = 18; | |
uint256 public totalSupply; | |
mapping(address=>uint256) public balanceOf; | |
mapping(address =>mapping(address=>uint256)) public allowance; | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
event Approval(address indexed owner, address indexed spender, uint256 value); | |
constructor ()public{ | |
totalSupply = 1000 * (10 ** decimals); | |
balanceOf[msg.sender] = totalSupply; | |
} | |
function transfer(address _to, uint256 _value) public returns (bool success){ | |
require(balanceOf[msg.sender] >= _value); | |
_transfer(msg.sender, _to, _value); | |
return true; | |
} | |
function _transfer(address _from, address _to, uint256 _value) internal{ | |
require(_to != address(0)); | |
balanceOf[_from] = balanceOf[_from] - _value; | |
balanceOf[_to] = balanceOf[_to] + _value; | |
emit Transfer(_from, _to, _value); | |
} | |
function approve(address _spender, address _to, uint256 _value) public returns(bool success){ | |
require(_spender != address(0)); | |
allowance[msg.sender][_spender] = _value; | |
emit Approval(msg.sender, _spender, _value); | |
return true; | |
} | |
function transferFrom(address _from, address _to, uint256 _value) public returns(bool success){ | |
require(_value <= balanceOf[_from]); | |
require(_value <= allowance[_from][msg.sender]); | |
allowance[_from][msg.sender] = allowance[_from][msg.sender] - _value; | |
_transfer(_from, _to, _value); | |
return true; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.8.0; | |
import "./Token.sol"; | |
contract TokenTimeLock{ | |
Token public token; | |
address public beneficiary; | |
uint256 public releaseTime; | |
constructor(Token _token, address _beneficiary, uint256 _releaseTime) public{ | |
require(_releaseTime > block.timestamp); | |
token = _token; | |
beneficiary = _beneficiary; | |
} | |
function release() public { | |
require(block.timestamp >= releaseTime); | |
uint256 amount = token.balanceOf(address(this)) | |
; | |
require(amount >0); | |
token.transfer(beneficiary, amount); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment