mirror of openzeppelin-contracts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openzeppelin-contracts/contracts/payment/PullPayment.sol

43 lines
927 B

pragma solidity ^0.4.8;
8 years ago
import '../SafeMath.sol';
/*
* PullPayment
* Base contract supporting async send for pull payments.
* Inherit from this contract and use asyncSend instead of send.
*/
contract PullPayment is SafeMath {
mapping(address => uint) public payments;
uint public totalPayments;
// store sent amount as credit to be pulled, called by payer
function asyncSend(address dest, uint amount) internal {
payments[dest] = safeAdd(payments[dest], amount);
totalPayments = safeAdd(totalPayments, amount);
}
// withdraw accumulated balance, called by payee
function withdrawPayments() {
address payee = msg.sender;
uint payment = payments[payee];
if (payment == 0) {
throw;
}
if (this.balance < payment) {
throw;
}
totalPayments = safeSub(totalPayments, payment);
payments[payee] = 0;
if (!payee.send(payment)) {
throw;
}
}
}