- package main
-
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "time"
-
- "github.com/tendermint/go-amino"
- "github.com/tendermint/tendermint/crypto/ed25519"
- cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino"
-
- cmn "github.com/tendermint/tendermint/libs/common"
-
- "github.com/tendermint/tendermint/p2p"
- "github.com/tendermint/tendermint/privval"
- "github.com/tendermint/tendermint/types"
- )
-
- type GenesisValidator struct {
- PubKey Data `json:"pub_key"`
- Power int64 `json:"power"`
- Name string `json:"name"`
- }
-
- type Genesis struct {
- GenesisTime time.Time `json:"genesis_time"`
- ChainID string `json:"chain_id"`
- ConsensusParams *types.ConsensusParams `json:"consensus_params,omitempty"`
- Validators []GenesisValidator `json:"validators"`
- AppHash cmn.HexBytes `json:"app_hash"`
- AppState json.RawMessage `json:"app_state,omitempty"`
- AppOptions json.RawMessage `json:"app_options,omitempty"` // DEPRECATED
- }
-
- type NodeKey struct {
- PrivKey Data `json:"priv_key"`
- }
-
- type PrivVal struct {
- Address cmn.HexBytes `json:"address"`
- LastHeight int64 `json:"last_height"`
- LastRound int `json:"last_round"`
- LastStep int8 `json:"last_step"`
- PubKey Data `json:"pub_key"`
- PrivKey Data `json:"priv_key"`
- }
-
- type Data struct {
- Type string `json:"type"`
- Data cmn.HexBytes `json:"data"`
- }
-
- func convertNodeKey(cdc *amino.Codec, jsonBytes []byte) ([]byte, error) {
- var nodeKey NodeKey
- err := json.Unmarshal(jsonBytes, &nodeKey)
- if err != nil {
- return nil, err
- }
-
- var privKey ed25519.PrivKeyEd25519
- copy(privKey[:], nodeKey.PrivKey.Data)
-
- nodeKeyNew := p2p.NodeKey{privKey}
-
- bz, err := cdc.MarshalJSON(nodeKeyNew)
- if err != nil {
- return nil, err
- }
- return bz, nil
- }
-
- func convertPrivVal(cdc *amino.Codec, jsonBytes []byte) ([]byte, error) {
- var privVal PrivVal
- err := json.Unmarshal(jsonBytes, &privVal)
- if err != nil {
- return nil, err
- }
-
- var privKey ed25519.PrivKeyEd25519
- copy(privKey[:], privVal.PrivKey.Data)
-
- var pubKey ed25519.PubKeyEd25519
- copy(pubKey[:], privVal.PubKey.Data)
-
- privValNew := privval.FilePV{
- Address: pubKey.Address(),
- PubKey: pubKey,
- LastHeight: privVal.LastHeight,
- LastRound: privVal.LastRound,
- LastStep: privVal.LastStep,
- PrivKey: privKey,
- }
-
- bz, err := cdc.MarshalJSON(privValNew)
- if err != nil {
- return nil, err
- }
- return bz, nil
- }
-
- func convertGenesis(cdc *amino.Codec, jsonBytes []byte) ([]byte, error) {
- var genesis Genesis
- err := json.Unmarshal(jsonBytes, &genesis)
- if err != nil {
- return nil, err
- }
-
- genesisNew := types.GenesisDoc{
- GenesisTime: genesis.GenesisTime,
- ChainID: genesis.ChainID,
- ConsensusParams: genesis.ConsensusParams,
- // Validators
- AppHash: genesis.AppHash,
- AppState: genesis.AppState,
- }
-
- if genesis.AppOptions != nil {
- genesisNew.AppState = genesis.AppOptions
- }
-
- for _, v := range genesis.Validators {
- var pubKey ed25519.PubKeyEd25519
- copy(pubKey[:], v.PubKey.Data)
- genesisNew.Validators = append(
- genesisNew.Validators,
- types.GenesisValidator{
- PubKey: pubKey,
- Power: v.Power,
- Name: v.Name,
- },
- )
-
- }
-
- bz, err := cdc.MarshalJSON(genesisNew)
- if err != nil {
- return nil, err
- }
- return bz, nil
- }
-
- func main() {
- cdc := amino.NewCodec()
- cryptoAmino.RegisterAmino(cdc)
-
- args := os.Args[1:]
- if len(args) != 1 {
- fmt.Println("Please specify a file to convert")
- os.Exit(1)
- }
-
- filePath := args[0]
- fileName := filepath.Base(filePath)
-
- fileBytes, err := ioutil.ReadFile(filePath)
- if err != nil {
- panic(err)
- }
-
- var bz []byte
-
- switch fileName {
- case "node_key.json":
- bz, err = convertNodeKey(cdc, fileBytes)
- case "priv_validator.json":
- bz, err = convertPrivVal(cdc, fileBytes)
- case "genesis.json":
- bz, err = convertGenesis(cdc, fileBytes)
- default:
- fmt.Println("Expected file name to be in (node_key.json, priv_validator.json, genesis.json)")
- os.Exit(1)
- }
-
- if err != nil {
- panic(err)
- }
- fmt.Println(string(bz))
-
- }
|