diff --git a/libethereum/VM.h b/libethereum/VM.h index cc1c8f974..0aeece690 100644 --- a/libethereum/VM.h +++ b/libethereum/VM.h @@ -228,15 +228,11 @@ template eth::bytesConstRef eth::VM::go(Ext& _ext, uint64_t _steps) break; case Instruction::EXP: { - // TODO: better implementation? require(2); auto base = m_stack.back(); - auto x = m_stack[m_stack.size() - 2]; + unsigned expon = (unsigned)m_stack[m_stack.size() - 2]; m_stack.pop_back(); - u256 n = 1; - for (u256 i = 0; i < x; ++i) - n = (u256) n * base; - m_stack.back() = n; + m_stack.back() = boost::multiprecision::pow(base, expon); break; } case Instruction::NEG: