github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/legacy/v043/helpers.go (about)

     1  package v043
     2  
     3  import (
     4  	"github.com/Finschia/finschia-sdk/store/prefix"
     5  	sdk "github.com/Finschia/finschia-sdk/types"
     6  	"github.com/Finschia/finschia-sdk/types/address"
     7  	v040auth "github.com/Finschia/finschia-sdk/x/auth/legacy/v040"
     8  )
     9  
    10  // MigratePrefixAddress is a helper function that migrates all keys of format:
    11  // prefix_bytes | address_bytes
    12  // into format:
    13  // prefix_bytes | address_len (1 byte) | address_bytes
    14  func MigratePrefixAddress(store sdk.KVStore, prefixBz []byte) {
    15  	oldStore := prefix.NewStore(store, prefixBz)
    16  
    17  	oldStoreIter := oldStore.Iterator(nil, nil)
    18  	defer oldStoreIter.Close()
    19  
    20  	for ; oldStoreIter.Valid(); oldStoreIter.Next() {
    21  		addr := oldStoreIter.Key()
    22  		newStoreKey := prefixBz
    23  		newStoreKey = append(newStoreKey, address.MustLengthPrefix(addr)...)
    24  
    25  		// Set new key on store. Values don't change.
    26  		store.Set(newStoreKey, oldStoreIter.Value())
    27  		oldStore.Delete(oldStoreIter.Key())
    28  	}
    29  }
    30  
    31  // MigratePrefixAddressBytes is a helper function that migrates all keys of format:
    32  // prefix_bytes | address_bytes | arbitrary_bytes
    33  // into format:
    34  // prefix_bytes | address_len (1 byte) | address_bytes | arbitrary_bytes
    35  func MigratePrefixAddressBytes(store sdk.KVStore, prefixBz []byte) {
    36  	oldStore := prefix.NewStore(store, prefixBz)
    37  
    38  	oldStoreIter := oldStore.Iterator(nil, nil)
    39  	defer oldStoreIter.Close()
    40  
    41  	for ; oldStoreIter.Valid(); oldStoreIter.Next() {
    42  		addr := oldStoreIter.Key()[:v040auth.AddrLen]
    43  		endBz := oldStoreIter.Key()[v040auth.AddrLen:]
    44  		newStoreKey := append(append(prefixBz, address.MustLengthPrefix(addr)...), endBz...)
    45  
    46  		// Set new key on store. Values don't change.
    47  		store.Set(newStoreKey, oldStoreIter.Value())
    48  		oldStore.Delete(oldStoreIter.Key())
    49  	}
    50  }
    51  
    52  // MigratePrefixAddressAddress is a helper function that migrates all keys of format:
    53  // prefix_bytes | address_1_bytes | address_2_bytes
    54  // into format:
    55  // prefix_bytes | address_1_len (1 byte) | address_1_bytes | address_2_len (1 byte) | address_2_bytes
    56  func MigratePrefixAddressAddress(store sdk.KVStore, prefixBz []byte) {
    57  	oldStore := prefix.NewStore(store, prefixBz)
    58  
    59  	oldStoreIter := oldStore.Iterator(nil, nil)
    60  	defer oldStoreIter.Close()
    61  
    62  	for ; oldStoreIter.Valid(); oldStoreIter.Next() {
    63  		addr1 := oldStoreIter.Key()[:v040auth.AddrLen]
    64  		addr2 := oldStoreIter.Key()[v040auth.AddrLen:]
    65  		newStoreKey := append(append(prefixBz, address.MustLengthPrefix(addr1)...), address.MustLengthPrefix(addr2)...)
    66  
    67  		// Set new key on store. Values don't change.
    68  		store.Set(newStoreKey, oldStoreIter.Value())
    69  		oldStore.Delete(oldStoreIter.Key())
    70  	}
    71  }