api

package
v0.7.3 Latest Latest
Warning

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

Go to latest
Published: Mar 31, 2022 License: MIT Imports: 16 Imported by: 6

Documentation

Index

Constants

View Source
const (
	TxWaiterSelfType string = "self"
	TxWaiterAllType  string = "all"
)

types which identify tx "wait'er" policy we don't make it as alias for preventing binding to our lib

View Source
const (
	ErrEmptyConfig         = Error(`empty core configuration`)
	ErrInvalidPEMStructure = Error(`invalid PEM structure`)
)
View Source
const (
	ErrNoPeersForMSP = Error(`no peers for presented MSP`)
	ErrMSPNotFound   = Error(`MSP not found`)
	ErrPeerNotReady  = Error(`peer not ready`)
)

Variables

View Source
var (
	SeekFromOldest = &orderer.SeekPosition{
		Type: &orderer.SeekPosition_Oldest{Oldest: &orderer.SeekOldest{}}}
	SeekFromNewest = &orderer.SeekPosition{
		Type: &orderer.SeekPosition_Newest{Newest: &orderer.SeekNewest{}}}
	SeekToMax = SeekSpecified(math.MaxUint64)
)

Functions

func SeekSpecified added in v0.7.0

func SeekSpecified(number uint64) *orderer.SeekPosition

SeekSpecified returns orderer.SeekPosition_Specified position

Types

type BlockSubscription

type BlockSubscription interface {
	Blocks() <-chan *common.Block
	// DEPRECATED: will migrate to just once Err() <- chan error
	Errors() chan error
	Close() error
}

type BlocksDeliverer added in v0.7.0

type BlocksDeliverer interface {
	// Blocks - shortcut for core.PeerPool().DeliverClient(mspIdentity).SubscribeBlock(chanName,seekRange).Blocks()
	// subscribe to new blocks on specified channel
	// if provided 'identity' is 'nil' default one will be set
	Blocks(
		ctx context.Context,
		channelName string,
		identity msp.SigningIdentity,
		blockRange ...int64,
	) (blockChan <-chan *common.Block, closer func() error, err error)
}

type CCFetcher

type CCFetcher interface {
	Fetch(ctx context.Context, id *peer.ChaincodeID) (*peer.ChaincodeDeploymentSpec, error)
}

type CSCC

type CSCC interface {
	// JoinChain allows joining channel using presented genesis block
	JoinChain(ctx context.Context, channelName string, genesisBlock *common.Block) error
	// GetConfigBlock returns genesis block of channel
	GetConfigBlock(ctx context.Context, channelName string) (*common.Block, error)
	// GetChannelConfig returns channel configuration
	GetChannelConfig(ctx context.Context, channelName string) (*common.Config, error)
	ChannelsFetcher
}

CSCC describes Configuration System Chaincode (CSCC)

type Chaincode

type Chaincode interface {
	// GetPeers returns chaincodes peers
	GetPeers() []Peer
	// Invoke returns invoke builder for presented chaincode function
	Invoke(fn string) ChaincodeInvokeBuilder
	// Query returns query builder for presented function and arguments
	Query(fn string, args ...string) ChaincodeQueryBuilder
	// Deprecated: Install fetches chaincode from repository and installs it on local peer
	Install(version string)
	// Subscribe returns subscription on chaincode events
	Subscribe(ctx context.Context) (EventCCSubscription, error)
}

Chaincode describes common operations with chaincode

type ChaincodeDiscoverer added in v0.7.0

type ChaincodeDiscoverer interface {
	Endorsers() []*HostEndpoint
	ChaincodeName() string
	ChaincodeVersion() string

	ChannelDiscoverer
}

ChaincodeDiscoverer - looking for info about network, channel, chaincode in local configs or gossip

type ChaincodeInvokeBuilder

