diff --git a/libsolidity/SolidityWallet.cpp b/libsolidity/SolidityWallet.cpp index b5f0f7249..6d3d501f4 100644 --- a/libsolidity/SolidityWallet.cpp +++ b/libsolidity/SolidityWallet.cpp @@ -275,8 +275,9 @@ contract daylimit is multiowned { // METHODS - // constructor - just records the present day's index. - function daylimit() { + // constructor - stores initial daily limit and records the present day's index. + function daylimit(uint _limit) { + m_dailyLimit = _limit; m_lastDay = today(); } // (re)sets the daily limit. needs many of the owners to confirm. doesn't alter the amount already spent today. @@ -354,8 +355,10 @@ contract Wallet is multisig, multiowned, daylimit { // METHODS - // constructor - just pass on the owner array to the multiowned. - function Wallet(address[] _owners, uint _required) multiowned(_owners, _required) { + // constructor - just pass on the owner array to the multiowned and + // the limit to daylimit + function Wallet(address[] _owners, uint _required, uint _daylimit) + multiowned(_owners, _required) daylimit(_daylimit) { } // kills the contract sending everything to `_to`. @@ -424,7 +427,12 @@ static unique_ptr s_compiledWallet; class WalletTestFramework: public ExecutionFramework { protected: - void deployWallet(u256 const& _value = 0, vector const& _owners = vector{}, u256 _required = 1) + void deployWallet( + u256 const& _value = 0, + vector const& _owners = vector{}, + u256 _required = 1, + u256 _dailyLimit = 0 + ) { if (!s_compiledWallet) { @@ -434,7 +442,7 @@ protected: ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(m_optimize, m_optimizeRuns), "Compiling contract failed"); s_compiledWallet.reset(new bytes(m_compiler.getBytecode("Wallet"))); } - bytes args = encodeArgs(u256(0x40), _required, u256(_owners.size()), _owners); + bytes args = encodeArgs(u256(0x60), _required, _dailyLimit, u256(_owners.size()), _owners); sendMessage(*s_compiledWallet + args, true, _value); BOOST_REQUIRE(!m_output.empty()); } @@ -519,7 +527,7 @@ BOOST_AUTO_TEST_CASE(initial_owners) u256("0x0000000000000000000000004c9113886af165b2de069d6e99430647e94a9fff"), u256("0x0000000000000000000000003fb1cd2cd96c6d5c0b5eb3322d807b34482481d4") }; - deployWallet(0, owners, 4); + deployWallet(0, owners, 4, 2); BOOST_CHECK(callContractFunction("m_numOwners()") == encodeArgs(u256(8))); BOOST_CHECK(callContractFunction("isOwner(address)", h256(m_sender, h256::AlignRight)) == encodeArgs(true)); for (u256 const& owner: owners) @@ -554,7 +562,9 @@ BOOST_AUTO_TEST_CASE(multisig_value_transfer) BOOST_AUTO_TEST_CASE(daylimit) { deployWallet(200); + BOOST_REQUIRE(callContractFunction("m_dailyLimit()") == encodeArgs(u256(0))); BOOST_REQUIRE(callContractFunction("setDailyLimit(uint256)", h256(100)) == encodeArgs()); + BOOST_REQUIRE(callContractFunction("m_dailyLimit()") == encodeArgs(u256(100))); BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x12)) == encodeArgs()); BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x13)) == encodeArgs()); BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x14)) == encodeArgs()); @@ -585,6 +595,14 @@ BOOST_AUTO_TEST_CASE(daylimit) BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 90); } +BOOST_AUTO_TEST_CASE(daylimit_constructor) +{ + deployWallet(200, {}, 1, 20); + BOOST_REQUIRE(callContractFunction("m_dailyLimit()") == encodeArgs(u256(20))); + BOOST_REQUIRE(callContractFunction("setDailyLimit(uint256)", h256(30)) == encodeArgs()); + BOOST_REQUIRE(callContractFunction("m_dailyLimit()") == encodeArgs(u256(30))); +} + //@todo test data calls BOOST_AUTO_TEST_SUITE_END()