aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-07-22 22:58:24 +0800
committerchriseth <c@ethdev.com>2015-07-22 22:58:24 +0800
commitd4cb489c8f0da6cfcb10883846d4bb9b1abd20ca (patch)
tree9c047da1e78a07c55d11a911232743905009ad2a
parent4412b8a6c97aba00e0e03a225f67efc3be7d7873 (diff)
downloaddexon-solidity-d4cb489c8f0da6cfcb10883846d4bb9b1abd20ca.tar.gz
dexon-solidity-d4cb489c8f0da6cfcb10883846d4bb9b1abd20ca.tar.zst
dexon-solidity-d4cb489c8f0da6cfcb10883846d4bb9b1abd20ca.zip
Wallet updated to include daylimit in constructor.
-rw-r--r--libsolidity/SolidityWallet.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/libsolidity/SolidityWallet.cpp b/libsolidity/SolidityWallet.cpp
index b5f0f724..6d3d501f 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<bytes> s_compiledWallet;
class WalletTestFramework: public ExecutionFramework
{
protected:
- void deployWallet(u256 const& _value = 0, vector<u256> const& _owners = vector<u256>{}, u256 _required = 1)
+ void deployWallet(
+ u256 const& _value = 0,
+ vector<u256> const& _owners = vector<u256>{},
+ 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()