type ChaincodeInvokeBuilder interface {
	// WithIdentity allows invoking chaincode from custom identity
	WithIdentity(identity msp.SigningIdentity) ChaincodeInvokeBuilder
	// Transient allows passing arguments to transient map
	Transient(args TransArgs) ChaincodeInvokeBuilder
	// ArgBytes set slice of bytes as argument
	ArgBytes([][]byte) ChaincodeInvokeBuilder
	// ArgJSON set slice of JSON-marshalled data
	ArgJSON(in ...interface{}) ChaincodeInvokeBuilder
	// ArgString set slice of strings as arguments
	ArgString(args ...string) ChaincodeInvokeBuilder
	// Do makes invoke with built arguments
	Do(ctx context.Context, opts ...DoOption) (*peer.Response, ChaincodeTx, error)
}

ChaincodeInvokeBuilder describes possibilities how to get invoke results

type ChaincodeInvokeResponse

type ChaincodeInvokeResponse struct {
	TxID    ChaincodeTx
	Payload []byte
	Err     error
}

type ChaincodePackage added in v0.1.1

type ChaincodePackage interface {
	// Latest allows to get latest version of chaincode
	Latest(ctx context.Context) (*peer.ChaincodeDeploymentSpec, error)
	// Install chaincode using defined chaincode fetcher
	Install(ctx context.Context, path, version string) error
	// Instantiate chaincode on channel with presented params
	Instantiate(ctx context.Context, channelName, path, version, policy string, args [][]byte, transArgs TransArgs) error
}

type ChaincodeQueryBuilder

type ChaincodeQueryBuilder interface {
	// WithIdentity allows invoking chaincode from custom identity
	WithIdentity(identity msp.SigningIdentity) ChaincodeQueryBuilder
	// WithArguments allows querying chaincode with arguments
	WithArguments(argBytes [][]byte) ChaincodeQueryBuilder
	// Transient allows passing arguments to transient map
	Transient(args TransArgs) ChaincodeQueryBuilder
	// AsBytes allows getting result of querying chaincode as byte slice
	AsBytes(ctx context.Context) ([]byte, error)
	// AsJSON allows getting result of querying chaincode to presented structures using JSON-unmarshalling
	AsJSON(ctx context.Context, out interface{}) error
	// AsProposalResponse allows getting raw peer response
	AsProposalResponse(ctx context.Context) (*peer.ProposalResponse, error)
	// Do makes query with built arguments
	Do(ctx context.Context) (*peer.Response, error)
}

ChaincodeQueryBuilder describe possibilities how to get query results

type ChaincodeTx

type ChaincodeTx string

type Channel

type Channel interface {
	// Chaincode returns chaincode instance by chaincode name
	Chaincode(ctx context.Context, name string) (Chaincode, error)
	// Join channel
	Join(ctx context.Context) error
}

type ChannelDiscoverer added in v0.7.0

type ChannelDiscoverer interface {
	Orderers() []*HostEndpoint
	ChannelName() string
}

ChannelDiscoverer - info about orderers in channel

type ChannelsFetcher added in v0.7.0

type ChannelsFetcher interface {
	// GetChannels returns list of joined channels
	GetChannels(ctx context.Context) (*peer.ChannelQueryResponse, error)
}

type Core

type Core interface {
	// Channel returns channel instance by channel name
	Channel(name string) Channel
	// CurrentIdentity identity returns current signing identity used by core
	CurrentIdentity() msp.SigningIdentity
	// CurrentMspPeers returns current msp peers
	CurrentMspPeers() []Peer
	// CryptoSuite returns current crypto suite implementation
	CryptoSuite() CryptoSuite
	// System allows access to system chaincodes
	System() SystemCC
	// PeerPool current peer pool
	PeerPool() PeerPool
	// Chaincode installation
	Chaincode(name string) ChaincodePackage
	// FabricV2 returns if core works in fabric v2 mode
	FabricV2() bool

	Public
}

type CryptoSuite

type CryptoSuite interface {
	// Sign is used for signing message by presented private key
	Sign(msg []byte, key interface{}) ([]byte, error)
	// Verify is used for verifying signature for presented message and public key
	Verify(publicKey interface{}, msg, sig []byte) error
	// Hash is used for hashing presented data
	Hash(data []byte) []byte
	// NewPrivateKey generates new private key
	NewPrivateKey() (interface{}, error)
	// GetSignatureAlgorithm returns signature algorithm
	GetSignatureAlgorithm() x509.SignatureAlgorithm
	// Initialize is used for suite instantiation using presented options
	Initialize(opts config.CryptoSuiteOpts) (CryptoSuite, error)
}

