12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- pragma solidity ^0.4.18;
- import "../math/SafeMath.sol";
- /**
- * @title PullPayment
- * @dev Base contract supporting async send for pull payments. Inherit from this
- * contract and use asyncSend instead of send.
- */
- contract PullPayment {
- using SafeMath for uint256;
- mapping(address => uint256) public payments;
- uint256 public totalPayments;
- /**
- * @dev withdraw accumulated balance, called by payee.
- */
- function withdrawPayments() public {
- address payee = msg.sender;
- uint256 payment = payments[payee];
- require(payment != 0);
- require(this.balance >= payment);
- totalPayments = totalPayments.sub(payment);
- payments[payee] = 0;
- assert(payee.send(payment));
- }
- /**
- * @dev Called by the payer to store the sent amount as credit to be pulled.
- * @param dest The destination address of the funds.
- * @param amount The amount to transfer.
- */
- function asyncSend(address dest, uint256 amount) internal {
- payments[dest] = payments[dest].add(amount);
- totalPayments = totalPayments.add(amount);
- }
- }
|