swarm/services/chequebook: update chequebook for Solidity 4.3

- proper handling of failed send
- added fallback function with additional logging for top-ups
- added Solidity version pragma
This commit is contained in:
Daniel A. Nagy 2016-10-27 15:22:43 +02:00
parent 4936bec6c9
commit f2c5af1826

View file

@ -1,4 +1,6 @@
import "mortal";
pragma solidity ^0.4.3;
import "mortal.sol" as mortal;
/// @title Chequebook for Ethereum micropayments
/// @author Daniel A. Nagy <daniel@ethdev.com>
@ -9,6 +11,14 @@ contract chequebook is mortal {
/// @notice Overdraft event
event Overdraft(address deadbeat);
/// @notice Deposit event
event Deposit(uint256 amount);
/// @notice Top up chequebook
function() payable {
Deposit(msg.value);
}
/// @notice Cash cheque
///
/// @param beneficiary beneficiary address
@ -28,16 +38,18 @@ contract chequebook is mortal {
// Attempt sending the difference between the cumulative amount on the cheque
// and the cumulative amount on the last cashed cheque to beneficiary.
if (amount - sent[beneficiary] >= this.balance) {
if (beneficiary.send(amount - sent[beneficiary])) {
// Upon success, update the cumulative amount.
sent[beneficiary] = amount;
// update the cumulative amount before sending
sent[beneficiary] = amount;
if (!beneficiary.send(amount - sent[beneficiary])) {
// Upon failure to execute send, revert everything
throw;
}
} else {
// Upon failure, punish owner for writing a bounced cheque.
// owner.sendToDebtorsPrison();
Overdraft(owner);
// Compensate beneficiary.
suicide(beneficiary);
selfdestruct(beneficiary);
}
}
}