From 3a715aa10af7b3b837fd237a8586cba629c81939 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Wed, 4 Mar 2015 19:55:52 +0100 Subject: [PATCH] Params & JSON file. --- feeStructure.json | 54 ------------------------------- libdevcrypto/OverlayDB.cpp | 2 -- libethcore/BlockInfo.cpp | 18 +++-------- libethcore/Params.cpp | 9 ++++++ libethcore/Params.h | 10 ++++++ libethcore/ProofOfWork.cpp | 2 ++ libethereum/Precompiled.cpp | 2 +- params.json | 64 ------------------------------------- 8 files changed, 27 insertions(+), 134 deletions(-) delete mode 100644 feeStructure.json delete mode 100644 params.json diff --git a/feeStructure.json b/feeStructure.json deleted file mode 100644 index f5acf0f0b..000000000 --- a/feeStructure.json +++ /dev/null @@ -1,54 +0,0 @@ -var x = { - "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." }, - - "sha3Gas": { "v": 30, "d": "Once per SHA3 operation." }, - "sha3WordGas": { "v": 6, "d": "Once per word of the SHA3 operation's data." }, - - "sloadGas": { "v": 50, "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." }, - "sstoreSetGas": { "v": 20000, "d": "Once per SLOAD operation." }, - "sstoreResetGas": { "v": 5000, "d": "Once per SSTORE operation if the zeroness changes from zero." }, - "sstoreClearGas": { "v": 5000, "d": "Once per SSTORE operation if the zeroness doesn't change." }, - "sstoreRefundGas": { "v": 15000, "d": "Once per SSTORE operation if the zeroness changes to zero." }, - "jumpdestGas": { "v": 1, "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." }, - - "logGas": { "v": 375, "d": "Per LOG* operation." }, - "logDataGas": { "v": 8, "d": "Per byte in a LOG* operation's data." }, - "logTopicGas": { "v": 375, "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." }, - - "createGas": { "v": 32000, "d": "Once per CREATE operation & contract-creation transaction." }, - - "callGas": { "v": 40, "d": "Once per CALL operation & message call transaction." }, - "callStipend": { "v": 2300, "d": "Free gas given at beginning of call." }, - "callValueTransferGas": { "v": 9000, "d": "Paid for CALL when the value transfor is non-zero." }, - "callNewAccountGas": { "v": 25000, "d": "Paid for CALL when the destination address didn't exist prior." }, - - "suicideRefundGas": { "v": 24000, "d": "Refunded following a suicide operation." }, - - "memoryGas": { "v": 3, "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." }, - "quadCoeffDiv": { "v": 512, "d": "Divisor for the quadratic particle of the memory cost equation." }, - - "createDataGas": { "v": 200, "d": "" }, - "txGas": { "v": 21000, "d": "Per transaction. NOTE: Not payable on data of calls between transactions." }, - "txDataZeroGas": { "v": 4, "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." }, - "txDataNonZeroGas": { "v": 68, "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." }, - - "copyGas": { "v": 3, "d": "" }, - - "ecrecoverGas": { "v": 3000, "d": "" }, - "sha256Gas": { "v": 60, "d": "" }, - "sha256WordGas": { "v": 12, "d": "" }, - "ripemd160Gas": { "v": 600, "d": "" }, - "ripemd160WordGas": { "v": 120, "d": "" }, - "identityGas": { "v": 15, "d": "" }, - "identityWordGas": { "v": 3, "d": ""} -} - -/* -// to get C++ .h: -for (i in x) console.log("/// " + x[i].d + "\nextern u256 const c_" + i + (x[i].v * 0 !== 0 ? "[" + (x[i].v.length + 1) + "]" : "") + ";") -// to get C++ .cpp: -for (i in x) console.log("u256 const c_" + i + (x[i].v * 0 === 0 ? " = " + x[i].v : "[] = {" + x[i].v.join(", ") + ", 0}") + ";") -*/ - 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 107a189fb..dc274f5e7 100644 --- a/libethcore/BlockInfo.cpp +++ b/libethcore/BlockInfo.cpp @@ -31,8 +31,6 @@ using namespace std; using namespace dev; using namespace dev::eth; -u256 dev::eth::c_genesisDifficulty = (u256)1 << 11; - BlockInfo::BlockInfo(): timestamp(Invalid256) { } @@ -129,14 +127,8 @@ void BlockInfo::populateFromHeader(RLP const& _header, bool _checkNonce) if (gasUsed > gasLimit) BOOST_THROW_EXCEPTION(TooMuchGasUsed() << RequirementError(bigint(gasLimit), bigint(gasUsed)) ); - if (difficulty < c_minimumDifficulty) - BOOST_THROW_EXCEPTION(InvalidDifficulty() << RequirementError(bigint(c_minimumDifficulty), bigint(difficulty)) ); - - if (gasLimit < c_minGasLimit) - BOOST_THROW_EXCEPTION(InvalidGasLimit() << RequirementError(bigint(c_minGasLimit), bigint(gasLimit)) ); - if (number && extraData.size() > c_maximumExtraDataSize) - BOOST_THROW_EXCEPTION(ExtraDataTooBig() << RequirementError(bigint(c_maximumExtraDataSize), bigint(extraData.size()))); + BOOST_THROW_EXCEPTION(ExtraDataTooBig()); } void BlockInfo::populate(bytesConstRef _block, bool _checkNonce) @@ -192,7 +184,7 @@ 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 @@ -208,7 +200,7 @@ u256 BlockInfo::calculateDifficulty(BlockInfo const& _parent) const if (!parentHash) 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); } @@ -223,8 +215,8 @@ void BlockInfo::verifyParent(BlockInfo const& _parent) const gasLimit > _parent.gasLimit * (c_gasLimitBoundDivisor + 1) / c_gasLimitBoundDivisor) BOOST_THROW_EXCEPTION(InvalidGasLimit(gasLimit, _parent.gasLimit * (c_gasLimitBoundDivisor - 1) / c_gasLimitBoundDivisor, _parent.gasLimit * (c_gasLimitBoundDivisor + 1) / c_gasLimitBoundDivisor)); - 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/Params.cpp b/libethcore/Params.cpp index 41164b206..f36af1375 100644 --- a/libethcore/Params.cpp +++ b/libethcore/Params.cpp @@ -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/libethcore/Params.h b/libethcore/Params.h index 9109347dc..cab1852fa 100644 --- a/libethcore/Params.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/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/params.json b/params.json deleted file mode 100644 index 744f92154..000000000 --- a/params.json +++ /dev/null @@ -1,64 +0,0 @@ -var x = { - "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." }, - "genesisDifficulty": { "v": 131072, "d": "Difficulty of the Genesis block." }, - "minimumDifficulty": { "v": 131072, "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." }, - "maximumExtraDataSize": { "v": 1024, "d": "Maximum size extra data may be after Genesis." }, - "epochDuration": { "v": 3000, "d": "Duration between proof-of-work epochs." }, - - "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." }, - - "sha3Gas": { "v": 30, "d": "Once per SHA3 operation." }, - "sha3WordGas": { "v": 6, "d": "Once per word of the SHA3 operation's data." }, - - "sloadGas": { "v": 50, "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." }, - "sstoreSetGas": { "v": 20000, "d": "Once per SLOAD operation." }, - "sstoreResetGas": { "v": 5000, "d": "Once per SSTORE operation if the zeroness changes from zero." }, - "sstoreClearGas": { "v": 5000, "d": "Once per SSTORE operation if the zeroness doesn't change." }, - "sstoreRefundGas": { "v": 15000, "d": "Once per SSTORE operation if the zeroness changes to zero." }, - "jumpdestGas": { "v": 1, "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." }, - - "logGas": { "v": 375, "d": "Per LOG* operation." }, - "logDataGas": { "v": 8, "d": "Per byte in a LOG* operation's data." }, - "logTopicGas": { "v": 375, "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." }, - - "createGas": { "v": 32000, "d": "Once per CREATE operation & contract-creation transaction." }, - - "callGas": { "v": 40, "d": "Once per CALL operation & message call transaction." }, - "callStipend": { "v": 2300, "d": "Free gas given at beginning of call." }, - "callValueTransferGas": { "v": 9000, "d": "Paid for CALL when the value transfor is non-zero." }, - "callNewAccountGas": { "v": 25000, "d": "Paid for CALL when the destination address didn't exist prior." }, - - "suicideRefundGas": { "v": 24000, "d": "Refunded following a suicide operation." }, - - "memoryGas": { "v": 3, "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." }, - "quadCoeffDiv": { "v": 512, "d": "Divisor for the quadratic particle of the memory cost equation." }, - - "createDataGas": { "v": 200, "d": "" }, - "txGas": { "v": 21000, "d": "Per transaction. NOTE: Not payable on data of calls between transactions." }, - "txDataZeroGas": { "v": 4, "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." }, - "txDataNonZeroGas": { "v": 68, "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." }, - - "copyGas": { "v": 3, "d": "" }, - - "ecrecoverGas": { "v": 3000, "d": "" }, - "sha256Gas": { "v": 60, "d": "" }, - "sha256WordGas": { "v": 12, "d": "" }, - "ripemd160Gas": { "v": 600, "d": "" }, - "ripemd160WordGas": { "v": 120, "d": "" }, - "identityGas": { "v": 15, "d": "" }, - "identityWordGas": { "v": 3, "d": ""} -} - -/* -// to get C++ .h: -for (i in x) console.log("/// " + x[i].d + "\nextern u256 const c_" + i + (x[i].v * 0 !== 0 ? "[" + (x[i].v.length + 1) + "]" : "") + ";") -// to get C++ .cpp: -for (i in x) console.log("u256 const c_" + i + (x[i].v * 0 === 0 ? " = " + x[i].v : "[] = {" + x[i].v.join(", ") + ", 0}") + ";") -*/ -