**Warning: This commit contains a database upgrade.** In order to add future support for retiring xpub keys, the database is upgraded such that the keys are now stored in a dedicated bucket which can hold multiple values rather than storing a single key as individual values in the root bucket. A new ID field is added to distinguish between keys. This ID is added to every ticket record in the database in order to track which pubkey was used for each ticket. A new field named "Retired" has also been added to pubkeys. It is a unix timestamp representing the moment the key was retired, or zero for the currently active key.
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// Copyright (c) 2020-2024 The Decred developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package database
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func testFeeXPub(t *testing.T) {
|
|
// A newly created DB should store the fee xpub it was initialized with.
|
|
retrievedXPub, err := db.FeeXPub()
|
|
if err != nil {
|
|
t.Fatalf("error getting fee xpub: %v", err)
|
|
}
|
|
|
|
if retrievedXPub.Key != feeXPub {
|
|
t.Fatalf("expected fee xpub %v, got %v", feeXPub, retrievedXPub.Key)
|
|
}
|
|
|
|
// The ID, last used index and retirement timestamp should all be 0
|
|
if retrievedXPub.ID != 0 {
|
|
t.Fatalf("expected xpub ID 0, got %d", retrievedXPub.ID)
|
|
}
|
|
if retrievedXPub.LastUsedIdx != 0 {
|
|
t.Fatalf("expected xpub last used 0, got %d", retrievedXPub.LastUsedIdx)
|
|
}
|
|
if retrievedXPub.Retired != 0 {
|
|
t.Fatalf("expected xpub retirement 0, got %d", retrievedXPub.Retired)
|
|
}
|
|
|
|
// Update address index.
|
|
idx := uint32(99)
|
|
err = db.SetLastAddressIndex(idx)
|
|
if err != nil {
|
|
t.Fatalf("error setting address index: %v", err)
|
|
}
|
|
|
|
// Check for updated value.
|
|
retrievedXPub, err = db.FeeXPub()
|
|
if err != nil {
|
|
t.Fatalf("error getting fee xpub: %v", err)
|
|
}
|
|
if retrievedXPub.LastUsedIdx != idx {
|
|
t.Fatalf("expected xpub last used %d, got %d", idx, retrievedXPub.LastUsedIdx)
|
|
}
|
|
|
|
// Key, ID and retirement timestamp should be unchanged.
|
|
if retrievedXPub.Key != feeXPub {
|
|
t.Fatalf("expected fee xpub %v, got %v", feeXPub, retrievedXPub.Key)
|
|
}
|
|
if retrievedXPub.ID != 0 {
|
|
t.Fatalf("expected xpub ID 0, got %d", retrievedXPub.ID)
|
|
}
|
|
if retrievedXPub.Retired != 0 {
|
|
t.Fatalf("expected xpub retirement 0, got %d", retrievedXPub.Retired)
|
|
}
|
|
}
|