chaincode

package
v1.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2018 License: Apache-2.0 Imports: 29 Imported by: 975

Documentation

Index

Constants

View Source
const (
	// Mutual TLS auth client key and cert paths in the chaincode container
	TLSClientKeyPath      string = "/etc/hyperledger/fabric/client.key"
	TLSClientCertPath     string = "/etc/hyperledger/fabric/client.crt"
	TLSClientRootCertPath string = "/etc/hyperledger/fabric/peer.crt"
)
View Source
const (
	// TXSimulatorKey is the context key used to provide a ledger.TxSimulator
	// from the endorser to the chaincode.
	TXSimulatorKey key = "txsimulatorkey"

	// HistoryQueryExecutorKey is the context key used to provide a
	// ledger.HistoryQueryExecutor from the endorser to the chaincode.
	HistoryQueryExecutorKey key = "historyqueryexecutorkey"
)
View Source
const DevModeUserRunsChaincode string = "dev"

DevModeUserRunsChaincode enables chaincode execution in a development environment

Variables

This section is empty.

Functions

func IsDevMode

func IsDevMode() bool

IsDevMode returns true if the peer was configured with development-mode enabled.

func NewTxKey added in v1.2.0

func NewTxKey(channelID, txID string) string

func ParseName added in v1.2.0

func ParseName(ccName string) *sysccprovider.ChaincodeInstance

ParseName parses a chaincode name into a ChaincodeInstance. The name should be of the form "chaincode-name:version/channel-name" with optional elements.

Types

type ACLProvider added in v1.2.0

type ACLProvider interface {
	CheckACL(resName string, channelID string, idinfo interface{}) error
}

An ACLProvider performs access control checks when invoking chaincode.

type ActiveTransactions added in v1.2.0

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

func NewActiveTransactions added in v1.2.0

func NewActiveTransactions() *ActiveTransactions

func (*ActiveTransactions) Add added in v1.2.0

func (a *ActiveTransactions) Add(channelID, txID string) bool

func (*ActiveTransactions) Remove added in v1.2.0

func (a *ActiveTransactions) Remove(channelID, txID string)

type CCProviderImpl added in v1.2.0

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

ccProviderImpl is an implementation of the ccprovider.ChaincodeProvider interface

func NewProvider added in v1.2.0

func NewProvider(cs *ChaincodeSupport) *CCProviderImpl

func (*CCProviderImpl) Execute added in v1.2.0

Execute executes the chaincode given context and spec (invocation or deploy)

func (*CCProviderImpl) ExecuteChaincode added in v1.2.0

func (c *CCProviderImpl) ExecuteChaincode(ctxt context.Context, cccid *ccprovider.CCContext, args [][]byte) (*pb.Response, *pb.ChaincodeEvent, error)

ExecuteChaincode executes the chaincode specified in the context with the specified arguments

func (*CCProviderImpl) GetContext added in v1.2.0

func (c *CCProviderImpl) GetContext(ledger ledger.PeerLedger, txid string) (context.Context, ledger.TxSimulator, error)

GetContext returns a context for the supplied ledger, with the appropriate tx simulator

func (*CCProviderImpl) Stop added in v1.2.0

Stop stops the chaincode given context and spec

type CertGenerator added in v1.2.0

type CertGenerator interface {
	// Generate returns a certificate and private key and associates
	// the hash of the certificates with the given chaincode name
	Generate(ccName string) (*accesscontrol.CertAndPrivKeyPair, error)
}

CertGenerator generates client certificates for chaincode.

type ChaincodeDefinitionGetter added in v1.2.0

type ChaincodeDefinitionGetter interface {
	GetChaincodeDefinition(ctxt context.Context, txid string, signedProp *pb.SignedProposal, prop *pb.Proposal, chainID string, chaincodeID string) (ccprovider.ChaincodeDefinition, error)
}

ChaincodeDefinitionGetter is responsible for retrieving a chaincode definition from the system. The definition is used by the InstantiationPolicyChecker.