CryptoSuite describes common cryptographic operations

type DeliverClient

type DeliverClient interface {
	// SubscribeCC allows subscribing on chaincode events using name of channel, chaincode and block offset
	SubscribeCC(ctx context.Context, channelName string, ccName string, seekOpt ...EventCCSeekOption) (EventCCSubscription, error)
	// SubscribeTx allows subscribing on transaction events by id
	SubscribeTx(ctx context.Context, channelName string, tx ChaincodeTx, seekOpt ...EventCCSeekOption) (TxSubscription, error)
	// SubscribeBlock allows subscribing on block events. Always returns new instance of block subscription
	SubscribeBlock(ctx context.Context, channelName string, seekOpt ...EventCCSeekOption) (BlockSubscription, error)
}

type DiscoveryProvider

type DiscoveryProvider interface {
	Chaincode(ctx context.Context, channelName string, ccName string) (ChaincodeDiscoverer, error)
	Channel(ctx context.Context, channelName string) (ChannelDiscoverer, error)
	LocalPeers(ctx context.Context) (LocalPeersDiscoverer, error)
}

type DoOption added in v0.5.0

type DoOption func(opt *DoOptions) error

func WithEndorsingMpsIDs added in v0.7.0

func WithEndorsingMpsIDs(mspIDs []string) DoOption

func WithIdentity added in v0.7.0

func WithIdentity(identity msp.SigningIdentity) DoOption

type DoOptions added in v0.5.0

type DoOptions struct {
	Identity msp.SigningIdentity
	Pool     PeerPool

	TxWaiter TxWaiter
	// necessary only for 'tx waiter all'
	EndorsingMspIDs []string
}

type EnvelopeParsingError

type EnvelopeParsingError struct {
	Err error
}

func (EnvelopeParsingError) Error

func (e EnvelopeParsingError) Error() string

type ErrNoReadyPeers

type ErrNoReadyPeers struct {
	MspId string
}

func (ErrNoReadyPeers) Error

func (e ErrNoReadyPeers) Error() string

type ErrUnexpectedHTTPStatus

type ErrUnexpectedHTTPStatus struct {
	Status int
	Body   []byte
}

func (ErrUnexpectedHTTPStatus) Error

func (err ErrUnexpectedHTTPStatus) Error() string

type Error

type Error string

func (Error) Error

func (e Error) Error() string

type EventCCSeekOption

type EventCCSeekOption func() (*orderer.SeekPosition, *orderer.SeekPosition)

func SeekNewest

func SeekNewest() EventCCSeekOption

SeekNewest sets offset to new channel blocks

func SeekOldest

func SeekOldest() EventCCSeekOption

SeekOldest sets offset to channel blocks from beginning

func SeekRange

func SeekRange(start, end uint64) EventCCSeekOption

SeekRange sets offset from one block to another by their numbers

func SeekSingle

func SeekSingle(num uint64) EventCCSeekOption

SeekSingle sets offset from block number

type EventCCSubscription

type EventCCSubscription interface {
	// Events initiates internal GRPC stream and returns channel on chaincode events
	Events() chan *peer.ChaincodeEvent

	EventsExtended() chan interface {
		Event() *peer.ChaincodeEvent
		Block() uint64
		TxTimestamp() *timestamp.Timestamp
	}
	// Errors returns errors associated with this subscription
	Errors() chan error
	// Close cancels current subscription
	Close() error
}

type EventsDeliverer added in v0.7.0

type EventsDeliverer interface {
	// Events - shortcut for PeerPool().DeliverClient(...).SubscribeCC(...).Events()
	// subscribe on chaincode events using name of channel, chaincode and block offset
	// if provided 'identity' is 'nil' default one will be set
	Events(
		ctx context.Context,
		channelName string,
		ccName string,
		identity msp.SigningIdentity,
		blockRange ...int64,
	) (events chan interface {
		Event() *peer.ChaincodeEvent
		Block() uint64
		TxTimestamp() *timestamp.Timestamp
	}, closer func() error, err error)
}

