From 0d88bc9acef6d5f574b811123d917cab7bb37b68 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 2 Apr 2019 16:23:43 +0200 Subject: [PATCH 01/26] genesis port script --- cmd/gaia/app/genesis_port.go | 106 +++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 cmd/gaia/app/genesis_port.go diff --git a/cmd/gaia/app/genesis_port.go b/cmd/gaia/app/genesis_port.go new file mode 100644 index 000000000000..cb531761ec59 --- /dev/null +++ b/cmd/gaia/app/genesis_port.go @@ -0,0 +1,106 @@ +package app + + +import ( + "time" + "encoding/json" + "fmt" + "io/ioutil" + + amino "github.com/tendermint/go-amino" + "github.com/cosmos/cosmos-sdk/codec" + tmtypes "github.com/tendermint/tendermint/types" +) + +type GenesisFile struct { + GenesisTime time.Time `json:"genesis_time"` + ChainID string `json:"chain_id"` + ConsensusParams tmtypes.ConsensusParams `json:"consensus_params"` + AppHash string `json:"app_hash"` + AppState GenesisState `json:"app_state"` +} + +// NewGenFileFromTmGenDoc unmarshals a tendermint GenesisDoc and creates a GenesisFile from it +func NewGenFileFromTmGenDoc(genDoc tmtypes.GenesisDoc) (GenesisFile, error){ + + var appState GenesisState + err := json.Unmarshal(genDoc.AppHash, &appState) + if err != nil { + return nil, err + } + + return GenesisFile{ + GenesisTime: genDoc.GenesisTime, + ChainID: genDoc.ChainID, + ConsensusParams: genDoc.ConsensusParams, + AppHash: genDoc.AppHash.String() + AppState: appState + }, nil +} + +func main(oldGenFilename, newGenFilename, chainID string, startTime time.Time, indent bool) error { + if ext := filepath.Ext(oldGenFilename); ext != ".json" { + return fmt.Errorf("%s is not a JSON file", oldGenFilename) + } + if ext = filepath.Ext(newGenFilename); ext != ".json" { + newGenFilename = fmt.Sprintf("%s.json", newGenFilename) + } + + oldGenesisDir := filepath.Dir(oldGenFilename) + newGenFilename = filepath.Join(oldGenesisDir, gnewGenFilenamee) + + genDoc, err := tmtypes.GenesisDocFromJSON(genDocPath) + if err != nil { + panic(err) + } + + err = genDoc.ValidateAndComplete() + if err != nil { + panic(err) + } + + genesis, err := NewGenFileFromTmGenDoc(genDoc) + if err != nil { + panic(err) + } + + genesis.ChainID = strings.Trim(chainID) + genesis.GenesisTime = startTime + + // proposal #1 updates + genesis.AppState.MintData.Params.BlocksPerYear = 4855015 + + // proposal #2 updates + genesis.ConsensusParams.Block.BlockMaxGas = 200000 + genesis.ConsensusParams.Block.BlockMaxBytes = 2000000 + + // enable transfers + genesis.AppState.BankData.SendEnabled = true + genesis.AppState.DistrData.WithdrawAddrEnabled = true + + err = GaiaValidateGenesisState(genesis.AppState) + if err != nil { + panic(err) + } + + var genesisJSON []byte + if (indent) { + genesisJSON, err = amino.MarshalJSONIndent(genesis) + } else { + genesisJSON, err = amino.MarshalJSON(genesis) + } + + if err != nil { + panic(err) + } + + err = ioutil.WriteFile(newGenFilename, genesisJSON) + if err != nil { + panic(err) + } + + fmt.Println( + "Successfully wrote genesis file for %s in path: %d", + newGenFilename + ) +} \ No newline at end of file From 9aa7005cf5aea5e94d42226403137b98cf2e042c Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 2 Apr 2019 19:26:39 +0200 Subject: [PATCH 02/26] add command --- cmd/gaia/app/genesis_port.go | 64 +++++++++++------------------------- server/genesis_port.go | 59 +++++++++++++++++++++++++++++++++ server/util.go | 1 + 3 files changed, 80 insertions(+), 44 deletions(-) create mode 100644 server/genesis_port.go diff --git a/cmd/gaia/app/genesis_port.go b/cmd/gaia/app/genesis_port.go index cb531761ec59..c1c48c2578c3 100644 --- a/cmd/gaia/app/genesis_port.go +++ b/cmd/gaia/app/genesis_port.go @@ -7,7 +7,6 @@ import ( "fmt" "io/ioutil" - amino "github.com/tendermint/go-amino" "github.com/cosmos/cosmos-sdk/codec" tmtypes "github.com/tendermint/tendermint/types" ) @@ -33,74 +32,51 @@ func NewGenFileFromTmGenDoc(genDoc tmtypes.GenesisDoc) (GenesisFile, error){ GenesisTime: genDoc.GenesisTime, ChainID: genDoc.ChainID, ConsensusParams: genDoc.ConsensusParams, - AppHash: genDoc.AppHash.String() + AppHash: genDoc.AppHash.String(), AppState: appState }, nil } -func main(oldGenFilename, newGenFilename, chainID string, startTime time.Time, indent bool) error { - if ext := filepath.Ext(oldGenFilename); ext != ".json" { - return fmt.Errorf("%s is not a JSON file", oldGenFilename) - } - if ext = filepath.Ext(newGenFilename); ext != ".json" { - newGenFilename = fmt.Sprintf("%s.json", newGenFilename) - } +func (genFile *GenesisFile) applyLatestChanges() { + // proposal #1 updates + *genFile.AppState.MintData.Params.BlocksPerYear = 4855015 - oldGenesisDir := filepath.Dir(oldGenFilename) - newGenFilename = filepath.Join(oldGenesisDir, gnewGenFilenamee) + // proposal #2 updates + *genFile.ConsensusParams.Block.BlockMaxGas = 200000 + *genFile.ConsensusParams.Block.BlockMaxBytes = 2000000 + + // enable transfers + *genFile.AppState.BankData.SendEnabled = true + *genFile.AppState.DistrData.WithdrawAddrEnabled = true +} +func GetUpdatedGenesis(cdc *codec.Codec, oldGenFilename, chainID string, startTime time.Time) +(GenesisFile, error) { genDoc, err := tmtypes.GenesisDocFromJSON(genDocPath) if err != nil { - panic(err) + return err } err = genDoc.ValidateAndComplete() if err != nil { - panic(err) + return err } genesis, err := NewGenFileFromTmGenDoc(genDoc) if err != nil { - panic(err) + return err } genesis.ChainID = strings.Trim(chainID) genesis.GenesisTime = startTime - // proposal #1 updates - genesis.AppState.MintData.Params.BlocksPerYear = 4855015 - - // proposal #2 updates - genesis.ConsensusParams.Block.BlockMaxGas = 200000 - genesis.ConsensusParams.Block.BlockMaxBytes = 2000000 - - // enable transfers - genesis.AppState.BankData.SendEnabled = true - genesis.AppState.DistrData.WithdrawAddrEnabled = true + genesis.applyLatestChanges() err = GaiaValidateGenesisState(genesis.AppState) if err != nil { - panic(err) - } - - var genesisJSON []byte - if (indent) { - genesisJSON, err = amino.MarshalJSONIndent(genesis) - } else { - genesisJSON, err = amino.MarshalJSON(genesis) - } - - if err != nil { - panic(err) + return err } - err = ioutil.WriteFile(newGenFilename, genesisJSON) - if err != nil { - panic(err) - } + - fmt.Println( - "Successfully wrote genesis file for %s in path: %d", - newGenFilename - ) } \ No newline at end of file diff --git a/server/genesis_port.go b/server/genesis_port.go new file mode 100644 index 000000000000..f57b11aff2c6 --- /dev/null +++ b/server/genesis_port.go @@ -0,0 +1,59 @@ +package server + +// DONTCOVER + +import ( + "os/exec" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + + "github.com/tendermint/tendermint/libs/cli" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// GenesisPortCmd ports old genesis file and update its app state for a software upgrade +func GenesisPortCmd(ctx *Context, cdc *codec.Codec) *cobra.Command { + cmd := &cobra.Command{ + Use: "genesis-port [old-genesis.json] [chain-id] [start-time]", + Short: "Port old genesis file and update its app state for a software upgrade", + Long: strings.TrimSpace(`Port old genesis file and update its app state for a software upgrade. + +$ gaiad genesis-port cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json +`), + Args: cobra.ExactArgs(3) + RunE: func(cmd *cobra.Command, args []string) error { + oldGenFilename := args[0] + newChainID := args[1] + genesisTimeStr := args[2] + + genesisTime, err := sdk.ParseTimeBytes((byte[]{genesisTimeStr})) + if err != nil { + return err + } + + if ext := filepath.Ext(oldGenFilename); ext != ".json" { + return fmt.Errorf("%s is not a JSON file", oldGenFilename) + } + + if _, err = os.Stat(oldGenFilename); err != nil { + return err + } + + genesis, err := GetUpdatedGenesis(cdc, oldGenFilename, newChainID, genesisTime) + if err != nil { + return err + } + + genesisJSON, err := cdc.MarshalJSONIndent(genesis) + if err != nil { + return err + } + fmt.Println(string(genesisJSON)) + return nil + } + } + return cmd +} diff --git a/server/util.go b/server/util.go index 2b81ce817a35..4a82bc76d400 100644 --- a/server/util.go +++ b/server/util.go @@ -152,6 +152,7 @@ func AddCommands( client.LineBreak, tendermintCmd, ExportCmd(ctx, cdc, appExport), + GenesisPortCmd(ctx, cdc), client.LineBreak, version.VersionCmd, ) From e20d778b4ead2b9264e3ee44eb7eb891eabd65c1 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Tue, 2 Apr 2019 23:17:40 +0200 Subject: [PATCH 03/26] various fixes --- cmd/gaia/app/genesis_port.go | 88 +++++++++++++++++++----------------- server/genesis_port.go | 26 ++++++----- 2 files changed, 61 insertions(+), 53 deletions(-) diff --git a/cmd/gaia/app/genesis_port.go b/cmd/gaia/app/genesis_port.go index c1c48c2578c3..62264d1dda20 100644 --- a/cmd/gaia/app/genesis_port.go +++ b/cmd/gaia/app/genesis_port.go @@ -1,82 +1,88 @@ package app - import ( - "time" "encoding/json" - "fmt" - "io/ioutil" + "strings" + "time" "github.com/cosmos/cosmos-sdk/codec" tmtypes "github.com/tendermint/tendermint/types" ) +// GenesisFile defines the Gaia genesis format type GenesisFile struct { - GenesisTime time.Time `json:"genesis_time"` - ChainID string `json:"chain_id"` - ConsensusParams tmtypes.ConsensusParams `json:"consensus_params"` - AppHash string `json:"app_hash"` - AppState GenesisState `json:"app_state"` + GenesisTime time.Time `json:"genesis_time"` + ChainID string `json:"chain_id"` + ConsensusParams *tmtypes.ConsensusParams `json:"consensus_params"` + AppHash string `json:"app_hash"` + AppState GenesisState `json:"app_state"` } // NewGenFileFromTmGenDoc unmarshals a tendermint GenesisDoc and creates a GenesisFile from it -func NewGenFileFromTmGenDoc(genDoc tmtypes.GenesisDoc) (GenesisFile, error){ - +func NewGenFileFromTmGenDoc(genDoc *tmtypes.GenesisDoc) (GenesisFile, error) { + var appState GenesisState err := json.Unmarshal(genDoc.AppHash, &appState) if err != nil { - return nil, err - } - + return GenesisFile{}, err + } + return GenesisFile{ - GenesisTime: genDoc.GenesisTime, - ChainID: genDoc.ChainID, + GenesisTime: genDoc.GenesisTime, + ChainID: genDoc.ChainID, ConsensusParams: genDoc.ConsensusParams, - AppHash: genDoc.AppHash.String(), - AppState: appState + AppHash: genDoc.AppHash.String(), + AppState: appState, }, nil } -func (genFile *GenesisFile) applyLatestChanges() { - // proposal #1 updates - *genFile.AppState.MintData.Params.BlocksPerYear = 4855015 - - // proposal #2 updates - *genFile.ConsensusParams.Block.BlockMaxGas = 200000 - *genFile.ConsensusParams.Block.BlockMaxBytes = 2000000 - - // enable transfers - *genFile.AppState.BankData.SendEnabled = true - *genFile.AppState.DistrData.WithdrawAddrEnabled = true +// applyLatestChanges for software upgrade. Nees to be updated on every state export. +func (genFile GenesisFile) applyLatestChanges() GenesisFile { + // proposal #1 updates + genFile.AppState.MintData.Params.BlocksPerYear = 4855015 + + // proposal #2 updates + genFile.ConsensusParams.Block.MaxGas = 200000 + genFile.ConsensusParams.Block.MaxBytes = 2000000 + + // enable transfers + genFile.AppState.BankData.SendEnabled = true + genFile.AppState.DistrData.WithdrawAddrEnabled = true + + return genFile } -func GetUpdatedGenesis(cdc *codec.Codec, oldGenFilename, chainID string, startTime time.Time) -(GenesisFile, error) { - genDoc, err := tmtypes.GenesisDocFromJSON(genDocPath) +// GetUpdatedGenesis creates a tendermint genesis doc, updates latests release +// changes and validates correctness of the new genesis state +func GetUpdatedGenesis( + cdc *codec.Codec, + oldGenesisPath, chainID string, + startTime time.Time, +) (GenesisFile, error) { + genDoc, err := tmtypes.GenesisDocFromFile(oldGenesisPath) if err != nil { - return err + return GenesisFile{}, err } err = genDoc.ValidateAndComplete() if err != nil { - return err + return GenesisFile{}, err } genesis, err := NewGenFileFromTmGenDoc(genDoc) if err != nil { - return err + return GenesisFile{}, err } - genesis.ChainID = strings.Trim(chainID) + genesis.ChainID = strings.Trim(chainID, " ") genesis.GenesisTime = startTime - genesis.applyLatestChanges() + genesis = genesis.applyLatestChanges() err = GaiaValidateGenesisState(genesis.AppState) if err != nil { - return err + return GenesisFile{}, err } - - -} \ No newline at end of file + return genesis, nil +} diff --git a/server/genesis_port.go b/server/genesis_port.go index f57b11aff2c6..dac93bed616f 100644 --- a/server/genesis_port.go +++ b/server/genesis_port.go @@ -3,13 +3,14 @@ package server // DONTCOVER import ( - "os/exec" - "github.com/spf13/cobra" - "github.com/spf13/viper" - + "fmt" + "os" + "path/filepath" + "strings" - "github.com/tendermint/tendermint/libs/cli" + "github.com/spf13/cobra" + gapp "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -23,17 +24,18 @@ func GenesisPortCmd(ctx *Context, cdc *codec.Codec) *cobra.Command { $ gaiad genesis-port cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json `), - Args: cobra.ExactArgs(3) + Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) error { oldGenFilename := args[0] newChainID := args[1] genesisTimeStr := args[2] - genesisTime, err := sdk.ParseTimeBytes((byte[]{genesisTimeStr})) + bz := []byte(genesisTimeStr) + genesisTime, err := sdk.ParseTimeBytes(bz) if err != nil { return err } - + if ext := filepath.Ext(oldGenFilename); ext != ".json" { return fmt.Errorf("%s is not a JSON file", oldGenFilename) } @@ -41,19 +43,19 @@ $ gaiad genesis-port cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json if _, err = os.Stat(oldGenFilename); err != nil { return err } - - genesis, err := GetUpdatedGenesis(cdc, oldGenFilename, newChainID, genesisTime) + + genesis, err := gapp.GetUpdatedGenesis(cdc, oldGenFilename, newChainID, genesisTime) if err != nil { return err } - genesisJSON, err := cdc.MarshalJSONIndent(genesis) + genesisJSON, err := cdc.MarshalJSONIndent(genesis, "", " ") if err != nil { return err } fmt.Println(string(genesisJSON)) return nil - } + }, } return cmd } From 4c549f23a315fecf1875577622b13a2def18f7da Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 11:39:56 +0200 Subject: [PATCH 04/26] works --- cmd/gaia/app/genesis_port.go | 17 +++++++---------- server/{genesis_port.go => port.go} | 11 +++++------ 2 files changed, 12 insertions(+), 16 deletions(-) rename server/{genesis_port.go => port.go} (83%) diff --git a/cmd/gaia/app/genesis_port.go b/cmd/gaia/app/genesis_port.go index 62264d1dda20..ffb641b885ba 100644 --- a/cmd/gaia/app/genesis_port.go +++ b/cmd/gaia/app/genesis_port.go @@ -1,9 +1,7 @@ package app import ( - "encoding/json" "strings" - "time" "github.com/cosmos/cosmos-sdk/codec" tmtypes "github.com/tendermint/tendermint/types" @@ -11,7 +9,7 @@ import ( // GenesisFile defines the Gaia genesis format type GenesisFile struct { - GenesisTime time.Time `json:"genesis_time"` + GenesisTime string `json:"genesis_time"` ChainID string `json:"chain_id"` ConsensusParams *tmtypes.ConsensusParams `json:"consensus_params"` AppHash string `json:"app_hash"` @@ -19,16 +17,16 @@ type GenesisFile struct { } // NewGenFileFromTmGenDoc unmarshals a tendermint GenesisDoc and creates a GenesisFile from it -func NewGenFileFromTmGenDoc(genDoc *tmtypes.GenesisDoc) (GenesisFile, error) { +func NewGenFileFromTmGenDoc(cdc *codec.Codec, genDoc *tmtypes.GenesisDoc) (GenesisFile, error) { var appState GenesisState - err := json.Unmarshal(genDoc.AppHash, &appState) + err := cdc.UnmarshalJSON(genDoc.AppState, &appState) if err != nil { return GenesisFile{}, err } return GenesisFile{ - GenesisTime: genDoc.GenesisTime, + GenesisTime: genDoc.GenesisTime.String(), ChainID: genDoc.ChainID, ConsensusParams: genDoc.ConsensusParams, AppHash: genDoc.AppHash.String(), @@ -55,10 +53,9 @@ func (genFile GenesisFile) applyLatestChanges() GenesisFile { // GetUpdatedGenesis creates a tendermint genesis doc, updates latests release // changes and validates correctness of the new genesis state func GetUpdatedGenesis( - cdc *codec.Codec, - oldGenesisPath, chainID string, - startTime time.Time, + cdc *codec.Codec, oldGenesisPath, chainID, startTime string, ) (GenesisFile, error) { + genDoc, err := tmtypes.GenesisDocFromFile(oldGenesisPath) if err != nil { return GenesisFile{}, err @@ -69,7 +66,7 @@ func GetUpdatedGenesis( return GenesisFile{}, err } - genesis, err := NewGenFileFromTmGenDoc(genDoc) + genesis, err := NewGenFileFromTmGenDoc(cdc, genDoc) if err != nil { return GenesisFile{}, err } diff --git a/server/genesis_port.go b/server/port.go similarity index 83% rename from server/genesis_port.go rename to server/port.go index dac93bed616f..9eeaa2ab968c 100644 --- a/server/genesis_port.go +++ b/server/port.go @@ -7,12 +7,12 @@ import ( "os" "path/filepath" "strings" + "time" "github.com/spf13/cobra" gapp "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" ) // GenesisPortCmd ports old genesis file and update its app state for a software upgrade @@ -20,18 +20,17 @@ func GenesisPortCmd(ctx *Context, cdc *codec.Codec) *cobra.Command { cmd := &cobra.Command{ Use: "genesis-port [old-genesis.json] [chain-id] [start-time]", Short: "Port old genesis file and update its app state for a software upgrade", - Long: strings.TrimSpace(`Port old genesis file and update its app state for a software upgrade. + Long: strings.TrimSpace(`Port old genesis file and update its app state for a software upgrade: -$ gaiad genesis-port cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json +$ gaiad genesis-port genesis.json cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json `), Args: cobra.ExactArgs(3), RunE: func(cmd *cobra.Command, args []string) error { oldGenFilename := args[0] newChainID := args[1] - genesisTimeStr := args[2] + genesisTime := args[2] - bz := []byte(genesisTimeStr) - genesisTime, err := sdk.ParseTimeBytes(bz) + _, err := time.Parse(time.RFC3339, genesisTime) if err != nil { return err } From 62bca4db05c80253a75329574d8128650d9968d1 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 18:29:01 +0200 Subject: [PATCH 05/26] cleanup and move to script --- cmd/gaia/app/genesis_port.go | 85 ------------------------------ scripts/genesis/export.go | 93 +++++++++++++++++++++++++++++++++ scripts/genesis/export_test.go | 72 +++++++++++++++++++++++++ scripts/genesis/v0_33_0/main.go | 51 ++++++++++++++++++ server/port.go | 60 --------------------- server/util.go | 1 - 6 files changed, 216 insertions(+), 146 deletions(-) delete mode 100644 cmd/gaia/app/genesis_port.go create mode 100644 scripts/genesis/export.go create mode 100644 scripts/genesis/export_test.go create mode 100644 scripts/genesis/v0_33_0/main.go delete mode 100644 server/port.go diff --git a/cmd/gaia/app/genesis_port.go b/cmd/gaia/app/genesis_port.go deleted file mode 100644 index ffb641b885ba..000000000000 --- a/cmd/gaia/app/genesis_port.go +++ /dev/null @@ -1,85 +0,0 @@ -package app - -import ( - "strings" - - "github.com/cosmos/cosmos-sdk/codec" - tmtypes "github.com/tendermint/tendermint/types" -) - -// GenesisFile defines the Gaia genesis format -type GenesisFile struct { - GenesisTime string `json:"genesis_time"` - ChainID string `json:"chain_id"` - ConsensusParams *tmtypes.ConsensusParams `json:"consensus_params"` - AppHash string `json:"app_hash"` - AppState GenesisState `json:"app_state"` -} - -// NewGenFileFromTmGenDoc unmarshals a tendermint GenesisDoc and creates a GenesisFile from it -func NewGenFileFromTmGenDoc(cdc *codec.Codec, genDoc *tmtypes.GenesisDoc) (GenesisFile, error) { - - var appState GenesisState - err := cdc.UnmarshalJSON(genDoc.AppState, &appState) - if err != nil { - return GenesisFile{}, err - } - - return GenesisFile{ - GenesisTime: genDoc.GenesisTime.String(), - ChainID: genDoc.ChainID, - ConsensusParams: genDoc.ConsensusParams, - AppHash: genDoc.AppHash.String(), - AppState: appState, - }, nil -} - -// applyLatestChanges for software upgrade. Nees to be updated on every state export. -func (genFile GenesisFile) applyLatestChanges() GenesisFile { - // proposal #1 updates - genFile.AppState.MintData.Params.BlocksPerYear = 4855015 - - // proposal #2 updates - genFile.ConsensusParams.Block.MaxGas = 200000 - genFile.ConsensusParams.Block.MaxBytes = 2000000 - - // enable transfers - genFile.AppState.BankData.SendEnabled = true - genFile.AppState.DistrData.WithdrawAddrEnabled = true - - return genFile -} - -// GetUpdatedGenesis creates a tendermint genesis doc, updates latests release -// changes and validates correctness of the new genesis state -func GetUpdatedGenesis( - cdc *codec.Codec, oldGenesisPath, chainID, startTime string, -) (GenesisFile, error) { - - genDoc, err := tmtypes.GenesisDocFromFile(oldGenesisPath) - if err != nil { - return GenesisFile{}, err - } - - err = genDoc.ValidateAndComplete() - if err != nil { - return GenesisFile{}, err - } - - genesis, err := NewGenFileFromTmGenDoc(cdc, genDoc) - if err != nil { - return GenesisFile{}, err - } - - genesis.ChainID = strings.Trim(chainID, " ") - genesis.GenesisTime = startTime - - genesis = genesis.applyLatestChanges() - - err = GaiaValidateGenesisState(genesis.AppState) - if err != nil { - return GenesisFile{}, err - } - - return genesis, nil -} diff --git a/scripts/genesis/export.go b/scripts/genesis/export.go new file mode 100644 index 000000000000..d69d34136867 --- /dev/null +++ b/scripts/genesis/export.go @@ -0,0 +1,93 @@ +package export + +import ( + "fmt" + "os" + "path/filepath" + "strings" + "time" + + app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" + "github.com/cosmos/cosmos-sdk/codec" + tmtypes "github.com/tendermint/tendermint/types" +) + +// GenesisFile defines the Gaia genesis format +type GenesisFile struct { + GenesisTime string `json:"genesis_time"` + ChainID string `json:"chain_id"` + ConsensusParams *tmtypes.ConsensusParams `json:"consensus_params"` + AppHash string `json:"app_hash"` + AppState app.GenesisState `json:"app_state"` +} + +// NewGenesisFile builds a default GenesisDoc and creates a GenesisFile from it +func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { + + genDoc, err := importGenesis(path) + if err != nil { + return GenesisFile{}, err + } + + var appState app.GenesisState + if genDoc.AppState == nil { + appState = app.GenesisState{} + } else { + if err = cdc.UnmarshalJSON(genDoc.AppState, &appState); err != nil { + return GenesisFile{}, err + } + } + + return GenesisFile{ + GenesisTime: genDoc.GenesisTime.String(), + ChainID: genDoc.ChainID, + ConsensusParams: genDoc.ConsensusParams, + AppHash: genDoc.AppHash.String(), + AppState: appState, + }, nil +} + +// ValidateInputs validates each of the parameters used by +func ValidateInputs(path, chainID, genesisTime string) error { + if chainID = strings.Trim(chainID, " "); chainID == "" { + return fmt.Errorf("chain-d cannot be blank") + } + _, err := time.Parse(time.RFC3339, genesisTime) + if err != nil { + return err + } + + if ext := filepath.Ext(path); ext != ".json" { + return fmt.Errorf("%s is not a JSON file", path) + } + + if _, err = os.Stat(path); err != nil { + return err + } + return nil +} + +// importGenesis imports genesis from JSON and completes missing fields +func importGenesis(path string) (genDoc *tmtypes.GenesisDoc, err error) { + genDoc, err = tmtypes.GenesisDocFromFile(path) + if err != nil { + return + } + + err = genDoc.ValidateAndComplete() + if err != nil { + return + } + return +} + +func defaultGenesisDoc(chainID string) (tmtypes.GenesisDoc, error) { + genDoc := tmtypes.GenesisDoc{ + ChainID: chainID, + } + err := (&genDoc).ValidateAndComplete() + if err != nil { + return genDoc, err + } + return genDoc, nil +} diff --git a/scripts/genesis/export_test.go b/scripts/genesis/export_test.go new file mode 100644 index 000000000000..6da058571650 --- /dev/null +++ b/scripts/genesis/export_test.go @@ -0,0 +1,72 @@ +package export + +import ( + "encoding/json" + "io/ioutil" + "os" + "testing" + + app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" + "github.com/stretchr/testify/require" + tmtypes "github.com/tendermint/tendermint/types" +) + +var ( + path = "./genesis.json" + chainID = "cosmos-zone" + genesisTime = "2019-02-11T12:00:00Z" +) + +func TestNewGenesisFile(t *testing.T) { + cdc := app.MakeCodec() + genDoc, err := defaultGenesisDoc(chainID) + require.NoError(t, err) + + output, err := cdc.MarshalJSONIndent(genDoc, "", " ") + require.NoError(t, err) + + err = ioutil.WriteFile(path, output, 0644) + require.NoError(t, err) + + genesisFile, err := NewGenesisFile(cdc, path) + require.NoError(t, err) + require.NotEqual(t, GenesisFile{}, genesisFile) + os.Remove(path) +} + +func TestDefaultGenesisDoc(t *testing.T) { + expectedGenDoc := tmtypes.GenesisDoc{ChainID: chainID} + genDoc, err := defaultGenesisDoc(chainID) + require.NoError(t, err) + require.NotEqual(t, expectedGenDoc, genDoc) + + genDoc, err = defaultGenesisDoc("") + require.Error(t, err) +} + +func TestImportGenesis(t *testing.T) { + genesis := tmtypes.GenesisDoc{ChainID: chainID} + + output, err := json.Marshal(genesis) + require.NoError(t, err) + + err = ioutil.WriteFile(path, output, 0644) + require.NoError(t, err) + + genDoc, err := importGenesis(path) + require.NoError(t, err) + require.NotEqual(t, genesis, genDoc) + os.Remove(path) + + // should fail with invalid genesis + genesis = tmtypes.GenesisDoc{} + output, err = json.Marshal(genesis) + require.NoError(t, err) + + err = ioutil.WriteFile(path, output, 0644) + require.NoError(t, err) + + genDoc, err = importGenesis(path) + require.Error(t, err) + os.Remove(path) +} diff --git a/scripts/genesis/v0_33_0/main.go b/scripts/genesis/v0_33_0/main.go new file mode 100644 index 000000000000..18bd6c1c88e3 --- /dev/null +++ b/scripts/genesis/v0_33_0/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "strings" + app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" + "github.com/cosmos/cosmos-sdk/scripts/genesis/export" +) + +func main() { + cdc := app.MakeCodec() + + args := flags.Args() + pathToGenesis := args[0] + chainID := args[1] + genesisTime := args[2] + + err := export.ValidateInputs(pathToGenesis, chainID, genesisTime) + if err != nil { + panic(err) + } + + genesis, err := export.NewGenesisFile(cdc, pathToGenesis) + if err != nil { + panic(err) + } + + genesis.ChainID = strings.Trim(chainID, " ") + genesis.GenesisTime = startTime + + // proposal #1 updates + genesis.AppState.MintData.Params.BlocksPerYear = 4855015 + + // proposal #2 updates + genesis.ConsensusParams.Block.MaxGas = 200000 + genesis.ConsensusParams.Block.MaxBytes = 2000000 + + // enable transfers + genesis.AppState.BankData.SendEnabled = true + genesis.AppState.DistrData.WithdrawAddrEnabled = true + + err = app.GaiaValidateGenesisState(genesis.AppState) + if err != nil { + return panic(err) + } + + genesisJSON, err := cdc.MarshalJSONIndent(genesis, "", " ") + if err != nil { + return panic(err) + } + fmt.Println(string(genesisJSON)) +} diff --git a/server/port.go b/server/port.go deleted file mode 100644 index 9eeaa2ab968c..000000000000 --- a/server/port.go +++ /dev/null @@ -1,60 +0,0 @@ -package server - -// DONTCOVER - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "github.com/spf13/cobra" - - gapp "github.com/cosmos/cosmos-sdk/cmd/gaia/app" - "github.com/cosmos/cosmos-sdk/codec" -) - -// GenesisPortCmd ports old genesis file and update its app state for a software upgrade -func GenesisPortCmd(ctx *Context, cdc *codec.Codec) *cobra.Command { - cmd := &cobra.Command{ - Use: "genesis-port [old-genesis.json] [chain-id] [start-time]", - Short: "Port old genesis file and update its app state for a software upgrade", - Long: strings.TrimSpace(`Port old genesis file and update its app state for a software upgrade: - -$ gaiad genesis-port genesis.json cosmoshub-1 2019-02-11T12:00:00Z > new_genesis.json -`), - Args: cobra.ExactArgs(3), - RunE: func(cmd *cobra.Command, args []string) error { - oldGenFilename := args[0] - newChainID := args[1] - genesisTime := args[2] - - _, err := time.Parse(time.RFC3339, genesisTime) - if err != nil { - return err - } - - if ext := filepath.Ext(oldGenFilename); ext != ".json" { - return fmt.Errorf("%s is not a JSON file", oldGenFilename) - } - - if _, err = os.Stat(oldGenFilename); err != nil { - return err - } - - genesis, err := gapp.GetUpdatedGenesis(cdc, oldGenFilename, newChainID, genesisTime) - if err != nil { - return err - } - - genesisJSON, err := cdc.MarshalJSONIndent(genesis, "", " ") - if err != nil { - return err - } - fmt.Println(string(genesisJSON)) - return nil - }, - } - return cmd -} diff --git a/server/util.go b/server/util.go index 4a82bc76d400..2b81ce817a35 100644 --- a/server/util.go +++ b/server/util.go @@ -152,7 +152,6 @@ func AddCommands( client.LineBreak, tendermintCmd, ExportCmd(ctx, cdc, appExport), - GenesisPortCmd(ctx, cdc), client.LineBreak, version.VersionCmd, ) From f6887b070b6d60c720e478a28ccbf13b9cbaacc1 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 18:29:17 +0200 Subject: [PATCH 06/26] typo --- scripts/genesis/export.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/genesis/export.go b/scripts/genesis/export.go index d69d34136867..a9f57d2c0a21 100644 --- a/scripts/genesis/export.go +++ b/scripts/genesis/export.go @@ -50,7 +50,7 @@ func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { // ValidateInputs validates each of the parameters used by func ValidateInputs(path, chainID, genesisTime string) error { if chainID = strings.Trim(chainID, " "); chainID == "" { - return fmt.Errorf("chain-d cannot be blank") + return fmt.Errorf("chain-id cannot be blank") } _, err := time.Parse(time.RFC3339, genesisTime) if err != nil { From 8915f47a93265fa0f00236b7862a81e73eb99f1e Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 18:36:07 +0200 Subject: [PATCH 07/26] check args --- scripts/genesis/v0_33_0/main.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/genesis/v0_33_0/main.go b/scripts/genesis/v0_33_0/main.go index 18bd6c1c88e3..0f035f7e9ad5 100644 --- a/scripts/genesis/v0_33_0/main.go +++ b/scripts/genesis/v0_33_0/main.go @@ -10,6 +10,10 @@ func main() { cdc := app.MakeCodec() args := flags.Args() + if len(args) != 3 { + panic(fmt.Errorf("please provide path, chain-id and genesis time")) + } + pathToGenesis := args[0] chainID := args[1] genesisTime := args[2] From 1dab73332a6f0ce9246e46e857005a2ed2022ecc Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 19:24:19 +0200 Subject: [PATCH 08/26] rename files and fix scripts --- scripts/{genesis => export}/export.go | 0 scripts/{genesis => export}/export_test.go | 0 scripts/{genesis => export}/v0_33_0/main.go | 15 +++++++++------ 3 files changed, 9 insertions(+), 6 deletions(-) rename scripts/{genesis => export}/export.go (100%) rename scripts/{genesis => export}/export_test.go (100%) rename scripts/{genesis => export}/v0_33_0/main.go (87%) diff --git a/scripts/genesis/export.go b/scripts/export/export.go similarity index 100% rename from scripts/genesis/export.go rename to scripts/export/export.go diff --git a/scripts/genesis/export_test.go b/scripts/export/export_test.go similarity index 100% rename from scripts/genesis/export_test.go rename to scripts/export/export_test.go diff --git a/scripts/genesis/v0_33_0/main.go b/scripts/export/v0_33_0/main.go similarity index 87% rename from scripts/genesis/v0_33_0/main.go rename to scripts/export/v0_33_0/main.go index 0f035f7e9ad5..5d8653f6fd73 100644 --- a/scripts/genesis/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -1,19 +1,22 @@ package main import ( + "fmt" + "os" "strings" + app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" - "github.com/cosmos/cosmos-sdk/scripts/genesis/export" + "github.com/cosmos/cosmos-sdk/scripts/export" ) func main() { cdc := app.MakeCodec() - args := flags.Args() + args := os.Args[1:] if len(args) != 3 { panic(fmt.Errorf("please provide path, chain-id and genesis time")) } - + pathToGenesis := args[0] chainID := args[1] genesisTime := args[2] @@ -29,7 +32,7 @@ func main() { } genesis.ChainID = strings.Trim(chainID, " ") - genesis.GenesisTime = startTime + genesis.GenesisTime = genesisTime // proposal #1 updates genesis.AppState.MintData.Params.BlocksPerYear = 4855015 @@ -44,12 +47,12 @@ func main() { err = app.GaiaValidateGenesisState(genesis.AppState) if err != nil { - return panic(err) + panic(err) } genesisJSON, err := cdc.MarshalJSONIndent(genesis, "", " ") if err != nil { - return panic(err) + panic(err) } fmt.Println(string(genesisJSON)) } From ddec5994fb91b6e2bf35d84cacab7bb9e8711bfe Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Wed, 3 Apr 2019 19:32:15 +0200 Subject: [PATCH 09/26] command to run --- scripts/export/v0_33_0/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go index 5d8653f6fd73..5ae642d50236 100644 --- a/scripts/export/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -9,6 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/scripts/export" ) +// Command: go run main.go [path_to_old_genesis.json] [chain-id] [genesis-start-time] > [path_to_new_genesis.json] func main() { cdc := app.MakeCodec() From 4d726bc9a1eba06245c21259ede99dd01bd4aeb1 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 00:00:31 +0200 Subject: [PATCH 10/26] address comments from review --- scripts/export/export.go | 19 ++----------------- scripts/export/export_test.go | 11 +++++++++++ scripts/export/v0_33_0/main.go | 18 +++++++++--------- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/scripts/export/export.go b/scripts/export/export.go index a9f57d2c0a21..c1fa913e70aa 100644 --- a/scripts/export/export.go +++ b/scripts/export/export.go @@ -4,7 +4,6 @@ import ( "fmt" "os" "path/filepath" - "strings" "time" app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" @@ -47,11 +46,8 @@ func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { }, nil } -// ValidateInputs validates each of the parameters used by -func ValidateInputs(path, chainID, genesisTime string) error { - if chainID = strings.Trim(chainID, " "); chainID == "" { - return fmt.Errorf("chain-id cannot be blank") - } +// validateBasic validates each of the arguments passed to the script +func ValidateBasic(path, genesisTime string) error { _, err := time.Parse(time.RFC3339, genesisTime) if err != nil { return err @@ -80,14 +76,3 @@ func importGenesis(path string) (genDoc *tmtypes.GenesisDoc, err error) { } return } - -func defaultGenesisDoc(chainID string) (tmtypes.GenesisDoc, error) { - genDoc := tmtypes.GenesisDoc{ - ChainID: chainID, - } - err := (&genDoc).ValidateAndComplete() - if err != nil { - return genDoc, err - } - return genDoc, nil -} diff --git a/scripts/export/export_test.go b/scripts/export/export_test.go index 6da058571650..647193f38363 100644 --- a/scripts/export/export_test.go +++ b/scripts/export/export_test.go @@ -17,6 +17,17 @@ var ( genesisTime = "2019-02-11T12:00:00Z" ) +func defaultGenesisDoc(chainID string) (tmtypes.GenesisDoc, error) { + genDoc := tmtypes.GenesisDoc{ + ChainID: chainID, + } + err := (&genDoc).ValidateAndComplete() + if err != nil { + return genDoc, err + } + return genDoc, nil +} + func TestNewGenesisFile(t *testing.T) { cdc := app.MakeCodec() genDoc, err := defaultGenesisDoc(chainID) diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go index 5ae642d50236..7f10c009076e 100644 --- a/scripts/export/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -3,26 +3,26 @@ package main import ( "fmt" "os" - "strings" app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/scripts/export" ) -// Command: go run main.go [path_to_old_genesis.json] [chain-id] [genesis-start-time] > [path_to_new_genesis.json] +const chainID = "cosmoshub-2" + +// Command: go run main.go [path_to_old_genesis.json] [genesis-start-time] > [path_to_new_genesis.json] func main() { cdc := app.MakeCodec() - args := os.Args[1:] - if len(args) != 3 { - panic(fmt.Errorf("please provide path, chain-id and genesis time")) + args := os.Args + if len(args) != 2 { + panic(fmt.Errorf("please provide path and genesis start time")) } pathToGenesis := args[0] - chainID := args[1] - genesisTime := args[2] + genesisTime := args[1] - err := export.ValidateInputs(pathToGenesis, chainID, genesisTime) + err := export.ValidateBasic(pathToGenesis, genesisTime) if err != nil { panic(err) } @@ -32,7 +32,7 @@ func main() { panic(err) } - genesis.ChainID = strings.Trim(chainID, " ") + genesis.ChainID = chainID genesis.GenesisTime = genesisTime // proposal #1 updates From 5e4f838297fbf7f1be20f5fb48c3f51755babf10 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 00:10:44 +0200 Subject: [PATCH 11/26] use flags --- scripts/export/export.go | 8 ++++++++ scripts/export/v0_33_0/main.go | 19 ++++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/scripts/export/export.go b/scripts/export/export.go index c1fa913e70aa..c9612ab51a7b 100644 --- a/scripts/export/export.go +++ b/scripts/export/export.go @@ -48,6 +48,14 @@ func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { // validateBasic validates each of the arguments passed to the script func ValidateBasic(path, genesisTime string) error { + if path == "" { + return fmt.Errorf("path to genesis file required") + } + + if genesisTime == "" { + return fmt.Errorf("genesis start time required") + } + _, err := time.Parse(time.RFC3339, genesisTime) if err != nil { return err diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go index 7f10c009076e..ff33a8ad8275 100644 --- a/scripts/export/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -1,8 +1,8 @@ package main import ( + "flag" "fmt" - "os" app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/scripts/export" @@ -10,30 +10,27 @@ import ( const chainID = "cosmoshub-2" -// Command: go run main.go [path_to_old_genesis.json] [genesis-start-time] > [path_to_new_genesis.json] +// Command: go run main.go --path= --start-time= > [path_to_new_genesis.json func main() { cdc := app.MakeCodec() - args := os.Args - if len(args) != 2 { - panic(fmt.Errorf("please provide path and genesis start time")) - } + pathToGenesis := flag.String("path", "", "./genesis.json") + genesisTime := flag.String("start-time", "", "2019-02-11T12:00:00Z") - pathToGenesis := args[0] - genesisTime := args[1] + flag.Parse() - err := export.ValidateBasic(pathToGenesis, genesisTime) + err := export.ValidateBasic(*pathToGenesis, *genesisTime) if err != nil { panic(err) } - genesis, err := export.NewGenesisFile(cdc, pathToGenesis) + genesis, err := export.NewGenesisFile(cdc, *pathToGenesis) if err != nil { panic(err) } genesis.ChainID = chainID - genesis.GenesisTime = genesisTime + genesis.GenesisTime = *genesisTime // proposal #1 updates genesis.AppState.MintData.Params.BlocksPerYear = 4855015 From 2c99fb9a48a619ea62c9f97e5a3cf79062677b35 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 14:14:44 +0200 Subject: [PATCH 12/26] changelog --- .pending/improvements/gaia/4018-create-genesis- | 1 + 1 file changed, 1 insertion(+) create mode 100644 .pending/improvements/gaia/4018-create-genesis- diff --git a/.pending/improvements/gaia/4018-create-genesis- b/.pending/improvements/gaia/4018-create-genesis- new file mode 100644 index 000000000000..8211a586378f --- /dev/null +++ b/.pending/improvements/gaia/4018-create-genesis- @@ -0,0 +1 @@ +#4018 create genesis port script for realease v.0.34.0 From d88b6d238f6f7a24aa0ced13974c9cbe87a4b607 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 4 Apr 2019 15:00:50 +0200 Subject: [PATCH 13/26] Update .pending/improvements/gaia/4018-create-genesis- Co-Authored-By: fedekunze <31522760+fedekunze@users.noreply.github.com> --- .pending/improvements/gaia/4018-create-genesis- | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pending/improvements/gaia/4018-create-genesis- b/.pending/improvements/gaia/4018-create-genesis- index 8211a586378f..e2c106b942ad 100644 --- a/.pending/improvements/gaia/4018-create-genesis- +++ b/.pending/improvements/gaia/4018-create-genesis- @@ -1 +1 @@ -#4018 create genesis port script for realease v.0.34.0 +#4018 create genesis port script for release v.0.34.0 From 2f3012ae5b2f6aab1e5f106f761a890442d11200 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 15:10:17 +0200 Subject: [PATCH 14/26] update value and validation test --- scripts/export/export_test.go | 36 ++++++++++++++++++++++++++++++++++ scripts/export/v0_33_0/main.go | 4 ++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/scripts/export/export_test.go b/scripts/export/export_test.go index 647193f38363..2af0dcd29541 100644 --- a/scripts/export/export_test.go +++ b/scripts/export/export_test.go @@ -45,6 +45,42 @@ func TestNewGenesisFile(t *testing.T) { os.Remove(path) } +func TestValidateBasic(t *testing.T) { + // no start time + err := ValidateBasic(path, "") + require.Error(t, err) + + // no path + err = ValidateBasic("", genesisTime) + require.Error(t, err) + + // not a valid time + err = ValidateBasic(path, "not a timestamp") + require.Error(t, err) + + // not a JSON file + err = ValidateBasic("genesis.txt", genesisTime) + require.Error(t, err) + + // file doesn't exist + err = ValidateBasic(path, genesisTime) + require.Error(t, err) + + // success + genesis := tmtypes.GenesisDoc{ChainID: chainID} + + output, err := json.Marshal(genesis) + require.NoError(t, err) + + err = ioutil.WriteFile(path, output, 0644) + require.NoError(t, err) + + err = ValidateBasic(path, genesisTime) + require.NoError(t, err) + + os.Remove(path) +} + func TestDefaultGenesisDoc(t *testing.T) { expectedGenDoc := tmtypes.GenesisDoc{ChainID: chainID} genDoc, err := defaultGenesisDoc(chainID) diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go index ff33a8ad8275..c748e6c87e35 100644 --- a/scripts/export/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -36,8 +36,8 @@ func main() { genesis.AppState.MintData.Params.BlocksPerYear = 4855015 // proposal #2 updates - genesis.ConsensusParams.Block.MaxGas = 200000 - genesis.ConsensusParams.Block.MaxBytes = 2000000 + genesis.ConsensusParams.Block.MaxGas = 2000000 + genesis.ConsensusParams.Block.MaxBytes = 200000 // enable transfers genesis.AppState.BankData.SendEnabled = true From 9df1f1be07b490f594f7253e63805f29048e0a9a Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 15:46:15 +0200 Subject: [PATCH 15/26] add chain-id --- scripts/export/export.go | 11 ++++++++--- scripts/export/export_test.go | 16 ++++++++++------ scripts/export/v0_33_0/main.go | 15 +++++++++------ 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/scripts/export/export.go b/scripts/export/export.go index c9612ab51a7b..a0e309175f1c 100644 --- a/scripts/export/export.go +++ b/scripts/export/export.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "time" app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" @@ -47,12 +48,16 @@ func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { } // validateBasic validates each of the arguments passed to the script -func ValidateBasic(path, genesisTime string) error { - if path == "" { +func ValidateBasic(chainID, path, genesisTime string) error { + if strings.TrimSpace(chainID) == "" { + return fmt.Errorf("chain-id required") + } + + if strings.TrimSpace(path) == "" { return fmt.Errorf("path to genesis file required") } - if genesisTime == "" { + if strings.TrimSpace(genesisTime) == "" { return fmt.Errorf("genesis start time required") } diff --git a/scripts/export/export_test.go b/scripts/export/export_test.go index 2af0dcd29541..cdc97bf96b7d 100644 --- a/scripts/export/export_test.go +++ b/scripts/export/export_test.go @@ -46,24 +46,28 @@ func TestNewGenesisFile(t *testing.T) { } func TestValidateBasic(t *testing.T) { + // no chain-id + err := ValidateBasic("", path, genesisTime) + require.Error(t, err) + // no start time - err := ValidateBasic(path, "") + err = ValidateBasic(chainID, path, "") require.Error(t, err) // no path - err = ValidateBasic("", genesisTime) + err = ValidateBasic(chainID, "", genesisTime) require.Error(t, err) // not a valid time - err = ValidateBasic(path, "not a timestamp") + err = ValidateBasic(chainID, path, "not a timestamp") require.Error(t, err) // not a JSON file - err = ValidateBasic("genesis.txt", genesisTime) + err = ValidateBasic(chainID, "genesis.txt", genesisTime) require.Error(t, err) // file doesn't exist - err = ValidateBasic(path, genesisTime) + err = ValidateBasic(chainID, path, genesisTime) require.Error(t, err) // success @@ -75,7 +79,7 @@ func TestValidateBasic(t *testing.T) { err = ioutil.WriteFile(path, output, 0644) require.NoError(t, err) - err = ValidateBasic(path, genesisTime) + err = ValidateBasic(chainID, path, genesisTime) require.NoError(t, err) os.Remove(path) diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go index c748e6c87e35..ac1d37654aa5 100644 --- a/scripts/export/v0_33_0/main.go +++ b/scripts/export/v0_33_0/main.go @@ -3,23 +3,26 @@ package main import ( "flag" "fmt" + "strings" app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" "github.com/cosmos/cosmos-sdk/scripts/export" ) -const chainID = "cosmoshub-2" - -// Command: go run main.go --path= --start-time= > [path_to_new_genesis.json +// Command: +// go run main.go \ +// --chain-id= --path= --start-time= \ +// > [path_to_new_genesis.json func main() { cdc := app.MakeCodec() + chainID := flag.String("chain-id", "", "cosmoshub-n") pathToGenesis := flag.String("path", "", "./genesis.json") genesisTime := flag.String("start-time", "", "2019-02-11T12:00:00Z") flag.Parse() - err := export.ValidateBasic(*pathToGenesis, *genesisTime) + err := export.ValidateBasic(*chainID, *pathToGenesis, *genesisTime) if err != nil { panic(err) } @@ -29,8 +32,8 @@ func main() { panic(err) } - genesis.ChainID = chainID - genesis.GenesisTime = *genesisTime + genesis.ChainID = strings.TrimSpace(*chainID) + genesis.GenesisTime = strings.TrimSpace(*genesisTime) // proposal #1 updates genesis.AppState.MintData.Params.BlocksPerYear = 4855015 From b55d40a338afe4dd8596ad3fe8348417a5fc41d6 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Thu, 4 Apr 2019 17:37:39 +0100 Subject: [PATCH 16/26] New python script --- scripts/export/v0_33_0/main.py | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 scripts/export/v0_33_0/main.py diff --git a/scripts/export/v0_33_0/main.py b/scripts/export/v0_33_0/main.py new file mode 100644 index 000000000000..42f46d3b32e9 --- /dev/null +++ b/scripts/export/v0_33_0/main.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +import argparse +import datetime +import json +import math +import sys + + +# default_date = datetime.datetime(year=2019, month=2, day=11, hour=12, tzinfo=datetime.timezone.utc) # '2019-02-11T12:00:00Z' + +parser = argparse.ArgumentParser(description='Convert genesis.json from v0.33.2 to v0.34.0') +parser.add_argument('exported_genesis', type=argparse.FileType('r'), default=sys.stdin) +parser.add_argument('--chain-id', type=str, default='cosmoshub-n') +parser.add_argument('--start-time', type=str, default='2019-02-11T12:00:00Z') +args = parser.parse_args() + +chain_id = args.chain_id.strip() + +if chain_id == '': + print('chain-id required') + sys.exit(1) + +raw = args.exported_genesis.read() +genesis = json.loads(raw) + +# update genesis with breaking changes +genesis['consensus_params']['block'] = genesis['consensus_params']['block_size'] +del genesis['consensus_params']['block_size'] +genesis['consensus_params']['block']['time_iota_ms'] = 1000 # default tm value + +# proposal #1 updates +genesis['app_state']['mint']['params']['blocks_per_year'] = 4855015 + +# proposal #2 updates +genesis['consensus_params']['block']['max_gas'] = 2000000 +genesis['consensus_params']['block']['max_bytes'] = 200000 + +# enable transfers +genesis['app_state']['bank']['send_enabled'] = True +genesis['app_state']['distr']['withdraw_add_enabled'] = True + +# Set new chain ID and genesis start time +genesis['chain_id'] = chain_id.strip() +genesis['genesis_time'] = args.start_time + +print(json.dumps(genesis, indent=True)) From 31952f13f61ae6cd11c986444f4349291193a721 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 18:57:46 +0200 Subject: [PATCH 17/26] delete go files --- scripts/export/export.go | 91 ------------------------ scripts/export/export_test.go | 123 --------------------------------- scripts/export/v0_33_0/main.go | 59 ---------------- 3 files changed, 273 deletions(-) delete mode 100644 scripts/export/export.go delete mode 100644 scripts/export/export_test.go delete mode 100644 scripts/export/v0_33_0/main.go diff --git a/scripts/export/export.go b/scripts/export/export.go deleted file mode 100644 index a0e309175f1c..000000000000 --- a/scripts/export/export.go +++ /dev/null @@ -1,91 +0,0 @@ -package export - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "time" - - app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" - "github.com/cosmos/cosmos-sdk/codec" - tmtypes "github.com/tendermint/tendermint/types" -) - -// GenesisFile defines the Gaia genesis format -type GenesisFile struct { - GenesisTime string `json:"genesis_time"` - ChainID string `json:"chain_id"` - ConsensusParams *tmtypes.ConsensusParams `json:"consensus_params"` - AppHash string `json:"app_hash"` - AppState app.GenesisState `json:"app_state"` -} - -// NewGenesisFile builds a default GenesisDoc and creates a GenesisFile from it -func NewGenesisFile(cdc *codec.Codec, path string) (GenesisFile, error) { - - genDoc, err := importGenesis(path) - if err != nil { - return GenesisFile{}, err - } - - var appState app.GenesisState - if genDoc.AppState == nil { - appState = app.GenesisState{} - } else { - if err = cdc.UnmarshalJSON(genDoc.AppState, &appState); err != nil { - return GenesisFile{}, err - } - } - - return GenesisFile{ - GenesisTime: genDoc.GenesisTime.String(), - ChainID: genDoc.ChainID, - ConsensusParams: genDoc.ConsensusParams, - AppHash: genDoc.AppHash.String(), - AppState: appState, - }, nil -} - -// validateBasic validates each of the arguments passed to the script -func ValidateBasic(chainID, path, genesisTime string) error { - if strings.TrimSpace(chainID) == "" { - return fmt.Errorf("chain-id required") - } - - if strings.TrimSpace(path) == "" { - return fmt.Errorf("path to genesis file required") - } - - if strings.TrimSpace(genesisTime) == "" { - return fmt.Errorf("genesis start time required") - } - - _, err := time.Parse(time.RFC3339, genesisTime) - if err != nil { - return err - } - - if ext := filepath.Ext(path); ext != ".json" { - return fmt.Errorf("%s is not a JSON file", path) - } - - if _, err = os.Stat(path); err != nil { - return err - } - return nil -} - -// importGenesis imports genesis from JSON and completes missing fields -func importGenesis(path string) (genDoc *tmtypes.GenesisDoc, err error) { - genDoc, err = tmtypes.GenesisDocFromFile(path) - if err != nil { - return - } - - err = genDoc.ValidateAndComplete() - if err != nil { - return - } - return -} diff --git a/scripts/export/export_test.go b/scripts/export/export_test.go deleted file mode 100644 index cdc97bf96b7d..000000000000 --- a/scripts/export/export_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package export - -import ( - "encoding/json" - "io/ioutil" - "os" - "testing" - - app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" - "github.com/stretchr/testify/require" - tmtypes "github.com/tendermint/tendermint/types" -) - -var ( - path = "./genesis.json" - chainID = "cosmos-zone" - genesisTime = "2019-02-11T12:00:00Z" -) - -func defaultGenesisDoc(chainID string) (tmtypes.GenesisDoc, error) { - genDoc := tmtypes.GenesisDoc{ - ChainID: chainID, - } - err := (&genDoc).ValidateAndComplete() - if err != nil { - return genDoc, err - } - return genDoc, nil -} - -func TestNewGenesisFile(t *testing.T) { - cdc := app.MakeCodec() - genDoc, err := defaultGenesisDoc(chainID) - require.NoError(t, err) - - output, err := cdc.MarshalJSONIndent(genDoc, "", " ") - require.NoError(t, err) - - err = ioutil.WriteFile(path, output, 0644) - require.NoError(t, err) - - genesisFile, err := NewGenesisFile(cdc, path) - require.NoError(t, err) - require.NotEqual(t, GenesisFile{}, genesisFile) - os.Remove(path) -} - -func TestValidateBasic(t *testing.T) { - // no chain-id - err := ValidateBasic("", path, genesisTime) - require.Error(t, err) - - // no start time - err = ValidateBasic(chainID, path, "") - require.Error(t, err) - - // no path - err = ValidateBasic(chainID, "", genesisTime) - require.Error(t, err) - - // not a valid time - err = ValidateBasic(chainID, path, "not a timestamp") - require.Error(t, err) - - // not a JSON file - err = ValidateBasic(chainID, "genesis.txt", genesisTime) - require.Error(t, err) - - // file doesn't exist - err = ValidateBasic(chainID, path, genesisTime) - require.Error(t, err) - - // success - genesis := tmtypes.GenesisDoc{ChainID: chainID} - - output, err := json.Marshal(genesis) - require.NoError(t, err) - - err = ioutil.WriteFile(path, output, 0644) - require.NoError(t, err) - - err = ValidateBasic(chainID, path, genesisTime) - require.NoError(t, err) - - os.Remove(path) -} - -func TestDefaultGenesisDoc(t *testing.T) { - expectedGenDoc := tmtypes.GenesisDoc{ChainID: chainID} - genDoc, err := defaultGenesisDoc(chainID) - require.NoError(t, err) - require.NotEqual(t, expectedGenDoc, genDoc) - - genDoc, err = defaultGenesisDoc("") - require.Error(t, err) -} - -func TestImportGenesis(t *testing.T) { - genesis := tmtypes.GenesisDoc{ChainID: chainID} - - output, err := json.Marshal(genesis) - require.NoError(t, err) - - err = ioutil.WriteFile(path, output, 0644) - require.NoError(t, err) - - genDoc, err := importGenesis(path) - require.NoError(t, err) - require.NotEqual(t, genesis, genDoc) - os.Remove(path) - - // should fail with invalid genesis - genesis = tmtypes.GenesisDoc{} - output, err = json.Marshal(genesis) - require.NoError(t, err) - - err = ioutil.WriteFile(path, output, 0644) - require.NoError(t, err) - - genDoc, err = importGenesis(path) - require.Error(t, err) - os.Remove(path) -} diff --git a/scripts/export/v0_33_0/main.go b/scripts/export/v0_33_0/main.go deleted file mode 100644 index ac1d37654aa5..000000000000 --- a/scripts/export/v0_33_0/main.go +++ /dev/null @@ -1,59 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "strings" - - app "github.com/cosmos/cosmos-sdk/cmd/gaia/app" - "github.com/cosmos/cosmos-sdk/scripts/export" -) - -// Command: -// go run main.go \ -// --chain-id= --path= --start-time= \ -// > [path_to_new_genesis.json -func main() { - cdc := app.MakeCodec() - - chainID := flag.String("chain-id", "", "cosmoshub-n") - pathToGenesis := flag.String("path", "", "./genesis.json") - genesisTime := flag.String("start-time", "", "2019-02-11T12:00:00Z") - - flag.Parse() - - err := export.ValidateBasic(*chainID, *pathToGenesis, *genesisTime) - if err != nil { - panic(err) - } - - genesis, err := export.NewGenesisFile(cdc, *pathToGenesis) - if err != nil { - panic(err) - } - - genesis.ChainID = strings.TrimSpace(*chainID) - genesis.GenesisTime = strings.TrimSpace(*genesisTime) - - // proposal #1 updates - genesis.AppState.MintData.Params.BlocksPerYear = 4855015 - - // proposal #2 updates - genesis.ConsensusParams.Block.MaxGas = 2000000 - genesis.ConsensusParams.Block.MaxBytes = 200000 - - // enable transfers - genesis.AppState.BankData.SendEnabled = true - genesis.AppState.DistrData.WithdrawAddrEnabled = true - - err = app.GaiaValidateGenesisState(genesis.AppState) - if err != nil { - panic(err) - } - - genesisJSON, err := cdc.MarshalJSONIndent(genesis, "", " ") - if err != nil { - panic(err) - } - fmt.Println(string(genesisJSON)) -} From 4a3b178143c8129e5ac39336f5669abcce1f53ad Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Thu, 4 Apr 2019 19:10:35 +0200 Subject: [PATCH 18/26] numbers to strings --- scripts/export/v0_33_0/main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/export/v0_33_0/main.py b/scripts/export/v0_33_0/main.py index 42f46d3b32e9..1d765defd986 100644 --- a/scripts/export/v0_33_0/main.py +++ b/scripts/export/v0_33_0/main.py @@ -27,14 +27,14 @@ # update genesis with breaking changes genesis['consensus_params']['block'] = genesis['consensus_params']['block_size'] del genesis['consensus_params']['block_size'] -genesis['consensus_params']['block']['time_iota_ms'] = 1000 # default tm value +genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value # proposal #1 updates -genesis['app_state']['mint']['params']['blocks_per_year'] = 4855015 +genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' # proposal #2 updates -genesis['consensus_params']['block']['max_gas'] = 2000000 -genesis['consensus_params']['block']['max_bytes'] = 200000 +genesis['consensus_params']['block']['max_gas'] = '2000000' +genesis['consensus_params']['block']['max_bytes'] = '200000' # enable transfers genesis['app_state']['bank']['send_enabled'] = True From 9c6a5155c4bed3bd0a451e68cf457361900a7d82 Mon Sep 17 00:00:00 2001 From: Federico Kunze Date: Fri, 5 Apr 2019 19:30:29 +0200 Subject: [PATCH 19/26] add crisis constant fee --- scripts/export/v0_33_0/main.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/export/v0_33_0/main.py b/scripts/export/v0_33_0/main.py index 1d765defd986..bf44c3804dee 100644 --- a/scripts/export/v0_33_0/main.py +++ b/scripts/export/v0_33_0/main.py @@ -29,6 +29,15 @@ del genesis['consensus_params']['block_size'] genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value + +crisis_data = { + 'constant_fee': { + 'amount': '1333000000', # $5,000 worth of uatoms + 'denom': 'uatom' + } +} +genesis['app_state']['crisis'] = crisis_data + # proposal #1 updates genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' From afe9952f42a4d876741f45bff8a0e3683691530e Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Sun, 7 Apr 2019 15:30:21 +0100 Subject: [PATCH 20/26] Exit with error on stderr --- scripts/export/v0_33_0/main.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/export/v0_33_0/main.py b/scripts/export/v0_33_0/main.py index bf44c3804dee..ef15fc644a6a 100644 --- a/scripts/export/v0_33_0/main.py +++ b/scripts/export/v0_33_0/main.py @@ -18,8 +18,7 @@ chain_id = args.chain_id.strip() if chain_id == '': - print('chain-id required') - sys.exit(1) + sys.exit('chain-id required') raw = args.exported_genesis.read() genesis = json.loads(raw) From 6e01099238a59bb61a60b26f9b275be973d92c9c Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Sun, 7 Apr 2019 17:17:59 +0100 Subject: [PATCH 21/26] Refactoring, slightly more modular design - script moved from scripts/ to contrib/export - Main and aux functions refactored and generalised for increased reusability in future scripts. - .gitignore updated --- .gitignore | 1 + contrib/export/lib.py | 29 +++++++++++++++ contrib/export/v0.33.2-to-v0.34.0.py | 44 ++++++++++++++++++++++ scripts/export/v0_33_0/main.py | 55 ---------------------------- 4 files changed, 74 insertions(+), 55 deletions(-) create mode 100644 contrib/export/lib.py create mode 100755 contrib/export/v0.33.2-to-v0.34.0.py delete mode 100644 scripts/export/v0_33_0/main.py diff --git a/.gitignore b/.gitignore index 836329e728a4..b6c9df729d14 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.swn .vscode .idea +*.pyc # Build vendor diff --git a/contrib/export/lib.py b/contrib/export/lib.py new file mode 100644 index 000000000000..8a01fea0e10c --- /dev/null +++ b/contrib/export/lib.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +import sys +import json +import argparse + + +def init_default_argument_parser(prog_desc, + default_chain_id, + default_start_time): + parser = argparse.ArgumentParser(description=prog_desc) + parser.add_argument('exported_genesis', + help='exported genesis.json file', + type=argparse.FileType('r'), default=sys.stdin) + parser.add_argument('--chain-id', type=str, default=default_chain_id) + parser.add_argument('--start-time', type=str, default=default_start_time) + return parser + + +def main(argument_parser, process_genesis_func): + args = argument_parser.parse_args() + if args.chain_id.strip() == '': + sys.exit('chain-id required') + + genesis = json.loads(args.exported_genesis.read()) + + print(json.dumps(process_genesis_func( + genesis=genesis, parsed_args=args, + ), indent=True)) diff --git a/contrib/export/v0.33.2-to-v0.34.0.py b/contrib/export/v0.33.2-to-v0.34.0.py new file mode 100755 index 000000000000..21a1346ae54c --- /dev/null +++ b/contrib/export/v0.33.2-to-v0.34.0.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +import lib + + +def process_raw_genesis(genesis, parsed_args): + # update genesis with breaking changes + genesis['consensus_params']['block'] = genesis['consensus_params']['block_size'] + del genesis['consensus_params']['block_size'] + genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value + + crisis_data = { + 'constant_fee': { + 'amount': '1333000000', # $5,000 worth of uatoms + 'denom': 'uatom' + } + } + genesis['app_state']['crisis'] = crisis_data + + # proposal #1 updates + genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' + + # proposal #2 updates + genesis['consensus_params']['block']['max_gas'] = '2000000' + genesis['consensus_params']['block']['max_bytes'] = '200000' + + # enable transfers + genesis['app_state']['bank']['send_enabled'] = True + genesis['app_state']['distr']['withdraw_add_enabled'] = True + + # Set new chain ID and genesis start time + genesis['chain_id'] = parsed_args.chain_id.strip() + genesis['genesis_time'] = parsed_args.start_time + + return genesis + + +if __name__ == '__main__': + parser = lib.init_default_argument_parser( + prog_desc='Convert genesis.json from v0.33.2 to v0.34.0', + default_chain_id='cosmoshub-n', + default_start_time='2019-02-11T12:00:00Z', + ) + lib.main(parser, process_raw_genesis) diff --git a/scripts/export/v0_33_0/main.py b/scripts/export/v0_33_0/main.py deleted file mode 100644 index ef15fc644a6a..000000000000 --- a/scripts/export/v0_33_0/main.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import datetime -import json -import math -import sys - - -# default_date = datetime.datetime(year=2019, month=2, day=11, hour=12, tzinfo=datetime.timezone.utc) # '2019-02-11T12:00:00Z' - -parser = argparse.ArgumentParser(description='Convert genesis.json from v0.33.2 to v0.34.0') -parser.add_argument('exported_genesis', type=argparse.FileType('r'), default=sys.stdin) -parser.add_argument('--chain-id', type=str, default='cosmoshub-n') -parser.add_argument('--start-time', type=str, default='2019-02-11T12:00:00Z') -args = parser.parse_args() - -chain_id = args.chain_id.strip() - -if chain_id == '': - sys.exit('chain-id required') - -raw = args.exported_genesis.read() -genesis = json.loads(raw) - -# update genesis with breaking changes -genesis['consensus_params']['block'] = genesis['consensus_params']['block_size'] -del genesis['consensus_params']['block_size'] -genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value - - -crisis_data = { - 'constant_fee': { - 'amount': '1333000000', # $5,000 worth of uatoms - 'denom': 'uatom' - } -} -genesis['app_state']['crisis'] = crisis_data - -# proposal #1 updates -genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' - -# proposal #2 updates -genesis['consensus_params']['block']['max_gas'] = '2000000' -genesis['consensus_params']['block']['max_bytes'] = '200000' - -# enable transfers -genesis['app_state']['bank']['send_enabled'] = True -genesis['app_state']['distr']['withdraw_add_enabled'] = True - -# Set new chain ID and genesis start time -genesis['chain_id'] = chain_id.strip() -genesis['genesis_time'] = args.start_time - -print(json.dumps(genesis, indent=True)) From 1b56d64c05a7b8f28c8ae4536ba89be655e4611c Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Mon, 8 Apr 2019 16:06:46 +0100 Subject: [PATCH 22/26] Fix indentation --- contrib/export/v0.33.2-to-v0.34.0.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/export/v0.33.2-to-v0.34.0.py b/contrib/export/v0.33.2-to-v0.34.0.py index 21a1346ae54c..b63fbc72c6c9 100755 --- a/contrib/export/v0.33.2-to-v0.34.0.py +++ b/contrib/export/v0.33.2-to-v0.34.0.py @@ -10,10 +10,10 @@ def process_raw_genesis(genesis, parsed_args): genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value crisis_data = { - 'constant_fee': { - 'amount': '1333000000', # $5,000 worth of uatoms - 'denom': 'uatom' - } + 'constant_fee': { + 'amount': '1333000000', # $5,000 worth of uatoms + 'denom': 'uatom', + }, } genesis['app_state']['crisis'] = crisis_data From 34a9b36ba7530cf6ef75fa2f960af1cfe98d38a2 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Mon, 8 Apr 2019 16:08:16 +0100 Subject: [PATCH 23/26] Remove unnecessary variable --- contrib/export/v0.33.2-to-v0.34.0.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/export/v0.33.2-to-v0.34.0.py b/contrib/export/v0.33.2-to-v0.34.0.py index b63fbc72c6c9..5afc88882be4 100755 --- a/contrib/export/v0.33.2-to-v0.34.0.py +++ b/contrib/export/v0.33.2-to-v0.34.0.py @@ -9,13 +9,12 @@ def process_raw_genesis(genesis, parsed_args): del genesis['consensus_params']['block_size'] genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value - crisis_data = { + genesis['app_state']['crisis'] = { 'constant_fee': { 'amount': '1333000000', # $5,000 worth of uatoms 'denom': 'uatom', }, } - genesis['app_state']['crisis'] = crisis_data # proposal #1 updates genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' From 0fd205ce4c3fca9dedcc80c1193952bea78800bb Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Mon, 8 Apr 2019 11:11:19 -0400 Subject: [PATCH 24/26] Minor reformatting --- contrib/export/lib.py | 17 ++++++++--------- contrib/export/v0.33.2-to-v0.34.0.py | 13 +++++++------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/contrib/export/lib.py b/contrib/export/lib.py index 8a01fea0e10c..2e7457f75362 100644 --- a/contrib/export/lib.py +++ b/contrib/export/lib.py @@ -1,17 +1,17 @@ #!/usr/bin/env python3 -import sys -import json import argparse +import json +import sys -def init_default_argument_parser(prog_desc, - default_chain_id, - default_start_time): +def init_default_argument_parser(prog_desc, default_chain_id, default_start_time): parser = argparse.ArgumentParser(description=prog_desc) - parser.add_argument('exported_genesis', + parser.add_argument( + 'exported_genesis', help='exported genesis.json file', - type=argparse.FileType('r'), default=sys.stdin) + type=argparse.FileType('r'), default=sys.stdin, + ) parser.add_argument('--chain-id', type=str, default=default_chain_id) parser.add_argument('--start-time', type=str, default=default_start_time) return parser @@ -25,5 +25,4 @@ def main(argument_parser, process_genesis_func): genesis = json.loads(args.exported_genesis.read()) print(json.dumps(process_genesis_func( - genesis=genesis, parsed_args=args, - ), indent=True)) + genesis=genesis, parsed_args=args,), indent=True)) diff --git a/contrib/export/v0.33.2-to-v0.34.0.py b/contrib/export/v0.33.2-to-v0.34.0.py index b63fbc72c6c9..0da0292e4813 100755 --- a/contrib/export/v0.33.2-to-v0.34.0.py +++ b/contrib/export/v0.33.2-to-v0.34.0.py @@ -7,15 +7,16 @@ def process_raw_genesis(genesis, parsed_args): # update genesis with breaking changes genesis['consensus_params']['block'] = genesis['consensus_params']['block_size'] del genesis['consensus_params']['block_size'] - genesis['consensus_params']['block']['time_iota_ms'] = '1000' # default tm value - crisis_data = { + # default tm value + genesis['consensus_params']['block']['time_iota_ms'] = '1000' + + genesis['app_state']['crisis'] = { 'constant_fee': { - 'amount': '1333000000', # $5,000 worth of uatoms + 'amount': '1333000000', # ~$5,000 worth of uatoms 'denom': 'uatom', }, } - genesis['app_state']['crisis'] = crisis_data # proposal #1 updates genesis['app_state']['mint']['params']['blocks_per_year'] = '4855015' @@ -28,7 +29,7 @@ def process_raw_genesis(genesis, parsed_args): genesis['app_state']['bank']['send_enabled'] = True genesis['app_state']['distr']['withdraw_add_enabled'] = True - # Set new chain ID and genesis start time + # Set new chain ID and genesis start time genesis['chain_id'] = parsed_args.chain_id.strip() genesis['genesis_time'] = parsed_args.start_time @@ -37,7 +38,7 @@ def process_raw_genesis(genesis, parsed_args): if __name__ == '__main__': parser = lib.init_default_argument_parser( - prog_desc='Convert genesis.json from v0.33.2 to v0.34.0', + prog_desc='Convert genesis.json from v0.33.x to v0.34.0', default_chain_id='cosmoshub-n', default_start_time='2019-02-11T12:00:00Z', ) From c4de70312f7fece89dc678c50b9e5f5ddebadc64 Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Mon, 8 Apr 2019 11:13:21 -0400 Subject: [PATCH 25/26] Rename file --- contrib/export/{v0.33.2-to-v0.34.0.py => v0.33.x-to-v0.34.0.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename contrib/export/{v0.33.2-to-v0.34.0.py => v0.33.x-to-v0.34.0.py} (100%) diff --git a/contrib/export/v0.33.2-to-v0.34.0.py b/contrib/export/v0.33.x-to-v0.34.0.py similarity index 100% rename from contrib/export/v0.33.2-to-v0.34.0.py rename to contrib/export/v0.33.x-to-v0.34.0.py From 5c85697570553fd5cace4a10811555925d9edfcf Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 8 Apr 2019 17:32:21 +0200 Subject: [PATCH 26/26] Update contrib/export/v0.33.x-to-v0.34.0.py Co-Authored-By: fedekunze <31522760+fedekunze@users.noreply.github.com> --- contrib/export/v0.33.x-to-v0.34.0.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/export/v0.33.x-to-v0.34.0.py b/contrib/export/v0.33.x-to-v0.34.0.py index 9ae15f753132..c3528a206b1a 100755 --- a/contrib/export/v0.33.x-to-v0.34.0.py +++ b/contrib/export/v0.33.x-to-v0.34.0.py @@ -24,7 +24,7 @@ def process_raw_genesis(genesis, parsed_args): # enable transfers genesis['app_state']['bank']['send_enabled'] = True - genesis['app_state']['distr']['withdraw_add_enabled'] = True + genesis['app_state']['distr']['withdraw_addr_enabled'] = True # Set new chain ID and genesis start time genesis['chain_id'] = parsed_args.chain_id.strip()