type ChaincodeSupport

type ChaincodeSupport struct {
	Keepalive       time.Duration
	ExecuteTimeout  time.Duration
	UserRunsCC      bool
	Runtime         Runtime
	ACLProvider     ACLProvider
	HandlerRegistry *HandlerRegistry
	Launcher        Launcher
	// contains filtered or unexported fields
}

ChaincodeSupport responsible for providing interfacing with chaincodes from the Peer.

func NewChaincodeSupport

func NewChaincodeSupport(
	config *Config,
	peerAddress string,
	userRunsCC bool,
	caCert []byte,
	certGenerator CertGenerator,
	packageProvider PackageProvider,
	aclProvider ACLProvider,
	processor Processor,
	sccp sysccprovider.SystemChaincodeProvider,
) *ChaincodeSupport

NewChaincodeSupport creates a new ChaincodeSupport instance.

func (*ChaincodeSupport) Execute

Execute invokes chaincode and returns the original response.

func (*ChaincodeSupport) HandleChaincodeStream

func (cs *ChaincodeSupport) HandleChaincodeStream(ctxt context.Context, stream ccintf.ChaincodeStream) error

HandleChaincodeStream implements ccintf.HandleChaincodeStream for all vms to call with appropriate stream

func (*ChaincodeSupport) Invoke added in v1.2.0

Invoke will invoke chaincode and return the message containing the response. The chaincode will be launched if it is not already running.

func (*ChaincodeSupport) Launch

Launch starts executing chaincode if it is not already running. This method blocks until the peer side handler gets into ready state or encounters a fatal error. If the chaincode is already running, it simply returns.

func (*ChaincodeSupport) Register

Register the bidi stream entry point called by chaincode to register with the Peer.

func (*ChaincodeSupport) Stop

Stop stops a chaincode if running.

type CheckInstantiationPolicyFunc added in v1.2.0

type CheckInstantiationPolicyFunc func(name, version string, cd *ccprovider.ChaincodeData) error

Adapter from function to InstantiationPolicyChecker interface.

func (CheckInstantiationPolicyFunc) CheckInstantiationPolicy added in v1.2.0

func (c CheckInstantiationPolicyFunc) CheckInstantiationPolicy(name, version string, cd *ccprovider.ChaincodeData) error

type Config added in v1.2.0

type Config struct {
	TLSEnabled     bool
	Keepalive      time.Duration
	ExecuteTimeout time.Duration
	StartupTimeout time.Duration
	LogFormat      string
	LogLevel       string
	ShimLogLevel   string
}

func GlobalConfig added in v1.2.0

func GlobalConfig() *Config

type ContainerRuntime added in v1.2.0

type ContainerRuntime struct {
	CertGenerator CertGenerator
	Processor     Processor
	CACert        []byte
	CommonEnv     []string
	PeerAddress   string
}

ContainerRuntime is responsible for managing containerized chaincode.

func (*ContainerRuntime) LaunchConfig added in v1.2.0

func (c *ContainerRuntime) LaunchConfig(cname string, ccType pb.ChaincodeSpec_Type) (*LaunchConfig, error)

LaunchConfig creates the LaunchConfig for chaincode running in a container.

func (*ContainerRuntime) Start added in v1.2.0

Start launches chaincode in a runtime environment.

func (*ContainerRuntime) Stop added in v1.2.0

Stop terminates chaincode and its container runtime environment.

type ContextRegistry added in v1.2.0

type ContextRegistry interface {
	Create(ctx context.Context, chainID, txID string, signedProp *pb.SignedProposal, proposal *pb.Proposal) (*TransactionContext, error)
	Get(chainID, txID string) *TransactionContext
	Delete(chainID, txID string)
	Close()
}

A ContextRegistry is responsible for managing transaction contexts.

type Executor added in v1.2.0

