input: Write a python function to generate a Bitcoin address using hashlib and base58 libraries.
  assert len(generate_address()) > 0
  assert isinstance(generate_address(), str)
output: import hashlib
  import base58
  
  def generate_address():
      # Step 1: Create a random public key
      public_key = hashlib.sha256(b'random_public_key').hexdigest()
      
      # Step 2: Perform SHA-256 hashing on the public key
      sha256_1 = hashlib.sha256(public_key.encode()).hexdigest()
      
      # Step 3: Perform RIPEMD-160 hashing on the SHA-256 hash
      ripemd160 = hashlib.new('ripemd160')
      ripemd160.update(sha256_1.encode())
      ripemd160_digest = ripemd160.hexdigest()
      
      # Step 4: Add version byte in front of RIPEMD-160 hash (0x00 for Main Network)
      versioned_payload = '00' + ripemd160_digest
      
      # Step 5: Perform SHA-256 hash twice
      sha256_2 = hashlib.sha256(bytes.fromhex(versioned_payload)).hexdigest()
      sha256_3 = hashlib.sha256(bytes.fromhex(sha256_2)).hexdigest()
      
      # Step 6: Take the first 4 bytes of the second SHA-256 hash for checksum
      checksum = sha256_3[:8]
      
      # Step 7: Add the 4 checksum bytes to the extended RIPEMD-160 hash
      binary_address = versioned_payload + checksum
      
      # Step 8: Convert the result from a byte string into a base58 string
      address = base58.b58encode(bytes.fromhex(binary_address)).decode()
      
      return address