Skip to content

Instantly share code, notes, and snippets.

@KrzysztofWelc
Created September 5, 2021 15:20
Show Gist options
  • Save KrzysztofWelc/590b4467d68825cb7e7d2310d7fd284f to your computer and use it in GitHub Desktop.
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=
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);
}
}
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);
}
}
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;
}
}
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