type GRPCStreamError

type GRPCStreamError struct {
	Code codes.Code
	Err  error
}

GRPCStreamError contains original error from GRPC stream

func (GRPCStreamError) Error

func (e GRPCStreamError) Error() string

type HostAddress added in v0.7.0

type HostAddress struct {
	Address     string
	TLSSettings config.TlsConfig
}

type HostEndpoint added in v0.7.0

type HostEndpoint struct {
	MspID string
	// each host could have own tls settings
	HostAddresses []*HostAddress
}

type Identity

type Identity interface {
	// GetSigningIdentity returns signing identity which will use presented crypto suite
	GetSigningIdentity(cs CryptoSuite) msp.SigningIdentity
	// GetMSPIdentifier return msp id
	GetMSPIdentifier() string
	// GetPEM returns certificate in PEM format
	GetPEM() []byte
	// GetCert returns X509 Certificate
	GetCert() *x509.Certificate
}

type InvalidTxError

type InvalidTxError struct {
	TxId ChaincodeTx
	Code peer.TxValidationCode
}

func (InvalidTxError) Error

func (e InvalidTxError) Error() string

type Invoker

type Invoker interface {
	// Invoke method allows invoking chaincode
	Invoke(ctx context.Context, from msp.SigningIdentity, channel string, chaincode string, fn string, args [][]byte, transArgs TransArgs, doOpts ...DoOption) (*peer.Response, ChaincodeTx, error)
	// Query method allows querying chaincode without sending response to orderer
	Query(ctx context.Context, from msp.SigningIdentity, channel string, chaincode string, fn string, args [][]byte, transArgs TransArgs) (*peer.Response, error)
	// Subscribe allows subscribing on chaincode events
	Subscribe(ctx context.Context, from msp.SigningIdentity, channel, chaincode string) (EventCCSubscription, error)
}

Invoker interface describes common operations for chaincode

type LSCC

type LSCC interface {
	// GetChaincodeData returns information about instantiated chaincode on target channel
	GetChaincodeData(ctx context.Context, channelName string, ccName string) (*ccprovider.ChaincodeData, error)
	// GetInstalledChaincodes returns list of installed chaincodes on peer
	GetInstalledChaincodes(ctx context.Context) (*peer.ChaincodeQueryResponse, error)
	// GetChaincodes returns list of instantiated chaincodes on channel
	GetChaincodes(ctx context.Context, channelName string) (*peer.ChaincodeQueryResponse, error)
	// GetDeploymentSpec returns spec for installed chaincode
	GetDeploymentSpec(ctx context.Context, channelName string, ccName string) (*peer.ChaincodeDeploymentSpec, error)
	// Install allows installing chaincode using deployment specification
	Install(ctx context.Context, spec *peer.ChaincodeDeploymentSpec) error
	// Deploy allows instantiating or upgrade chaincode if instantiated
	// Currently, deploy method is not canonical as lscc implementation, but currently we need to get full proposal, and it's response to broadcast to orderer
	Deploy(ctx context.Context, channelName string, spec *peer.ChaincodeDeploymentSpec, policy *common.SignaturePolicyEnvelope, opts ...LSCCDeployOption) (*peer.SignedProposal, *peer.ProposalResponse, error)
}

LSCC describes Life Cycle System Chaincode (LSCC)

type LSCCDeployOption added in v0.1.1

type LSCCDeployOption func(opts *LSCCDeployOptions) error

func WithCollectionConfig added in v0.1.1

func WithCollectionConfig(config *common.CollectionConfigPackage) LSCCDeployOption

func WithESCC added in v0.1.1

func WithESCC(escc string) LSCCDeployOption

func WithTransientMap added in v0.1.1

func WithTransientMap(args TransArgs) LSCCDeployOption

func WithVSCC added in v0.1.1

func WithVSCC(vscc string) LSCCDeployOption

type LSCCDeployOptions added in v0.1.1

type LSCCDeployOptions struct {
	Escc             string
	Vscc             string
	CollectionConfig *common.CollectionConfigPackage
	TransArgs        TransArgs
}

type Lifecycle added in v0.6.2

