shim

package
v0.0.0-...-7dec3c7 Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2024 License: Apache-2.0 Imports: 17 Imported by: 3,467

Documentation

Overview

Package shim provides APIs for the chaincode to access its state variables, transaction context and call other chaincodes.

Index

Constants

View Source
const (
	// OK constant - status code less than 400, endorser will endorse it.
	// OK means init or invoke successfully.
	OK = 200

	// ERRORTHRESHOLD constant - status code greater than or equal to 400 will be considered an error and rejected by endorser.
	ERRORTHRESHOLD = 400

	// ERROR constant - default error value
	ERROR = 500
)
View Source
const (
	StateQueryResult resultType = iota + 1
	HistoryQueryResult
)

TODO: Document constants

Constants ...

Variables

This section is empty.

Functions

func CreateCompositeKey

func CreateCompositeKey(objectType string, attributes []string) (string, error)

CreateCompositeKey ...

func Error

func Error(msg string) pb.Response

Error ...

func GetMSPID

func GetMSPID() (string, error)

GetMSPID returns the local mspid of the peer by checking the CORE_PEER_LOCALMSPID env var and returns an error if the env var is not set

func Start

func Start(cc Chaincode) error

Start chaincodes

func StartInProc

func StartInProc(chaincodename string, stream ClientStream, cc Chaincode) error

StartInProc is an entry point for system chaincodes bootstrap. It is not an API for chaincodes.

func Success

func Success(payload []byte) pb.Response

Success ...

Types

type Chaincode

type Chaincode interface {
	// Init is called during Instantiate transaction after the chaincode container
	// has been established for the first time, allowing the chaincode to
	// initialize its internal data
	Init(stub ChaincodeStubInterface) pb.Response

	// Invoke is called to update or query the ledger in a proposal transaction.
	// Updated state variables are not committed to the ledger until the
	// transaction is committed.
	Invoke(stub ChaincodeStubInterface) pb.Response
}

Chaincode interface must be implemented by all chaincodes. The fabric runs the transactions by calling these functions as specified.

type ChaincodeServer

type ChaincodeServer struct {
	// CCID should match chaincode's package name on peer
	CCID string
	// Addesss is the listen address of the chaincode server
	Address string
	// CC is the chaincode that handles Init and Invoke
	CC Chaincode
	// TLSProps is the TLS properties passed to chaincode server
	TLSProps TLSProperties
	// KaOpts keepalive options, sensible defaults provided if nil
	KaOpts *keepalive.ServerParameters
}

ChaincodeServer encapsulates basic properties needed for a chaincode server

func (*ChaincodeServer) Connect

func (cs *ChaincodeServer) Connect(stream pb.Chaincode_ConnectServer) error

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

func (*ChaincodeServer) Start

func (cs *ChaincodeServer) Start() error

Start the server

type ChaincodeStub

type ChaincodeStub struct {
	TxID      string
	ChannelID string
	// contains filtered or unexported fields
}

ChaincodeStub is an object passed to chaincode for shim side handling of APIs.

func (*ChaincodeStub) CreateCompositeKey

func (s *ChaincodeStub) CreateCompositeKey(objectType string, attributes []string) (string, error)

CreateCompositeKey documentation can be found in interfaces.go

func (*ChaincodeStub) DelPrivateData

func (s *ChaincodeStub) DelPrivateData(collection string, key string) error

DelPrivateData documentation can be found in interfaces.go

func (*ChaincodeStub) DelState

func (s *ChaincodeStub) DelState(key string) error

DelState documentation can be found in interfaces.go

func (*ChaincodeStub) GetArgs

func (s *ChaincodeStub) GetArgs() [][]byte

GetArgs documentation can be found in interfaces.go

func (*ChaincodeStub) GetArgsSlice

func (s *ChaincodeStub) GetArgsSlice() ([]byte, error)

GetArgsSlice documentation can be found in interfaces.go

func (*ChaincodeStub) GetBinding

func (s *ChaincodeStub) GetBinding() ([]byte, error)

GetBinding documentation can be found in interfaces.go

func (*ChaincodeStub) GetChannelID

func (s *ChaincodeStub) GetChannelID() string

GetChannelID returns the channel for the proposal

func (*ChaincodeStub) GetCreator

func (s *ChaincodeStub) GetCreator() ([]byte, error)

GetCreator documentation can be found in interfaces.go

func (*ChaincodeStub) GetDecorations

