Merge pull request #321 from filecoin-project/feat/chain-set-head

expose command to set chainstore head
This commit is contained in:
Łukasz Magiera
2019-10-10 06:00:54 +02:00
committed by GitHub
5 changed files with 94 additions and 21 deletions
+49
View File
@@ -1,6 +1,7 @@
package cli
import (
"context"
"encoding/json"
"fmt"
@@ -20,6 +21,7 @@ var chainCmd = &cli.Command{
chainGetBlock,
chainReadObjCmd,
chainGetMsgCmd,
chainSetHeadCmd,
},
}
@@ -204,3 +206,50 @@ var chainGetMsgCmd = &cli.Command{
return nil
},
}
var chainSetHeadCmd = &cli.Command{
Name: "sethead",
Usage: "manually set the local nodes head tipset (Caution: normally only used for recovery)",
Action: func(cctx *cli.Context) error {
api, closer, err := GetFullNodeAPI(cctx)
if err != nil {
return err
}
defer closer()
ctx := ReqContext(cctx)
if !cctx.Args().Present() {
return fmt.Errorf("must pass cids for tipset to set as head")
}
ts, err := parseTipSet(api, ctx, cctx.Args().Slice())
if err != nil {
return err
}
if err := api.ChainSetHead(ctx, ts); err != nil {
return err
}
return nil
},
}
func parseTipSet(api api.FullNode, ctx context.Context, vals []string) (*types.TipSet, error) {
var headers []*types.BlockHeader
for _, c := range vals {
blkc, err := cid.Decode(c)
if err != nil {
return nil, err
}
bh, err := api.ChainGetBlock(ctx, blkc)
if err != nil {
return nil, err
}
headers = append(headers, bh)
}
return types.NewTipSet(headers)
}