type Lifecycle interface {
	// QueryInstalledChaincode returns chaincode package installed on peer
	QueryInstalledChaincode(ctx context.Context, args *lb.QueryInstalledChaincodeArgs) (
		*lb.QueryInstalledChaincodeResult, error)

	// QueryInstalledChaincodes returns chaincode packages list installed on peer
	QueryInstalledChaincodes(ctx context.Context) (*lb.QueryInstalledChaincodesResult, error)

	// InstallChaincode sets up chaincode package on peer
	InstallChaincode(ctx context.Context, args *lb.InstallChaincodeArgs) (*lb.InstallChaincodeResult, error)

	// ApproveChaincodeDefinitionForMyOrg marks chaincode definition on a channel
	ApproveChaincodeDefinitionForMyOrg(ctx context.Context, channel string, args *lb.ApproveChaincodeDefinitionForMyOrgArgs) error

	// QueryApprovedChaincodeDefinition returns approved chaincode definition
	QueryApprovedChaincodeDefinition(ctx context.Context, channel string, args *lb.QueryApprovedChaincodeDefinitionArgs) (
		*lb.QueryApprovedChaincodeDefinitionResult, error)

	// CheckCommitReadiness returns commitments statuses of participants on chaincode definition
	CheckCommitReadiness(ctx context.Context, channel string, args *lb.CheckCommitReadinessArgs) (
		*lb.CheckCommitReadinessResult, error)

	// CommitChaincodeDefinition the chaincode definition on the channel
	CommitChaincodeDefinition(ctx context.Context, channel string, args *lb.CommitChaincodeDefinitionArgs) (
		*lb.CommitChaincodeDefinitionResult, error)

	// QueryChaincodeDefinition returns chaincode definition committed on the channel
	QueryChaincodeDefinition(ctx context.Context, channel string, args *lb.QueryChaincodeDefinitionArgs) (
		*lb.QueryChaincodeDefinitionResult, error)

	// QueryChaincodeDefinitions returns chaincode definitions committed on the channel
	QueryChaincodeDefinitions(ctx context.Context, channel string, args *lb.QueryChaincodeDefinitionsArgs) (
		*lb.QueryChaincodeDefinitionsResult, error)
}

Lifecycle contains methods for interacting with system _lifecycle chaincode

type LocalPeersDiscoverer added in v0.7.0

type LocalPeersDiscoverer interface {
	Peers() []*HostEndpoint
}

LocalPeersDiscoverer discover local peers without providing info about channel, chaincode

type MultiError

type MultiError struct {
	Errors []error
}

func (*MultiError) Add

func (e *MultiError) Add(err error)

func (*MultiError) Error

func (e *MultiError) Error() string

type Orderer

type Orderer interface {
	// Broadcast sends envelope to orderer and returns it's result
	Broadcast(ctx context.Context, envelope *common.Envelope) (*orderer.BroadcastResponse, error)
	// Deliver fetches block from orderer by envelope
	Deliver(ctx context.Context, envelope *common.Envelope) (*common.Block, error)
}

type Peer

type Peer interface {
	// Endorse sends proposal to endorsing peer and returns its result
	Endorse(ctx context.Context, proposal *peer.SignedProposal, opts ...PeerEndorseOpt) (*peer.ProposalResponse, error)
	// DeliverClient returns DeliverClient
	DeliverClient(identity msp.SigningIdentity) (DeliverClient, error)
	// Uri returns url used for grpc connection
	Uri() string
	// Conn returns instance of grpc connection
	Conn() *grpc.ClientConn
	// Close terminates peer connection
	Close() error
}

Peer is common interface for endorsing peer

type PeerEndorseError

type PeerEndorseError struct {
	Status  int32
	Message string
}

PeerEndorseError describes peer endorse error TODO currently not working cause peer embeds error in string

func (PeerEndorseError) Error

func (e PeerEndorseError) Error() string

type PeerEndorseOpt

type PeerEndorseOpt func(opts *PeerEndorseOpts) error

func WithContext

func WithContext(ctx context.Context) PeerEndorseOpt

type PeerEndorseOpts

type PeerEndorseOpts struct {
	Context context.Context
}

