code: func GetProposalHash2(header *common.Header, ccPropPayl []byte) ([]byte, error) {
  	// check for nil argument
  	if header == nil ||
  		header.ChannelHeader == nil ||
  		header.SignatureHeader == nil ||
  		ccPropPayl == nil {
  		return nil, errors.New("nil arguments")
  	}
  
  	hash, err := factory.GetDefault().GetHash(&bccsp.SHA256Opts{})
  	if err != nil {
  		return nil, errors.WithMessage(err, "error instantiating hash function")
  	}
  	// hash the serialized Channel Header object
  	hash.Write(header.ChannelHeader)
  	// hash the serialized Signature Header object
  	hash.Write(header.SignatureHeader)
  	// hash the bytes of the chaincode proposal payload that we are given
  	hash.Write(ccPropPayl)
  	return hash.Sum(nil), nil
  }
docs: // GetProposalHash2 gets the proposal hash - this version
  // is called by the committer where the visibility policy
  // has already been enforced and so we already get what
  // we have to get in ccPropPayl