code: func ExtractSignedCCDepSpec(env *common.Envelope) (*common.ChannelHeader, *peer.SignedChaincodeDeploymentSpec, error) {
  	p := &common.Payload{}
  	err := proto.Unmarshal(env.Payload, p)
  	if err != nil {
  		return nil, nil, err
  	}
  	if p.Header == nil {
  		return nil, nil, errors.New("channel header cannot be nil")
  	}
  	ch := &common.ChannelHeader{}
  	err = proto.Unmarshal(p.Header.ChannelHeader, ch)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	sp := &peer.SignedChaincodeDeploymentSpec{}
  	err = proto.Unmarshal(p.Data, sp)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	return ch, sp, nil
  }
docs: // ExtractSignedCCDepSpec extracts the messages from the envelope