From c6769095870fdf450c8cbadc0991ab10fddec223 Mon Sep 17 00:00:00 2001 From: kch Date: Sun, 5 Nov 2023 06:03:54 +0000 Subject: [PATCH] move gob common to enc --- chain/chaindb.go | 6 +++--- chain/chaindbForRaft.go | 8 ++++---- chain/recover.go | 3 +-- consensus/impl/dpos/bp/cluster.go | 4 ++-- consensus/impl/dpos/lib.go | 6 +++--- consensus/raftCommon.go | 3 +-- internal/common/bytes.go | 19 ------------------- internal/common/bytes_test.go | 22 ---------------------- internal/enc/base58.go | 9 ++++++++- internal/enc/base58check.go | 10 ++++++++++ internal/enc/base64.go | 6 ++++++ internal/enc/gob.go | 22 ++++++++++++++++++++++ internal/enc/gob_test.go | 23 +++++++++++++++++++++++ state/statedata.go | 6 +++--- types/genesis.go | 5 ++--- 15 files changed, 88 insertions(+), 64 deletions(-) create mode 100644 internal/enc/gob.go create mode 100644 internal/enc/gob_test.go diff --git a/chain/chaindb.go b/chain/chaindb.go index 6c8823bfa..b4d221e8e 100644 --- a/chain/chaindb.go +++ b/chain/chaindb.go @@ -651,7 +651,7 @@ func (cdb *ChainDB) getReceipts(blockHash []byte, blockNo types.BlockNo, var receipts types.Receipts receipts.SetHardFork(hardForkConfig, blockNo) - err := common.GobDecode(data, &receipts) + err := enc.GobDecode(data, &receipts) return &receipts, err } @@ -694,7 +694,7 @@ func (cdb *ChainDB) writeReceipts(blockHash []byte, blockNo types.BlockNo, recei dbTx := cdb.store.NewTx() defer dbTx.Discard() - val, _ := common.GobEncode(receipts) + val, _ := enc.GobEncode(receipts) dbTx.Set(dbkey.Receipts(blockHash, blockNo), val) dbTx.Commit() @@ -736,7 +736,7 @@ func (cdb *ChainDB) getReorgMarker() (*ReorgMarker, error) { } var marker ReorgMarker - err := common.GobDecode(data, &marker) + err := enc.GobDecode(data, &marker) return &marker, err } diff --git a/chain/chaindbForRaft.go b/chain/chaindbForRaft.go index 21b0da75e..c61495425 100644 --- a/chain/chaindbForRaft.go +++ b/chain/chaindbForRaft.go @@ -5,7 +5,7 @@ import ( "github.com/aergoio/aergo-lib/db" "github.com/aergoio/aergo/v2/consensus" - "github.com/aergoio/aergo/v2/internal/common" + "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/types" "github.com/aergoio/aergo/v2/types/dbkey" "github.com/aergoio/etcd/raft/raftpb" @@ -234,7 +234,7 @@ func (cdb *ChainDB) GetRaftEntry(idx uint64) (*consensus.WalEntry, error) { } var entry consensus.WalEntry - if err := common.GobDecode(data, &entry); err != nil { + if err := enc.GobDecode(data, &entry); err != nil { return nil, err } @@ -421,7 +421,7 @@ func (cdb *ChainDB) WriteIdentity(identity *consensus.RaftIdentity) error { logger.Info().Str("id", identity.ToString()).Msg("save raft identity") - enc, err := common.GobEncode(identity) + enc, err := enc.GobEncode(identity) if err != nil { return ErrEncodeRaftIdentity } @@ -439,7 +439,7 @@ func (cdb *ChainDB) GetIdentity() (*consensus.RaftIdentity, error) { } var id consensus.RaftIdentity - if err := common.GobDecode(data, &id); err != nil { + if err := enc.GobDecode(data, &id); err != nil { return nil, ErrDecodeRaftIdentity } diff --git a/chain/recover.go b/chain/recover.go index 63a99bdc1..51e736a14 100644 --- a/chain/recover.go +++ b/chain/recover.go @@ -8,7 +8,6 @@ import ( "runtime" "runtime/debug" - "github.com/aergoio/aergo/v2/internal/common" "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/types" "github.com/aergoio/aergo/v2/types/dbkey" @@ -218,7 +217,7 @@ func (rm *ReorgMarker) delete() { } func (rm *ReorgMarker) toBytes() ([]byte, error) { - return common.GobEncode(rm) + return enc.GobEncode(rm) } func (rm *ReorgMarker) toString() string { diff --git a/consensus/impl/dpos/bp/cluster.go b/consensus/impl/dpos/bp/cluster.go index 00447e060..060671299 100644 --- a/consensus/impl/dpos/bp/cluster.go +++ b/consensus/impl/dpos/bp/cluster.go @@ -16,7 +16,7 @@ import ( "github.com/aergoio/aergo-lib/log" "github.com/aergoio/aergo/v2/consensus" "github.com/aergoio/aergo/v2/contract/system" - "github.com/aergoio/aergo/v2/internal/common" + "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/state" "github.com/aergoio/aergo/v2/types" "github.com/davecgh/go-spew/spew" @@ -287,7 +287,7 @@ func buildKey(blockNo types.BlockNo) []byte { // Value returns s.list. func (s *Snapshot) Value() []byte { - b, err := common.GobEncode(s.List) + b, err := enc.GobEncode(s.List) if err != nil { logger.Debug().Err(err).Msg("BP list encoding failed") return nil diff --git a/consensus/impl/dpos/lib.go b/consensus/impl/dpos/lib.go index a9a675e5d..41660aa89 100644 --- a/consensus/impl/dpos/lib.go +++ b/consensus/impl/dpos/lib.go @@ -7,7 +7,7 @@ import ( "github.com/aergoio/aergo-lib/db" "github.com/aergoio/aergo/v2/consensus" - "github.com/aergoio/aergo/v2/internal/common" + "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/p2p/p2pkey" "github.com/aergoio/aergo/v2/types" "github.com/aergoio/aergo/v2/types/dbkey" @@ -235,7 +235,7 @@ func (ls *libStatus) load(endBlockNo types.BlockNo) { } func (ls *libStatus) save(tx consensus.TxWriter) error { - b, err := common.GobEncode(ls) + b, err := enc.GobEncode(ls) if err != nil { return err } @@ -397,7 +397,7 @@ func (bs *bootLoader) decodeStatus(key []byte, dst interface{}) error { return fmt.Errorf("LIB status not found: key = %v", string(key)) } - err := common.GobDecode(value, dst) + err := enc.GobDecode(value, dst) if err != nil { logger.Panic().Err(err).Str("key", string(key)). Msg("failed to decode DPoS status") diff --git a/consensus/raftCommon.go b/consensus/raftCommon.go index c4b96d63e..30216420b 100644 --- a/consensus/raftCommon.go +++ b/consensus/raftCommon.go @@ -10,7 +10,6 @@ import ( "fmt" "io" - "github.com/aergoio/aergo/v2/internal/common" "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/types" "github.com/aergoio/etcd/raft" @@ -59,7 +58,7 @@ type WalEntry struct { } func (we *WalEntry) ToBytes() ([]byte, error) { - return common.GobEncode(we) + return enc.GobEncode(we) } func (we *WalEntry) ToString() string { diff --git a/internal/common/bytes.go b/internal/common/bytes.go index 93db56386..02cd2a0f9 100644 --- a/internal/common/bytes.go +++ b/internal/common/bytes.go @@ -1,10 +1,5 @@ package common -import ( - "bytes" - "encoding/gob" -) - // IsZero returns true if argument is empty or zero func IsZero(argv []byte) bool { if len(argv) == 0 { @@ -25,17 +20,3 @@ func Compactz(argv []byte) []byte { } return argv } - -// GobEncode encodes e by using gob and returns. -func GobEncode(e interface{}) ([]byte, error) { - var buf bytes.Buffer - err := gob.NewEncoder(&buf).Encode(e) - - return buf.Bytes(), err -} - -// GobDecode decodes a gob-encoded value v. -func GobDecode(v []byte, e interface{}) error { - dec := gob.NewDecoder(bytes.NewBuffer(v)) - return dec.Decode(e) -} diff --git a/internal/common/bytes_test.go b/internal/common/bytes_test.go index 0a669c416..805d0c79a 100644 --- a/internal/common/bytes_test.go +++ b/internal/common/bytes_test.go @@ -1,23 +1 @@ package common - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestGobCodec(t *testing.T) { - a := assert.New(t) - - x := []int{1, 2, 3} - b, err := GobEncode(x) - a.Nil(err) - - y := []int{0, 0, 0} - err = GobDecode(b, &y) - a.Nil(err) - - for i, v := range x { - a.Equal(v, y[i]) - } -} diff --git a/internal/enc/base58.go b/internal/enc/base58.go index 363cf5d6a..bf28f3ce5 100644 --- a/internal/enc/base58.go +++ b/internal/enc/base58.go @@ -1,6 +1,8 @@ package enc -import "github.com/mr-tron/base58/base58" +import ( + "github.com/mr-tron/base58/base58" +) // B58Encode returns human-readable (base58) string from b. Calling with empty or nil slice returns empty string. func B58Encode(b []byte) string { @@ -11,3 +13,8 @@ func B58Encode(b []byte) string { func B58Decode(s string) ([]byte, error) { return base58.Decode(s) } + +func B58DecodeOrNil(s string) []byte { + buf, _ := B58Decode(s) + return buf +} diff --git a/internal/enc/base58check.go b/internal/enc/base58check.go index 723329e38..24bed42b4 100644 --- a/internal/enc/base58check.go +++ b/internal/enc/base58check.go @@ -8,6 +8,16 @@ func B58CheckEncode(version string, data string) (string, error) { return base58check.Encode(version, data) } +func B58CheckEncodeOrNil(version string, data string) string { + buf, _ := B58CheckEncode(version, data) + return buf +} + func B58CheckDecode(encoded string) (string, error) { return base58check.Decode(encoded) } + +func B58CheckDecodeOrNil(encoded string) string { + buf, _ := B58CheckDecode(encoded) + return buf +} diff --git a/internal/enc/base64.go b/internal/enc/base64.go index bc755ebd3..da27e7bed 100644 --- a/internal/enc/base64.go +++ b/internal/enc/base64.go @@ -9,3 +9,9 @@ func B64Encode(s []byte) string { func B64Decode(s string) ([]byte, error) { return base64.StdEncoding.DecodeString(s) } + +// Do not use processing real data, Only use for Logging or Testing. +func B64DecodeOrNil(s string) []byte { + buf, _ := B64Decode(s) + return buf +} diff --git a/internal/enc/gob.go b/internal/enc/gob.go new file mode 100644 index 000000000..def0e8bf0 --- /dev/null +++ b/internal/enc/gob.go @@ -0,0 +1,22 @@ +package enc + +import ( + "bytes" + "encoding/gob" +) + +// GobEncode encodes e by using gob and returns. +func GobEncode(e interface{}) ([]byte, error) { + var buf bytes.Buffer + err := gob.NewEncoder(&buf).Encode(e) + if err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// GobDecode decodes a gob-encoded value v. +func GobDecode(v []byte, e interface{}) error { + dec := gob.NewDecoder(bytes.NewBuffer(v)) + return dec.Decode(e) +} diff --git a/internal/enc/gob_test.go b/internal/enc/gob_test.go new file mode 100644 index 000000000..cfa215281 --- /dev/null +++ b/internal/enc/gob_test.go @@ -0,0 +1,23 @@ +package enc + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGobCodec(t *testing.T) { + a := assert.New(t) + + x := []int{1, 2, 3} + b, err := GobEncode(x) + a.Nil(err) + + y := []int{0, 0, 0} + err = GobDecode(b, &y) + a.Nil(err) + + for i, v := range x { + a.Equal(v, y[i]) + } +} diff --git a/state/statedata.go b/state/statedata.go index 7cbe94260..1f727bda5 100644 --- a/state/statedata.go +++ b/state/statedata.go @@ -2,7 +2,7 @@ package state import ( "github.com/aergoio/aergo-lib/db" - "github.com/aergoio/aergo/v2/internal/common" + "github.com/aergoio/aergo/v2/internal/enc" "github.com/aergoio/aergo/v2/types" "github.com/golang/protobuf/proto" ) @@ -22,7 +22,7 @@ func saveData(store db.DB, key []byte, data interface{}) error { return err } default: - raw, err = common.GobEncode(data) + raw, err = enc.GobEncode(data) if err != nil { return err } @@ -47,7 +47,7 @@ func loadData(store db.DB, key []byte, data interface{}) error { case proto.Message: err = proto.Unmarshal(raw, data.(proto.Message)) default: - err = common.GobDecode(raw, data) + err = enc.GobDecode(raw, data) } return err } diff --git a/types/genesis.go b/types/genesis.go index 4efe500ad..aadf0ac9a 100644 --- a/types/genesis.go +++ b/types/genesis.go @@ -10,7 +10,6 @@ import ( "strings" "time" - "github.com/aergoio/aergo/v2/internal/common" "github.com/aergoio/aergo/v2/internal/enc" ) @@ -281,7 +280,7 @@ func (g *Genesis) ChainID() ([]byte, error) { func (g Genesis) Bytes() []byte { // Omit the Balance to reduce the resulting data size. g.Balance = nil - if b, err := common.GobEncode(g); err == nil { + if b, err := enc.GobEncode(g); err == nil { return b } return nil @@ -373,7 +372,7 @@ func GetTestGenesis() *Genesis { // GetGenesisFromBytes decodes & return Genesis from b. func GetGenesisFromBytes(b []byte) *Genesis { g := &Genesis{} - if err := common.GobDecode(b, g); err == nil { + if err := enc.GobDecode(b, g); err == nil { return g } return nil