forked from hyperledger/fabric
-
Notifications
You must be signed in to change notification settings - Fork 0
/
chaincode.go
125 lines (108 loc) · 4.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
/*
Copyright IBM Corp. 2016 All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode
import (
"fmt"
"github.com/hyperledger/fabric/common/flogging"
"github.com/hyperledger/fabric/peer/common"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
const (
chainFuncName = "chaincode"
shortDes = "Operate a chaincode: install|instantiate|invoke|package|query|signpackage|upgrade|list."
longDes = "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
customIDGenAlg string
channelID string
chaincodeVersion string
policy string
escc string
vscc string
policyMarshalled []byte
transient string
collectionsConfigFile string
collectionConfigBytes []byte
)
var chaincodeCmd = &cobra.Command{
Use: chainFuncName,
Short: fmt.Sprint(shortDes),
Long: fmt.Sprint(longDes),
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(&customIDGenAlg, "tid", "t", common.UndefinedParamValue,
fmt.Sprint("Name of a custom ID generation algorithm (hashing and decoding) e.g. sha256base64"))
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 file containing the configuration for the chaincode's collection"))
}
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 commond '%s'", name, cmd.Name())
}
}
}