diff --git a/libdevcrypto/OverlayDB.cpp b/libdevcrypto/OverlayDB.cpp index ffe996bb6..4bd698f57 100644 --- a/libdevcrypto/OverlayDB.cpp +++ b/libdevcrypto/OverlayDB.cpp @@ -56,10 +56,8 @@ void OverlayDB::commit() if (m_aux.count(i)) { m_db->Put(m_writeOptions, i.ref(), bytesConstRef(&m_aux[i])); - cdebug << "Committing aux: " << i; m_aux.erase(i); } - cdebug << "Discarding " << keysOf(m_aux); m_auxActive.clear(); m_aux.clear(); m_over.clear(); diff --git a/libethcore/BlockInfo.cpp b/libethcore/BlockInfo.cpp index c04f6fc29..ef7f7b8f0 100644 --- a/libethcore/BlockInfo.cpp +++ b/libethcore/BlockInfo.cpp @@ -25,13 +25,12 @@ #include #include "ProofOfWork.h" #include "Exceptions.h" +#include "Params.h" #include "BlockInfo.h" using namespace std; using namespace dev; using namespace dev::eth; -u256 dev::eth::c_genesisDifficulty = (u256)1 << 11; - BlockInfo::BlockInfo(): timestamp(Invalid256) { } @@ -128,7 +127,7 @@ void BlockInfo::populateFromHeader(RLP const& _header, bool _checkNonce) if (gasUsed > gasLimit) BOOST_THROW_EXCEPTION(TooMuchGasUsed()); - if (number && extraData.size() > 1024) + if (number && extraData.size() > c_maximumExtraDataSize) BOOST_THROW_EXCEPTION(ExtraDataTooBig()); } @@ -185,23 +184,23 @@ void BlockInfo::populateFromParent(BlockInfo const& _parent) h256 BlockInfo::calculateSeedHash(BlockInfo const& _parent) const { - return number % 30 == 0 ? sha3(_parent.seedHash.asBytes()) : _parent.seedHash; + return number % c_epochDuration == 0 ? sha3(_parent.seedHash.asBytes()) : _parent.seedHash; } u256 BlockInfo::calculateGasLimit(BlockInfo const& _parent) const { if (!parentHash) - return 1000000; + return c_genesisGasLimit; else - return max(125000, (_parent.gasLimit * (1024 - 1) + (_parent.gasUsed * 6 / 5)) / 1024); + return max(c_minGasLimit, (_parent.gasLimit * (c_gasLimitBoundDivisor - 1) + (_parent.gasUsed * 6 / 5)) / c_gasLimitBoundDivisor); } u256 BlockInfo::calculateDifficulty(BlockInfo const& _parent) const { if (!parentHash) - return c_genesisDifficulty; + return (u256)c_genesisDifficulty; else - return max(2048, timestamp >= _parent.timestamp + 8 ? _parent.difficulty - (_parent.difficulty / 2048) : (_parent.difficulty + (_parent.difficulty / 2048))); + return max(c_minimumDifficulty, timestamp >= _parent.timestamp + c_durationLimit ? _parent.difficulty - (_parent.difficulty / c_difficultyBoundDivisor) : (_parent.difficulty + (_parent.difficulty / c_difficultyBoundDivisor))); } template inline N diff(N const& _a, N const& _b) { return max(_a, _b) - min(_a, _b); } @@ -211,8 +210,8 @@ void BlockInfo::verifyParent(BlockInfo const& _parent) const if (difficulty != calculateDifficulty(_parent)) BOOST_THROW_EXCEPTION(InvalidDifficulty()); - if (diff(gasLimit, _parent.gasLimit) <= _parent.gasLimit / 2048) - BOOST_THROW_EXCEPTION(InvalidGasLimit(gasLimit, calculateGasLimit(_parent), diff(gasLimit, _parent.gasLimit), _parent.gasLimit / 2048)); + if (diff(gasLimit, _parent.gasLimit) <= _parent.gasLimit / c_gasLimitBoundDivisor) + BOOST_THROW_EXCEPTION(InvalidGasLimit(gasLimit, calculateGasLimit(_parent), diff(gasLimit, _parent.gasLimit), _parent.gasLimit / c_gasLimitBoundDivisor)); if (seedHash != calculateSeedHash(_parent)) BOOST_THROW_EXCEPTION(InvalidSeedHash()); diff --git a/libethcore/BlockInfo.h b/libethcore/BlockInfo.h index d2072046d..bf986e3a1 100644 --- a/libethcore/BlockInfo.h +++ b/libethcore/BlockInfo.h @@ -30,8 +30,6 @@ namespace dev namespace eth { -extern u256 c_genesisDifficulty; - enum IncludeNonce { WithoutNonce = 0, diff --git a/libevm/FeeStructure.cpp b/libethcore/Params.cpp similarity index 84% rename from libevm/FeeStructure.cpp rename to libethcore/Params.cpp index 78c6ebfb2..f36af1375 100644 --- a/libevm/FeeStructure.cpp +++ b/libethcore/Params.cpp @@ -19,7 +19,7 @@ * @date 2014 */ -#include "FeeStructure.h" +#include "Params.h" using namespace std; namespace dev @@ -28,6 +28,15 @@ namespace eth { //--- BEGIN: AUTOGENERATED FROM /feeStructure.json +u256 const c_genesisDifficulty = 2048; +u256 const c_maximumExtraDataSize = 1024; +u256 const c_epochDuration = 3000; +u256 const c_genesisGasLimit = 1000000; +u256 const c_minGasLimit = 125000; +u256 const c_gasLimitBoundDivisor = 1024; +u256 const c_minimumDifficulty = 2048; +u256 const c_difficultyBoundDivisor = 2048; +u256 const c_durationLimit = 8; u256 const c_tierStepGas[] = {0, 2, 3, 5, 8, 10, 20, 0}; u256 const c_expGas = 10; u256 const c_expByteGas = 10; diff --git a/libevm/FeeStructure.h b/libethcore/Params.h similarity index 91% rename from libevm/FeeStructure.h rename to libethcore/Params.h index 9109347dc..cab1852fa 100644 --- a/libevm/FeeStructure.h +++ b/libethcore/Params.h @@ -29,6 +29,16 @@ namespace eth { //--- BEGIN: AUTOGENERATED FROM /feeStructure.json +extern u256 const c_genesisDifficulty; +extern u256 const c_maximumExtraDataSize; +extern u256 const c_epochDuration; +extern u256 const c_genesisGasLimit; +extern u256 const c_minGasLimit; +extern u256 const c_gasLimitBoundDivisor; +extern u256 const c_minimumDifficulty; +extern u256 const c_difficultyBoundDivisor; +extern u256 const c_durationLimit; + extern u256 const c_tierStepGas[8]; ///< Once per operation, for a selection of them. extern u256 const c_expGas; ///< Once per EXP instuction. extern u256 const c_expByteGas; ///< Times ceil(log256(exponent)) for the EXP instruction. diff --git a/libethcore/ProofOfWork.cpp b/libethcore/ProofOfWork.cpp index c879df2ce..332d739bb 100644 --- a/libethcore/ProofOfWork.cpp +++ b/libethcore/ProofOfWork.cpp @@ -66,6 +66,7 @@ public: writeFile(memoFile, m_caches[_header.seedHash]); } } + cdebug << "sha3 of cache: " << sha3(m_caches[_header.seedHash]); return m_caches[_header.seedHash]; } @@ -90,6 +91,7 @@ public: writeFile(memoFile, m_fulls[_header.seedHash]); } } + cdebug << "sha3 of full pad: " << sha3(m_fulls[_header.seedHash]); return m_fulls[_header.seedHash].data(); } diff --git a/libethereum/Client.h b/libethereum/Client.h index 41b1c1bc6..900d339ad 100644 --- a/libethereum/Client.h +++ b/libethereum/Client.h @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include #include "CanonBlockChain.h" #include "TransactionQueue.h" diff --git a/libethereum/Interface.h b/libethereum/Interface.h index 2a9de14d1..817a5e4b0 100644 --- a/libethereum/Interface.h +++ b/libethereum/Interface.h @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include "LogFilter.h" #include "Transaction.h" #include "AccountDiff.h" diff --git a/libethereum/Precompiled.cpp b/libethereum/Precompiled.cpp index c62a00f88..6e0d4756c 100644 --- a/libethereum/Precompiled.cpp +++ b/libethereum/Precompiled.cpp @@ -24,7 +24,7 @@ #include #include #include -#include +#include using namespace std; using namespace dev; using namespace dev::eth; diff --git a/libethereum/State.h b/libethereum/State.h index 33843c65c..00a735291 100644 --- a/libethereum/State.h +++ b/libethereum/State.h @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include "TransactionQueue.h" #include "Account.h" diff --git a/libevm/All.h b/libevm/All.h index 89c451ef4..2360d91b8 100644 --- a/libevm/All.h +++ b/libevm/All.h @@ -1,5 +1,4 @@ #pragma once #include "ExtVMFace.h" -#include "FeeStructure.h" #include "VM.h" diff --git a/libevm/VM.h b/libevm/VM.h index ecf5de292..f100badc4 100644 --- a/libevm/VM.h +++ b/libevm/VM.h @@ -27,7 +27,7 @@ #include #include #include -#include "FeeStructure.h" +#include #include "VMFace.h" namespace dev diff --git a/libsolidity/Types.cpp b/libsolidity/Types.cpp index caa3b7169..0b8259bfe 100644 --- a/libsolidity/Types.cpp +++ b/libsolidity/Types.cpp @@ -308,6 +308,8 @@ TypePointer IntegerConstantType::unaryOperatorResult(Token::Value _operator) con case Token::Sub: value = -m_value; break; + case Token::After: + return shared_from_this(); default: return TypePointer(); } diff --git a/feeStructure.json b/params.json similarity index 75% rename from feeStructure.json rename to params.json index f5acf0f0b..1b5682544 100644 --- a/feeStructure.json +++ b/params.json @@ -1,5 +1,15 @@ var x = { - "tierStepGas": { "v": [ 0, 2, 3, 5, 8, 10, 20 ], "d": "Once per operation, for a selection of them." }, + "genesisDifficulty": { "v": 2048, "d": "Difficulty of the Genesis block." }, + "maximumExtraDataSize": { "v": 1024, "d": "Maximum size extra data may be after Genesis." }, + "epochDuration": { "v": 3000, "d": "Duration between proof-of-work epochs." }, + "genesisGasLimit": { "v": 1000000, "d": "Gas limit of the Genesis block." }, + "minGasLimit": { "v": 125000, "d": "Minimum the gas limit may ever be." }, + "gasLimitBoundDivisor": { "v": 1024, "d": "The bound divisor of the gas limit, used in update calculations." }, + "minimumDifficulty": { "v": 2048, "d": "The minimum that the difficulty may ever be." }, + "difficultyBoundDivisor": { "v": 2048, "d": "The bound divisor of the difficulty, used in the update calculations." }, + "durationLimit": { "v": 8, "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not." }, + + "tierStepGas": { "v": [ 0, 2, 3, 5, 8, 10, 20 ], "d": "Once per operation, for a selection of them." }, "expGas": { "v": 10, "d": "Once per EXP instuction." }, "expByteGas": { "v": 10, "d": "Times ceil(log256(exponent)) for the EXP instruction." },