driver

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2023 License: Apache-2.0 Imports: 10 Imported by: 3

Documentation

Index

Constants

View Source
const (
	// PeerForAnything defines the class of peers that can be used for any function
	PeerForAnything = iota
	// PeerForDelivery defines the class of peers to be used for delivery
	PeerForDelivery
	// PeerForDiscovery defines the class of peers to be used for discovery
	PeerForDiscovery
	// PeerForFinality defines the class of peers to be used for finality
	PeerForFinality
	// PeerForQuery defines the class of peers to be used for query
	PeerForQuery
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Block

type Block interface {
	// DataAt returns the data stored at the passed index
	DataAt(i int) []byte
	// ProcessedTransaction returns the ProcessedTransaction at passed index
	ProcessedTransaction(i int) (ProcessedTransaction, error)
}

Block models a block of the ledger

type ByNum

type ByNum struct {
	Txid string
	Code ValidationCode
}

type Chaincode

type Chaincode interface {
	NewInvocation(function string, args ...interface{}) ChaincodeInvocation
	NewDiscover() ChaincodeDiscover
	IsAvailable() (bool, error)
	IsPrivate() bool
	// Version returns the version of this chaincode.
	// It returns an error if a failure happens during the computation.
	Version() (string, error)
}

Chaincode exposes chaincode-related functions

type ChaincodeDiscover

type ChaincodeDiscover interface {
	// Call invokes discovery service and returns the discovered peers
	Call() ([]DiscoveredPeer, error)
	WithFilterByMSPIDs(mspIDs ...string) ChaincodeDiscover
	WithImplicitCollections(mspIDs ...string) ChaincodeDiscover
}

ChaincodeDiscover models a client-side chaincode's endorsers discovery operation

type ChaincodeInvocation

type ChaincodeInvocation interface {
	Endorse() (Envelope, error)

	Query() ([]byte, error)

	Submit() (string, []byte, error)

	WithTransientEntry(k string, v interface{}) ChaincodeInvocation

	WithEndorsersByMSPIDs(mspIDs ...string) ChaincodeInvocation

	WithEndorsersFromMyOrg() ChaincodeInvocation

	WithSignerIdentity(id view.Identity) ChaincodeInvocation

	WithTxID(id TxID) ChaincodeInvocation

	WithEndorsersByConnConfig(ccs ...*grpc.ConnectionConfig) ChaincodeInvocation

	WithImplicitCollections(mspIDs ...string) ChaincodeInvocation

	// WithDiscoveredEndorsersByEndpoints sets the endpoints to be used to filter the result of
	// discovery. Discovery is used to identify the chaincode's endorsers, if not set otherwise.
	WithDiscoveredEndorsersByEndpoints(endpoints ...string) ChaincodeInvocation

	// WithMatchEndorsementPolicy enforces that the query is perfomed against a set of peers that satisfy the
	// endorsement policy of the chaincode
	WithMatchEndorsementPolicy() ChaincodeInvocation

	// WithNumRetries sets the number of times the chaincode operation should be retried before returning a failure
	WithNumRetries(numRetries uint) ChaincodeInvocation

	// WithRetrySleep sets the time interval between each retry
	WithRetrySleep(duration time.Duration) ChaincodeInvocation

	WithContext(context context.Context) ChaincodeInvocation
}

ChaincodeInvocation models a client-side chaincode invocation

type ChaincodeManager

type ChaincodeManager interface {
	// Chaincode returns a chaincode handler for the passed chaincode name
	Chaincode(name string) Chaincode
}

ChaincodeManager manages chaincodes

type Channel

type Channel interface {
	Committer
	Vault
	Delivery

	Ledger
	Finality
	ChannelMembership
	TXIDStore
	ChaincodeManager
	RWSetLoader

	// Name returns the name of the channel this instance is bound to
	Name() string

	EnvelopeService() EnvelopeService

	TransactionService() EndorserTransactionService

	MetadataService() MetadataService

	// NewPeerClientForAddress creates an instance of a Client using the
	// provided peer connection config
	NewPeerClientForAddress(cc grpc.ConnectionConfig) (peer.Client, error)

	Close() error
}

Channel gives access to Fabric channel related information

type ChannelMembership

type ChannelMembership interface {
	GetMSPIDs() []string
	MSPManager() MSPManager
	IsValid(identity view.Identity) error
	GetVerifier(identity view.Identity) (driver.Verifier, error)
}

type Committer

type Committer interface {
	// ProcessNamespace registers namespaces that will be committed even if the rwset is not known
	ProcessNamespace(nss ...string) error

	// Status returns a validation code this committer bind to the passed transaction id, plus
	// a list of dependant transaction ids if they exist.
	Status(txid string) (ValidationCode, []string, error)

	// DiscardTx discards the transaction with the passed id and all its dependencies, if they exists.
	DiscardTx(txid string) error

	// CommitTX commits the transaction with the passed id and all its dependencies, if they exists.
	// Depending on tx's status, CommitTX does the following:
	// Tx is Unknown, CommitTx does nothing and returns no error.
	// Tx is HasDependencies, CommitTx proceeds with the multi-shard private transaction commit protocol.
	// Tx is Valid, CommitTx does nothing and returns an error.
	// Tx is Invalid, CommitTx does nothing and returns an error.
	// Tx is Busy, if Tx is a multi-shard private transaction then CommitTx proceeds with the multi-shard private transaction commit protocol,
	// otherwise, CommitTx commits the transaction.
	CommitTX(txid string, block uint64, indexInBloc int, envelope *common.Envelope) error

	// CommitConfig commits the passed configuration envelope.
	CommitConfig(blockNumber uint64, raw []byte, envelope *common.Envelope) error

	// SubscribeTxStatusChanges registers a listener for transaction status changes for the passed transaction id.
	// If the transaction id is empty, the listener will be called for all transactions.
	SubscribeTxStatusChanges(txID string, listener TxStatusChangeListener) error

	// UnsubscribeTxStatusChanges unregisters a listener for transaction status changes for the passed transaction id.
	// If the transaction id is empty, the listener will be called for all transactions.
	UnsubscribeTxStatusChanges(txID string, listener TxStatusChangeListener) error
}

Committer models the committer service

type Config

type Config interface {
	// DefaultChannel returns the name of the default channel
	DefaultChannel() string

	// Channels return the list of registered channel names
	Channels() []string

	// Orderers returns the list of all registered ordereres
	Orderers() []*grpc.ConnectionConfig

	// Peers returns the list of all registered peers
	Peers() []*grpc.ConnectionConfig

	// PickPeer picks a peer at random among the peers that provide the passed functionality
	PickPeer(funcType PeerFunctionType) *grpc.ConnectionConfig
}

Config defines basic information the configuration should provide

type ConfigService

type ConfigService interface {
	// GetString returns the value associated with the key as a string
	GetString(key string) string
	// GetDuration returns the value associated with the key as a duration
	GetDuration(key string) time.Duration
	// GetBool returns the value associated with the key asa boolean
	GetBool(key string) bool
	// IsSet checks to see if the key has been set in any of the data locations
	IsSet(key string) bool
	// UnmarshalKey takes a single key and unmarshals it into a Struct
	UnmarshalKey(key string, rawVal interface{}) error
	// GetPath allows configuration strings that specify a (config-file) relative path
	GetPath(key string) string
	// TranslatePath translates the passed path relative to the config path
	TranslatePath(path string) string
}

type Delivery

type Delivery interface {
	// StartDelivery starts the delivery process
	StartDelivery(ctx context.Context) error

	// Scan iterates over all transactions in block starting from the block containing the passed transaction id.
	// If txID is empty, the iterations starts from the first block.
	// On each transaction, the callback function is invoked.
	Scan(ctx context.Context, txID string, callback DeliveryCallback) error
}

Delivery gives access to Fabric channel delivery

type DeliveryCallback

type DeliveryCallback func(tx ProcessedTransaction) (bool, error)

DeliveryCallback is a callback function used to process a transaction. Return true, if the scan should finish.

type DiscoveredPeer

type DiscoveredPeer struct {
	// Identity is the identity of the peer (MSP Identity)
	Identity view.Identity
	// MSPID is the MSP ID of the peer
	MSPID string
	// Endpoint is the endpoint of the peer
	Endpoint string
	// TLSRootCerts is the TLS root certs of the peer
	TLSRootCerts [][]byte
}

DiscoveredPeer contains the information of a discovered peer

type Driver added in v0.2.0

type Driver interface {
	// New returns a new network instance for the passed network and channel (if applicable)
	New(sp view.ServiceProvider, network string, defaultNetwork bool) (FabricNetworkService, error)
}

Driver models the network driver factory

type EndorserTransactionService

type EndorserTransactionService interface {
	Exists(txid string) bool
	StoreTransaction(txid string, raw []byte) error
	LoadTransaction(txid string) ([]byte, error)
}

type Envelope

type Envelope interface {
	TxID() string
	Nonce() []byte
	Creator() []byte
	Results() []byte
	Bytes() ([]byte, error)
	FromBytes(raw []byte) error
	String() string
}

type EnvelopeService

type EnvelopeService interface {
	Exists(txid string) bool
	StoreEnvelope(txid string, env interface{}) error
	LoadEnvelope(txid string) ([]byte, error)
}

type FabricNetworkService

type FabricNetworkService interface {
	Config
	Ordering

	Name() string

	TransactionManager() TransactionManager

	ProcessorManager() ProcessorManager

	LocalMembership() LocalMembership

	IdentityProvider() IdentityProvider

	// Channel returns the channel whose name is the passed one.
	// If the empty string is passed, the default channel is returned, if defined.
	Channel(name string) (Channel, error)

	// Ledger returns the ledger for the channel whose name is the passed one.
	Ledger(name string) (Ledger, error)

	// Committer returns the committer for the channel whose name is the passed one.
	Committer(name string) (Committer, error)

	SignerService() SignerService

	ConfigService() ConfigService
}

FabricNetworkService gives access to a Fabric network components

type FabricNetworkServiceProvider

type FabricNetworkServiceProvider interface {
	Names() []string
	DefaultName() string
	// FabricNetworkService returns a FabricNetworkService instance for the passed parameters
	FabricNetworkService(id string) (FabricNetworkService, error)
}

type Finality

type Finality interface {
	// IsFinal takes in input a transaction id and waits for its confirmation
	// with the respect to the passed context that can be used to set a deadline
	// for the waiting time.
	IsFinal(ctx context.Context, txID string) error

	// IsFinalForParties takes in input a transaction id and an array of identities.
	// The identities are contacted to gather information about the finality of the
	// passed transaction
	IsFinalForParties(txID string, parties ...view.Identity) error
}

type GetIdentityFunc

type GetIdentityFunc func(opts *IdentityOptions) (view.Identity, []byte, error)

type GetStateOpt

type GetStateOpt int
const (
	FromStorage GetStateOpt = iota
	FromIntermediate
	FromBoth
)

type IdentityInfo

type IdentityInfo struct {
	ID           string
	EnrollmentID string
	GetIdentity  GetIdentityFunc
}

type IdentityOptions

type IdentityOptions struct {
	EIDExtension bool
	AuditInfo    []byte
}

type IdentityProvider

type IdentityProvider interface {
	// Identity returns the Fabric identity bound to the passed label.
	// If not Fabric identity is associated to the label, it returns the the SFC identity bound to that label.
	Identity(label string) view.Identity
}

IdentityProvider models the identity provider

type Ledger

type Ledger interface {
	// GetTransactionByID retrieves a transaction by id
	GetTransactionByID(txID string) (ProcessedTransaction, error)

	// GetBlockNumberByTxID returns the number of the block where the passed transaction appears
	GetBlockNumberByTxID(txID string) (uint64, error)

	// GetBlockByNumber fetches a block by number
	GetBlockByNumber(number uint64) (Block, error)
}

Ledger gives access to the remote ledger

type LocalMembership

type LocalMembership interface {
	DefaultIdentity() view.Identity
	AnonymousIdentity() view.Identity
	IsMe(id view.Identity) bool
	DefaultSigningIdentity() SigningIdentity
	RegisterX509MSP(id string, path string, mspID string) error
	RegisterIdemixMSP(id string, path string, mspID string) error
	GetIdentityByID(id string) (view.Identity, error)
	GetIdentityInfoByLabel(mspType string, label string) *IdentityInfo
	GetIdentityInfoByIdentity(mspType string, id view.Identity) *IdentityInfo
	Refresh() error
}

type MSPIdentity

type MSPIdentity interface {
	GetMSPIdentifier() string
	Validate() error
	Verify(message, sigma []byte) error
}

type MSPManager

type MSPManager interface {
	DeserializeIdentity(serializedIdentity []byte) (MSPIdentity, error)
}

type MetadataService

type MetadataService interface {
	Exists(txid string) bool
	StoreTransient(txid string, transientMap TransientMap) error
	LoadTransient(txid string) (TransientMap, error)
}

type Ordering

type Ordering interface {
	// Broadcast sends the passed blob to the ordering service to be ordered
	Broadcast(context context.Context, blob interface{}) error

	// SetConsensusType sets the consensus type the ordering service should use
	SetConsensusType(consensusType string) error
}

Ordering models the ordering service

type PeerFunctionType added in v0.3.0

type PeerFunctionType int

PeerFunctionType defines classes of peers providing a specific functionality

type ProcessTransaction

type ProcessTransaction interface {
	Network() string
	Channel() string
	ID() string
	FunctionAndParameters() (string, []string)
}

type ProcessedTransaction

type ProcessedTransaction interface {
	// TxID returns the transaction's id
	TxID() string
	// Results returns the rwset marshaled
	Results() []byte
	// ValidationCode of this transaction
	ValidationCode() int32
	// IsValid returns true if the transaction is valid, false otherwise
	IsValid() bool
	// Envelope returns the Fabric envelope
	Envelope() []byte
}

ProcessedTransaction models a transaction that has been processed by Fabric

type Processor

type Processor interface {
	Process(req Request, tx ProcessTransaction, rws RWSet, ns string) error
}

type ProcessorManager

type ProcessorManager interface {
	AddProcessor(ns string, processor Processor) error
	SetDefaultProcessor(processor Processor) error
	AddChannelProcessor(channel string, ns string, processor Processor) error
	ProcessByID(channel, txid string) error
}

type Proposal

type Proposal interface {
	Header() []byte
	Payload() []byte
}

type ProposalResponse

type ProposalResponse interface {
	Endorser() []byte
	Payload() []byte
	EndorserSignature() []byte
	Results() []byte
	ResponseStatus() int32
	ResponseMessage() string
	Bytes() ([]byte, error)
}

type QueryExecutor

type QueryExecutor interface {
	GetState(namespace string, key string) ([]byte, error)
	GetStateMetadata(namespace, key string) (map[string][]byte, uint64, uint64, error)
	GetStateRangeScanIterator(namespace string, startKey string, endKey string) (driver.VersionedResultsIterator, error)
	Done()
}

type RWSExtractor

type RWSExtractor interface {
	Extract(tx []byte) (ProcessTransaction, RWSet, error)
}

type RWSet

type RWSet interface {
	IsValid() error

	Clear(ns string) error

	// SetState sets the given value for the given namespace and key.
	SetState(namespace string, key string, value []byte) error

	GetState(namespace string, key string, opts ...GetStateOpt) ([]byte, error)

	// DeleteState deletes the given namespace and key
	DeleteState(namespace string, key string) error

	GetStateMetadata(namespace, key string, opts ...GetStateOpt) (map[string][]byte, error)

	// SetStateMetadata sets the metadata associated with an existing key-tuple <namespace, key>
	SetStateMetadata(namespace, key string, metadata map[string][]byte) error

	GetReadKeyAt(ns string, i int) (string, error)

	// GetReadAt returns the i-th read (key, value) in the namespace ns  of this rwset.
	// The value is loaded from the ledger, if present. If the key's version in the ledger
	// does not match the key's version in the read, then it returns an error.
	GetReadAt(ns string, i int) (string, []byte, error)

	// GetWriteAt returns the i-th write (key, value) in the namespace ns of this rwset.
	GetWriteAt(ns string, i int) (string, []byte, error)

	// NumReads returns the number of reads in the namespace ns  of this rwset.
	NumReads(ns string) int

	// NumWrites returns the number of writes in the namespace ns of this rwset.
	NumWrites(ns string) int

	// Namespaces returns the namespace labels in this rwset.
	Namespaces() []string

	AppendRWSet(raw []byte, nss ...string) error

	Bytes() ([]byte, error)

	Done()

	Equals(rws interface{}, nss ...string) error
}

type RWSetLoader

type RWSetLoader interface {
	GetRWSetFromEvn(txID string) (RWSet, ProcessTransaction, error)
	GetRWSetFromETx(txID string) (RWSet, ProcessTransaction, error)
}

type Request

type Request interface {
	ID() string
}

type SeekEnd

type SeekEnd struct{}

type SeekPos

type SeekPos struct {
	Txid string
}

type SeekStart

type SeekStart struct{}

type SignedProposal

type SignedProposal interface {
	ProposalBytes() []byte
	Signature() []byte
	ProposalHash() []byte
	ChaincodeName() string
	ChaincodeVersion() string
}

type Signer

type Signer interface {
	Sign(message []byte) ([]byte, error)
}

type SignerService

type SignerService interface {
	// GetSigner returns the signer for the passed identity
	GetSigner(id view.Identity) (Signer, error)
	// GetSigningIdentity returns the signing identity for the passed identity
	GetSigningIdentity(id view.Identity) (SigningIdentity, error)
	// RegisterSigner register signer and verifier for the passed identity
	RegisterSigner(identity view.Identity, signer Signer, verifier Verifier) error
}

SignerService models a signer service

type SigningIdentity

type SigningIdentity interface {
	Serialize() ([]byte, error)
	Sign(msg []byte) ([]byte, error)
}

type TXIDStore

type TXIDStore interface {
	GetLastTxID() (string, error)
	Iterator(pos interface{}) (TxidIterator, error)
}

type Transaction

type Transaction interface {
	Creator() view.Identity
	Nonce() []byte
	ID() string
	Network() string
	Channel() string
	Function() string
	Parameters() [][]byte
	FunctionAndParameters() (string, []string)
	Chaincode() string
	ChaincodeVersion() string
	Results() ([]byte, error)
	From(payload Transaction) (err error)
	SetFromBytes(raw []byte) error
	SetFromEnvelopeBytes(raw []byte) error
	Proposal() Proposal
	SignedProposal() SignedProposal
	SetProposal(chaincode string, version string, function string, params ...string)
	AppendParameter(p []byte)
	SetParameterAt(i int, p []byte) error
	Transient() TransientMap
	ResetTransient()
	SetRWSet() error
	RWS() RWSet
	Done() error
	Close()
	Raw() ([]byte, error)
	GetRWSet() (RWSet, error)
	Bytes() ([]byte, error)
	Endorse() error
	EndorseWithIdentity(identity view.Identity) error
	EndorseWithSigner(identity view.Identity, s Signer) error
	EndorseProposal() error
	EndorseProposalWithIdentity(identity view.Identity) error
	EndorseProposalResponse() error
	EndorseProposalResponseWithIdentity(identity view.Identity) error
	AppendProposalResponse(response ProposalResponse) error
	ProposalHasBeenEndorsedBy(party view.Identity) error
	StoreTransient() error
	ProposalResponses() []ProposalResponse
	ProposalResponse() ([]byte, error)
	BytesNoTransient() ([]byte, error)
	Envelope() (Envelope, error)
}

type TransactionManager

type TransactionManager interface {
	ComputeTxID(id *TxID) string
	NewEnvelope() Envelope
	NewProposalResponseFromBytes(raw []byte) (ProposalResponse, error)
	NewTransaction(creator view.Identity, nonce []byte, txid string, channel string) (Transaction, error)
	NewTransactionFromBytes(channel string, raw []byte) (Transaction, error)
}

type TransactionStatusChanged

type TransactionStatusChanged struct {
	ThisTopic string
	TxID      string
	VC        ValidationCode
}

TransactionStatusChanged is sent when the status of a transaction changes

func (*TransactionStatusChanged) Message

func (t *TransactionStatusChanged) Message() interface{}

Message returns the message for the transaction status change

func (*TransactionStatusChanged) Topic

func (t *TransactionStatusChanged) Topic() string

Topic returns the topic for the transaction status change

type TransientMap

type TransientMap map[string][]byte

type TxID

type TxID struct {
	Nonce   []byte
	Creator []byte
}

type TxStatusChangeListener

type TxStatusChangeListener interface {
	// OnStatusChange is called when the status of a transaction changes
	OnStatusChange(txID string, status int) error
}

TxStatusChangeListener is the interface that must be implemented to receive transaction status change notifications

type TxidIterator

type TxidIterator interface {
	Next() (*ByNum, error)
	Close()
}

type ValidationCode

type ValidationCode int

ValidationCode of transaction

const (
	Valid           ValidationCode // Transaction is valid and committed
	Invalid                        // Transaction is invalid and has been discarded
	Busy                           // Transaction does not yet have a validity state
	Unknown                        // Transaction is unknown
	HasDependencies                // Transaction is unknown but has known dependencies
)

type Vault

type Vault interface {
	// NewQueryExecutor gives handle to a query executor.
	// A client can obtain more than one 'QueryExecutor's for parallel execution.
	// Any synchronization should be performed at the implementation level if required
	NewQueryExecutor() (QueryExecutor, error)

	// NewRWSet returns a RWSet for this ledger.
	// A client may obtain more than one such simulator; they are made unique
	// by way of the supplied txid
	NewRWSet(txid string) (RWSet, error)

	// GetRWSet returns a RWSet for this ledger whose content is unmarshalled
	// from the passed bytes.
	// A client may obtain more than one such simulator; they are made unique
	// by way of the supplied txid
	GetRWSet(txid string, rwset []byte) (RWSet, error)

	// GetEphemeralRWSet returns an ephemeral RWSet for this ledger whose content is unmarshalled
	// from the passed bytes.
	// If namespaces is not empty, the returned RWSet will be filtered by the passed namespaces
	GetEphemeralRWSet(rwset []byte, namespaces ...string) (RWSet, error)
}

Vault models a key value store that can be updated by committing rwsets

type Verifier

type Verifier interface {
	// Verify verifies the signature over the passed message.
	Verify(message, sigma []byte) error
}

Verifier is an interface which wraps the Verify method.

Jump to

Keyboard shortcuts

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