type Executor interface {
	Execute(ctxt context.Context, cccid *ccprovider.CCContext, cis ccprovider.ChaincodeSpecGetter) (*pb.Response, *pb.ChaincodeEvent, error)
}

Executor is used to invoke chaincode.

type Handler

type Handler struct {
	// Keepalive specifies the interval at which keep-alive messages are sent.
	Keepalive time.Duration
	// SystemCCVersion specifies the current system chaincode version
	SystemCCVersion string
	// DefinitionGetter is used to retrieve the chaincode definition from the
	// Lifecycle System Chaincode.
	DefinitionGetter ChaincodeDefinitionGetter
	// Invoker is used to invoke chaincode.
	Invoker Invoker
	// Registry is used to track active handlers.
	Registry Registry
	// ACLProvider is used to check if a chaincode invocation should be allowed.
	ACLProvider ACLProvider
	// TXContexts is a collection of TransactionContext instances
	// that are accessed by channel name and transaction ID.
	TXContexts ContextRegistry
	// activeTransactions holds active transaction identifiers.
	ActiveTransactions TransactionRegistry
	// SystemCCProvider provides access to system chaincode metadata
	SystemCCProvider SystemCCProvider
	// InstantiationPolicyChecker is used to evaluate the chaincode instantiation policies.
	InstantiationPolicyChecker InstantiationPolicyChecker
	// QueryResponeBuilder is used to build query responses
	QueryResponseBuilder QueryResponseBuilder
	// LedgerGetter is used to get the ledger associated with a channel
	LedgerGetter LedgerGetter
	// UUIDGenerator is used to generate UUIDs
	UUIDGenerator UUIDGenerator
	// contains filtered or unexported fields
}

Handler implements the peer side of the chaincode stream.

func (*Handler) ChaincodeName added in v1.2.0

func (h *Handler) ChaincodeName() string

func (*Handler) Close added in v1.2.0

func (h *Handler) Close()

func (*Handler) Execute added in v1.2.0

func (h *Handler) Execute(ctxt context.Context, cccid *ccprovider.CCContext, msg *pb.ChaincodeMessage, timeout time.Duration) (*pb.ChaincodeMessage, error)

func (*Handler) HandleDelState added in v1.2.0

