forked from hyperledger/fabric
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ccintf.go
76 lines (61 loc) · 2.04 KB
/
ccintf.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
/*
Copyright IBM Corp. 2016 All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package ccintf
//This package defines the interfaces that support runtime and
//communication between chaincode and peer (chaincode support).
//Currently inproccontroller uses it. dockercontroller does not.
import (
"encoding/hex"
"github.com/hyperledger/fabric/common/util"
pb "github.com/hyperledger/fabric/protos/peer"
"golang.org/x/net/context"
)
// ChaincodeStream interface for stream between Peer and chaincode instance.
type ChaincodeStream interface {
Send(*pb.ChaincodeMessage) error
Recv() (*pb.ChaincodeMessage, error)
}
// CCSupport must be implemented by the chaincode support side in peer
// (such as chaincode_support)
type CCSupport interface {
HandleChaincodeStream(context.Context, ChaincodeStream) error
}
// GetCCHandlerKey is used to pass CCSupport via context
func GetCCHandlerKey() string {
return "CCHANDLER"
}
//CCID encapsulates chaincode ID
type CCID struct {
ChaincodeSpec *pb.ChaincodeSpec
NetworkID string
PeerID string
ChainID string
Version string
}
//GetName returns canonical chaincode name based on chain name
func (ccid *CCID) GetName() string {
if ccid.ChaincodeSpec == nil {
panic("nil chaincode spec")
}
name := ccid.ChaincodeSpec.ChaincodeId.Name
if ccid.Version != "" {
name = name + "-" + ccid.Version
}
//this better be chainless system chaincode!
if ccid.ChainID != "" {
hash := util.ComputeSHA256([]byte(ccid.ChainID))
hexstr := hex.EncodeToString(hash[:])
name = name + "-" + hexstr
}
return name
}