diff --git a/libevm/FeeStructure.h b/libevm/FeeStructure.h index 9d60ac1bd..9109347dc 100644 --- a/libevm/FeeStructure.h +++ b/libevm/FeeStructure.h @@ -28,22 +28,19 @@ namespace dev namespace eth { +//--- BEGIN: AUTOGENERATED FROM /feeStructure.json 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. - extern u256 const c_sha3Gas; ///< Once per SHA3 operation. extern u256 const c_sha3WordGas; ///< Once per word of the SHA3 operation's data. - extern u256 const c_copyGas; ///< Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added. - extern u256 const c_sloadGas; ///< Once per SLOAD operation. extern u256 const c_sstoreSetGas; ///< Once per SSTORE operation if the zeroness changes from zero. extern u256 const c_sstoreResetGas; ///< Once per SSTORE operation if the zeroness doesn't change. extern u256 const c_sstoreClearGas; ///< Once per SSTORE operation if the zeroness changes to zero. extern u256 const c_sstoreRefundGas; ///< Refunded gas, once per SSTORE operation if the zeroness changes to zero. extern u256 const c_jumpdestGas; ///< Once per JUMPDEST operation. - extern u256 const c_logGas; ///< Per LOG* operation. extern u256 const c_logDataGas; ///< Per byte in a LOG* operation's data. extern u256 const c_logTopicGas; ///< Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas. @@ -54,13 +51,11 @@ extern u256 const c_callStipend; ///< Free gas given at beginning of call. extern u256 const c_callNewAccountGas; ///< Paid for CALL when the destination address didn't exist prior. extern u256 const c_callValueTransferGas; ///< Paid for CALL when the value transfor is non-zero. extern u256 const c_suicideRefundGas; ///< Refunded following a suicide operation. - extern u256 const c_memoryGas; ///< 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. extern u256 const c_quadCoeffDiv; ///< Divisor for the quadratic particle of the memory cost equation. extern u256 const c_txGas; ///< Per transaction. NOTE: Not payable on data of calls between transactions. extern u256 const c_txDataZeroGas; ///< Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions. extern u256 const c_txDataNonZeroGas; ///< Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions. - extern u256 const c_ecrecoverGas; extern u256 const c_sha256Gas; extern u256 const c_sha256WordGas; diff --git a/libevm/VM.cpp b/libevm/VM.cpp index 4592b7dcd..e0b487c9b 100644 --- a/libevm/VM.cpp +++ b/libevm/VM.cpp @@ -164,7 +164,7 @@ bytesConstRef VM::go(ExtVMFace& _ext, OnOpFunc const& _onOp, uint64_t _steps) case Instruction::CALL: case Instruction::CALLCODE: runGas = (bigint)c_callGas + m_stack[m_stack.size() - 1]; - if (!_ext.exists(asAddress(m_stack[m_stack.size() - 2]))) + if (inst != Instruction::CALLCODE && !_ext.exists(asAddress(m_stack[m_stack.size() - 2]))) runGas += c_callNewAccountGas; if (m_stack[m_stack.size() - 3] > 0) runGas += c_callValueTransferGas;