Merge pull request #76 from maraoz/limit-funds
Limit funds improvements
This commit is contained in:
18
contracts/LimitBalance.sol
Normal file
18
contracts/LimitBalance.sol
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
pragma solidity ^0.4.4;
|
||||||
|
contract LimitBalance {
|
||||||
|
|
||||||
|
uint public limit;
|
||||||
|
|
||||||
|
function LimitBalance(uint _limit) {
|
||||||
|
limit = _limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
modifier limitedPayable() {
|
||||||
|
if (this.balance > limit) {
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
_;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,12 +0,0 @@
|
|||||||
pragma solidity ^0.4.4;
|
|
||||||
contract LimitFunds {
|
|
||||||
|
|
||||||
uint LIMIT = 5000;
|
|
||||||
|
|
||||||
function() { throw; }
|
|
||||||
|
|
||||||
function deposit() {
|
|
||||||
if (this.balance > LIMIT) throw;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
10
contracts/test-helpers/LimitBalanceMock.sol
Normal file
10
contracts/test-helpers/LimitBalanceMock.sol
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
pragma solidity ^0.4.4;
|
||||||
|
import '../LimitBalance.sol';
|
||||||
|
|
||||||
|
// mock class using LimitBalance
|
||||||
|
contract LimitBalanceMock is LimitBalance(1000) {
|
||||||
|
|
||||||
|
function limitedDeposit() payable limitedPayable {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
64
test/LimitBalance.js
Normal file
64
test/LimitBalance.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
contract('LimitBalance', function(accounts) {
|
||||||
|
var lb;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
return LimitBalanceMock.new().then(function(deployed) {
|
||||||
|
lb = deployed;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var LIMIT = 1000;
|
||||||
|
|
||||||
|
it("should expose limit", function(done) {
|
||||||
|
return lb.limit()
|
||||||
|
.then(function(limit) {
|
||||||
|
assert.equal(limit, LIMIT);
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should allow sending below limit", function(done) {
|
||||||
|
var amount = 1;
|
||||||
|
return lb.limitedDeposit({value: amount})
|
||||||
|
.then(function() {
|
||||||
|
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shouldnt allow sending above limit", function(done) {
|
||||||
|
var amount = 1100;
|
||||||
|
return lb.limitedDeposit({value: amount})
|
||||||
|
.catch(function(error) {
|
||||||
|
if (error.message.search('invalid JUMP') == -1) throw error
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should allow multiple sends below limit", function(done) {
|
||||||
|
var amount = 500;
|
||||||
|
return lb.limitedDeposit({value: amount})
|
||||||
|
.then(function() {
|
||||||
|
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||||
|
return lb.limitedDeposit({value: amount})
|
||||||
|
})
|
||||||
|
.then(function() {
|
||||||
|
assert.equal(web3.eth.getBalance(lb.address), amount*2);
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shouldnt allow multiple sends above limit", function(done) {
|
||||||
|
var amount = 500;
|
||||||
|
return lb.limitedDeposit({value: amount})
|
||||||
|
.then(function() {
|
||||||
|
assert.equal(web3.eth.getBalance(lb.address), amount);
|
||||||
|
return lb.limitedDeposit({value: amount+1})
|
||||||
|
})
|
||||||
|
.catch(function(error) {
|
||||||
|
if (error.message.search('invalid JUMP') == -1) throw error;
|
||||||
|
})
|
||||||
|
.then(done)
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user