Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
74adaeed
Commit
74adaeed
authored
Dec 27, 2016
by
Manuel Aráoz
Committed by
GitHub
Dec 27, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #119 from adklempner/refactorDayLimit
Decouple Shareable from DayLimit
parents
2a75a2c9
a5602e7e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
29 additions
and
13 deletions
+29
-13
DayLimit.sol
contracts/DayLimit.sol
+7
-7
MultisigWallet.sol
contracts/MultisigWallet.sol
+8
-0
DayLimitMock.sol
contracts/test-helpers/DayLimitMock.sol
+9
-1
DayLimit.js
test/DayLimit.js
+5
-5
No files found.
contracts/DayLimit.sol
View file @
74adaeed
...
...
@@ -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
* uses is specified in the modifier.
*/
contract DayLimit
is Shareable
{
contract DayLimit {
// FIELDS
uint public dailyLimit;
...
...
@@ -38,13 +38,13 @@ contract DayLimit is Shareable {
// METHODS
// (re)sets the daily limit.
needs many of the owners to confirm.
doesn't alter the amount already spent today.
function
setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) ex
ternal {
// (re)sets the daily limit. doesn't alter the amount already spent today.
function
_setDailyLimit(uint _newLimit) in
ternal {
dailyLimit = _newLimit;
}
// resets the amount already spent today.
needs many of the owners to confirm
function
resetSpentToday() onlymanyowners(sha3(msg.data)) ex
ternal {
// resets the amount already spent today.
function
_resetSpentToday() in
ternal {
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
// 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.
if (today() > lastDay) {
spentToday = 0;
lastDay = today();
}
// 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) {
spentToday += _value;
return true;
...
...
contracts/MultisigWallet.sol
View file @
74adaeed
...
...
@@ -83,6 +83,14 @@ contract MultisigWallet is Multisig, Shareable, DayLimit {
}
}
function setDailyLimit(uint _newLimit) onlymanyowners(sha3(msg.data)) external {
_setDailyLimit(_newLimit);
}
function resetSpentToday() onlymanyowners(sha3(msg.data)) external {
_resetSpentToday();
}
// INTERNAL METHODS
...
...
contracts/test-helpers/DayLimitMock.sol
View file @
74adaeed
...
...
@@ -4,7 +4,7 @@ import "../DayLimit.sol";
contract DayLimitMock is DayLimit {
uint public totalSpending;
function DayLimitMock(uint _value
, address[] _owners, uint _required) DayLimit(_value) Shareable(_owners, _required
) {
function DayLimitMock(uint _value
) DayLimit(_value
) {
totalSpending = 0;
}
...
...
@@ -12,4 +12,12 @@ contract DayLimitMock is DayLimit {
totalSpending += _value;
}
function setDailyLimit(uint _newLimit) external {
_setDailyLimit(_newLimit);
}
function resetSpentToday() external {
_resetSpentToday();
}
}
test/DayLimit.js
View file @
74adaeed
...
...
@@ -2,14 +2,14 @@ contract('DayLimit', function(accounts) {
it
(
'should construct with the passed daily limit'
,
async
function
()
{
let
initLimit
=
10
;
let
dayLimit
=
await
DayLimitMock
.
new
(
initLimit
,
accounts
,
2
);
let
dayLimit
=
await
DayLimitMock
.
new
(
initLimit
);
let
dailyLimit
=
await
dayLimit
.
dailyLimit
();
assert
.
equal
(
initLimit
,
dailyLimit
);
});
it
(
'should be able to spend if daily limit is not reached'
,
async
function
()
{
let
limit
=
10
;
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
,
accounts
,
1
);
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
);
await
dayLimit
.
attemptSpend
(
8
);
let
spentToday
=
await
dayLimit
.
spentToday
();
...
...
@@ -22,7 +22,7 @@ contract('DayLimit', function(accounts) {
it
(
'should prevent spending if daily limit is reached'
,
async
function
()
{
let
limit
=
10
;
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
,
accounts
,
1
);
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
);
await
dayLimit
.
attemptSpend
(
8
);
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
()
{
let
limit
=
10
;
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
,
accounts
,
1
);
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
);
await
dayLimit
.
attemptSpend
(
8
);
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
()
{
let
limit
=
10
;
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
,
accounts
,
1
);
let
dayLimit
=
await
DayLimitMock
.
new
(
limit
);
await
dayLimit
.
attemptSpend
(
8
);
let
spentToday
=
await
dayLimit
.
spentToday
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment