Generalize database accessor. (#24)
This commit is contained in:
parent
04311000e8
commit
e70bb206c3
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user