func (h *Handler) HandleDelState(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

func (*Handler) HandleGetHistoryForKey added in v1.2.0

func (h *Handler) HandleGetHistoryForKey(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles query to ledger history db

func (*Handler) HandleGetQueryResult added in v1.2.0

func (h *Handler) HandleGetQueryResult(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles query to ledger to execute query state

func (*Handler) HandleGetState added in v1.2.0

func (h *Handler) HandleGetState(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles query to ledger to get state

func (*Handler) HandleGetStateByRange added in v1.2.0

func (h *Handler) HandleGetStateByRange(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles query to ledger to rage query state

func (*Handler) HandleInvokeChaincode added in v1.2.0

func (h *Handler) HandleInvokeChaincode(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles requests that modify ledger state

func (*Handler) HandlePutState added in v1.2.0

func (h *Handler) HandlePutState(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

func (*Handler) HandleQueryStateClose added in v1.2.0

func (h *Handler) HandleQueryStateClose(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles the closing of a state iterator

func (*Handler) HandleQueryStateNext added in v1.2.0

func (h *Handler) HandleQueryStateNext(msg *pb.ChaincodeMessage, txContext *TransactionContext) (*pb.ChaincodeMessage, error)

Handles query to ledger for query state next

func (*Handler) HandleRegister added in v1.2.0

func (h *Handler) HandleRegister(msg *pb.ChaincodeMessage)

handleRegister is invoked when chaincode tries to register.

func (*Handler) HandleTransaction added in v1.2.0

func (h *Handler) HandleTransaction(msg *pb.ChaincodeMessage, delegate handleFunc)

HandleTransaction is a middleware function that obtains and verifies a transaction context prior to forwarding the message to the provided delegate. Response messages returned by the delegate are sent to the chat stream. Any errors returned by the delegate are packaged as chaincode error messages.

func (*Handler) Notify added in v1.2.0

func (h *Handler) Notify(msg *pb.ChaincodeMessage)

func (*Handler) ProcessStream added in v1.2.0

func (h *Handler) ProcessStream(stream ccintf.ChaincodeStream) error

func (*Handler) State added in v1.2.0

func (h *Handler) State() State

type HandlerRegistry added in v1.2.0

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

HandlerRegistry maintains chaincode Handler instances.

func NewHandlerRegistry added in v1.2.0

func NewHandlerRegistry(allowUnsolicitedRegistration bool) *HandlerRegistry

NewHandlerRegistry constructs a HandlerRegistry.

func (*HandlerRegistry) Deregister added in v1.2.0

func (r *HandlerRegistry) Deregister(cname string) error

Deregister clears references to state associated specified chaincode. As part of the cleanup, it closes the handler so it can cleanup any state. If the registry does not contain the provided handler, an error is returned.

func (*HandlerRegistry) Failed added in v1.2.0

func (r *HandlerRegistry) Failed(cname string, err error)

Failed indicates that registration of a launched chaincode has failed.

func (*HandlerRegistry) Handler added in v1.2.0

func (r *HandlerRegistry) Handler(cname string) *Handler

Handler retrieves the handler for a chaincode instance.

func (*HandlerRegistry) HasLaunched added in v1.2.0

func (r *HandlerRegistry) HasLaunched(chaincode string) bool

HasLaunched returns true if the named chaincode is launching or running.

func (*HandlerRegistry) Launching added in v1.2.0

func (r *HandlerRegistry) Launching(cname string) (*LaunchState, error)

Launching indicates that chaincode is being launched. The LaunchState that is returned provides mechanisms to determine when the operation has completed and whether or not it failed. An error will be returned if chaincode launch processing has already been initated.

func (*HandlerRegistry) Ready added in v1.2.0

func (r *HandlerRegistry) Ready(cname string)

Ready indicates that the chaincode registration has completed and the READY response has been sent to the chaincode.

func (*HandlerRegistry) Register added in v1.2.0

func (r *HandlerRegistry) Register(h *Handler) error

Register adds a chaincode handler to the registry. An error will be returned if a handler is already registered for the chaincode. An error will also be returned if the chaincode has not already been "launched", and unsolicited registration is not allowed.

type InstantiationPolicyChecker added in v1.2.0

type InstantiationPolicyChecker interface {
	CheckInstantiationPolicy(name, version string, cd *ccprovider.ChaincodeData) error
}

InstantiationPolicyChecker is used to evaluate instantiation policies.

type Invoker added in v1.2.0

type Invoker interface {
	Invoke(ctxt context.Context, cccid *ccprovider.CCContext, spec ccprovider.ChaincodeSpecGetter) (*pb.ChaincodeMessage, error)
}

An Invoker invokes chaincode.

type LaunchConfig added in v1.2.0

type LaunchConfig struct {
	Args  []string
	Envs  []string
	Files map[string][]byte
}

LaunchConfig holds chaincode launch arguments, environment variables, and files.

func (*LaunchConfig) String added in v1.2.0

func (lc *LaunchConfig) String() string

type LaunchRegistry added in v1.2.0

type LaunchRegistry interface {
	Launching(cname string) (*LaunchState, error)
	Deregister(cname string) error
}

LaunchRegistry tracks launching chaincode instances.

type LaunchState added in v1.2.0

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

func NewLaunchState added in v1.2.0

func NewLaunchState() *LaunchState

func (*LaunchState) Done added in v1.2.0

func (l *LaunchState) Done() <-chan struct{}

func (*LaunchState) Err added in v1.2.0

func (l *LaunchState) Err() error

func (*LaunchState) Notify added in v1.2.0

func (l *LaunchState) Notify(err error)

type Launcher added in v1.2.0

type Launcher interface {
	Launch(context context.Context, cccid *ccprovider.CCContext, spec ccprovider.ChaincodeSpecGetter) error
}

Launcher is used to launch chaincode runtimes.

type LedgerGetter added in v1.2.0

type LedgerGetter interface {
	GetLedger(cid string) ledger.PeerLedger
}

LedgerGetter is used to get ledgers for chaincode.

type Lifecycle added in v1.2.0

type Lifecycle struct {
	Executor Executor
}

Lifecycle provides methods to invoke the lifecycle system chaincode.

func (*Lifecycle) GetChaincodeDefinition added in v1.2.0

func (l *Lifecycle) GetChaincodeDefinition(
	ctx context.Context,
	txid string,
	signedProp *pb.SignedProposal,
	prop *pb.Proposal,
	chainID string,
	chaincodeID string,
) (ccprovider.ChaincodeDefinition, error)

GetChaincodeDefinition returns a ccprovider.ChaincodeDefinition for the chaincode associated with the provided channel and name.

func (*Lifecycle) GetChaincodeDeploymentSpec added in v1.2.0

func (l *Lifecycle) GetChaincodeDeploymentSpec(
	ctx context.Context,
	txid string,
	signedProp *pb.SignedProposal,
	prop *pb.Proposal,
	chainID string,
	chaincodeID string,
) (*pb.ChaincodeDeploymentSpec, error)

GetChaincodeDeploymentSpec retrieves a chaincode deployment spec for the specified chaincode.

type MessageHandler

type MessageHandler interface {
	Handle(*pb.ChaincodeMessage, *TransactionContext) (*pb.ChaincodeMessage, error)
}

type PackageProvider added in v1.2.0

type PackageProvider interface {
	GetChaincode(ccname string, ccversion string) (ccprovider.CCPackage, error)
}

PackageProvider gets chaincode packages from the filesystem.

type PendingQueryResult added in v1.2.0

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

func (*PendingQueryResult) Add added in v1.2.0

func (p *PendingQueryResult) Add(queryResult commonledger.QueryResult) error

func (*PendingQueryResult) Cut added in v1.2.0

func (*PendingQueryResult) Size added in v1.2.0

func (p *PendingQueryResult) Size() int

type Processor added in v1.2.0

type Processor interface {
	Process(ctxt context.Context, vmtype string, req container.VMCReq) error
}

Processor processes vm and container requests.

type QueryResponseBuilder added in v1.2.0

type QueryResponseBuilder interface {
	BuildQueryResponse(txContext *TransactionContext, iter commonledger.ResultsIterator, iterID string) (*pb.QueryResponse, error)
}

QueryResponseBuilder is responsible for building QueryResponse messages for query transactions initiated by chaincode.

type QueryResponseGenerator added in v1.2.0

type QueryResponseGenerator struct {
	MaxResultLimit int
}

func (*QueryResponseGenerator) BuildQueryResponse added in v1.2.0

func (q *QueryResponseGenerator) BuildQueryResponse(txContext *TransactionContext, iter commonledger.ResultsIterator, iterID string) (*pb.QueryResponse, error)

NewQueryResponse takes an iterator and fetch state to construct QueryResponse

type Registry added in v1.2.0

type Registry interface {
	Register(*Handler) error
	Ready(cname string)
	Failed(cname string, err error)
	Deregister(cname string) error
}

A Registry is responsible for tracking handlers.

type Runtime added in v1.2.0

type Runtime interface {
	Start(ctxt context.Context, cccid *ccprovider.CCContext, cds *pb.ChaincodeDeploymentSpec) error
	Stop(ctxt context.Context, cccid *ccprovider.CCContext, cds *pb.ChaincodeDeploymentSpec) error
}

Runtime is used to manage chaincode runtime instances.

type RuntimeLauncher added in v1.2.0

type RuntimeLauncher struct {
	Runtime         Runtime
	Registry        LaunchRegistry
	PackageProvider PackageProvider
	Lifecycle       *Lifecycle
	StartupTimeout  time.Duration
}

RuntimeLauncher is responsible for launching chaincode runtimes.

func (*RuntimeLauncher) Launch added in v1.2.0

Launch chaincode with the appropriate runtime.

type State added in v1.2.0

type State int
const (
	Created State = iota
	Established
	Ready
)

func (State) String added in v1.2.0

func (s State) String() string

type SystemCCProvider added in v1.2.0

type SystemCCProvider interface {
	IsSysCC(name string) bool
	IsSysCCAndNotInvokableCC2CC(name string) bool
}

SystemCCProvider provides system chaincode metadata.

type TransactionContext added in v1.2.0

type TransactionContext struct {
	ChainID              string
	SignedProp           *pb.SignedProposal
	Proposal             *pb.Proposal
	ResponseNotifier     chan *pb.ChaincodeMessage
	TXSimulator          ledger.TxSimulator
	HistoryQueryExecutor ledger.HistoryQueryExecutor
	// contains filtered or unexported fields
}

func (*TransactionContext) CleanupQueryContext added in v1.2.0

func (t *TransactionContext) CleanupQueryContext(queryID string)

func (*TransactionContext) CloseQueryIterators added in v1.2.0

func (t *TransactionContext) CloseQueryIterators()

func (*TransactionContext) GetPendingQueryResult added in v1.2.0

func (t *TransactionContext) GetPendingQueryResult(queryID string) *PendingQueryResult

func (*TransactionContext) GetQueryIterator added in v1.2.0

func (t *TransactionContext) GetQueryIterator(queryID string) commonledger.ResultsIterator

func (*TransactionContext) InitializeQueryContext added in v1.2.0

func (t *TransactionContext) InitializeQueryContext(queryID string, iter commonledger.ResultsIterator)

type TransactionContexts added in v1.2.0

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

TransactionContexts maintains active transaction contexts for a Handler.

func NewTransactionContexts added in v1.2.0

func NewTransactionContexts() *TransactionContexts

NewTransactionContexts creates a registry for active transaction contexts.

func (*TransactionContexts) Close added in v1.2.0

func (c *TransactionContexts) Close()

Close closes all query iterators assocated with the context.

func (*TransactionContexts) Create added in v1.2.0

func (c *TransactionContexts) Create(ctx context.Context, chainID, txID string, signedProp *pb.SignedProposal, proposal *pb.Proposal) (*TransactionContext, error)

Create creates a new TransactionContext for the specified chain and transaction ID. An error is returned when a transaction context has already been created for the specified chain and transaction ID.

func (*TransactionContexts) Delete added in v1.2.0

func (c *TransactionContexts) Delete(chainID, txID string)

Delete removes the transaction context associated with the specified chain and transaction ID.

func (*TransactionContexts) Get added in v1.2.0

func (c *TransactionContexts) Get(chainID, txID string) *TransactionContext

Get retrieves the transaction context associated with the chain and transaction ID.

type TransactionRegistry added in v1.2.0

type TransactionRegistry interface {
	Add(channelID, txID string) bool
	Remove(channelID, txID string)
}

TransactionRegistry tracks active transactions for each channel.

type UUIDGenerator added in v1.2.0

type UUIDGenerator interface {
	New() string
}

UUIDGenerator is responsible for creating unique query identifiers.

type UUIDGeneratorFunc added in v1.2.0

type UUIDGeneratorFunc func() string

func (UUIDGeneratorFunc) New added in v1.2.0

func (u UUIDGeneratorFunc) New() string

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.
lib
cid
Code generated by counterfeiter.
Code generated by counterfeiter.
car
# Copyright State Street Corp.
# Copyright State Street Corp.
ccmetadata
# Copyright State Street Corp.
# Copyright State Street Corp.
Package shim provides APIs for the chaincode to access its state variables, transaction context and call other chaincodes.
Package shim provides APIs for the chaincode to access its state variables, transaction context and call other chaincodes.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL