//ExecuteTransactions - will execute transactions on the array one by one //will return an array of errors one for each transaction. If the execution //succeeded, array element will be nil. returns []byte of state hash or //error func ExecuteTransactions(ctxt context.Context, cname ChainName, xacts []*pb.Transaction) (succeededTXs []*pb.Transaction, stateHash []byte, ccevents []*pb.ChaincodeEvent, txerrs []error, err error) { var chain = GetChain(cname) if chain == nil { // TODO: We should never get here, but otherwise a good reminder to better handle panic(fmt.Sprintf("[ExecuteTransactions]Chain %s not found\n", cname)) } txerrs = make([]error, len(xacts)) ccevents = make([]*pb.ChaincodeEvent, len(xacts)) var succeededTxs = make([]*pb.Transaction, 0) for i, t := range xacts { _, ccevents[i], txerrs[i] = Execute(ctxt, chain, t) if txerrs[i] == nil { succeededTxs = append(succeededTxs, t) } } var lgr *ledger.Ledger lgr, err = ledger.GetLedger() if err == nil { stateHash, err = lgr.GetTempStateHash() } return succeededTxs, stateHash, ccevents, txerrs, err }
ledgerTransaction, err := ledgerPtr.GetTransactionByUUID(uuid) Expect(err).To(BeNil()) Expect(tx).To(Equal(ledgerTransaction)) state, _ := ledgerPtr.GetState("chaincode1", "key1", true) Expect(state).To(Equal([]byte("value1"))) state, _ = ledgerPtr.GetState("chaincode2", "key2", true) Expect(state).To(Equal([]byte("value2"))) state, _ = ledgerPtr.GetState("chaincode3", "key3", true) Expect(state).To(Equal([]byte("value3"))) }) It("rollsback the batch and compares values for TempStateHash", func() { var hash0, hash1 []byte var err error Expect(ledgerPtr.RollbackTxBatch(1)).To(BeNil()) hash0, err = ledgerPtr.GetTempStateHash() Expect(err).To(BeNil()) Expect(ledgerPtr.BeginTxBatch(2)).To(BeNil()) ledgerPtr.TxBegin("txUuid") Expect(ledgerPtr.SetState("chaincode1", "key1", []byte("value1"))).To(BeNil()) Expect(ledgerPtr.SetState("chaincode2", "key2", []byte("value2"))).To(BeNil()) Expect(ledgerPtr.SetState("chaincode3", "key3", []byte("value3"))).To(BeNil()) ledgerPtr.TxFinished("txUuid", true) hash1, err = ledgerPtr.GetTempStateHash() Expect(err).To(BeNil()) Expect(hash0).ToNot(Equal(hash1)) Expect(ledgerPtr.RollbackTxBatch(2)).To(BeNil()) hash1, err = ledgerPtr.GetTempStateHash() Expect(err).To(BeNil()) Expect(hash0).To(Equal(hash1)) })