diff options
Diffstat (limited to 'libevmasm/GasMeter.h')
-rw-r--r-- | libevmasm/GasMeter.h | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/libevmasm/GasMeter.h b/libevmasm/GasMeter.h index b11a63a5..1a607a9f 100644 --- a/libevmasm/GasMeter.h +++ b/libevmasm/GasMeter.h @@ -25,7 +25,6 @@ #include <tuple> #include <libevmasm/ExpressionClasses.h> #include <libevmasm/AssemblyItem.h> -#include <libethcore/ChainOperationParams.h> namespace dev { @@ -34,7 +33,44 @@ namespace eth class KnownState; -// TODO: FIXME: HOMESTEAD: XXX: @chfast populate m_schedule from an ExtVMFace instance via ExtVMFace::evmSchedule. +namespace GasCosts +{ + static unsigned const stackLimit = 1024; + static unsigned const tier0Gas = 0; + static unsigned const tier1Gas = 2; + static unsigned const tier2Gas = 3; + static unsigned const tier3Gas = 5; + static unsigned const tier4Gas = 8; + static unsigned const tier5Gas = 10; + static unsigned const tier6Gas = 20; + static unsigned const tier7Gas = 0; + static unsigned const expGas = 10; + static unsigned const expByteGas = 10; + static unsigned const sha3Gas = 30; + static unsigned const sha3WordGas = 6; + static unsigned const sloadGas = 50; + static unsigned const sstoreSetGas = 20000; + static unsigned const sstoreResetGas = 5000; + static unsigned const sstoreRefundGas = 15000; + static unsigned const jumpdestGas = 1; + static unsigned const logGas = 375; + static unsigned const logDataGas = 8; + static unsigned const logTopicGas = 375; + static unsigned const createGas = 32000; + static unsigned const callGas = 40; + static unsigned const callStipend = 2300; + static unsigned const callValueTransferGas = 9000; + static unsigned const callNewAccountGas = 25000; + static unsigned const suicideRefundGas = 24000; + static unsigned const memoryGas = 3; + static unsigned const quadCoeffDiv = 512; + static unsigned const createDataGas = 200; + static unsigned const txGas = 21000; + static unsigned const txCreateGas = 53000; + static unsigned const txDataZeroGas = 4; + static unsigned const txDataNonZeroGas = 68; + static unsigned const copyGas = 3; +} /** * Class that helps computing the maximum gas consumption for instructions. @@ -47,7 +83,8 @@ class GasMeter public: struct GasConsumption { - GasConsumption(u256 _value = 0, bool _infinite = false): value(_value), isInfinite(_infinite) {} + GasConsumption(unsigned _value = 0, bool _infinite = false): value(_value), isInfinite(_infinite) {} + GasConsumption(u256 _value, bool _infinite = false): value(_value), isInfinite(_infinite) {} static GasConsumption infinite() { return GasConsumption(0, true); } GasConsumption& operator+=(GasConsumption const& _other); @@ -69,8 +106,7 @@ public: u256 const& largestMemoryAccess() const { return m_largestMemoryAccess; } - u256 runGas(Instruction _instruction) const { return runGas(_instruction, m_schedule); } - static u256 runGas(Instruction _instruction, EVMSchedule const& _es); + static unsigned runGas(Instruction _instruction); private: /// @returns _multiplier * (_value + 31) / 32, if _value is a known constant and infinite otherwise. @@ -85,8 +121,6 @@ private: std::shared_ptr<KnownState> m_state; /// Largest point where memory was accessed since the creation of this object. u256 m_largestMemoryAccess; - - EVMSchedule m_schedule; }; inline std::ostream& operator<<(std::ostream& _str, GasMeter::GasConsumption const& _consumption) |