// createChaincodeDeploymentSpec Returns a deployment proposal of chaincode type func createProposalForChaincode(ccChaincodeDeploymentSpec *pb.ChaincodeDeploymentSpec, creator []byte) (proposal *pb.Proposal, err error) { var ccDeploymentSpecBytes []byte if ccDeploymentSpecBytes, err = proto.Marshal(ccChaincodeDeploymentSpec); err != nil { return nil, fmt.Errorf("Error creating proposal from ChaincodeDeploymentSpec: %s", err) } lcChaincodeSpec := &pb.ChaincodeSpec{Type: pb.ChaincodeSpec_GOLANG, ChaincodeID: &pb.ChaincodeID{Name: "lccc"}, CtorMsg: &pb.ChaincodeInput{Args: [][]byte{[]byte("deploy"), []byte("default"), ccDeploymentSpecBytes}}} lcChaincodeInvocationSpec := &pb.ChaincodeInvocationSpec{ChaincodeSpec: lcChaincodeSpec} uuid := createProposalID() // make proposal return putils.CreateChaincodeProposal(uuid, util.GetTestChainID(), lcChaincodeInvocationSpec, creator) }
// ConstructSingedTxEnv constructs a transaction envelop for tests func ConstructSingedTxEnv(txid string, chainID string, ccName string, simulationResults []byte, events []byte, visibility []byte, signer msp.SigningIdentity) (*common.Envelope, error) { ss, err := signer.Serialize() if err != nil { return nil, err } prop, err := putils.CreateChaincodeProposal(txid, chainID, &pb.ChaincodeInvocationSpec{ChaincodeSpec: &pb.ChaincodeSpec{ChaincodeID: &pb.ChaincodeID{Name: ccName}}}, ss) if err != nil { return nil, err } presp, err := putils.CreateProposalResponse(prop.Header, prop.Payload, simulationResults, nil, nil, signer) if err != nil { return nil, err } env, err := putils.CreateSignedTx(prop, signer, presp) if err != nil { return nil, err } return env, nil }
//getProposal gets the proposal for the chaincode invocation //Currently supported only for Invokes (Queries still go through devops client) func getInvokeProposal(cis *pb.ChaincodeInvocationSpec, chainID string, creator []byte) (*pb.Proposal, error) { uuid := util.GenerateUUID() return pbutils.CreateChaincodeProposal(uuid, chainID, cis, creator) }