func (s *ChaincodeStub) GetDecorations() map[string][]byte

GetDecorations ...

func (*ChaincodeStub) GetFunctionAndParameters

func (s *ChaincodeStub) GetFunctionAndParameters() (function string, params []string)

GetFunctionAndParameters documentation can be found in interfaces.go

func (*ChaincodeStub) GetHistoryForKey

func (s *ChaincodeStub) GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error)

GetHistoryForKey documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateData

func (s *ChaincodeStub) GetPrivateData(collection string, key string) ([]byte, error)

GetPrivateData documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateDataByPartialCompositeKey

func (s *ChaincodeStub) GetPrivateDataByPartialCompositeKey(collection, objectType string, attributes []string) (StateQueryIteratorInterface, error)

GetPrivateDataByPartialCompositeKey documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateDataByRange

func (s *ChaincodeStub) GetPrivateDataByRange(collection, startKey, endKey string) (StateQueryIteratorInterface, error)

GetPrivateDataByRange documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateDataHash

func (s *ChaincodeStub) GetPrivateDataHash(collection string, key string) ([]byte, error)

GetPrivateDataHash documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateDataQueryResult

func (s *ChaincodeStub) GetPrivateDataQueryResult(collection, query string) (StateQueryIteratorInterface, error)

GetPrivateDataQueryResult documentation can be found in interfaces.go

func (*ChaincodeStub) GetPrivateDataValidationParameter

func (s *ChaincodeStub) GetPrivateDataValidationParameter(collection, key string) ([]byte, error)

GetPrivateDataValidationParameter documentation can be found in interfaces.go

func (*ChaincodeStub) GetQueryResult

func (s *ChaincodeStub) GetQueryResult(query string) (StateQueryIteratorInterface, error)

GetQueryResult documentation can be found in interfaces.go

func (*ChaincodeStub) GetQueryResultWithPagination

