Decouple Shareable from DayLimit

pull/119/head
Arseniy Klempner 8 years ago
parent 11cf9f8752
commit 36fa2a72cf
  1. 14
      contracts/DayLimit.sol
  2. 8
      contracts/MultisigWallet.sol
  3. 2
      contracts/test-helpers/DayLimitMock.sol
  4. 10
      test/DayLimit.js

@ -11,7 +11,7 @@ import './Shareable.sol';
* on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method * on a particular resource per calendar day. is multiowned to allow the limit to be altered. resource that method
* uses is specified in the modifier. * uses is specified in the modifier.
*/ */
contract DayLimit is Shareable { contract DayLimit {
// FIELDS // FIELDS
uint public dailyLimit; uint public dailyLimit;
@ -38,13 +38,13 @@ contract DayLimit is Shareable {
// METHODS // METHODS
// (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. // (re)sets the daily limit. doesn't alter the amount already spent today.
function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external { function setDailyLimit(uint _newLimit) external {
dailyLimit = _newLimit; dailyLimit = _newLimit;
} }
// resets the amount already spent today. needs many of the owners to confirm // resets the amount already spent today.
function resetSpentToday() onlymanyowners(sha3(msg.data)) external { function resetSpentToday() external {
spentToday = 0; spentToday = 0;
} }
@ -53,14 +53,14 @@ contract DayLimit is Shareable {
// checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and // checks to see if there is at least `_value` left from the daily limit today. if there is, subtracts it and
// returns true. otherwise just returns false. // returns true. otherwise just returns false.
function underLimit(uint _value) internal onlyOwner returns (bool) { function underLimit(uint _value) internal returns (bool) {
// reset the spend limit if we're on a different day to last time. // reset the spend limit if we're on a different day to last time.
if (today() > lastDay) { if (today() > lastDay) {
spentToday = 0; spentToday = 0;
lastDay = today(); lastDay = today();
} }
// check to see if there's enough left - if so, subtract and return true. // check to see if there's enough left - if so, subtract and return true.
// overflow protection // dailyLimit check // overflow protection // dailyLimit check
if (spentToday + _value >= spentToday && spentToday + _value <= dailyLimit) { if (spentToday + _value >= spentToday && spentToday + _value <= dailyLimit) {
spentToday += _value; spentToday += _value;
return true; return true;

@ -83,6 +83,14 @@ contract MultisigWallet is Multisig, Shareable, DayLimit {
} }
} }
function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external {
this.setDailyLimit(_newLimit);
}
function resetSpentToday() onlymanyowners(sha3(msg.data)) external {
this.resetSpentToday();
}
// INTERNAL METHODS // INTERNAL METHODS

@ -4,7 +4,7 @@ import "../DayLimit.sol";
contract DayLimitMock is DayLimit { contract DayLimitMock is DayLimit {
uint public totalSpending; uint public totalSpending;
function DayLimitMock(uint _value, address[] _owners, uint _required) DayLimit(_value) Shareable(_owners, _required) { function DayLimitMock(uint _value) DayLimit(_value) {
totalSpending = 0; totalSpending = 0;
} }

@ -2,14 +2,14 @@ contract('DayLimit', function(accounts) {
it('should construct with the passed daily limit', async function() { it('should construct with the passed daily limit', async function() {
let initLimit = 10; let initLimit = 10;
let dayLimit = await DayLimitMock.new(initLimit, accounts, 2); let dayLimit = await DayLimitMock.new(initLimit);
let dailyLimit = await dayLimit.dailyLimit(); let dailyLimit = await dayLimit.dailyLimit();
assert.equal(initLimit, dailyLimit); assert.equal(initLimit, dailyLimit);
}); });
it('should be able to spend if daily limit is not reached', async function() { it('should be able to spend if daily limit is not reached', async function() {
let limit = 10; let limit = 10;
let dayLimit = await DayLimitMock.new(limit, accounts, 1); let dayLimit = await DayLimitMock.new(limit);
await dayLimit.attemptSpend(8); await dayLimit.attemptSpend(8);
let spentToday = await dayLimit.spentToday(); let spentToday = await dayLimit.spentToday();
@ -22,7 +22,7 @@ contract('DayLimit', function(accounts) {
it('should prevent spending if daily limit is reached', async function() { it('should prevent spending if daily limit is reached', async function() {
let limit = 10; let limit = 10;
let dayLimit = await DayLimitMock.new(limit, accounts, 1); let dayLimit = await DayLimitMock.new(limit);
await dayLimit.attemptSpend(8); await dayLimit.attemptSpend(8);
let spentToday = await dayLimit.spentToday(); let spentToday = await dayLimit.spentToday();
@ -35,7 +35,7 @@ contract('DayLimit', function(accounts) {
it('should allow spending if daily limit is reached and then set higher', async function() { it('should allow spending if daily limit is reached and then set higher', async function() {
let limit = 10; let limit = 10;
let dayLimit = await DayLimitMock.new(limit, accounts, 1); let dayLimit = await DayLimitMock.new(limit);
await dayLimit.attemptSpend(8); await dayLimit.attemptSpend(8);
let spentToday = await dayLimit.spentToday(); let spentToday = await dayLimit.spentToday();
@ -53,7 +53,7 @@ contract('DayLimit', function(accounts) {
it('should allow spending if daily limit is reached and then amount spent is reset', async function() { it('should allow spending if daily limit is reached and then amount spent is reset', async function() {
let limit = 10; let limit = 10;
let dayLimit = await DayLimitMock.new(limit, accounts, 1); let dayLimit = await DayLimitMock.new(limit);
await dayLimit.attemptSpend(8); await dayLimit.attemptSpend(8);
let spentToday = await dayLimit.spentToday(); let spentToday = await dayLimit.spentToday();

Loading…
Cancel
Save