diff --git a/waddrmgr/migrations.go b/waddrmgr/migrations.go new file mode 100644 index 0000000..8c1a4c9 --- /dev/null +++ b/waddrmgr/migrations.go @@ -0,0 +1,87 @@ +package waddrmgr + +import ( + "github.com/btcsuite/btcwallet/walletdb" + "github.com/btcsuite/btcwallet/walletdb/migration" +) + +// versions is a list of the different database versions. The last entry should +// reflect the latest database state. If the database happens to be at a version +// number lower than the latest, migrations will be performed in order to catch +// it up. +var versions = []migration.Version{ + { + Number: 2, + Migration: upgradeToVersion2, + }, + { + Number: 5, + Migration: upgradeToVersion5, + }, +} + +// getLatestVersion returns the version number of the latest database version. +func getLatestVersion() uint32 { + return versions[len(versions)-1].Number +} + +// MigrationManager is an implementation of the migration.Manager interface that +// will be used to handle migrations for the address manager. It exposes the +// necessary parameters required to successfully perform migrations. +type MigrationManager struct { + ns walletdb.ReadWriteBucket +} + +// A compile-time assertion to ensure that MigrationManager implements the +// migration.Manager interface. +var _ migration.Manager = (*MigrationManager)(nil) + +// NewMigrationManager creates a new migration manager for the address manager. +// The given bucket should reflect the top-level bucket in which all of the +// address manager's data is contained within. +func NewMigrationManager(ns walletdb.ReadWriteBucket) *MigrationManager { + return &MigrationManager{ns: ns} +} + +// Name returns the name of the service we'll be attempting to upgrade. +// +// NOTE: This method is part of the migration.Manager interface. +func (m *MigrationManager) Name() string { + return "wallet address manager" +} + +// Namespace returns the top-level bucket of the service. +// +// NOTE: This method is part of the migration.Manager interface. +func (m *MigrationManager) Namespace() walletdb.ReadWriteBucket { + return m.ns +} + +// CurrentVersion returns the current version of the service's database. +// +// NOTE: This method is part of the migration.Manager interface. +func (m *MigrationManager) CurrentVersion(ns walletdb.ReadBucket) (uint32, error) { + if ns == nil { + ns = m.ns + } + return fetchManagerVersion(ns) +} + +// SetVersion sets the version of the service's database. +// +// NOTE: This method is part of the migration.Manager interface. +func (m *MigrationManager) SetVersion(ns walletdb.ReadWriteBucket, + version uint32) error { + + if ns == nil { + ns = m.ns + } + return putManagerVersion(m.ns, version) +} + +// Versions returns all of the available database versions of the service. +// +// NOTE: This method is part of the migration.Manager interface. +func (m *MigrationManager) Versions() []migration.Version { + return versions +}