-
Notifications
You must be signed in to change notification settings - Fork 0
/
chaincode.go
137 lines (120 loc) · 5.34 KB
/
chaincode.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode
import (
"fmt"
"time"
"github.com/hyperledger/fabric/common/flogging"
"github.com/hyperledger/fabric/peer/common"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
const (
chainFuncName = "chaincode"
chainCmdDes = "Operate a chaincode: install|instantiate|invoke|package|query|signpackage|upgrade|list."
)
var logger = flogging.MustGetLogger("chaincodeCmd")
func addFlags(cmd *cobra.Command) {
common.AddOrdererFlags(cmd)
flags := cmd.PersistentFlags()
flags.StringVarP(&transient, "transient", "", "", "Transient map of arguments in JSON encoding")
}
// Cmd returns the cobra command for Chaincode
func Cmd(cf *ChaincodeCmdFactory) *cobra.Command {
addFlags(chaincodeCmd)
chaincodeCmd.AddCommand(installCmd(cf))
chaincodeCmd.AddCommand(instantiateCmd(cf))
chaincodeCmd.AddCommand(invokeCmd(cf))
chaincodeCmd.AddCommand(packageCmd(cf, nil))
chaincodeCmd.AddCommand(queryCmd(cf))
chaincodeCmd.AddCommand(signpackageCmd(cf))
chaincodeCmd.AddCommand(upgradeCmd(cf))
chaincodeCmd.AddCommand(listCmd(cf))
return chaincodeCmd
}
// Chaincode-related variables.
var (
chaincodeLang string
chaincodeCtorJSON string
chaincodePath string
chaincodeName string
chaincodeUsr string // Not used
chaincodeQueryRaw bool
chaincodeQueryHex bool
channelID string
chaincodeVersion string
policy string
escc string
vscc string
policyMarshalled []byte
transient string
collectionsConfigFile string
collectionConfigBytes []byte
peerAddresses []string
tlsRootCertFiles []string
connectionProfile string
waitForEvent bool
waitForEventTimeout time.Duration
)
var chaincodeCmd = &cobra.Command{
Use: chainFuncName,
Short: fmt.Sprint(chainCmdDes),
Long: fmt.Sprint(chainCmdDes),
PersistentPreRun: common.SetOrdererEnv,
}
var flags *pflag.FlagSet
func init() {
resetFlags()
}
// Explicitly define a method to facilitate tests
func resetFlags() {
flags = &pflag.FlagSet{}
flags.StringVarP(&chaincodeLang, "lang", "l", "golang",
fmt.Sprintf("Language the %s is written in", chainFuncName))
flags.StringVarP(&chaincodeCtorJSON, "ctor", "c", "{}",
fmt.Sprintf("Constructor message for the %s in JSON format", chainFuncName))
flags.StringVarP(&chaincodePath, "path", "p", common.UndefinedParamValue,
fmt.Sprintf("Path to %s", chainFuncName))
flags.StringVarP(&chaincodeName, "name", "n", common.UndefinedParamValue,
fmt.Sprint("Name of the chaincode"))
flags.StringVarP(&chaincodeVersion, "version", "v", common.UndefinedParamValue,
fmt.Sprint("Version of the chaincode specified in install/instantiate/upgrade commands"))
flags.StringVarP(&chaincodeUsr, "username", "u", common.UndefinedParamValue,
fmt.Sprint("Username for chaincode operations when security is enabled"))
flags.StringVarP(&channelID, "channelID", "C", "",
fmt.Sprint("The channel on which this command should be executed"))
flags.StringVarP(&policy, "policy", "P", common.UndefinedParamValue,
fmt.Sprint("The endorsement policy associated to this chaincode"))
flags.StringVarP(&escc, "escc", "E", common.UndefinedParamValue,
fmt.Sprint("The name of the endorsement system chaincode to be used for this chaincode"))
flags.StringVarP(&vscc, "vscc", "V", common.UndefinedParamValue,
fmt.Sprint("The name of the verification system chaincode to be used for this chaincode"))
flags.BoolVarP(&getInstalledChaincodes, "installed", "", false,
"Get the installed chaincodes on a peer")
flags.BoolVarP(&getInstantiatedChaincodes, "instantiated", "", false,
"Get the instantiated chaincodes on a channel")
flags.StringVar(&collectionsConfigFile, "collections-config", common.UndefinedParamValue,
fmt.Sprint("The fully qualified path to the collection JSON file including the file name"))
flags.StringArrayVarP(&peerAddresses, "peerAddresses", "", []string{common.UndefinedParamValue},
fmt.Sprint("The addresses of the peers to connect to"))
flags.StringArrayVarP(&tlsRootCertFiles, "tlsRootCertFiles", "", []string{common.UndefinedParamValue},
fmt.Sprint("If TLS is enabled, the paths to the TLS root cert files of the peers to connect to. The order and number of certs specified should match the --peerAddresses flag"))
flags.StringVarP(&connectionProfile, "connectionProfile", "", common.UndefinedParamValue,
fmt.Sprint("Connection profile that provides the necessary connection information for the network. Note: currently only supported for providing peer connection information"))
flags.BoolVar(&waitForEvent, "waitForEvent", false,
fmt.Sprint("Whether to wait for the event from each peer's deliver filtered service signifying that the 'invoke' transaction has been committed successfully"))
flags.DurationVar(&waitForEventTimeout, "waitForEventTimeout", 30*time.Second,
fmt.Sprint("Time to wait for the event from each peer's deliver filtered service signifying that the 'invoke' transaction has been committed successfully"))
}
func attachFlags(cmd *cobra.Command, names []string) {
cmdFlags := cmd.Flags()
for _, name := range names {
if flag := flags.Lookup(name); flag != nil {
cmdFlags.AddFlag(flag)
} else {
logger.Fatalf("Could not find flag '%s' to attach to command '%s'", name, cmd.Name())
}
}
}