diff --git a/core/vm/eof_instructions.go b/core/vm/eof_instructions.go index c045c971c0..d187342551 100644 --- a/core/vm/eof_instructions.go +++ b/core/vm/eof_instructions.go @@ -105,7 +105,17 @@ func opRetf(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byt // opJumpf implements the JUMPF opcode func opJumpf(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([]byte, error) { - panic("not implemented") + var ( + code = scope.Contract.CodeAt(scope.CodeSection) + idx = binary.BigEndian.Uint16(code[*pc+1:]) + typ = scope.Contract.Container.types[idx] + ) + if scope.Stack.len()+int(typ.maxStackHeight)-int(typ.inputs) > 1024 { + return nil, fmt.Errorf("stack overflow") + } + scope.CodeSection = uint64(idx) + *pc = uint64(math.MaxUint64) + return nil, nil } // opEOFCreate implements the EOFCREATE opcode