Documentation ¶
Index ¶
- func NewKVRead(key string, version *version.Height) *kvrwset.KVRead
- func NewVersion(protoVersion *kvrwset.Version) *version.Height
- type CollHashedRwSet
- type CollPvtRwSet
- type Hash
- type MerkleTreeLevel
- type NsPvtRwSet
- type NsRwSet
- type RWSetBuilder
- func (b *RWSetBuilder) AddToHashedReadSet(ns string, coll string, key string, version *version.Height) error
- func (b *RWSetBuilder) AddToPvtAndHashedWriteSet(ns string, coll string, key string, value []byte) error
- func (b *RWSetBuilder) AddToRangeQuerySet(ns string, rqi *kvrwset.RangeQueryInfo)
- func (b *RWSetBuilder) AddToReadSet(ns string, key string, version *version.Height)
- func (b *RWSetBuilder) AddToWriteSet(ns string, key string, value []byte)
- func (b *RWSetBuilder) GetTxReadWriteSet() *TxRwSet
- func (b *RWSetBuilder) GetTxSimulationResults() (*ledger.TxSimulationResults, error)
- type RangeQueryResultsHelper
- type TxPvtRwSet
- type TxRwSet
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CollHashedRwSet ¶
type CollHashedRwSet struct { CollectionName string HashedRwSet *kvrwset.HashedRWSet PvtRwSetHash []byte }
CollHashedRwSet encapsulates 'kvrwset.HashedRWSet' proto message for a specific collection
type CollPvtRwSet ¶
CollPvtRwSet encapsulates 'kvrwset.KVRWSet' proto message for a private rwset for a specific collection KvRwSet in a private RwSet should not contain range query info
type MerkleTreeLevel ¶
type MerkleTreeLevel uint32
MerkleTreeLevel used for representing a level of the merkle tree
type NsPvtRwSet ¶
type NsPvtRwSet struct { NameSpace string CollPvtRwSets []*CollPvtRwSet }
NsPvtRwSet represents 'rwset.NsPvtReadWriteSet' proto message
type NsRwSet ¶
type NsRwSet struct { NameSpace string KvRwSet *kvrwset.KVRWSet CollHashedRwSets []*CollHashedRwSet }
NsRwSet encapsulates 'kvrwset.KVRWSet' proto message for a specific name space (chaincode)
type RWSetBuilder ¶
type RWSetBuilder struct {
// contains filtered or unexported fields
}
RWSetBuilder helps building the read-write set
func NewRWSetBuilder ¶
func NewRWSetBuilder() *RWSetBuilder
NewRWSetBuilder constructs a new instance of RWSetBuilder
func (*RWSetBuilder) AddToHashedReadSet ¶
func (b *RWSetBuilder) AddToHashedReadSet(ns string, coll string, key string, version *version.Height) error
AddToHashedReadSet adds a key and corresponding version to the hashed read-set
func (*RWSetBuilder) AddToPvtAndHashedWriteSet ¶
func (b *RWSetBuilder) AddToPvtAndHashedWriteSet(ns string, coll string, key string, value []byte) error
AddToPvtAndHashedWriteSet adds a key and value to the private and hashed write-set
func (*RWSetBuilder) AddToRangeQuerySet ¶
func (b *RWSetBuilder) AddToRangeQuerySet(ns string, rqi *kvrwset.RangeQueryInfo)
AddToRangeQuerySet adds a range query info for performing phantom read validation
func (*RWSetBuilder) AddToReadSet ¶
func (b *RWSetBuilder) AddToReadSet(ns string, key string, version *version.Height)
AddToReadSet adds a key and corresponding version to the read-set
func (*RWSetBuilder) AddToWriteSet ¶
func (b *RWSetBuilder) AddToWriteSet(ns string, key string, value []byte)
AddToWriteSet adds a key and value to the write-set
func (*RWSetBuilder) GetTxReadWriteSet ¶
func (b *RWSetBuilder) GetTxReadWriteSet() *TxRwSet
GetTxReadWriteSet returns the read-write set TODO make this function private once txmgr starts using new function `GetTxSimulationResults` introduced here
func (*RWSetBuilder) GetTxSimulationResults ¶
func (b *RWSetBuilder) GetTxSimulationResults() (*ledger.TxSimulationResults, error)
GetTxSimulationResults returns the proto bytes of public rwset (public data + hashes of private data) and the private rwset for the transaction
type RangeQueryResultsHelper ¶
type RangeQueryResultsHelper struct {
// contains filtered or unexported fields
}
RangeQueryResultsHelper helps preparing range query results for phantom items detection during validation. The results are expected to be fed as they are being iterated over. If the `hashingEnabled` is set to true, a merkle tree is built of the hashes over the results. The merkle tree helps reducing the size of the RWSet which otherwise would need to store all the raw KVReads
The mental model of the tree can be described as below: All the results are treated as leaf nodes (level 0) of the tree. Next up level of the tree is built by collecting 'maxDegree + 1' items from the previous level and hashing the entire collection. Further upper levels of the tree are built in similar manner however the only difference is that unlike level-0 (where collection consists of raw KVReads), collection at level 1 and above, consists of the hashes (of the collection of previous level). This is repeated until we reach at a level where we are left with the number of items less than or equals to `maxDegree`. In the last collection, the number of items can be less than 'maxDegree' (except if this is the only collection at the given level).
As a result, if the number of total input results are less than or equals to 'maxDegree', no hashing is performed at all. And the final output of the computation is either the collection of raw results (if less that or equals to 'maxDegree') or a collection of hashes (that or equals to 'maxDegree') at some level in the tree.
`AddResult` function should be invoke to supply the next result and at the end `Done` function should be invoked. The `Done` function does the final processing and returns the final output
func NewRangeQueryResultsHelper ¶
func NewRangeQueryResultsHelper(enableHashing bool, maxDegree uint32) (*RangeQueryResultsHelper, error)
NewRangeQueryResultsHelper constructs a RangeQueryResultsHelper
func (*RangeQueryResultsHelper) AddResult ¶
func (helper *RangeQueryResultsHelper) AddResult(kvRead *kvrwset.KVRead) error
AddResult adds a new query result for processing. Put the result into the list of pending results. If the number of pending results exceeds `maxDegree`, consume the results for incrementally update the merkle tree
func (*RangeQueryResultsHelper) Done ¶
func (helper *RangeQueryResultsHelper) Done() ([]*kvrwset.KVRead, *kvrwset.QueryReadsMerkleSummary, error)
Done processes any pending results if needed This returns the final pending results (i.e., []*KVRead) and hashes of the results (i.e., *MerkleSummary) Only one of these two will be non-nil (except when no results are ever added). `MerkleSummary` will be nil if and only if either `enableHashing` is set to false or the number of total results are less than `maxDegree`
func (*RangeQueryResultsHelper) GetMerkleSummary ¶
func (helper *RangeQueryResultsHelper) GetMerkleSummary() *kvrwset.QueryReadsMerkleSummary
GetMerkleSummary return the current state of the MerkleSummary This intermediate state of the merkle tree helps during validation to detect a mismatch early on. That helps by not requiring to build the complete merkle tree during validation if there is a mismatch in early portion of the result-set.
type TxPvtRwSet ¶
type TxPvtRwSet struct {
NsPvtRwSet []*NsPvtRwSet
}
TxPvtRwSet represents 'rwset.TxPvtReadWriteSet' proto message
func TxPvtRwSetFromProtoMsg ¶
func TxPvtRwSetFromProtoMsg(protoMsg *rwset.TxPvtReadWriteSet) (*TxPvtRwSet, error)
func (*TxPvtRwSet) FromProtoBytes ¶
func (txPvtRwSet *TxPvtRwSet) FromProtoBytes(protoBytes []byte) error
FromProtoBytes deserializes protobytes into 'TxPvtReadWriteSet' proto message and populates 'TxPvtRwSet'
func (*TxPvtRwSet) ToProtoBytes ¶
func (txPvtRwSet *TxPvtRwSet) ToProtoBytes() ([]byte, error)
ToProtoBytes constructs 'TxPvtReadWriteSet' proto message and serializes using protobuf Marshal
type TxRwSet ¶
type TxRwSet struct {
NsRwSets []*NsRwSet
}
TxRwSet acts as a proxy of 'rwset.TxReadWriteSet' proto message and helps constructing Read-write set specifically for KV data model
func TxRwSetFromProtoMsg ¶
func TxRwSetFromProtoMsg(protoMsg *rwset.TxReadWriteSet) (*TxRwSet, error)
func (*TxRwSet) FromProtoBytes ¶
FromProtoBytes deserializes protobytes into TxReadWriteSet proto message and populates 'TxRwSet'
func (*TxRwSet) ToProtoBytes ¶
ToProtoBytes constructs TxReadWriteSet proto message and serializes using protobuf Marshal