%run utils.ipynb
import_notebooks(["utils.ipynb"])
Comparisons#
Very similar to the arithmetic opcodes. But rather than adding or subtracting values we compare them.
Less than#
def lt(evm):
a, b = evm.stack.pop(), evm.stack.pop()
evm.stack.push(1 if a < b else 0)
evm.pc += 1
evm.gas_dec(3)
Signed Less than#
def slt(evm): # signed less than
a, b = evm.stack.pop(), evm.stack.pop()
a = unsigned_to_signed(a)
b = unsigned_to_signed(b)
evm.stack.push(1 if a < b else 0)
evm.pc += 1
evm.gas_dec(3)
Greater than#
def gt(evm): # greater than
a, b = evm.stack.pop(), evm.stack.pop()
evm.stack.push(1 if a > b else 0)
evm.pc += 1
evm.gas_dec(3)
Signed Greater than#
def sgt(evm):
a, b = evm.stack.pop(), evm.stack.pop()
a = unsigned_to_signed(a)
b = unsigned_to_signed(b)
evm.stack.push(1 if a > b else 0)
evm.pc += 1
evm.gas_dec(3)
Equal#
def eq(evm):
a, b = evm.stack.pop(), evm.stack.pop()
evm.stack.push(1 if a == b else 0)
evm.pc += 1
evm.gas_dec(3)
Is Zero#
def iszero(evm):
a = evm.stack.pop()
evm.stack.push(1 if a == 0 else 0)
evm.pc += 1
evm.gas_dec(3)