[NOD-1508] Implement VirtualUTXOSetIterator (#998)

This commit is contained in:
Ori Newman 2020-11-03 08:38:57 -08:00 committed by GitHub
parent 7f2ef708a6
commit f06dc7ea90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 4 deletions

View File

@ -46,10 +46,6 @@ func (c consensusStateStore) IsStaged() bool {
c.stagedVirtualUTXODiff != nil
}
func (c consensusStateStore) VirtualUTXOSetIterator(dbContext model.DBReader) (model.ReadOnlyUTXOSetIterator, error) {
panic("implement me")
}
func (c consensusStateStore) StageVirtualUTXOSet(virtualUTXOSetIterator model.ReadOnlyUTXOSetIterator) {
panic("implement me")
}

View File

@ -92,3 +92,48 @@ func (c consensusStateStore) HasUTXOByOutpoint(dbContext model.DBReader, outpoin
return dbContext.Has(key)
}
func (c consensusStateStore) VirtualUTXOSetIterator(dbContext model.DBReader) (model.ReadOnlyUTXOSetIterator, error) {
cursor, err := dbContext.Cursor(utxoSetBucket)
if err != nil {
return nil, err
}
return newUTXOSetIterator(cursor), nil
}
type utxoSetIterator struct {
cursor model.DBCursor
}
func newUTXOSetIterator(cursor model.DBCursor) model.ReadOnlyUTXOSetIterator {
return &utxoSetIterator{cursor: cursor}
}
func (u utxoSetIterator) Next() bool {
return u.cursor.Next()
}
func (u utxoSetIterator) Get() (outpoint *externalapi.DomainOutpoint, utxoEntry *externalapi.UTXOEntry) {
key, err := u.cursor.Key()
if err != nil {
panic(err)
}
utxoEntryBytes, err := u.cursor.Value()
if err != nil {
panic(err)
}
outpoint, err = deserializeOutpoint(key.Suffix())
if err != nil {
panic(err)
}
utxoEntry, err = deserializeUTXOEntry(utxoEntryBytes)
if err != nil {
panic(err)
}
return outpoint, utxoEntry
}