Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type HistoryQueryExecutor ¶
type HistoryQueryExecutor interface { // GetHistoryForKey retrieves the history of values for a key. // The returned ResultsIterator contains results of type *KeyModification which is defined in protos/ledger/queryresult. // 获取key的变动历史 GetHistoryForKey(namespace string, key string) (commonledger.ResultsIterator, error) }
HistoryQueryExecutor executes the history queries
type PeerLedger ¶
type PeerLedger interface { commonledger.Ledger // 账本的文件存储 // GetTransactionByID retrieves a transaction by id GetTransactionByID(txID string) (*peer.ProcessedTransaction, error) // GetBlockByHash returns a block given it's hash GetBlockByHash(blockHash []byte) (*common.Block, error) // GetBlockByTxID returns a block which contains a transaction GetBlockByTxID(txID string) (*common.Block, error) // GetTxValidationCodeByTxID returns reason code of transaction validation GetTxValidationCodeByTxID(txID string) (peer.TxValidationCode, error) // NewTxSimulator gives handle to a transaction simulator. // A client can obtain more than one 'TxSimulator's for parallel execution. // Any snapshoting/synchronization should be performed at the implementation level if required // 交易模拟器 NewTxSimulator() (TxSimulator, error) // 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) // NewHistoryQueryExecutor gives handle to a history query executor. // A client can obtain more than one 'HistoryQueryExecutor's for parallel execution. // Any synchronization should be performed at the implementation level if required NewHistoryQueryExecutor() (HistoryQueryExecutor, error) // 两个查询接口 //Prune prunes the blocks/transactions that satisfy the given policy Prune(policy commonledger.PrunePolicy) error }
PeerLedger differs from the OrdererLedger in that PeerLedger locally maintain a bitmask that tells apart valid transactions from invalid ones
type PeerLedgerProvider ¶
type PeerLedgerProvider interface { // Create creates a new ledger with the given genesis block. // This function guarantees that the creation of ledger and committing the genesis block would an atomic action // The chain id retrieved from the genesis block is treated as a ledger id // 创建账本 Create(genesisBlock *common.Block) (PeerLedger, error) // Open opens an already created ledger // 打开账本 Open(ledgerID string) (PeerLedger, error) // Exists tells whether the ledger with given id exists // 账本是否存在 Exists(ledgerID string) (bool, error) // List lists the ids of the existing ledgers // peer节点有哪些账本 List() ([]string, error) // Close closes the PeerLedgerProvider Close() }
PeerLedgerProvider provides handle to ledger instances
type QueryExecutor ¶
type QueryExecutor interface { // GetState gets the value for given namespace and key. For a chaincode, the namespace corresponds to the chaincodeId // 获取一个状态 GetState(namespace string, key string) ([]byte, error) // GetStateMultipleKeys gets the values for multiple keys in a single call // 获取多个状态 GetStateMultipleKeys(namespace string, keys []string) ([][]byte, error) // GetStateRangeScanIterator returns an iterator that contains all the key-values between given key ranges. // startKey is included in the results and endKey is excluded. An empty startKey refers to the first available key // and an empty endKey refers to the last available key. For scanning all the keys, both the startKey and the endKey // can be supplied as empty strings. However, a full scan shuold be used judiciously for performance reasons. // The returned ResultsIterator contains results of type *KV which is defined in protos/ledger/queryresult. // 获取状态区间 GetStateRangeScanIterator(namespace string, startKey string, endKey string) (commonledger.ResultsIterator, error) // ExecuteQuery executes the given query and returns an iterator that contains results of type specific to the underlying data store. // Only used for state databases that support query // For a chaincode, the namespace corresponds to the chaincodeId // The returned ResultsIterator contains results of type *KV which is defined in protos/ledger/queryresult. // 模糊查询 ExecuteQuery(namespace, query string) (commonledger.ResultsIterator, error) // Done releases resources occupied by the QueryExecutor Done() }
QueryExecutor executes the queries Get* methods are for supporting KV-based data model. ExecuteQuery method is for supporting a rich datamodel and query support
ExecuteQuery method in the case of a rich data model is expected to support queries on latest state, historical state and on the intersection of state and transactions
type TxSimulator ¶
type TxSimulator interface { QueryExecutor // SetState sets the given value for the given namespace and key. For a chaincode, the namespace corresponds to the chaincodeId SetState(namespace string, key string, value []byte) error // DeleteState deletes the given namespace and key DeleteState(namespace string, key string) error // SetMultipleKeys sets the values for multiple keys in a single call SetStateMultipleKeys(namespace string, kvs map[string][]byte) error // ExecuteUpdate for supporting rich data model (see comments on QueryExecutor above) ExecuteUpdate(query string) error // GetTxSimulationResults encapsulates the results of the transaction simulation. // This should contain enough detail for // - The update in the state that would be caused if the transaction is to be committed // - The environment in which the transaction is executed so as to be able to decide the validity of the environment // (at a later time on a different peer) during committing the transactions // Different ledger implementation (or configurations of a single implementation) may want to represent the above two pieces // of information in different way in order to support different data-models or optimize the information representations. GetTxSimulationResults() ([]byte, error) }
TxSimulator simulates a transaction on a consistent snapshot of the 'as recent state as possible' Set* methods are for supporting KV-based data model. ExecuteUpdate method is for supporting a rich datamodel and query support
type ValidatedLedger ¶
type ValidatedLedger interface { commonledger.Ledger // 指代账本文件存储 }
ValidatedLedger represents the 'final ledger' after filtering out invalid transactions from PeerLedger. Post-v1