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