code: func (lsi *LastSignedInfo) SignProposal(sign tmCryptoSigner, chainID string, proposal *types.Proposal) error {
  	lsi.Lock()
  	defer lsi.Unlock()
  	if err := lsi.signProposal(sign, chainID, proposal); err != nil {
  		return fmt.Errorf("error signing proposal: %v", err)
  	}
  	return nil
  }
docs: // SignProposal signs a canonical representation of the proposal, along with
  // the chainID. Implements PrivValidator.