code: func (n NodeID) Pubkey() (*ecdsa.PublicKey, error) {
  	p := &ecdsa.PublicKey{Curve: crypto.S256(), X: new(big.Int), Y: new(big.Int)}
  	half := len(n) / 2
  	p.X.SetBytes(n[:half])
  	p.Y.SetBytes(n[half:])
  	if !p.Curve.IsOnCurve(p.X, p.Y) {
  		return nil, errors.New("id is invalid secp256k1 curve point")
  	}
  	return p, nil
  }
docs: // Pubkey returns the public key represented by the node ID.
  // It returns an error if the ID is not a point on the curve.