code: def disassemble(bytecode: bytes) -> list:
      
      instruction_list = []
      address = 0
      length = len(bytecode)
      if "bzzr" in str(bytecode[-43:]):
          # ignore swarm hash
          length -= 43
  
      while address < length:
          try:
              op_code = opcodes[bytecode[address]]
          except KeyError:
              instruction_list.append(EvmInstruction(address, "INVALID"))
              address += 1
              continue
  
          op_code_name = op_code[0]
          current_instruction = EvmInstruction(address, op_code_name)
  
          match = re.search(regex_PUSH, op_code_name)
          if match:
              argument_bytes = bytecode[address + 1 : address + 1 + int(match.group(1))]
              current_instruction.argument = "0x" + argument_bytes.hex()
              address += int(match.group(1))
  
          instruction_list.append(current_instruction)
          address += 1
  
      # We use a to_dict() here for compatibility reasons
      return [element.to_dict() for element in instruction_list]
docs: Disassembles evm bytecode and returns a list of instructions.
  
      :param bytecode:
      :return: