(ctx *cli.Context, l1Rpc string, l1contract common.Address)
| 272 | } |
| 273 | |
| 274 | func initShardManager(ctx *cli.Context, l1Rpc string, l1contract common.Address) (*es.ShardManager, error) { |
| 275 | miner := readRequiredFlag(ctx, flags.StorageMiner) |
| 276 | if !common.IsHexAddress(miner) { |
| 277 | return nil, fmt.Errorf("invalid miner address %s", miner) |
| 278 | } |
| 279 | cctx := context.Background() |
| 280 | client, err := ethclient.DialContext(cctx, l1Rpc) |
| 281 | if err != nil { |
| 282 | return nil, fmt.Errorf("failed to connect to the Ethereum client: %w", err) |
| 283 | } |
| 284 | defer client.Close() |
| 285 | |
| 286 | storageCfg, err := initStorageConfig(cctx, client, l1contract, common.HexToAddress(miner), lg) |
| 287 | if err != nil { |
| 288 | return nil, fmt.Errorf("failed to load storage config: %w", err) |
| 289 | } |
| 290 | if !ctx.IsSet(flags.StorageFiles.Name) { |
| 291 | return nil, fmt.Errorf("flag is required: %s", flags.StorageFiles.Name) |
| 292 | } |
| 293 | storageCfg.Filenames = ctx.StringSlice(flags.StorageFiles.Name) |
| 294 | shardManager := es.NewShardManager(storageCfg.L1Contract, storageCfg.KvSize, storageCfg.KvEntriesPerShard, storageCfg.ChunkSize) |
| 295 | for _, filename := range storageCfg.Filenames { |
| 296 | fmt.Printf("Adding data file %s\n", filename) |
| 297 | df, err := es.OpenDataFile(filename) |
| 298 | if err != nil { |
| 299 | return nil, fmt.Errorf("open data file failed: %w", err) |
| 300 | } |
| 301 | if df.Miner() != storageCfg.Miner { |
| 302 | return nil, fmt.Errorf("miner mismatches data file") |
| 303 | } |
| 304 | shardManager.AddDataFileAndShard(df) |
| 305 | } |
| 306 | if shardManager.IsComplete() != nil { |
| 307 | return nil, fmt.Errorf("data files are not completed") |
| 308 | } |
| 309 | return shardManager, nil |
| 310 | } |
no test coverage detected