github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/valkeystore/encryption/migration.go (about)

     1  package encryption
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"os"
     7  
     8  	"github.com/unicornultrafoundation/go-u2u/accounts/keystore"
     9  	"github.com/unicornultrafoundation/go-u2u/common"
    10  
    11  	"github.com/unicornultrafoundation/go-u2u/native/validatorpk"
    12  )
    13  
    14  type encryptedAccountKeyJSONV3 struct {
    15  	Address string              `json:"address"`
    16  	Crypto  keystore.CryptoJSON `json:"crypto"`
    17  	Id      string              `json:"id"`
    18  	Version int                 `json:"version"`
    19  }
    20  
    21  func MigrateAccountToValidatorKey(acckeypath string, valkeypath string, pubkey validatorpk.PubKey) error {
    22  	acckeyjson, err := ioutil.ReadFile(acckeypath)
    23  	if err != nil {
    24  		return err
    25  	}
    26  	acck := new(encryptedAccountKeyJSONV3)
    27  	if err := json.Unmarshal(acckeyjson, acck); err != nil {
    28  		return err
    29  	}
    30  
    31  	valk := EncryptedKeyJSON{
    32  		Type:      validatorpk.Types.Secp256k1,
    33  		PublicKey: common.Bytes2Hex(pubkey.Raw),
    34  		Crypto:    acck.Crypto,
    35  	}
    36  	valkeyjson, err := json.Marshal(valk)
    37  	if err != nil {
    38  		return err
    39  	}
    40  	tmpName, err := writeTemporaryKeyFile(valkeypath, valkeyjson)
    41  	if err != nil {
    42  		return err
    43  	}
    44  	return os.Rename(tmpName, valkeypath)
    45  }