code: func (r *Request) Sign(signer Signer) error {
  	r.Feed.User = signer.Address()
  	r.binaryData = nil           //invalidate serialized data
  	digest, err := r.GetDigest() // computes digest and serializes into .binaryData
  	if err != nil {
  		return err
  	}
  
  	signature, err := signer.Sign(digest)
  	if err != nil {
  		return err
  	}
  
  	// Although the Signer interface returns the public address of the signer,
  	// recover it from the signature to see if they match
  	userAddr, err := getUserAddr(digest, signature)
  	if err != nil {
  		return NewError(ErrInvalidSignature, "Error verifying signature")
  	}
  
  	if userAddr != signer.Address() { // sanity check to make sure the Signer is declaring the same address used to sign!
  		return NewError(ErrInvalidSignature, "Signer address does not match update user address")
  	}
  
  	r.Signature = &signature
  	r.idAddr = r.Addr()
  	return nil
  }
docs: // Sign executes the signature to validate the update message