Generalize database accessor. (#24)

This commit is contained in:
Jamie Holdstock 2020-05-18 15:20:29 +01:00 committed by GitHub
parent 04311000e8
commit e70bb206c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 37 deletions

View File

@ -31,7 +31,7 @@ func TestDatabase(t *testing.T) {
// All sub-tests to run.
tests := map[string]func(*testing.T){
"testInsertFeeAddress": testInsertFeeAddress,
"testGetFeeAddressByTicketHash": testGetFeeAddressByTicketHash,
"testGetTicketByHash": testGetTicketByHash,
"testGetFeesByFeeAddress": testGetFeesByFeeAddress,
"testInsertFeeAddressVotingKey": testInsertFeeAddressVotingKey,
"testGetInactiveFeeAddresses": testGetInactiveFeeAddresses,
@ -72,7 +72,7 @@ func testInsertFeeAddress(t *testing.T) {
}
}
func testGetFeeAddressByTicketHash(t *testing.T) {
func testGetTicketByHash(t *testing.T) {
// Insert a ticket into the database.
err := db.InsertFeeAddress(ticket)
if err != nil {
@ -80,7 +80,7 @@ func testGetFeeAddressByTicketHash(t *testing.T) {
}
// Retrieve ticket from database.
retrieved, err := db.GetFeeAddressByTicketHash(ticket.Hash)
retrieved, err := db.GetTicketByHash(ticket.Hash)
if err != nil {
t.Fatalf("error retrieving ticket by ticket hash: %v", err)
}
@ -99,7 +99,7 @@ func testGetFeeAddressByTicketHash(t *testing.T) {
}
// Error if non-existent ticket requested.
_, err = db.GetFeeAddressByTicketHash("Not a real ticket hash")
_, err = db.GetTicketByHash("Not a real ticket hash")
if err == nil {
t.Fatal("expected an error while retrieving a non-existent ticket")
}
@ -159,7 +159,7 @@ func testInsertFeeAddressVotingKey(t *testing.T) {
}
// Retrieve ticket from database.
retrieved, err := db.GetFeeAddressByTicketHash(ticket.Hash)
retrieved, err := db.GetTicketByHash(ticket.Hash)
if err != nil {
t.Fatalf("error retrieving ticket by ticket hash: %v", err)
}

View File

@ -71,31 +71,6 @@ func (vdb *VspDatabase) InsertFeeAddressVotingKey(address, votingKey string, vot
})
}
func (vdb *VspDatabase) GetCommitmentAddressByTicketHash(txHash string) (string, error) {
var addr string
err := vdb.db.View(func(tx *bolt.Tx) error {
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
c := ticketBkt.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
var ticket Ticket
err := json.Unmarshal(v, &ticket)
if err != nil {
return fmt.Errorf("could not unmarshal ticket: %v", err)
}
if ticket.Hash == txHash {
addr = ticket.CommitmentAddress
return nil
}
}
return fmt.Errorf("transaction %s not found", txHash)
})
return addr, err
}
func (vdb *VspDatabase) GetInactiveFeeAddresses() ([]string, error) {
var addrs []string
err := vdb.db.View(func(tx *bolt.Tx) error {
@ -152,12 +127,12 @@ func (vdb *VspDatabase) GetFeesByFeeAddress(feeAddr string) (*Ticket, error) {
return &tickets[0], nil
}
func (vdb *VspDatabase) GetFeeAddressByTicketHash(ticketHash string) (Ticket, error) {
func (vdb *VspDatabase) GetTicketByHash(hash string) (Ticket, error) {
var ticket Ticket
err := vdb.db.View(func(tx *bolt.Tx) error {
ticketBkt := tx.Bucket(vspBktK).Bucket(ticketBktK)
ticketBytes := ticketBkt.Get([]byte(ticketHash))
ticketBytes := ticketBkt.Get([]byte(hash))
if ticketBytes == nil {
return ErrNoTicketFound
}

View File

@ -88,7 +88,7 @@ func feeAddress(c *gin.Context) {
/*
// TODO - DB - deal with cached responses
ticket, err := db.GetFeeAddressByTicketHash(ticketHashStr)
ticket, err := db.GetTicketByHash(ticketHashStr)
if err != nil && !errors.Is(err, database.ErrNoTicketFound) {
c.AbortWithError(http.StatusInternalServerError, errors.New("database error"))
return
@ -429,7 +429,7 @@ func setVoteBits(c *gin.Context) {
return
}
addr, err := db.GetCommitmentAddressByTicketHash(txHash.String())
ticket, err := db.GetTicketByHash(txHash.String())
if err != nil {
c.AbortWithError(http.StatusBadRequest, errors.New("invalid ticket"))
return
@ -437,7 +437,7 @@ func setVoteBits(c *gin.Context) {
// verify message
message := fmt.Sprintf("vsp v3 setvotebits %d %s %d", setVoteBitsRequest.Timestamp, txHash, voteBits)
err = dcrutil.VerifyMessage(addr, signature, message, cfg.NetParams)
err = dcrutil.VerifyMessage(ticket.CommitmentAddress, signature, message, cfg.NetParams)
if err != nil {
c.AbortWithError(http.StatusBadRequest, errors.New("message did not pass verification"))
return
@ -483,7 +483,7 @@ func ticketStatus(c *gin.Context) {
return
}
addr, err := db.GetCommitmentAddressByTicketHash(ticketHashStr)
ticket, err := db.GetTicketByHash(ticketHashStr)
if err != nil {
c.AbortWithError(http.StatusBadRequest, errors.New("invalid ticket"))
return
@ -491,7 +491,7 @@ func ticketStatus(c *gin.Context) {
// verify message
message := fmt.Sprintf("vsp v3 ticketstatus %d %s", ticketStatusRequest.Timestamp, ticketHashStr)
err = dcrutil.VerifyMessage(addr, signature, message, cfg.NetParams)
err = dcrutil.VerifyMessage(ticket.CommitmentAddress, signature, message, cfg.NetParams)
if err != nil {
c.AbortWithError(http.StatusBadRequest, errors.New("invalid signature"))
return