package files
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
wire "github.com/tendermint/go-wire"
|
|
|
|
"github.com/tendermint/tendermint/certifiers"
|
|
certerr "github.com/tendermint/tendermint/certifiers/errors"
|
|
)
|
|
|
|
const (
|
|
// MaxFullCommitSize is the maximum number of bytes we will
|
|
// read in for a full commit to avoid excessive allocations
|
|
// in the deserializer
|
|
MaxFullCommitSize = 1024 * 1024
|
|
)
|
|
|
|
// SaveFullCommit exports the seed in binary / go-wire style
|
|
func SaveFullCommit(fc certifiers.FullCommit, path string) error {
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
var n int
|
|
wire.WriteBinary(fc, f, &n, &err)
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
// SaveFullCommitJSON exports the seed in a json format
|
|
func SaveFullCommitJSON(fc certifiers.FullCommit, path string) error {
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
defer f.Close()
|
|
stream := json.NewEncoder(f)
|
|
err = stream.Encode(fc)
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
func LoadFullCommit(path string) (certifiers.FullCommit, error) {
|
|
var fc certifiers.FullCommit
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return fc, certerr.ErrCommitNotFound()
|
|
}
|
|
return fc, errors.WithStack(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
var n int
|
|
wire.ReadBinaryPtr(&fc, f, MaxFullCommitSize, &n, &err)
|
|
return fc, errors.WithStack(err)
|
|
}
|
|
|
|
func LoadFullCommitJSON(path string) (certifiers.FullCommit, error) {
|
|
var fc certifiers.FullCommit
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return fc, certerr.ErrCommitNotFound()
|
|
}
|
|
return fc, errors.WithStack(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
stream := json.NewDecoder(f)
|
|
err = stream.Decode(&fc)
|
|
return fc, errors.WithStack(err)
|
|
}
|