code: func (id ID) ExtractPublicKey() (ic.PubKey, error) {
  	decoded, err := mh.Decode([]byte(id))
  	if err != nil {
  		return nil, err
  	}
  	if decoded.Code != mh.ID {
  		return nil, ErrNoPublicKey
  	}
  	pk, err := ic.UnmarshalPublicKey(decoded.Digest)
  	if err != nil {
  		return nil, err
  	}
  	return pk, nil
  }
docs: // ExtractPublicKey attempts to extract the public key from an ID
  //
  // This method returns ErrNoPublicKey if the peer ID looks valid but it can't extract
  // the public key.