github.com/vipernet-xyz/tendermint-core@v0.32.0/scripts/wal2json/main.go (about) 1 /* 2 wal2json converts binary WAL file to JSON. 3 4 Usage: 5 wal2json <path-to-wal> 6 */ 7 8 package main 9 10 import ( 11 "fmt" 12 "io" 13 "os" 14 15 amino "github.com/tendermint/go-amino" 16 17 cs "github.com/tendermint/tendermint/consensus" 18 "github.com/tendermint/tendermint/types" 19 ) 20 21 var cdc = amino.NewCodec() 22 23 func init() { 24 cs.RegisterMessages(cdc) 25 cs.RegisterWALMessages(cdc) 26 types.RegisterBlockAmino(cdc) 27 } 28 29 func main() { 30 if len(os.Args) < 2 { 31 fmt.Println("missing one argument: <path-to-wal>") 32 os.Exit(1) 33 } 34 35 f, err := os.Open(os.Args[1]) 36 if err != nil { 37 panic(fmt.Errorf("failed to open WAL file: %v", err)) 38 } 39 defer f.Close() 40 41 dec := cs.NewWALDecoder(f) 42 for { 43 msg, err := dec.Decode() 44 if err == io.EOF { 45 break 46 } else if err != nil { 47 panic(fmt.Errorf("failed to decode msg: %v", err)) 48 } 49 50 json, err := cdc.MarshalJSON(msg) 51 if err != nil { 52 panic(fmt.Errorf("failed to marshal msg: %v", err)) 53 } 54 55 _, err = os.Stdout.Write(json) 56 if err == nil { 57 _, err = os.Stdout.Write([]byte("\n")) 58 } 59 if err == nil { 60 if endMsg, ok := msg.Msg.(cs.EndHeightMessage); ok { 61 _, err = os.Stdout.Write([]byte(fmt.Sprintf("ENDHEIGHT %d\n", endMsg.Height))) // nolint: errcheck, gas 62 } 63 } 64 if err != nil { 65 fmt.Println("Failed to write message", err) 66 os.Exit(1) 67 } 68 } 69 }