%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)