type PeerPool

type PeerPool interface {
	GetPeers() map[string][]Peer
	Add(mspId string, peer Peer, strategy PeerPoolCheckStrategy) error
	Process(ctx context.Context, mspId string, proposal *peer.SignedProposal) (*peer.ProposalResponse, error)
	DeliverClient(mspId string, identity msp.SigningIdentity) (DeliverClient, error)
	Close() error
}

type PeerPoolCheckStrategy

type PeerPoolCheckStrategy func(ctx context.Context, peer Peer, alive chan bool)

func StrategyGRPC

func StrategyGRPC(d time.Duration) PeerPoolCheckStrategy

type PeerProcessor

type PeerProcessor interface {
	// CreateProposal creates signed proposal for presented cc, function and args using signing identity
	CreateProposal(chaincodeName string, identity msp.SigningIdentity, fn string, args [][]byte, transArgs TransArgs) (*peer.SignedProposal, ChaincodeTx, error)
	// Send sends signed proposal to endorsing peers and collects their responses
	Send(ctx context.Context, proposal *peer.SignedProposal, endorsingMspIDs []string, pool PeerPool) ([]*peer.ProposalResponse, error)
}

PeerProcessor is interface for processing transaction

type Public added in v0.7.0

type Public interface {
	EventsDeliverer
	BlocksDeliverer

	// Invoke - shortcut for invoking chanincodes
	// if provided 'identity' is 'nil' default one will be set
	// txWaiterType - param which identify transaction waiting policy.
	// available: 'self'(wait for one peer of endorser org), 'all'(wait for each organization from endorsement policy)
	// default is 'self'(even if you pass empty string)
	Invoke(
		ctx context.Context,
		chanName string,
		ccName string,
		args [][]byte,
		identity msp.SigningIdentity,
		transient map[string][]byte,
		txWaiterType string,
	) (res *peer.Response, chaincodeTx string, err error)

	// Query - shortcut for querying chanincodes
	// if provided 'identity' is 'nil' default one will be set
	Query(
		ctx context.Context,
		chanName string,
		ccName string,
		args [][]byte,
		identity msp.SigningIdentity,
		transient map[string][]byte,
	) (*peer.Response, error)
}

type QSCC

type QSCC interface {
	// GetChainInfo allows getting common info about channel blockchain
	GetChainInfo(ctx context.Context, channelName string) (*common.BlockchainInfo, error)
	// GetBlockByNumber allows getting block by number
	GetBlockByNumber(ctx context.Context, channelName string, blockNumber int64) (*common.Block, error)
	// GetBlockByHash allows getting block by hash
	GetBlockByHash(ctx context.Context, channelName string, blockHash []byte) (*common.Block, error)
	// GetTransactionByID allows getting transaction by id
	GetTransactionByID(ctx context.Context, channelName string, tx ChaincodeTx) (*peer.ProcessedTransaction, error)
	// GetBlockByTxID allows getting block by transaction
	GetBlockByTxID(ctx context.Context, channelName string, tx ChaincodeTx) (*common.Block, error)
}

QSCC describes Query System Chaincode (QSCC)

type SystemCC

type SystemCC interface {
	CSCC() CSCC
	QSCC() QSCC
	LSCC() LSCC
	Lifecycle() Lifecycle
}

SystemCC describes interface to access Fabric System Chaincodes

type TransArgs

type TransArgs map[string][]byte

type TxEvent

type TxEvent struct {
	TxId    ChaincodeTx
	Success bool
	Error   error
}

type TxSubscription

type TxSubscription interface {
	// Result returns result of current tx: success flag, original peer validation code and error if occurred
	Result() (peer.TxValidationCode, error)
	Close() error
}

TxSubscription describes tx subscription

type TxWaiter added in v0.5.0

type TxWaiter interface {
	Wait(ctx context.Context, channel string, txId ChaincodeTx) error
}

TxWaiter is interface for build your custom function for wait of result of tx after endorsement

type UnknownEventTypeError

type UnknownEventTypeError struct {
	Type string
}

func (UnknownEventTypeError) Error

func (e UnknownEventTypeError) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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