Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ChaincodePackageExists

func ChaincodePackageExists(ccname string, ccversion string) (bool, error)

    ChaincodePackageExists returns whether the chaincode package exists in the file system

    func CheckInstantiationPolicy

    func CheckInstantiationPolicy(name, version string, cdLedger *ChaincodeData) error

    func ExtractFileEntries

    func ExtractFileEntries(tarBytes []byte, databaseType string) (map[string][]*TarFileEntry, error)

      ExtractFileEntries extract file entries from the given `tarBytes`. A file entry is included in the returned results only if it is located in a directory under the indicated databaseType directory Example for chaincode indexes: "META-INF/statedb/couchdb/indexes/indexColorSortName.json" Example for collection scoped indexes: "META-INF/statedb/couchdb/collections/collectionMarbles/indexes/indexCollMarbles.json" An empty string will have the effect of returning all statedb metadata. This is useful in validating an archive in the future with multiple database types

      func ExtractStatedbArtifactsForChaincode

      func ExtractStatedbArtifactsForChaincode(ccname, ccversion string, pr *platforms.Registry) (installed bool, statedbArtifactsTar []byte, err error)

        ExtractStatedbArtifactsAsTarbytes extracts the statedb artifacts from the code package tar and create a statedb artifact tar. The state db artifacts are expected to contain state db specific artifacts such as index specification in the case of couchdb. This function is intended to be used during chaincode instantiate/upgrade so that statedb artifacts can be created.

        func ExtractStatedbArtifactsFromCCPackage

        func ExtractStatedbArtifactsFromCCPackage(ccpackage CCPackage, pr *platforms.Registry) (statedbArtifactsTar []byte, err error)

          ExtractStatedbArtifactsFromCCPackage extracts the statedb artifacts from the code package tar and create a statedb artifact tar. The state db artifacts are expected to contain state db specific artifacts such as index specification in the case of couchdb. This function is called during chaincode instantiate/upgrade (from above), and from install, so that statedb artifacts can be created.

          func GetChaincodeInstallPathFromViper

          func GetChaincodeInstallPathFromViper() string

            GetChaincodeInstallPathFromViper returns the path where chaincodes are installed

            func GetChaincodePackage

            func GetChaincodePackage(ccname string, ccversion string) ([]byte, error)

            func GetChaincodePackageFromPath

            func GetChaincodePackageFromPath(ccname string, ccversion string, ccInstallPath string) ([]byte, error)

              GetChaincodePackage returns the chaincode package from the file system

              func GetInstalledChaincodes

              func GetInstalledChaincodes() (*pb.ChaincodeQueryResponse, error)

                GetInstalledChaincodes returns a map whose key is the chaincode id and value is the ChaincodeDeploymentSpec struct for that chaincodes that have been installed (but not necessarily instantiated) on the peer by searching the chaincode install path

                func IsChaincodeDeployed

                func IsChaincodeDeployed(chainid, ccName, ccVersion string, ccHash []byte, sccp sysccprovider.SystemChaincodeProvider) (bool, error)

                  IsChaincodeDeployed returns true if the chaincode with given name and version is deployed

                  func NewCCInfoCache

                  func NewCCInfoCache(cs CCCacheSupport) *ccInfoCacheImpl

                    NewCCInfoCache returns a new cache on top of the supplied CCInfoProvider instance

                    func PutChaincodeIntoFS

                    func PutChaincodeIntoFS(depSpec *pb.ChaincodeDeploymentSpec) error

                      PutChaincodeIntoFS puts chaincode information in the file system (and also in the cache to prime it) if the cache is enabled, or directly from the file system otherwise

                      func SetChaincodesPath

                      func SetChaincodesPath(path string)

                        SetChaincodesPath sets the chaincode path for this peer

                        Types

                        type CCCacheSupport

                        type CCCacheSupport interface {
                        	// GetChaincode is needed by the cache to get chaincode data
                        	GetChaincode(ccname string, ccversion string) (CCPackage, error)
                        }

                        type CCContext

                        type CCContext struct {
                        	// Name chaincode name
                        	Name string
                        
                        	// Version used to construct the chaincode image and register
                        	Version string
                        }

                          CCContext pass this around instead of string of args

                          func (*CCContext) GetCanonicalName

                          func (cccid *CCContext) GetCanonicalName() string

                            GetCanonicalName returns the canonical name associated with the proposal context

                            type CCInfoFSImpl

                            type CCInfoFSImpl struct{}

                              CCInfoFSImpl provides the implementation for CC on the FS and the access to it It implements CCCacheSupport

                              func (*CCInfoFSImpl) GetChaincode

                              func (cifs *CCInfoFSImpl) GetChaincode(ccname string, ccversion string) (CCPackage, error)

                                GetChaincodeFromFS this is a wrapper for hiding package implementation. It calls GetChaincodeFromPath with the chaincodeInstallPath

                                func (*CCInfoFSImpl) GetChaincodeCodePackage

                                func (cifs *CCInfoFSImpl) GetChaincodeCodePackage(ccname, ccversion string) ([]byte, error)

                                func (*CCInfoFSImpl) GetChaincodeFromPath

                                func (*CCInfoFSImpl) GetChaincodeFromPath(ccname string, ccversion string, path string) (CCPackage, error)

                                  GetChaincodeFromPath this is a wrapper for hiding package implementation.

                                  func (*CCInfoFSImpl) ListInstalledChaincodes

                                  func (cifs *CCInfoFSImpl) ListInstalledChaincodes(dir string, ls DirEnumerator, ccFromPath ChaincodeExtractor) ([]chaincode.InstalledChaincode, error)

                                    ListInstalledChaincodes retrieves the installed chaincodes

                                    func (*CCInfoFSImpl) PutChaincode

                                    func (*CCInfoFSImpl) PutChaincode(depSpec *pb.ChaincodeDeploymentSpec) (CCPackage, error)

                                      PutChaincodeIntoFS is a wrapper for putting raw ChaincodeDeploymentSpec using CDSPackage. This is only used in UTs

                                      type CCPackage

                                      type CCPackage interface {
                                      	//InitFromBuffer initialize the package from bytes
                                      	InitFromBuffer(buf []byte) (*ChaincodeData, error)
                                      
                                      	// InitFromFS gets the chaincode from the filesystem (includes the raw bytes too)
                                      	InitFromFS(ccname string, ccversion string) ([]byte, *pb.ChaincodeDeploymentSpec, error)
                                      
                                      	// PutChaincodeToFS writes the chaincode to the filesystem
                                      	PutChaincodeToFS() error
                                      
                                      	// GetDepSpec gets the ChaincodeDeploymentSpec from the package
                                      	GetDepSpec() *pb.ChaincodeDeploymentSpec
                                      
                                      	// GetDepSpecBytes gets the serialized ChaincodeDeploymentSpec from the package
                                      	GetDepSpecBytes() []byte
                                      
                                      	// ValidateCC validates and returns the chaincode deployment spec corresponding to
                                      	// ChaincodeData. The validation is based on the metadata from ChaincodeData
                                      	// One use of this method is to validate the chaincode before launching
                                      	ValidateCC(ccdata *ChaincodeData) error
                                      
                                      	// GetPackageObject gets the object as a proto.Message
                                      	GetPackageObject() proto.Message
                                      
                                      	// GetChaincodeData gets the ChaincodeData
                                      	GetChaincodeData() *ChaincodeData
                                      
                                      	// GetId gets the fingerprint of the chaincode based on package computation
                                      	GetId() []byte
                                      }

                                        CCPackage encapsulates a chaincode package which can be

                                        raw ChaincodeDeploymentSpec
                                        SignedChaincodeDeploymentSpec
                                        

                                        Attempt to keep the interface at a level with minimal interface for possible generalization.

                                        func GetCCPackage

                                        func GetCCPackage(buf []byte) (CCPackage, error)

                                          GetCCPackage tries each known package implementation one by one till the right package is found

                                          func GetChaincodeFromFS

                                          func GetChaincodeFromFS(ccname string, ccversion string) (CCPackage, error)

                                            GetChaincodeFromFS retrieves chaincode information from the file system

                                            func LoadPackage

                                            func LoadPackage(ccname string, ccversion string, path string) (CCPackage, error)

                                              LoadPackage loads a chaincode package from the file system

                                              type CDSData

                                              type CDSData struct {
                                              	//CodeHash hash of CodePackage from ChaincodeDeploymentSpec
                                              	CodeHash []byte `protobuf:"bytes,1,opt,name=codehash,proto3"`
                                              
                                              	//MetaDataHash hash of Name and Version from ChaincodeDeploymentSpec
                                              	MetaDataHash []byte `protobuf:"bytes,2,opt,name=metadatahash,proto3"`
                                              }

                                                CDSData is data stored in the LSCC on instantiation of a CC for CDSPackage. This needs to be serialized for ChaincodeData hence the protobuf format

                                                func (*CDSData) Equals

                                                func (data *CDSData) Equals(other *CDSData) bool

                                                  Equals data equals other

                                                  func (*CDSData) ProtoMessage

                                                  func (*CDSData) ProtoMessage()

                                                    ProtoMessage just exists to make proto happy

                                                    func (*CDSData) Reset

                                                    func (data *CDSData) Reset()

                                                      Reset resets

                                                      func (*CDSData) String

                                                      func (data *CDSData) String() string

                                                        String converts to string

                                                        type CDSPackage

                                                        type CDSPackage struct {
                                                        	// contains filtered or unexported fields
                                                        }

                                                          CDSPackage encapsulates ChaincodeDeploymentSpec.

                                                          func (*CDSPackage) GetChaincodeData

                                                          func (ccpack *CDSPackage) GetChaincodeData() *ChaincodeData

                                                            GetChaincodeData gets the ChaincodeData

                                                            func (*CDSPackage) GetDepSpec

                                                            func (ccpack *CDSPackage) GetDepSpec() *pb.ChaincodeDeploymentSpec

                                                              GetDepSpec gets the ChaincodeDeploymentSpec from the package

                                                              func (*CDSPackage) GetDepSpecBytes

                                                              func (ccpack *CDSPackage) GetDepSpecBytes() []byte

                                                                GetDepSpecBytes gets the serialized ChaincodeDeploymentSpec from the package

                                                                func (*CDSPackage) GetId

                                                                func (ccpack *CDSPackage) GetId() []byte

                                                                  GetId gets the fingerprint of the chaincode based on package computation

                                                                  func (*CDSPackage) GetPackageObject

                                                                  func (ccpack *CDSPackage) GetPackageObject() proto.Message

                                                                    GetPackageObject gets the ChaincodeDeploymentSpec as proto.Message

                                                                    func (*CDSPackage) InitFromBuffer

                                                                    func (ccpack *CDSPackage) InitFromBuffer(buf []byte) (*ChaincodeData, error)

                                                                      InitFromBuffer sets the buffer if valid and returns ChaincodeData

                                                                      func (*CDSPackage) InitFromFS

                                                                      func (ccpack *CDSPackage) InitFromFS(ccname string, ccversion string) ([]byte, *pb.ChaincodeDeploymentSpec, error)

                                                                        InitFromFS returns the chaincode and its package from the file system

                                                                        func (*CDSPackage) InitFromPath

                                                                        func (ccpack *CDSPackage) InitFromPath(ccname string, ccversion string, path string) ([]byte, *pb.ChaincodeDeploymentSpec, error)

                                                                          InitFromFS returns the chaincode and its package from the file system

                                                                          func (*CDSPackage) PutChaincodeToFS

                                                                          func (ccpack *CDSPackage) PutChaincodeToFS() error

                                                                            PutChaincodeToFS - serializes chaincode to a package on the file system

                                                                            func (*CDSPackage) ValidateCC

                                                                            func (ccpack *CDSPackage) ValidateCC(ccdata *ChaincodeData) error

                                                                              ValidateCC returns error if the chaincode is not found or if its not a ChaincodeDeploymentSpec

                                                                              type ChaincodeContainerInfo

                                                                              type ChaincodeContainerInfo struct {
                                                                              	Name        string
                                                                              	Version     string
                                                                              	Path        string
                                                                              	Type        string
                                                                              	CodePackage []byte
                                                                              
                                                                              	// ContainerType is not a great name, but 'DOCKER' and 'SYSTEM' are the valid types
                                                                              	ContainerType string
                                                                              }

                                                                                ChaincodeContainerInfo is yet another synonym for the data required to start/stop a chaincode.

                                                                                func DeploymentSpecToChaincodeContainerInfo

                                                                                func DeploymentSpecToChaincodeContainerInfo(cds *pb.ChaincodeDeploymentSpec) *ChaincodeContainerInfo

                                                                                type ChaincodeData

                                                                                type ChaincodeData struct {
                                                                                	// Name of the chaincode
                                                                                	Name string `protobuf:"bytes,1,opt,name=name"`
                                                                                
                                                                                	// Version of the chaincode
                                                                                	Version string `protobuf:"bytes,2,opt,name=version"`
                                                                                
                                                                                	// Escc for the chaincode instance
                                                                                	Escc string `protobuf:"bytes,3,opt,name=escc"`
                                                                                
                                                                                	// Vscc for the chaincode instance
                                                                                	Vscc string `protobuf:"bytes,4,opt,name=vscc"`
                                                                                
                                                                                	// Policy endorsement policy for the chaincode instance
                                                                                	Policy []byte `protobuf:"bytes,5,opt,name=policy,proto3"`
                                                                                
                                                                                	// Data data specific to the package
                                                                                	Data []byte `protobuf:"bytes,6,opt,name=data,proto3"`
                                                                                
                                                                                	// Id of the chaincode that's the unique fingerprint for the CC This is not
                                                                                	// currently used anywhere but serves as a good eyecatcher
                                                                                	Id []byte `protobuf:"bytes,7,opt,name=id,proto3"`
                                                                                
                                                                                	// InstantiationPolicy for the chaincode
                                                                                	InstantiationPolicy []byte `protobuf:"bytes,8,opt,name=instantiation_policy,proto3"`
                                                                                }

                                                                                  ChaincodeData defines the datastructure for chaincodes to be serialized by proto Type provides an additional check by directing to use a specific package after instantiation Data is Type specific (see CDSPackage and SignedCDSPackage)

                                                                                  func GetChaincodeData

                                                                                  func GetChaincodeData(ccname string, ccversion string) (*ChaincodeData, error)

                                                                                    GetChaincodeData gets chaincode data from cache if there's one

                                                                                    func (*ChaincodeData) CCName

                                                                                    func (cd *ChaincodeData) CCName() string

                                                                                      CCName returns the name of this chaincode (the name it was put in the ChaincodeRegistry with).

                                                                                      func (*ChaincodeData) CCVersion

                                                                                      func (cd *ChaincodeData) CCVersion() string

                                                                                        CCVersion returns the version of the chaincode.

                                                                                        func (*ChaincodeData) Endorsement

                                                                                        func (cd *ChaincodeData) Endorsement() string

                                                                                          Endorsement returns how to endorse proposals for this chaincode. The string returns is the name of the endorsement method (usually 'escc').

                                                                                          func (*ChaincodeData) Hash

                                                                                          func (cd *ChaincodeData) Hash() []byte

                                                                                            Hash returns the hash of the chaincode.

                                                                                            func (*ChaincodeData) ProtoMessage

                                                                                            func (*ChaincodeData) ProtoMessage()

                                                                                              ProtoMessage just exists to make proto happy

                                                                                              func (*ChaincodeData) Reset

                                                                                              func (cd *ChaincodeData) Reset()

                                                                                                Reset resets

                                                                                                func (*ChaincodeData) String

                                                                                                func (cd *ChaincodeData) String() string

                                                                                                  String converts to string

                                                                                                  func (*ChaincodeData) Validation

                                                                                                  func (cd *ChaincodeData) Validation() (string, []byte)

                                                                                                    Validation returns how to validate transactions for this chaincode. The string returned is the name of the validation method (usually 'vscc') and the bytes returned are the argument to the validation (in the case of 'vscc', this is a marshaled pb.VSCCArgs message).

                                                                                                    type ChaincodeDefinition

                                                                                                    type ChaincodeDefinition interface {
                                                                                                    	// CCName returns the name of this chaincode (the name it was put in the ChaincodeRegistry with).
                                                                                                    	CCName() string
                                                                                                    
                                                                                                    	// Hash returns the hash of the chaincode.
                                                                                                    	Hash() []byte
                                                                                                    
                                                                                                    	// CCVersion returns the version of the chaincode.
                                                                                                    	CCVersion() string
                                                                                                    
                                                                                                    	// Validation returns how to validate transactions for this chaincode.
                                                                                                    	// The string returned is the name of the validation method (usually 'vscc')
                                                                                                    	// and the bytes returned are the argument to the validation (in the case of
                                                                                                    	// 'vscc', this is a marshaled pb.VSCCArgs message).
                                                                                                    	Validation() (string, []byte)
                                                                                                    
                                                                                                    	// Endorsement returns how to endorse proposals for this chaincode.
                                                                                                    	// The string returns is the name of the endorsement method (usually 'escc').
                                                                                                    	Endorsement() string
                                                                                                    }

                                                                                                      -------- ChaincodeDefinition - interface for ChaincodeData ------ ChaincodeDefinition describes all of the necessary information for a peer to decide whether to endorse a proposal and whether to validate a transaction, for a particular chaincode.

                                                                                                      type ChaincodeExtractor

                                                                                                      type ChaincodeExtractor func(ccname string, ccversion string, path string) (CCPackage, error)

                                                                                                        ChaincodeExtractor extracts chaincode from a given path

                                                                                                        type ChaincodeProvider

                                                                                                        type ChaincodeProvider interface {
                                                                                                        	// Execute executes a standard chaincode invocation for a chaincode and an input
                                                                                                        	Execute(txParams *TransactionParams, cccid *CCContext, input *pb.ChaincodeInput) (*pb.Response, *pb.ChaincodeEvent, error)
                                                                                                        	// ExecuteLegacyInit is a special case for executing chaincode deployment specs,
                                                                                                        	// which are not already in the LSCC, needed for old lifecycle
                                                                                                        	ExecuteLegacyInit(txParams *TransactionParams, cccid *CCContext, spec *pb.ChaincodeDeploymentSpec) (*pb.Response, *pb.ChaincodeEvent, error)
                                                                                                        	// Stop stops the chaincode give
                                                                                                        	Stop(ccci *ChaincodeContainerInfo) error
                                                                                                        }

                                                                                                          ChaincodeProvider provides an abstraction layer that is used for different packages to interact with code in the chaincode package without importing it; more methods should be added below if necessary

                                                                                                          type DirEnumerator

                                                                                                          type DirEnumerator func(string) ([]os.FileInfo, error)

                                                                                                            DirEnumerator enumerates directories

                                                                                                            type SignedCDSData

                                                                                                            type SignedCDSData struct {
                                                                                                            	CodeHash      []byte `protobuf:"bytes,1,opt,name=hash"`
                                                                                                            	MetaDataHash  []byte `protobuf:"bytes,2,opt,name=metadatahash"`
                                                                                                            	SignatureHash []byte `protobuf:"bytes,3,opt,name=signaturehash"`
                                                                                                            }

                                                                                                              SignedCDSData is data stored in the LSCC on instantiation of a CC for SignedCDSPackage. This needs to be serialized for ChaincodeData hence the protobuf format

                                                                                                              func (*SignedCDSData) Equals

                                                                                                              func (data *SignedCDSData) Equals(other *SignedCDSData) bool

                                                                                                                Equals data equals other

                                                                                                                func (*SignedCDSData) ProtoMessage

                                                                                                                func (*SignedCDSData) ProtoMessage()

                                                                                                                  ProtoMessage just exists to make proto happy

                                                                                                                  func (*SignedCDSData) Reset

                                                                                                                  func (data *SignedCDSData) Reset()

                                                                                                                    Reset resets

                                                                                                                    func (*SignedCDSData) String

                                                                                                                    func (data *SignedCDSData) String() string

                                                                                                                      String converts to string

                                                                                                                      type SignedCDSPackage

                                                                                                                      type SignedCDSPackage struct {
                                                                                                                      	// contains filtered or unexported fields
                                                                                                                      }

                                                                                                                        SignedCDSPackage encapsulates SignedChaincodeDeploymentSpec.

                                                                                                                        func (*SignedCDSPackage) GetChaincodeData

                                                                                                                        func (ccpack *SignedCDSPackage) GetChaincodeData() *ChaincodeData

                                                                                                                          GetChaincodeData gets the ChaincodeData

                                                                                                                          func (*SignedCDSPackage) GetDepSpec

                                                                                                                          func (ccpack *SignedCDSPackage) GetDepSpec() *pb.ChaincodeDeploymentSpec

                                                                                                                            GetDepSpec gets the ChaincodeDeploymentSpec from the package

                                                                                                                            func (*SignedCDSPackage) GetDepSpecBytes

                                                                                                                            func (ccpack *SignedCDSPackage) GetDepSpecBytes() []byte

                                                                                                                              GetDepSpecBytes gets the serialized ChaincodeDeploymentSpec from the package

                                                                                                                              func (*SignedCDSPackage) GetId

                                                                                                                              func (ccpack *SignedCDSPackage) GetId() []byte

                                                                                                                                GetId gets the fingerprint of the chaincode based on package computation

                                                                                                                                func (*SignedCDSPackage) GetInstantiationPolicy

                                                                                                                                func (ccpack *SignedCDSPackage) GetInstantiationPolicy() []byte

                                                                                                                                  GetInstantiationPolicy gets the instantiation policy from the package

                                                                                                                                  func (*SignedCDSPackage) GetPackageObject

                                                                                                                                  func (ccpack *SignedCDSPackage) GetPackageObject() proto.Message

                                                                                                                                    GetPackageObject gets the ChaincodeDeploymentSpec as proto.Message

                                                                                                                                    func (*SignedCDSPackage) InitFromBuffer

                                                                                                                                    func (ccpack *SignedCDSPackage) InitFromBuffer(buf []byte) (*ChaincodeData, error)

                                                                                                                                      InitFromBuffer sets the buffer if valid and returns ChaincodeData

                                                                                                                                      func (*SignedCDSPackage) InitFromFS

                                                                                                                                      func (ccpack *SignedCDSPackage) InitFromFS(ccname string, ccversion string) ([]byte, *pb.ChaincodeDeploymentSpec, error)

                                                                                                                                        InitFromFS returns the chaincode and its package from the file system

                                                                                                                                        func (*SignedCDSPackage) InitFromPath

                                                                                                                                        func (ccpack *SignedCDSPackage) InitFromPath(ccname string, ccversion string, path string) ([]byte, *pb.ChaincodeDeploymentSpec, error)

                                                                                                                                          InitFromPath returns the chaincode and its package from the file system

                                                                                                                                          func (*SignedCDSPackage) PutChaincodeToFS

                                                                                                                                          func (ccpack *SignedCDSPackage) PutChaincodeToFS() error

                                                                                                                                            PutChaincodeToFS - serializes chaincode to a package on the file system

                                                                                                                                            func (*SignedCDSPackage) ValidateCC

                                                                                                                                            func (ccpack *SignedCDSPackage) ValidateCC(ccdata *ChaincodeData) error

                                                                                                                                              ValidateCC returns error if the chaincode is not found or if its not a ChaincodeDeploymentSpec

                                                                                                                                              type TarFileEntry

                                                                                                                                              type TarFileEntry struct {
                                                                                                                                              	FileHeader  *tar.Header
                                                                                                                                              	FileContent []byte
                                                                                                                                              }

                                                                                                                                                tarFileEntry encapsulates a file entry and it's contents inside a tar

                                                                                                                                                type TransactionParams

                                                                                                                                                type TransactionParams struct {
                                                                                                                                                	TxID                 string
                                                                                                                                                	ChannelID            string
                                                                                                                                                	SignedProp           *pb.SignedProposal
                                                                                                                                                	Proposal             *pb.Proposal
                                                                                                                                                	TXSimulator          ledger.TxSimulator
                                                                                                                                                	HistoryQueryExecutor ledger.HistoryQueryExecutor
                                                                                                                                                	CollectionStore      privdata.CollectionStore
                                                                                                                                                	IsInitTransaction    bool
                                                                                                                                                
                                                                                                                                                	// this is additional data passed to the chaincode
                                                                                                                                                	ProposalDecorations map[string][]byte
                                                                                                                                                }

                                                                                                                                                  TransactionParams are parameters which are tied to a particular transaction and which are required for invoking chaincode.