diff --git a/contracts/LimitBalance.sol b/contracts/LimitBalance.sol new file mode 100644 index 000000000..f877512e0 --- /dev/null +++ b/contracts/LimitBalance.sol @@ -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 + msg.value > limit) { + throw; + } + _; + + } + +} diff --git a/contracts/LimitFunds.sol b/contracts/LimitFunds.sol deleted file mode 100644 index 303444abc..000000000 --- a/contracts/LimitFunds.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma solidity ^0.4.4; -contract LimitFunds { - - uint LIMIT = 5000; - - function() { throw; } - - function deposit() { - if (this.balance > LIMIT) throw; - } - -} diff --git a/contracts/test-helpers/LimitBalanceMock.sol b/contracts/test-helpers/LimitBalanceMock.sol new file mode 100644 index 000000000..c0f05ba8b --- /dev/null +++ b/contracts/test-helpers/LimitBalanceMock.sol @@ -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 { + } + +} diff --git a/test/LimitBalance.js b/test/LimitBalance.js new file mode 100644 index 000000000..2afcd2da2 --- /dev/null +++ b/test/LimitBalance.js @@ -0,0 +1,38 @@ +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) + }); + +});