static Address toAddress(final Bytes bytes) {
    final int size = bytes.size();
    if (size < 20) {
      final MutableBytes result = MutableBytes.create(20);
      bytes.copyTo(result, 20 - size);
      // Addresses get hashed alot in calls, and mutable bytes don't cache the `hashCode`
      // so always return an immutable copy
      return Address.wrap(result.copy());
    } else if (size == 20) {
      return Address.wrap(bytes);
    } else {
      return Address.wrap(bytes.slice(size - Address.SIZE, Address.SIZE));
    }
  }
Extract an address from the provided address.

@param bytes The word to extract the address from.
@return An address build from the right-most 160-bits of the {@code bytes} (as according to the
    VM specification (Appendix H. of the Yellow paper)).
evm/src/main/java/org/hyperledger/besu/evm/internal/Words.java