go_study/fabric-main/internal/ledgerutil/models/diffrecord.go

61 lines
1.5 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package models
type DiffRecordList struct {
Ledgerid string `json:"ledgerid"`
DiffRecords []*DiffRecord `json:"diffRecords"`
}
// DiffRecord represents a diverging record in json
type DiffRecord struct {
Namespace string `json:"namespace,omitempty"`
Key string `json:"key,omitempty"`
Hashed bool `json:"hashed"`
Record1 *SnapshotRecord `json:"snapshotrecord1"`
Record2 *SnapshotRecord `json:"snapshotrecord2"`
}
// Get later height of two snapshotRecords from a DiffRecord. Used for identifying transactions in identifytxs tool.
// Height of 0, 0 indicates both records are nil so there is no height.
func (d *DiffRecord) GetLaterHeight() (blockNum uint64, txNum uint64) {
r := laterRecord(d.Record1, d.Record2)
if r == nil {
return 0, 0
}
return r.BlockNum, r.TxNum
}
// SnapshotRecord represents the data of a snapshot record in json
type SnapshotRecord struct {
Value string `json:"value"`
BlockNum uint64 `json:"blockNum"`
TxNum uint64 `json:"txNum"`
}
// Returns the snapshotRecord with the later height
func laterRecord(r1 *SnapshotRecord, r2 *SnapshotRecord) *SnapshotRecord {
if r1 == nil {
return r2
}
if r2 == nil {
return r1
}
// Determine later record by block height
if r1.BlockNum > r2.BlockNum {
return r1
}
if r2.BlockNum > r1.BlockNum {
return r2
}
// Record block heights are the same, determine later transaction
if r1.TxNum > r2.TxNum {
return r1
}
return r2
}