initChain creates a genesis block from a toml format file
(ctx *cli.Context)
| 171 | |
| 172 | // initChain creates a genesis block from a toml format file |
| 173 | func initChain(ctx *cli.Context) error { |
| 174 | // Make sure we have a valid genesis TOML and run with suitable runmode. |
| 175 | genesisPath := ctx.Args().First() |
| 176 | var genesis *core.Genesis |
| 177 | |
| 178 | if ctx.IsSet(flags.RunModeFlagName) { |
| 179 | _ = configs.SetRunMode(configs.RunMode(ctx.String(flags.RunModeFlagName))) |
| 180 | } |
| 181 | log.Info("runMode", "runMode", configs.GetRunMode()) |
| 182 | |
| 183 | if len(genesisPath) == 0 { |
| 184 | genesis = core.DefaultGenesisBlock() |
| 185 | } else { |
| 186 | file, err := os.Open(genesisPath) |
| 187 | if err != nil { |
| 188 | log.Fatalf("Failed to read genesis file: %v", err) |
| 189 | } |
| 190 | defer file.Close() |
| 191 | |
| 192 | genesis = new(core.Genesis) |
| 193 | if err := toml.NewDecoder(file).Decode(genesis); err != nil { |
| 194 | log.Fatalf("invalid genesis file: %v", err) |
| 195 | } |
| 196 | } |
| 197 | // Intialize database. |
| 198 | _, node := newConfigNode(ctx) |
| 199 | name := configs.DatabaseName |
| 200 | chaindb, err := node.OpenDatabase(name, 0, 0) |
| 201 | if err != nil { |
| 202 | log.Fatalf("Failed to open database: %v", err) |
| 203 | } |
| 204 | _, hash, err := core.SetupGenesisBlock(chaindb, genesis) |
| 205 | if err != nil { |
| 206 | log.Fatalf("Failed to write genesis block: %v", err) |
| 207 | } |
| 208 | log.Info("Successfully wrote genesis state", "database", name, "hash", hash.Hex()) |
| 209 | return nil |
| 210 | } |
| 211 | |
| 212 | func cleanDB(ctx *cli.Context) { |
| 213 | _, node := newConfigNode(ctx) |
nothing calls this directly
no test coverage detected