mirror of
https://github.com/LBRYFoundation/lbcwallet.git
synced 2025-08-23 17:47:29 +00:00
Merge pull request #631 from wpaulino/dropwtxmgr-max-reorg-depth
cmd/dropwtxmgr+waddrmgr: handle constraint when resetting synced state
This commit is contained in:
commit
cd66e82bc8
5 changed files with 30 additions and 6 deletions
|
@ -135,7 +135,17 @@ func mainInt() int {
|
||||||
return waddrmgr.PutSyncedTo(ns, startBlock)
|
return waddrmgr.PutSyncedTo(ns, startBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
return waddrmgr.PutSyncedTo(ns, &birthdayBlock)
|
// We'll need to remove our birthday block first because it
|
||||||
|
// serves as a barrier when updating our state to detect reorgs
|
||||||
|
// due to the wallet not storing all block hashes of the chain.
|
||||||
|
if err := waddrmgr.DeleteBirthdayBlock(ns); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := waddrmgr.PutSyncedTo(ns, &birthdayBlock); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return waddrmgr.PutBirthdayBlock(ns, birthdayBlock)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Failed to drop and re-create namespace:", err)
|
fmt.Println("Failed to drop and re-create namespace:", err)
|
||||||
|
|
|
@ -2060,13 +2060,27 @@ func FetchBirthdayBlock(ns walletdb.ReadBucket) (BlockStamp, error) {
|
||||||
return block, nil
|
return block, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// putBirthdayBlock stores the provided birthday block to the database.
|
// DeleteBirthdayBlock removes the birthday block from the database.
|
||||||
|
//
|
||||||
|
// NOTE: This does not alter the birthday block verification state.
|
||||||
|
func DeleteBirthdayBlock(ns walletdb.ReadWriteBucket) error {
|
||||||
|
bucket := ns.NestedReadWriteBucket(syncBucketName)
|
||||||
|
if err := bucket.Delete(birthdayBlockName); err != nil {
|
||||||
|
str := "failed to remove birthday block"
|
||||||
|
return managerError(ErrDatabase, str, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBirthdayBlock stores the provided birthday block to the database.
|
||||||
//
|
//
|
||||||
// The block is serialized as follows:
|
// The block is serialized as follows:
|
||||||
// [0:4] block height
|
// [0:4] block height
|
||||||
// [4:36] block hash
|
// [4:36] block hash
|
||||||
// [36:44] block timestamp
|
// [36:44] block timestamp
|
||||||
func putBirthdayBlock(ns walletdb.ReadWriteBucket, block BlockStamp) error {
|
//
|
||||||
|
// NOTE: This does not alter the birthday block verification state.
|
||||||
|
func PutBirthdayBlock(ns walletdb.ReadWriteBucket, block BlockStamp) error {
|
||||||
var birthdayBlock [44]byte
|
var birthdayBlock [44]byte
|
||||||
binary.BigEndian.PutUint32(birthdayBlock[:4], uint32(block.Height))
|
binary.BigEndian.PutUint32(birthdayBlock[:4], uint32(block.Height))
|
||||||
copy(birthdayBlock[4:36], block.Hash[:])
|
copy(birthdayBlock[4:36], block.Hash[:])
|
||||||
|
|
|
@ -354,7 +354,7 @@ func populateBirthdayBlock(ns walletdb.ReadWriteBucket) error {
|
||||||
|
|
||||||
// NOTE: The timestamp of the birthday block isn't set since we do not
|
// NOTE: The timestamp of the birthday block isn't set since we do not
|
||||||
// store each block's timestamp.
|
// store each block's timestamp.
|
||||||
return putBirthdayBlock(ns, BlockStamp{
|
return PutBirthdayBlock(ns, BlockStamp{
|
||||||
Height: birthdayHeight,
|
Height: birthdayHeight,
|
||||||
Hash: *birthdayHash,
|
Hash: *birthdayHash,
|
||||||
})
|
})
|
||||||
|
|
|
@ -247,7 +247,7 @@ func TestMigrationResetSyncedBlockToBirthday(t *testing.T) {
|
||||||
Hash: *birthdayHash, Height: birthdayHeight,
|
Hash: *birthdayHash, Height: birthdayHeight,
|
||||||
}
|
}
|
||||||
|
|
||||||
return putBirthdayBlock(ns, birthdayBlock)
|
return PutBirthdayBlock(ns, birthdayBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
afterMigration := func(ns walletdb.ReadWriteBucket) error {
|
afterMigration := func(ns walletdb.ReadWriteBucket) error {
|
||||||
|
|
|
@ -128,7 +128,7 @@ func (m *Manager) BirthdayBlock(ns walletdb.ReadBucket) (BlockStamp, bool, error
|
||||||
func (m *Manager) SetBirthdayBlock(ns walletdb.ReadWriteBucket,
|
func (m *Manager) SetBirthdayBlock(ns walletdb.ReadWriteBucket,
|
||||||
block BlockStamp, verified bool) error {
|
block BlockStamp, verified bool) error {
|
||||||
|
|
||||||
if err := putBirthdayBlock(ns, block); err != nil {
|
if err := PutBirthdayBlock(ns, block); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return putBirthdayBlockVerification(ns, verified)
|
return putBirthdayBlockVerification(ns, verified)
|
||||||
|
|
Loading…
Add table
Reference in a new issue