Merge pull request #5090 from ethereum/libevmasm-log

Add helpers for the LOG instruction in libevmasm
This commit is contained in:
Alex Beregszaszi 2018-09-26 12:58:38 +01:00 committed by GitHub
commit 7ac03a3f26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 2 deletions

View File

@ -125,8 +125,7 @@ GasMeter::GasConsumption GasMeter::estimateMax(AssemblyItem const& _item, bool _
case Instruction::LOG3:
case Instruction::LOG4:
{
unsigned n = unsigned(_item.instruction()) - unsigned(Instruction::LOG0);
gas = GasCosts::logGas + GasCosts::logTopicGas * n;
gas = GasCosts::logGas + GasCosts::logTopicGas * getLogNumber(_item.instruction());
gas += memoryGas(0, -1);
if (u256 const* value = classes.knownConstant(m_state->relativeStackElement(-1)))
gas += GasCosts::logDataGas * (*value);

View File

@ -218,6 +218,12 @@ inline bool isSwapInstruction(Instruction _inst)
return Instruction::SWAP1 <= _inst && _inst <= Instruction::SWAP16;
}
/// @returns true if the instruction is a LOG
inline bool isLogInstruction(Instruction _inst)
{
return Instruction::LOG0 <= _inst && _inst <= Instruction::LOG4;
}
/// @returns the number of PUSH Instruction _inst
inline unsigned getPushNumber(Instruction _inst)
{
@ -236,6 +242,12 @@ inline unsigned getSwapNumber(Instruction _inst)
return (byte)_inst - unsigned(Instruction::SWAP1) + 1;
}
/// @returns the number of LOG Instruction _inst
inline unsigned getLogNumber(Instruction _inst)
{
return (byte)_inst - unsigned(Instruction::LOG0);
}
/// @returns the PUSH<_number> instruction
inline Instruction pushInstruction(unsigned _number)
{