code: func ComputeProposalBinding(proposal *peer.Proposal) ([]byte, error) {
  	if proposal == nil {
  		return nil, errors.New("proposal is nil")
  	}
  	if len(proposal.Header) == 0 {
  		return nil, errors.New("proposal's header is nil")
  	}
  
  	h, err := GetHeader(proposal.Header)
  	if err != nil {
  		return nil, err
  	}
  
  	chdr, err := UnmarshalChannelHeader(h.ChannelHeader)
  	if err != nil {
  		return nil, err
  	}
  	shdr, err := GetSignatureHeader(h.SignatureHeader)
  	if err != nil {
  		return nil, err
  	}
  
  	return computeProposalBindingInternal(shdr.Nonce, shdr.Creator, chdr.Epoch)
  }
docs: // ComputeProposalBinding computes the binding of a proposal