/
org_utils.go
83 lines (64 loc) · 2.27 KB
/
org_utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package org
import (
"fmt"
"bytes"
"time"
"github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
"github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
"github.com/hyperledger/fabric-sdk-go/pkg/client/event"
"github.com/pkg/errors"
)
func(s *OrgSetup) ExecuteChaincodeTranctionEvent(eventID, fcnName string, args [][]byte, chaincodeId string, channelClient *channel.Client, ccEvent *event.Client) (*channel.Response, error) {
fmt.Println(" ############# ExecuteChaincodeTranctionEvent - "+eventID+" ############## ")
fmt.Println(" Execute Org -- "+s.OrgName)
fmt.Println(" Execute CCId -- "+chaincodeId)
if ccEvent == nil {
fmt.Println(" ############### Event is Nil")
}
reg, notifier, err := ccEvent.RegisterChaincodeEvent(chaincodeId, eventID)
if err != nil {
return nil, fmt.Errorf("Blockchain ..... failed to register event: %v", err)
}
defer ccEvent.Unregister(reg)
transientDataMap := make(map[string][]byte)
transientDataMap["result"] = []byte("Transient data to invoke in the ledger")
response, err := channelClient.Execute(channel.Request{
ChaincodeID: chaincodeId,
Fcn: fcnName,
Args: args,
}, channel.WithRetry(retry.DefaultChannelOpts), channel.WithTargets(s.Peers[0],s.Peers[1]))
if err != nil {
fmt.Printf("failed to execute Invoke request: %s", err.Error())
return nil, nil
}
if response.ChaincodeStatus == 0 {
return nil, errors.WithMessage(nil, "Expected ChaincodeStatus")
}
if response.Responses[0].ChaincodeStatus != response.ChaincodeStatus {
return nil, errors.WithMessage(nil, "Expected the chaincode status returned by successful Peer Endorsement to be same as Chaincode status for client response")
}
select {
case ccEventNotify := <-notifier:
fmt.Printf("Received CC event: %v\n", ccEventNotify)
case <-time.After(time.Second * 60):
return nil, fmt.Errorf("did NOT receive CC event for eventId(%s)", eventID)
}
return &response, nil
}
func createKeyValuePairs(m map[string][]byte) string {
b := new(bytes.Buffer)
for key, value := range m {
fmt.Fprintf(b, "%s=\"%s\"\n", key, value)
}
return b.String()
}
func CToGoString(c []byte) string {
n := -1
for i, b := range c {
if b == 0 {
break
}
n = i
}
return string(c[:n+1])
}