From 4db50a443965011b601c3e3cd75c69587c69be30 Mon Sep 17 00:00:00 2001 From: Jamie Holdstock Date: Tue, 1 Jun 2021 14:56:16 +0800 Subject: [PATCH] Helpers for bool<>[]byte conversion. --- database/database.go | 12 ++++++++++++ database/ticket.go | 16 ++++------------ database/ticket_test.go | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/database/database.go b/database/database.go index 63b5511..1e8ee1e 100644 --- a/database/database.go +++ b/database/database.go @@ -105,6 +105,18 @@ func bytesToUint32(bytes []byte) uint32 { return binary.LittleEndian.Uint32(bytes) } +func bytesToBool(bytes []byte) bool { + return bytes[0] == 1 +} + +func boolToBytes(b bool) []byte { + if b { + return []byte{1} + } + + return []byte{0} +} + // CreateNew intializes a new bbolt database with all of the necessary vspd // buckets, and inserts: // - the provided extended pubkey (to be used for deriving fee addresses). diff --git a/database/ticket.go b/database/ticket.go index ab5ef66..1b1b1d0 100644 --- a/database/ticket.go +++ b/database/ticket.go @@ -172,12 +172,7 @@ func putTicketInBucket(bkt *bolt.Bucket, ticket Ticket) error { if err = bkt.Put(feeExpirationK, int64ToBytes(ticket.FeeExpiration)); err != nil { return err } - - confirmed := []byte{0} - if ticket.Confirmed { - confirmed = []byte{1} - } - if err = bkt.Put(confirmedK, confirmed); err != nil { + if err = bkt.Put(confirmedK, boolToBytes(ticket.Confirmed)); err != nil { return err } @@ -205,10 +200,7 @@ func getTicketFromBkt(bkt *bolt.Bucket) (Ticket, error) { ticket.FeeAmount = bytesToInt64(bkt.Get(feeAmountK)) ticket.FeeExpiration = bytesToInt64(bkt.Get(feeExpirationK)) - // TODO is this dodgy? - if bkt.Get(confirmedK)[0] == byte(1) { - ticket.Confirmed = true - } + ticket.Confirmed = bytesToBool(bkt.Get(confirmedK)) ticket.VoteChoices = make(map[string]string) err := json.Unmarshal(bkt.Get(voteChoicesK), &ticket.VoteChoices) @@ -316,7 +308,7 @@ func (vdb *VspDatabase) GetUnconfirmedTickets() ([]Ticket, error) { defer vdb.ticketsMtx.RUnlock() return vdb.filterTickets(func(t *bolt.Bucket) bool { - return t.Get(confirmedK)[0] == byte(0) + return !bytesToBool(t.Get(confirmedK)) }) } @@ -327,7 +319,7 @@ func (vdb *VspDatabase) GetPendingFees() ([]Ticket, error) { defer vdb.ticketsMtx.RUnlock() return vdb.filterTickets(func(t *bolt.Bucket) bool { - return t.Get(confirmedK)[0] == byte(1) && FeeStatus(t.Get(feeTxStatusK)) == FeeReceieved + return bytesToBool(t.Get(confirmedK)) && FeeStatus(t.Get(feeTxStatusK)) == FeeReceieved }) } diff --git a/database/ticket_test.go b/database/ticket_test.go index f5d0ae0..cd9b430 100644 --- a/database/ticket_test.go +++ b/database/ticket_test.go @@ -238,7 +238,7 @@ func testFilterTickets(t *testing.T) { // Only one ticket should be confirmed. retrieved, err = db.filterTickets(func(t *bolt.Bucket) bool { - return t.Get(confirmedK)[0] == byte(1) + return bytesToBool(t.Get(confirmedK)) }) if err != nil { t.Fatalf("error filtering tickets: %v", err)