func (s *ChaincodeStub) GetQueryResultWithPagination(query string, pageSize int32,
	bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

GetQueryResultWithPagination ...

func (*ChaincodeStub) GetSignedProposal

func (s *ChaincodeStub) GetSignedProposal() (*pb.SignedProposal, error)

GetSignedProposal documentation can be found in interfaces.go

func (*ChaincodeStub) GetState

func (s *ChaincodeStub) GetState(key string) ([]byte, error)

GetState documentation can be found in interfaces.go

func (*ChaincodeStub) GetStateByPartialCompositeKey

func (s *ChaincodeStub) GetStateByPartialCompositeKey(objectType string, attributes []string) (StateQueryIteratorInterface, error)

GetStateByPartialCompositeKey documentation can be found in interfaces.go

func (*ChaincodeStub) GetStateByPartialCompositeKeyWithPagination

func (s *ChaincodeStub) GetStateByPartialCompositeKeyWithPagination(objectType string, keys []string,
	pageSize int32, bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

GetStateByPartialCompositeKeyWithPagination ...

func (*ChaincodeStub) GetStateByRange

func (s *ChaincodeStub) GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)

GetStateByRange documentation can be found in interfaces.go

func (*ChaincodeStub) GetStateByRangeWithPagination

func (s *ChaincodeStub) GetStateByRangeWithPagination(startKey, endKey string, pageSize int32,
	bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

GetStateByRangeWithPagination ...

func (*ChaincodeStub) GetStateValidationParameter

func (s *ChaincodeStub) GetStateValidationParameter(key string) ([]byte, error)

GetStateValidationParameter documentation can be found in interfaces.go

func (*ChaincodeStub) GetStringArgs

func (s *ChaincodeStub) GetStringArgs() []string

GetStringArgs documentation can be found in interfaces.go

func (*ChaincodeStub) GetTransient

func (s *ChaincodeStub) GetTransient() (map[string][]byte, error)

GetTransient documentation can be found in interfaces.go

func (*ChaincodeStub) GetTxID

func (s *ChaincodeStub) GetTxID() string

GetTxID returns the transaction ID for the proposal

func (*ChaincodeStub) GetTxTimestamp

func (s *ChaincodeStub) GetTxTimestamp() (*timestamp.Timestamp, error)

GetTxTimestamp documentation can be found in interfaces.go

func (*ChaincodeStub) InvokeChaincode

func (s *ChaincodeStub) InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response

InvokeChaincode documentation can be found in interfaces.go

func (*ChaincodeStub) PurgePrivateData

func (s *ChaincodeStub) PurgePrivateData(collection string, key string) error

PurgePrivateData documentation can be found in interfaces.go

func (*ChaincodeStub) PutPrivateData

func (s *ChaincodeStub) PutPrivateData(collection string, key string, value []byte) error

PutPrivateData documentation can be found in interfaces.go

func (*ChaincodeStub) PutState

func (s *ChaincodeStub) PutState(key string, value []byte) error

PutState documentation can be found in interfaces.go

func (*ChaincodeStub) SetEvent

func (s *ChaincodeStub) SetEvent(name string, payload []byte) error

SetEvent documentation can be found in interfaces.go

func (*ChaincodeStub) SetPrivateDataValidationParameter

func (s *ChaincodeStub) SetPrivateDataValidationParameter(collection, key string, ep []byte) error

SetPrivateDataValidationParameter documentation can be found in interfaces.go

func (*ChaincodeStub) SetStateValidationParameter

func (s *ChaincodeStub) SetStateValidationParameter(key string, ep []byte) error

SetStateValidationParameter documentation can be found in interfaces.go

func (*ChaincodeStub) SplitCompositeKey

func (s *ChaincodeStub) SplitCompositeKey(compositeKey string) (string, []string, error)

SplitCompositeKey documentation can be found in interfaces.go

type ChaincodeStubInterface

type ChaincodeStubInterface interface {
	// GetArgs returns the arguments intended for the chaincode Init and Invoke
	// as an array of byte arrays.
	GetArgs() [][]byte

	// GetStringArgs returns the arguments intended for the chaincode Init and
	// Invoke as a string array. Only use GetStringArgs if the client passes
	// arguments intended to be used as strings.
	GetStringArgs() []string

	// GetFunctionAndParameters returns the first argument as the function
	// name and the rest of the arguments as parameters in a string array.
	// Only use GetFunctionAndParameters if the client passes arguments intended
	// to be used as strings.
	GetFunctionAndParameters() (string, []string)

	// GetArgsSlice returns the arguments intended for the chaincode Init and
	// Invoke as a byte array
	GetArgsSlice() ([]byte, error)

	// GetTxID returns the tx_id of the transaction proposal, which is unique per
	// transaction and per client. See
	// https://godoc.org/github.com/hyperledger/fabric-protos-go/common#ChannelHeader
	// for further details.
	GetTxID() string

	// GetChannelID returns the channel the proposal is sent to for chaincode to process.
	// This would be the channel_id of the transaction proposal (see
	// https://godoc.org/github.com/hyperledger/fabric-protos-go/common#ChannelHeader )
	// except where the chaincode is calling another on a different channel.
	GetChannelID() string

	// InvokeChaincode locally calls the specified chaincode `Invoke` using the
	// same transaction context; that is, chaincode calling chaincode doesn't
	// create a new transaction message.
	// If the called chaincode is on the same channel, it simply adds the called
	// chaincode read set and write set to the calling transaction.
	// If the called chaincode is on a different channel,
	// only the Response is returned to the calling chaincode; any PutState calls
	// from the called chaincode will not have any effect on the ledger; that is,
	// the called chaincode on a different channel will not have its read set
	// and write set applied to the transaction. Only the calling chaincode's
	// read set and write set will be applied to the transaction. Effectively
	// the called chaincode on a different channel is a `Query`, which does not
	// participate in state validation checks in subsequent commit phase.
	// If `channel` is empty, the caller's channel is assumed.
	InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response

	// GetState returns the value of the specified `key` from the
	// ledger. Note that GetState doesn't read data from the writeset, which
	// has not been committed to the ledger. In other words, GetState doesn't
	// consider data modified by PutState that has not been committed.
	// If the key does not exist in the state database, (nil, nil) is returned.
	GetState(key string) ([]byte, error)

	// PutState puts the specified `key` and `value` into the transaction's
	// writeset as a data-write proposal. PutState doesn't effect the ledger
	// until the transaction is validated and successfully committed.
	// Simple keys must not be an empty string and must not start with a
	// null character (0x00) in order to avoid range query collisions with
	// composite keys, which internally get prefixed with 0x00 as composite
	// key namespace. In addition, if using CouchDB, keys can only contain
	// valid UTF-8 strings and cannot begin with an underscore ("_").
	PutState(key string, value []byte) error

	// DelState records the specified `key` to be deleted in the writeset of
	// the transaction proposal. The `key` and its value will be deleted from
	// the ledger when the transaction is validated and successfully committed.
	DelState(key string) error

	// SetStateValidationParameter sets the key-level endorsement policy for `key`.
	SetStateValidationParameter(key string, ep []byte) error

	// GetStateValidationParameter retrieves the key-level endorsement policy
	// for `key`. Note that this will introduce a read dependency on `key` in
	// the transaction's readset.
	GetStateValidationParameter(key string) ([]byte, error)

	// GetStateByRange returns a range iterator over a set of keys in the
	// ledger. The iterator can be used to iterate over all keys
	// between the startKey (inclusive) and endKey (exclusive).
	// However, if the number of keys between startKey and endKey is greater than the
	// totalQueryLimit (defined in core.yaml), this iterator cannot be used
	// to fetch all keys (results will be capped by the totalQueryLimit).
	// The keys are returned by the iterator in lexical order. Note
	// that startKey and endKey can be empty string, which implies unbounded range
	// query on start or end.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// The query is re-executed during validation phase to ensure result set
	// has not changed since transaction endorsement (phantom reads detected).
	GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)

	// GetStateByRangeWithPagination returns a range iterator over a set of keys in the
	// ledger. The iterator can be used to fetch keys between the startKey (inclusive)
	// and endKey (exclusive).
	// When an empty string is passed as a value to the bookmark argument, the returned
	// iterator can be used to fetch the first `pageSize` keys between the startKey
	// (inclusive) and endKey (exclusive).
	// When the bookmark is a non-emptry string, the iterator can be used to fetch
	// the first `pageSize` keys between the bookmark (inclusive) and endKey (exclusive).
	// Note that only the bookmark present in a prior page of query results (ResponseMetadata)
	// can be used as a value to the bookmark argument. Otherwise, an empty string must
	// be passed as bookmark.
	// The keys are returned by the iterator in lexical order. Note
	// that startKey and endKey can be empty string, which implies unbounded range
	// query on start or end.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// This call is only supported in a read only transaction.
	GetStateByRangeWithPagination(startKey, endKey string, pageSize int32,
		bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

	// GetStateByPartialCompositeKey queries the state in the ledger based on
	// a given partial composite key. This function returns an iterator
	// which can be used to iterate over all composite keys whose prefix matches
	// the given partial composite key. However, if the number of matching composite
	// keys is greater than the totalQueryLimit (defined in core.yaml), this iterator
	// cannot be used to fetch all matching keys (results will be limited by the totalQueryLimit).
	// The `objectType` and attributes are expected to have only valid utf8 strings and
	// should not contain U+0000 (nil byte) and U+10FFFF (biggest and unallocated code point).
	// See related functions SplitCompositeKey and CreateCompositeKey.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// The query is re-executed during validation phase to ensure result set
	// has not changed since transaction endorsement (phantom reads detected). This function should be used only for
	// a partial composite key. For a full composite key, an iter with empty response
	// would be returned.
	GetStateByPartialCompositeKey(objectType string, keys []string) (StateQueryIteratorInterface, error)

	// GetStateByPartialCompositeKeyWithPagination queries the state in the ledger based on
	// a given partial composite key. This function returns an iterator
	// which can be used to iterate over the composite keys whose
	// prefix matches the given partial composite key.
	// When an empty string is passed as a value to the bookmark argument, the returned
	// iterator can be used to fetch the first `pageSize` composite keys whose prefix
	// matches the given partial composite key.
	// When the bookmark is a non-emptry string, the iterator can be used to fetch
	// the first `pageSize` keys between the bookmark (inclusive) and the last matching
	// composite key.
	// Note that only the bookmark present in a prior page of query result (ResponseMetadata)
	// can be used as a value to the bookmark argument. Otherwise, an empty string must
	// be passed as bookmark.
	// The `objectType` and attributes are expected to have only valid utf8 strings
	// and should not contain U+0000 (nil byte) and U+10FFFF (biggest and unallocated
	// code point). See related functions SplitCompositeKey and CreateCompositeKey.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// This call is only supported in a read only transaction. This function should be used only for
	// a partial composite key. For a full composite key, an iter with empty response
	// would be returned.
	GetStateByPartialCompositeKeyWithPagination(objectType string, keys []string,
		pageSize int32, bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

	// CreateCompositeKey combines the given `attributes` to form a composite
	// key. The objectType and attributes are expected to have only valid utf8
	// strings and should not contain U+0000 (nil byte) and U+10FFFF
	// (biggest and unallocated code point).
	// The resulting composite key can be used as the key in PutState().
	CreateCompositeKey(objectType string, attributes []string) (string, error)

	// SplitCompositeKey splits the specified key into attributes on which the
	// composite key was formed. Composite keys found during range queries
	// or partial composite key queries can therefore be split into their
	// composite parts.
	SplitCompositeKey(compositeKey string) (string, []string, error)

	// GetQueryResult performs a "rich" query against a state database. It is
	// only supported for state databases that support rich query,
	// e.g.CouchDB. The query string is in the native syntax
	// of the underlying state database. An iterator is returned
	// which can be used to iterate over all keys in the query result set.
	// However, if the number of keys in the query result set is greater than the
	// totalQueryLimit (defined in core.yaml), this iterator cannot be used
	// to fetch all keys in the query result set (results will be limited by
	// the totalQueryLimit).
	// The query is NOT re-executed during validation phase, phantom reads are
	// not detected. That is, other committed transactions may have added,
	// updated, or removed keys that impact the result set, and this would not
	// be detected at validation/commit time.  Applications susceptible to this
	// should therefore not use GetQueryResult as part of transactions that update
	// ledger, and should limit use to read-only chaincode operations.
	GetQueryResult(query string) (StateQueryIteratorInterface, error)

	// GetQueryResultWithPagination performs a "rich" query against a state database.
	// It is only supported for state databases that support rich query,
	// e.g., CouchDB. The query string is in the native syntax
	// of the underlying state database. An iterator is returned
	// which can be used to iterate over keys in the query result set.
	// When an empty string is passed as a value to the bookmark argument, the returned
	// iterator can be used to fetch the first `pageSize` of query results.
	// When the bookmark is a non-emptry string, the iterator can be used to fetch
	// the first `pageSize` keys between the bookmark and the last key in the query result.
	// Note that only the bookmark present in a prior page of query results (ResponseMetadata)
	// can be used as a value to the bookmark argument. Otherwise, an empty string
	// must be passed as bookmark.
	// This call is only supported in a read only transaction.
	GetQueryResultWithPagination(query string, pageSize int32,
		bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error)

	// GetHistoryForKey returns a history of key values across time.
	// For each historic key update, the historic value and associated
	// transaction id and timestamp are returned. The timestamp is the
	// timestamp provided by the client in the proposal header.
	// GetHistoryForKey requires peer configuration
	// core.ledger.history.enableHistoryDatabase to be true.
	// The query is NOT re-executed during validation phase, phantom reads are
	// not detected. That is, other committed transactions may have updated
	// the key concurrently, impacting the result set, and this would not be
	// detected at validation/commit time. Applications susceptible to this
	// should therefore not use GetHistoryForKey as part of transactions that
	// update ledger, and should limit use to read-only chaincode operations.
	// Starting in Fabric v2.0, the GetHistoryForKey chaincode API
	// will return results from newest to oldest in terms of ordered transaction
	// height (block height and transaction height within block).
	// This will allow applications to efficiently iterate through the top results
	// to understand recent changes to a key.
	GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error)

	// GetPrivateData returns the value of the specified `key` from the specified
	// `collection`. Note that GetPrivateData doesn't read data from the
	// private writeset, which has not been committed to the `collection`. In
	// other words, GetPrivateData doesn't consider data modified by PutPrivateData
	// that has not been committed.
	GetPrivateData(collection, key string) ([]byte, error)

	// GetPrivateDataHash returns the hash of the value of the specified `key` from the specified
	// `collection`
	GetPrivateDataHash(collection, key string) ([]byte, error)

	// PutPrivateData puts the specified `key` and `value` into the transaction's
	// private writeset. Note that only hash of the private writeset goes into the
	// transaction proposal response (which is sent to the client who issued the
	// transaction) and the actual private writeset gets temporarily stored in a
	// transient store. PutPrivateData doesn't effect the `collection` until the
	// transaction is validated and successfully committed. Simple keys must not
	// be an empty string and must not start with a null character (0x00) in order
	// to avoid range query collisions with composite keys, which internally get
	// prefixed with 0x00 as composite key namespace. In addition, if using
	// CouchDB, keys can only contain valid UTF-8 strings and cannot begin with an
	// an underscore ("_").
	PutPrivateData(collection string, key string, value []byte) error

	// DelPrivateData records the specified `key` to be deleted in the private writeset
	// of the transaction. Note that only hash of the private writeset goes into the
	// transaction proposal response (which is sent to the client who issued the
	// transaction) and the actual private writeset gets temporarily stored in a
	// transient store. The `key` and its value will be deleted from the collection
	// when the transaction is validated and successfully committed.
	DelPrivateData(collection, key string) error

	// PurgePrivateData records the specified `key` to be purged in the private writeset
	// of the transaction. Note that only hash of the private writeset goes into the
	// transaction proposal response (which is sent to the client who issued the
	// transaction) and the actual private writeset gets temporarily stored in a
	// transient store. The `key` and its value will be deleted from the collection
	// when the transaction is validated and successfully committed, and will
	// subsequently be completely removed from the private data store (that maintains
	// the historical versions of private writesets) as a background operation.
	PurgePrivateData(collection, key string) error

	// SetPrivateDataValidationParameter sets the key-level endorsement policy
	// for the private data specified by `key`.
	SetPrivateDataValidationParameter(collection, key string, ep []byte) error

	// GetPrivateDataValidationParameter retrieves the key-level endorsement
	// policy for the private data specified by `key`. Note that this introduces
	// a read dependency on `key` in the transaction's readset.
	GetPrivateDataValidationParameter(collection, key string) ([]byte, error)

	// GetPrivateDataByRange returns a range iterator over a set of keys in a
	// given private collection. The iterator can be used to iterate over all keys
	// between the startKey (inclusive) and endKey (exclusive).
	// The keys are returned by the iterator in lexical order. Note
	// that startKey and endKey can be empty string, which implies unbounded range
	// query on start or end.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// The query is re-executed during validation phase to ensure result set
	// has not changed since transaction endorsement (phantom reads detected).
	GetPrivateDataByRange(collection, startKey, endKey string) (StateQueryIteratorInterface, error)

	// GetPrivateDataByPartialCompositeKey queries the state in a given private
	// collection based on a given partial composite key. This function returns
	// an iterator which can be used to iterate over all composite keys whose prefix
	// matches the given partial composite key. The `objectType` and attributes are
	// expected to have only valid utf8 strings and should not contain
	// U+0000 (nil byte) and U+10FFFF (biggest and unallocated code point).
	// See related functions SplitCompositeKey and CreateCompositeKey.
	// Call Close() on the returned StateQueryIteratorInterface object when done.
	// The query is re-executed during validation phase to ensure result set
	// has not changed since transaction endorsement (phantom reads detected). This function should be used only for
	//a partial composite key. For a full composite key, an iter with empty response
	//would be returned.
	GetPrivateDataByPartialCompositeKey(collection, objectType string, keys []string) (StateQueryIteratorInterface, error)

	// GetPrivateDataQueryResult performs a "rich" query against a given private
	// collection. It is only supported for state databases that support rich query,
	// e.g.CouchDB. The query string is in the native syntax
	// of the underlying state database. An iterator is returned
	// which can be used to iterate (next) over the query result set.
	// The query is NOT re-executed during validation phase, phantom reads are
	// not detected. That is, other committed transactions may have added,
	// updated, or removed keys that impact the result set, and this would not
	// be detected at validation/commit time.  Applications susceptible to this
	// should therefore not use GetPrivateDataQueryResult as part of transactions that update
	// ledger, and should limit use to read-only chaincode operations.
	GetPrivateDataQueryResult(collection, query string) (StateQueryIteratorInterface, error)

	// GetCreator returns `SignatureHeader.Creator` (e.g. an identity)
	// of the `SignedProposal`. This is the identity of the agent (or user)
	// submitting the transaction.
	GetCreator() ([]byte, error)

	// GetTransient returns the `ChaincodeProposalPayload.Transient` field.
	// It is a map that contains data (e.g. cryptographic material)
	// that might be used to implement some form of application-level
	// confidentiality. The contents of this field, as prescribed by
	// `ChaincodeProposalPayload`, are supposed to always
	// be omitted from the transaction and excluded from the ledger.
	GetTransient() (map[string][]byte, error)

	// GetBinding returns the transaction binding, which is used to enforce a
	// link between application data (like those stored in the transient field
	// above) to the proposal itself. This is useful to avoid possible replay
	// attacks.
	GetBinding() ([]byte, error)

	// GetDecorations returns additional data (if applicable) about the proposal
	// that originated from the peer. This data is set by the decorators of the
	// peer, which append or mutate the chaincode input passed to the chaincode.
	GetDecorations() map[string][]byte

	// GetSignedProposal returns the SignedProposal object, which contains all
	// data elements part of a transaction proposal.
	GetSignedProposal() (*pb.SignedProposal, error)

	// GetTxTimestamp returns the timestamp when the transaction was created. This
	// is taken from the transaction ChannelHeader, therefore it will indicate the
	// client's timestamp and will have the same value across all endorsers.
	GetTxTimestamp() (*timestamp.Timestamp, error)

	// SetEvent allows the chaincode to set an event on the response to the
	// proposal to be included as part of a transaction. The event will be
	// available within the transaction in the committed block regardless of the
	// validity of the transaction.
	// Only a single event can be included in a transaction, and must originate
	// from the outer-most invoked chaincode in chaincode-to-chaincode scenarios.
	// The marshaled ChaincodeEvent will be available in the transaction's ChaincodeAction.events field.
	SetEvent(name string, payload []byte) error
}

ChaincodeStubInterface is used by deployable chaincode apps to access and modify their ledgers

type ClientStream

type ClientStream interface {
	PeerChaincodeStream
	CloseSend() error
}

ClientStream supports the (original) chaincode-as-client interaction pattern

type CommonIterator

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

CommonIterator documentation can be found in interfaces.go

func (*CommonIterator) Close

func (iter *CommonIterator) Close() error

Close documentation can be found in interfaces.go

func (*CommonIterator) HasNext

func (iter *CommonIterator) HasNext() bool

HasNext documentation can be found in interfaces.go

type CommonIteratorInterface

type CommonIteratorInterface interface {
	// HasNext returns true if the range query iterator contains additional keys
	// and values.
	HasNext() bool

	// Close closes the iterator. This should be called when done
	// reading from the iterator to free up resources.
	Close() error
}

CommonIteratorInterface allows a chaincode to check whether any more result to be fetched from an iterator and close it when done.

type Handler

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

Handler handler implementation for shim side of chaincode.

type HistoryQueryIterator

type HistoryQueryIterator struct {
	*CommonIterator
}

HistoryQueryIterator documentation can be found in interfaces.go

func (*HistoryQueryIterator) Next

Next ...

type HistoryQueryIteratorInterface

type HistoryQueryIteratorInterface interface {
	// Inherit HasNext() and Close()
	CommonIteratorInterface

	// Next returns the next key and value in the history query iterator.
	Next() (*queryresult.KeyModification, error)
}

HistoryQueryIteratorInterface allows a chaincode to iterate over a set of key/value pairs returned by a history query.

type MockQueryIteratorInterface

type MockQueryIteratorInterface interface {
	StateQueryIteratorInterface
}

MockQueryIteratorInterface allows a chaincode to iterate over a set of key/value pairs returned by range query. TODO: Once the execute query and history query are implemented in MockStub, we need to update this interface

type PeerChaincodeStream

type PeerChaincodeStream interface {
	Send(*pb.ChaincodeMessage) error
	Recv() (*pb.ChaincodeMessage, error)
}

PeerChaincodeStream is the common stream interface for Peer - chaincode communication. Both chaincode-as-server and chaincode-as-client patterns need to support this

type StateQueryIterator

type StateQueryIterator struct {
	*CommonIterator
}

StateQueryIterator documentation can be found in interfaces.go

func (*StateQueryIterator) Next

func (iter *StateQueryIterator) Next() (*queryresult.KV, error)

Next ...

type StateQueryIteratorInterface

type StateQueryIteratorInterface interface {
	// Inherit HasNext() and Close()
	CommonIteratorInterface

	// Next returns the next key and value in the range and execute query iterator.
	Next() (*queryresult.KV, error)
}

StateQueryIteratorInterface allows a chaincode to iterate over a set of key/value pairs returned by range and execute query.

type TLSProperties

type TLSProperties struct {
	//Disabled forces default to be TLS enabled
	Disabled bool
	Key      []byte
	Cert     []byte
	// ClientCACerts set if connecting peer should be verified
	ClientCACerts []byte
}

TLSProperties passed to ChaincodeServer

Directories

Path Synopsis
mock
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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