PullPaymentCapable.sol 627 B

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