database: Don't run unnecessary upgrades.

New databases are now created at the latest version by default, rather
than being version 1 and immediately requiring all upgrades to be
executed.
This commit is contained in:
jholdstock 2024-06-05 12:34:54 +01:00 committed by Jamie Holdstock
parent 1a2b02466c
commit be31d54dac

View File

@ -92,8 +92,10 @@ func (vdb *VspDatabase) WriteHotBackupFile() error {
// - the provided extended pubkey (to be used for deriving fee addresses). // - the provided extended pubkey (to be used for deriving fee addresses).
// - an ed25519 keypair to sign API responses. // - an ed25519 keypair to sign API responses.
// - a secret key to use for initializing a HTTP cookie store. // - a secret key to use for initializing a HTTP cookie store.
// Note: CreateNew should always initialize a database of the most recent
// version, meaning that every change described in upgrade_vX.go files is
// already applied.
func CreateNew(dbFile, feeXPub string) error { func CreateNew(dbFile, feeXPub string) error {
db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second}) db, err := bolt.Open(dbFile, 0600, &bolt.Options{Timeout: 1 * time.Second})
if err != nil { if err != nil {
return fmt.Errorf("unable to open db file: %w", err) return fmt.Errorf("unable to open db file: %w", err)
@ -108,13 +110,13 @@ func CreateNew(dbFile, feeXPub string) error {
return fmt.Errorf("failed to create %s bucket: %w", string(vspBktK), err) return fmt.Errorf("failed to create %s bucket: %w", string(vspBktK), err)
} }
// Initialize with initial database version (1). // Set the database version number to the latest.
err = vspBkt.Put(versionK, uint32ToBytes(initialVersion)) err = vspBkt.Put(versionK, uint32ToBytes(latestVersion))
if err != nil { if err != nil {
return err return err
} }
// Generate ed25519 key // Generate ed25519 key.
_, signKey, err := ed25519.GenerateKey(rand.Reader) _, signKey, err := ed25519.GenerateKey(rand.Reader)
if err != nil { if err != nil {
return fmt.Errorf("failed to generate signing key: %w", err) return fmt.Errorf("failed to generate signing key: %w", err)
@ -135,7 +137,7 @@ func CreateNew(dbFile, feeXPub string) error {
return err return err
} }
// Store fee xpub // Store fee xpub.
err = vspBkt.Put(feeXPubK, []byte(feeXPub)) err = vspBkt.Put(feeXPubK, []byte(feeXPub))
if err != nil { if err != nil {
return err return err
@ -153,6 +155,12 @@ func CreateNew(dbFile, feeXPub string) error {
return fmt.Errorf("failed to create %s bucket: %w", string(voteChangeBktK), err) return fmt.Errorf("failed to create %s bucket: %w", string(voteChangeBktK), err)
} }
// Create alternate signing address bucket (added in upgrade to v4).
_, err = vspBkt.CreateBucket(altSignAddrBktK)
if err != nil {
return fmt.Errorf("failed to create %s bucket: %w", altSignAddrBktK, err)
}
return nil return nil
}) })