api

package
v0.9.2 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2023 License: Apache-2.0 Imports: 16 Imported by: 0

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 MSP`)
	ErrMSPNotFound   = Error(`MSP not found`)
	ErrPeerNotReady  = Error(`peer not ready`)

	DefaultGrpcCheckPeriod = 5 * time.Second
)

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 = proto.NewSeekSpecified(math.MaxUint64)
)

Functions

This section is empty.

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

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,
		channel string,
		identity msp.SigningIdentity,
		blockRange ...int64,
	) (blockChan <-chan *common.Block, closer func() error, err error)
}

type Chaincode

type Chaincode interface {
	// GetPeers returns chaincode 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

	// Subscribe returns subscription on chaincode events
	Subscribe(ctx context.Context) (EventCCSubscription, error)
}

Chaincode describes common operations with chaincode

type ChaincodeDiscoverer

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) (response *peer.Response, txID string, err error)
}

ChaincodeInvokeBuilder describes possibilities how to get invoke results

type ChaincodeInvokeResponse

type ChaincodeInvokeResponse struct {
	TxID    string
	Payload []byte
	Err     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 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

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

ChannelDiscoverer - info about orderers in channel

type ChannelInfo

type ChannelInfo interface {
	GetChainInfo(ctx context.Context, channel string) (*common.BlockchainInfo, error)
}

type ChannelsFetcher

type ChannelsFetcher interface {
	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
	// PeerPool current peer pool
	PeerPool() PeerPool
	// 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 CurrentIdentity

type CurrentIdentity interface {
	// CurrentIdentity identity returns current signing identity used by core
	CurrentIdentity() msp.SigningIdentity
}

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, txID string, 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

type DoOption func(opt *DoOptions) error

func WithEndorsingMpsIDs

func WithEndorsingMpsIDs(mspIDs []string) DoOption

func WithIdentity

func WithIdentity(identity msp.SigningIdentity) DoOption

type DoOptions

type DoOptions struct {
	Identity msp.SigningIdentity
	Pool     PeerPool

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

type Endorser

type Endorser interface {
	// Endorse sends proposal to endorsing peer and returns its result
	Endorse(ctx context.Context, proposal *peer.SignedProposal) (*peer.ProposalResponse, error)
}

type Endpoint added in v0.8.5

type Endpoint struct {
	Host      string
	TlsConfig config.TlsConfig
}

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

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,
		channel string,
		chaincode 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 HostEndpoint

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

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 string
	Code peer.TxValidationCode
}

func (InvalidTxError) Error

func (e InvalidTxError) Error() string

type Invoker

type Invoker interface {
	Querier

	// Invoke - shortcut for invoking chaincodes
	// 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,
		channel string,
		chaincode string,
		args [][]byte,
		identity msp.SigningIdentity,
		transient map[string][]byte,
		txWaiterType string,
	) (res *peer.Response, chaincodeTx string, err error)
}

type Lifecycle

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

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

LocalPeersDiscoverer discover local peers without providing info about channel, chaincode

type MSPPeerPool

type MSPPeerPool interface {
	Peers() []Peer
	FirstReadyPeer() (Peer, error)
	Process(ctx context.Context, proposal *peer.SignedProposal) (*peer.ProposalResponse, error)
	DeliverClient(identity msp.SigningIdentity) (DeliverClient, error)
}

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)
	// GetConfigBlock returns last config block
	GetConfigBlock(ctx context.Context, signer msp.SigningIdentity, channelName string) (*common.Block, error)
}

type Peer

type Peer interface {
	Querier

	Endorser

	ChannelInfo

	ChannelsFetcher

	BlocksDeliverer

	EventsDeliverer

	// 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 PeerPool

type PeerPool interface {
	GetPeers() map[string][]Peer
	GetMSPPeers(mspID string) []Peer
	FirstReadyPeer(mspID string) (Peer, error)
	Add(mspId string, peer Peer, strategy PeerPoolCheckStrategy) error
	EndorseOnMSP(ctx context.Context, mspId string, proposal *peer.SignedProposal) (*peer.ProposalResponse, error)
	EndorseOnMSPs(ctx context.Context, endorsingMspIDs []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 Public

type Public interface {
	EventsDeliverer
	BlocksDeliverer
	Invoker
}

type Querier

type Querier interface {
	CurrentIdentity
	// Query - shortcut for querying chaincodes
	// if provided 'identity' is 'nil' default one will be set
	Query(
		ctx context.Context,
		channel string,
		chaincode string,
		args [][]byte,
		identity msp.SigningIdentity,
		transient map[string][]byte,
	) (*peer.Response, error)
}

type TransArgs

type TransArgs map[string][]byte

type TxEvent

type TxEvent struct {
	TxId    string
	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

type TxWaiter interface {
	Wait(ctx context.Context, channel string, txId string) 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