PullPayment.sol 658 B

1234567891011121314151617181920212223
  1. pragma solidity ^0.4.0;
  2. /*
  3. * PullPaymentCapable
  4. * Base contract supporting async send for pull payments.
  5. * Inherit from this contract and use asyncSend instead of send.
  6. */
  7. contract PullPaymentCapable {
  8. mapping(address => uint) public payments;
  9. // store sent amount as credit to be pulled, called by payer
  10. function asyncSend(address dest, uint amount) internal {
  11. payments[dest] += amount;
  12. }
  13. // withdraw accumulated balance, called by payee
  14. function withdrawPayments() external {
  15. uint payment = payments[msg.sender];
  16. payments[msg.sender] = 0;
  17. if (!msg.sender.send(payment)) {
  18. payments[msg.sender] = payment;
  19. }
  20. }
  21. }