aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaweł Bylica <chfast@gmail.com>2015-07-28 01:10:23 +0800
committerPaweł Bylica <chfast@gmail.com>2015-07-28 01:10:23 +0800
commitbc00b646847d5ecbd1aac53a9d0d7049e95ccb14 (patch)
tree95a63cbd311a23bec1eb025ca62b54388af460e5
parente9e6bc67804f952e74dca73c0ab7839737df5757 (diff)
parent7908709d86a0409f10cc593caae8285280fc28bf (diff)
downloaddexon-solidity-bc00b646847d5ecbd1aac53a9d0d7049e95ccb14.tar.gz
dexon-solidity-bc00b646847d5ecbd1aac53a9d0d7049e95ccb14.tar.zst
dexon-solidity-bc00b646847d5ecbd1aac53a9d0d7049e95ccb14.zip
Merge remote-tracking branch 'upstream/develop' into evmjit_stack
-rw-r--r--CMakeLists.txt4
-rw-r--r--TestHelper.cpp8
-rw-r--r--libsolidity/SolidityWallet.cpp56
3 files changed, 64 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6bdefd65..6e24e334 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -75,7 +75,9 @@ target_link_libraries(testeth ${CURL_LIBRARIES})
target_link_libraries(testeth ${CRYPTOPP_LIBRARIES})
target_link_libraries(testeth ethereum)
target_link_libraries(testeth ethcore)
-target_link_libraries(testeth secp256k1)
+if (NOT WIN32)
+ target_link_libraries(testeth secp256k1)
+endif ()
if (JSCONSOLE)
target_link_libraries(testeth jsengine)
diff --git a/TestHelper.cpp b/TestHelper.cpp
index aec72285..ab9a1749 100644
--- a/TestHelper.cpp
+++ b/TestHelper.cpp
@@ -69,6 +69,7 @@ void mine(State& s, BlockChain const& _bc)
sealer->onSealGenerated([&](bytes const& sealedHeader){ sealed = sealedHeader; });
sealer->generateSeal(s.info());
sealed.waitNot({});
+ sealer.reset();
s.sealBlock(sealed);
}
@@ -79,7 +80,8 @@ void mine(Ethash::BlockHeader& _bi)
sealer->onSealGenerated([&](bytes const& sealedHeader){ sealed = sealedHeader; });
sealer->generateSeal(_bi);
sealed.waitNot({});
- _bi = Ethash::BlockHeader(sealed);
+ sealer.reset();
+ _bi = Ethash::BlockHeader(sealed, IgnoreSeal, h256{}, HeaderData);
}
}
@@ -841,7 +843,7 @@ dev::eth::Ethash::BlockHeader constructHeader(
rlpStream << _parentHash << _sha3Uncles << _coinbaseAddress << _stateRoot << _transactionsRoot << _receiptsRoot << _logBloom
<< _difficulty << _number << _gasLimit << _gasUsed << _timestamp << _extraData << h256{} << Nonce{};
- return Ethash::BlockHeader(rlpStream.out());
+ return Ethash::BlockHeader(rlpStream.out(), IgnoreSeal, h256{}, HeaderData);
}
void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHash, dev::eth::Nonce const& _nonce)
@@ -855,7 +857,7 @@ void updateEthashSeal(dev::eth::Ethash::BlockHeader& _header, h256 const& _mixHa
header << sourceRlp[i];
header << _mixHash << _nonce;
- _header = Ethash::BlockHeader(header.out());
+ _header = Ethash::BlockHeader(header.out(), IgnoreSeal, h256{}, HeaderData);
}
namespace
diff --git a/libsolidity/SolidityWallet.cpp b/libsolidity/SolidityWallet.cpp
index d87edd35..3c88afd9 100644
--- a/libsolidity/SolidityWallet.cpp
+++ b/libsolidity/SolidityWallet.cpp
@@ -559,6 +559,62 @@ BOOST_AUTO_TEST_CASE(multisig_value_transfer)
BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 100);
}
+BOOST_AUTO_TEST_CASE(revoke_addOwner)
+{
+ deployWallet();
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x12)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x13)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x14)) == encodeArgs());
+ // 4 owners, set required to 3
+ BOOST_REQUIRE(callContractFunction("changeRequirement(uint256)", u256(3)) == encodeArgs());
+ // add a new owner
+ Address deployer = m_sender;
+ h256 opHash = sha3(FixedHash<4>(dev::sha3("addOwner(address)")).asBytes() + h256(0x33).asBytes());
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x33)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("isOwner(address)", h256(0x33)) == encodeArgs(false));
+ m_sender = Address(0x12);
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x33)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("isOwner(address)", h256(0x33)) == encodeArgs(false));
+ // revoke one confirmation
+ m_sender = deployer;
+ BOOST_REQUIRE(callContractFunction("revoke(bytes32)", opHash) == encodeArgs());
+ m_sender = Address(0x13);
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x33)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("isOwner(address)", h256(0x33)) == encodeArgs(false));
+ m_sender = Address(0x14);
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x33)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("isOwner(address)", h256(0x33)) == encodeArgs(true));
+}
+
+BOOST_AUTO_TEST_CASE(revoke_transaction)
+{
+ deployWallet(200);
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x12)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x13)) == encodeArgs());
+ BOOST_REQUIRE(callContractFunction("addOwner(address)", h256(0x14)) == encodeArgs());
+ // 4 owners, set required to 3
+ BOOST_REQUIRE(callContractFunction("changeRequirement(uint256)", u256(3)) == encodeArgs());
+ // create a transaction
+ Address deployer = m_sender;
+ h256 opHash("8f27f478ebcfaf28b0c354f4809ace8087000d668b89c8bc3b1b608bfdbe6654");
+ BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 0);
+ m_sender = Address(0x12);
+ BOOST_REQUIRE(callContractFunction("execute(address,uint256,bytes)", h256(0x05), 100, 0x60, 0x00) == encodeArgs(opHash));
+ BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 0);
+ m_sender = Address(0x13);
+ BOOST_REQUIRE(callContractFunction("execute(address,uint256,bytes)", h256(0x05), 100, 0x60, 0x00) == encodeArgs(opHash));
+ BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 0);
+ m_sender = Address(0x12);
+ BOOST_REQUIRE(callContractFunction("revoke(bytes32)", opHash) == encodeArgs());
+ m_sender = deployer;
+ BOOST_REQUIRE(callContractFunction("execute(address,uint256,bytes)", h256(0x05), 100, 0x60, 0x00) == encodeArgs(opHash));
+ BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 0);
+ m_sender = Address(0x14);
+ BOOST_REQUIRE(callContractFunction("execute(address,uint256,bytes)", h256(0x05), 100, 0x60, 0x00) == encodeArgs(opHash));
+ // now it should go through
+ BOOST_CHECK_EQUAL(m_state.balance(Address(0x05)), 100);
+}
+
BOOST_AUTO_TEST_CASE(daylimit)
{
deployWallet(200);