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  }