@@ -9,11 +9,13 @@ package main
99import (
1010 "log"
1111 "os"
12+ "sync"
1213 "time"
1314
1415 "github.com/hyperledger/fabric-gateway/pkg/client"
1516 "github.com/hyperledger/fabric-gateway/pkg/hash"
16- f "github.com/hyperledger/fabric-samples/high-throughput/application-go/functions"
17+ gatewaypb "github.com/hyperledger/fabric-protos-go-apiv2/gateway"
18+ "google.golang.org/grpc/status"
1719)
1820
1921func main () {
@@ -56,38 +58,102 @@ func main() {
5658 contract := gateway .GetNetwork ("mychannel" ).GetContract ("bigdatacc" )
5759
5860 // Handle different functions
59- if function == "update" {
60- result , err := f .Update (contract , function , variableName , change , sign )
61- if err != nil {
62- log .Fatalf ("error: %v" , err )
63- }
64- log .Println ("Value of variable" , string (variableName ), ": " , string (result ))
61+ switch function {
62+ case "update" :
63+ update (contract , variableName , change , sign )
64+ case "delete" :
65+ delete (contract , variableName )
66+ case "prune" :
67+ prune (contract , variableName )
68+ case "delstandard" :
69+ delStandard (contract , variableName )
70+ case "get" :
71+ get (contract , variableName )
72+ case "getstandard" :
73+ getStandard (contract , variableName )
74+ case "manyUpdates" :
75+ manyUpdates (contract , "Update" , variableName , change , sign )
76+ case "manyUpdatesTraditional" :
77+ manyUpdates (contract , "PutStandard" , variableName , change , sign )
78+ }
79+ }
6580
66- } else if function == "delete" || function == "prune" || function == "delstandard" {
67- result , err := f .DeletePrune (contract , function , variableName )
68- if err != nil {
69- log .Fatalf ("error: %v" , err )
70- }
71- log .Println (string (result ))
72- } else if function == "get" || function == "getstandard" {
73- result , err := f .Query (contract , function , variableName )
74- if err != nil {
75- log .Fatalf ("error: %v" , err )
76- }
77- log .Println ("Value of variable" , string (variableName ), ": " , string (result ))
78- } else if function == "manyUpdates" {
79- log .Println ("submitting 1000 concurrent updates..." )
80- result , err := f .ManyUpdates (contract , "update" , variableName , change , sign )
81- if err != nil {
82- log .Fatalf ("error: %v" , err )
83- }
84- log .Println ("Final value of variable" , string (variableName ), ": " , string (result ))
85- } else if function == "manyUpdatesTraditional" {
86- log .Println ("submitting 1000 concurrent updates..." )
87- result , err := f .ManyUpdates (contract , "putstandard" , variableName , change , sign )
88- if err != nil {
89- log .Fatalf ("error: %v" , err )
81+ func update (contract * client.Contract , variableName , change , sign string ) {
82+ _ , err := contract .SubmitTransaction ("Update" , variableName , change , sign )
83+ failOnError (err )
84+
85+ result , err := contract .EvaluateTransaction ("Get" , variableName )
86+ failOnError (err )
87+ log .Println ("Value of variable" , variableName , ": " , string (result ))
88+ }
89+
90+ func delete (contract * client.Contract , variableName string ) {
91+ result , err := contract .SubmitTransaction ("Delete" , variableName )
92+ failOnError (err )
93+ log .Println (string (result ))
94+ }
95+
96+ func prune (contract * client.Contract , variableName string ) {
97+ result , err := contract .SubmitTransaction ("Prune" , variableName )
98+ failOnError (err )
99+ log .Println (string (result ))
100+ }
101+
102+ func delStandard (contract * client.Contract , variableName string ) {
103+ result , err := contract .SubmitTransaction ("DelStandard" , variableName )
104+ failOnError (err )
105+ log .Println (string (result ))
106+ }
107+
108+ func get (contract * client.Contract , variableName string ) {
109+ result , err := contract .EvaluateTransaction ("Get" , variableName )
110+ failOnError (err )
111+ log .Println ("Value of variable" , string (variableName ), ": " , string (result ))
112+ }
113+
114+ func getStandard (contract * client.Contract , variableName string ) {
115+ result , err := contract .EvaluateTransaction ("GetStandard" , variableName )
116+ failOnError (err )
117+ log .Println ("Value of variable" , string (variableName ), ": " , string (result ))
118+ }
119+
120+ func manyUpdates (contract * client.Contract , function , variableName , change , sign string ) {
121+ log .Println ("submitting 1000 concurrent updates..." )
122+
123+ var wg sync.WaitGroup
124+ for range 1000 {
125+ wg .Add (1 )
126+ go func () {
127+ defer wg .Done ()
128+ contract .SubmitTransaction (function , variableName , change , sign )
129+ }()
130+ }
131+
132+ wg .Wait ()
133+
134+ result , err := contract .EvaluateTransaction ("Get" , variableName )
135+ failOnError (err )
136+ log .Println ("Final value of variable" , string (variableName ), ": " , string (result ))
137+ }
138+
139+ func failOnError (err error ) {
140+ if err == nil {
141+ return
142+ }
143+
144+ details := status .Convert (err ).Details ()
145+ if len (details ) > 0 {
146+ log .Println ("Error Details:" )
147+
148+ for _ , detail := range details {
149+ switch detail := detail .(type ) {
150+ case * gatewaypb.ErrorDetail :
151+ log .Printf ("- address: %s\n mspId: %s\n message: %s\n " , detail .Address , detail .MspId , detail .Message )
152+ default :
153+ log .Printf ("- %s" , detail )
154+ }
90155 }
91- log .Println ("Final value of variable" , string (variableName ), ": " , string (result ))
92156 }
157+
158+ log .Fatalf ("error: %v" , err )
93159}
0 commit comments