123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- pragma solidity ^0.4.24;
- import "../math/SafeMath.sol";
- import "../ownership/Ownable.sol";
- /**
- * @title Escrow
- * @dev Base escrow contract, holds funds destinated to a payee until they
- * withdraw them. The contract that uses the escrow as its payment method
- * should be its owner, and provide public methods redirecting to the escrow's
- * deposit and withdraw.
- */
- contract Escrow is Ownable {
- using SafeMath for uint256;
- event Deposited(address indexed payee, uint256 weiAmount);
- event Withdrawn(address indexed payee, uint256 weiAmount);
- mapping(address => uint256) private deposits_;
- function depositsOf(address _payee) public view returns (uint256) {
- return deposits_[_payee];
- }
- /**
- * @dev Stores the sent amount as credit to be withdrawn.
- * @param _payee The destination address of the funds.
- */
- function deposit(address _payee) public onlyOwner payable {
- uint256 amount = msg.value;
- deposits_[_payee] = deposits_[_payee].add(amount);
- emit Deposited(_payee, amount);
- }
- /**
- * @dev Withdraw accumulated balance for a payee.
- * @param _payee The address whose funds will be withdrawn and transferred to.
- */
- function withdraw(address _payee) public onlyOwner {
- uint256 payment = deposits_[_payee];
- assert(address(this).balance >= payment);
- deposits_[_payee] = 0;
- _payee.transfer(payment);
- emit Withdrawn(_payee, payment);
- }
- }
|