Remove evidence codec (#6146)
This commit is contained in:
parent
2a82c691a2
commit
2f718c8d66
|
@ -251,7 +251,7 @@ func NewSimApp(
|
|||
|
||||
// create evidence keeper with router
|
||||
evidenceKeeper := evidence.NewKeeper(
|
||||
evidence.NewAnyCodec(appCodec), keys[evidence.StoreKey], &app.StakingKeeper, app.SlashingKeeper,
|
||||
appCodec, keys[evidence.StoreKey], &app.StakingKeeper, app.SlashingKeeper,
|
||||
)
|
||||
evidenceRouter := evidence.NewRouter().
|
||||
AddRoute(ibcclient.RouterKey, ibcclient.HandlerClientMisbehaviour(app.IBCKeeper.ClientKeeper))
|
||||
|
|
|
@ -28,7 +28,6 @@ var (
|
|||
NewRouter = types.NewRouter
|
||||
NewQueryEvidenceParams = types.NewQueryEvidenceParams
|
||||
NewQueryAllEvidenceParams = types.NewQueryAllEvidenceParams
|
||||
NewAnyCodec = types.NewAnyCodec
|
||||
RegisterCodec = types.RegisterCodec
|
||||
RegisterInterfaces = types.RegisterInterfaces
|
||||
ModuleCdc = types.ModuleCdc
|
||||
|
@ -50,6 +49,4 @@ type (
|
|||
Handler = types.Handler
|
||||
Router = types.Router
|
||||
Equivocation = types.Equivocation
|
||||
Codec = types.Codec
|
||||
AnyCodec = types.AnyCodec
|
||||
)
|
||||
|
|
|
@ -54,8 +54,7 @@ func (suite *HandlerTestSuite) SetupTest() {
|
|||
|
||||
// recreate keeper in order to use custom testing types
|
||||
evidenceKeeper := evidence.NewKeeper(
|
||||
evidence.NewAnyCodec(app.AppCodec()), app.GetKey(evidence.StoreKey),
|
||||
app.StakingKeeper, app.SlashingKeeper,
|
||||
app.AppCodec(), app.GetKey(evidence.StoreKey), app.StakingKeeper, app.SlashingKeeper,
|
||||
)
|
||||
router := evidence.NewRouter()
|
||||
router = router.AddRoute(types.RouteEquivocation, testEquivocationHandler(*evidenceKeeper))
|
||||
|
|
|
@ -3,9 +3,12 @@ package keeper
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gogo/protobuf/proto"
|
||||
tmbytes "github.com/tendermint/tendermint/libs/bytes"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/store/prefix"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
@ -17,7 +20,7 @@ import (
|
|||
// managing persistence, state transitions and query handling for the evidence
|
||||
// module.
|
||||
type Keeper struct {
|
||||
cdc types.Codec
|
||||
cdc codec.Marshaler
|
||||
storeKey sdk.StoreKey
|
||||
router types.Router
|
||||
stakingKeeper types.StakingKeeper
|
||||
|
@ -25,7 +28,7 @@ type Keeper struct {
|
|||
}
|
||||
|
||||
func NewKeeper(
|
||||
cdc types.Codec, storeKey sdk.StoreKey, stakingKeeper types.StakingKeeper,
|
||||
cdc codec.Marshaler, storeKey sdk.StoreKey, stakingKeeper types.StakingKeeper,
|
||||
slashingKeeper types.SlashingKeeper,
|
||||
) *Keeper {
|
||||
|
||||
|
@ -147,7 +150,7 @@ func (k Keeper) GetAllEvidence(ctx sdk.Context) (evidence []exported.Evidence) {
|
|||
// MustUnmarshalEvidence attempts to decode and return an Evidence object from
|
||||
// raw encoded bytes. It panics on error.
|
||||
func (k Keeper) MustUnmarshalEvidence(bz []byte) exported.Evidence {
|
||||
evidence, err := k.cdc.UnmarshalEvidence(bz)
|
||||
evidence, err := k.UnmarshalEvidence(bz)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("failed to decode evidence: %w", err))
|
||||
}
|
||||
|
@ -158,7 +161,7 @@ func (k Keeper) MustUnmarshalEvidence(bz []byte) exported.Evidence {
|
|||
// MustMarshalEvidence attempts to encode an Evidence object and returns the
|
||||
// raw encoded bytes. It panics on error.
|
||||
func (k Keeper) MustMarshalEvidence(evidence exported.Evidence) []byte {
|
||||
bz, err := k.cdc.MarshalEvidence(evidence)
|
||||
bz, err := k.MarshalEvidence(evidence)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("failed to encode evidence: %w", err))
|
||||
}
|
||||
|
@ -166,6 +169,52 @@ func (k Keeper) MustMarshalEvidence(evidence exported.Evidence) []byte {
|
|||
return bz
|
||||
}
|
||||
|
||||
func (k Keeper) UnmarshalEvidence(bz []byte) (exported.Evidence, error) {
|
||||
return k.cdc.UnmarshalEvidence(bz)
|
||||
// MarshalEvidence marshals an Evidence interface. If the given type implements
|
||||
// the Marshaler interface, it is treated as a Proto-defined message and
|
||||
// serialized that way. Otherwise, it falls back on the internal Amino codec.
|
||||
func (k Keeper) MarshalEvidence(evidenceI exported.Evidence) ([]byte, error) {
|
||||
return codectypes.MarshalAny(evidenceI)
|
||||
}
|
||||
|
||||
// UnmarshalEvidence returns an Evidence interface from raw encoded evidence
|
||||
// bytes of a Proto-based Evidence type. An error is returned upon decoding
|
||||
// failure.
|
||||
func (k Keeper) UnmarshalEvidence(bz []byte) (exported.Evidence, error) {
|
||||
var evi exported.Evidence
|
||||
if err := codectypes.UnmarshalAny(k.cdc, &evi, bz); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return evi, nil
|
||||
}
|
||||
|
||||
// MarshalEvidenceJSON JSON encodes an evidence object implementing the Evidence
|
||||
// interface.
|
||||
func (k Keeper) MarshalEvidenceJSON(evidence exported.Evidence) ([]byte, error) {
|
||||
msg, ok := evidence.(proto.Message)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("cannot proto marshal %T", evidence)
|
||||
}
|
||||
|
||||
any, err := codectypes.NewAnyWithValue(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return k.cdc.MarshalJSON(any)
|
||||
}
|
||||
|
||||
// UnmarshalEvidenceJSON returns an Evidence from JSON encoded bytes
|
||||
func (k Keeper) UnmarshalEvidenceJSON(bz []byte) (exported.Evidence, error) {
|
||||
var any codectypes.Any
|
||||
if err := k.cdc.UnmarshalJSON(bz, &any); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var evi exported.Evidence
|
||||
if err := k.cdc.UnpackAny(&any, &evi); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return evi, nil
|
||||
}
|
||||
|
|
|
@ -82,8 +82,7 @@ func (suite *KeeperTestSuite) SetupTest() {
|
|||
|
||||
// recreate keeper in order to use custom testing types
|
||||
evidenceKeeper := evidence.NewKeeper(
|
||||
evidence.NewAnyCodec(app.AppCodec()), app.GetKey(evidence.StoreKey),
|
||||
app.StakingKeeper, app.SlashingKeeper,
|
||||
app.AppCodec(), app.GetKey(evidence.StoreKey), app.StakingKeeper, app.SlashingKeeper,
|
||||
)
|
||||
router := evidence.NewRouter()
|
||||
router = router.AddRoute(types.RouteEquivocation, testEquivocationHandler(*evidenceKeeper))
|
||||
|
|
|
@ -16,9 +16,8 @@ import (
|
|||
)
|
||||
|
||||
func TestDecodeStore(t *testing.T) {
|
||||
m, _ := simapp.MakeCodecs()
|
||||
cdc := types.NewAnyCodec(m)
|
||||
dec := simulation.NewDecodeStore(cdc)
|
||||
app := simapp.Setup(false)
|
||||
dec := simulation.NewDecodeStore(app.EvidenceKeeper)
|
||||
|
||||
delPk1 := ed25519.GenPrivKey().PubKey()
|
||||
|
||||
|
@ -29,7 +28,7 @@ func TestDecodeStore(t *testing.T) {
|
|||
ConsensusAddress: sdk.ConsAddress(delPk1.Address()),
|
||||
}
|
||||
|
||||
evBz, err := cdc.MarshalEvidence(ev)
|
||||
evBz, err := app.EvidenceKeeper.MarshalEvidence(ev)
|
||||
require.NoError(t, err)
|
||||
|
||||
kvPairs := tmkv.Pairs{
|
||||
|
|
|
@ -1,26 +1,12 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gogo/protobuf/proto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||
)
|
||||
|
||||
// Codec defines the interface required to serialize evidence
|
||||
type Codec interface {
|
||||
codec.Marshaler
|
||||
|
||||
MarshalEvidence(exported.Evidence) ([]byte, error)
|
||||
UnmarshalEvidence([]byte) (exported.Evidence, error)
|
||||
MarshalEvidenceJSON(exported.Evidence) ([]byte, error)
|
||||
UnmarshalEvidenceJSON([]byte) (exported.Evidence, error)
|
||||
}
|
||||
|
||||
// RegisterCodec registers all the necessary types and interfaces for the
|
||||
// evidence module.
|
||||
func RegisterCodec(cdc *codec.Codec) {
|
||||
|
@ -55,60 +41,3 @@ func init() {
|
|||
codec.RegisterCrypto(amino)
|
||||
amino.Seal()
|
||||
}
|
||||
|
||||
// AnyCodec is an evidence Codec that marshals evidence using google.protobuf.Any
|
||||
type AnyCodec struct {
|
||||
codec.Marshaler
|
||||
}
|
||||
|
||||
// NewAnyCodec returns a new AnyCodec
|
||||
func NewAnyCodec(marshaler codec.Marshaler) Codec {
|
||||
return AnyCodec{Marshaler: marshaler}
|
||||
}
|
||||
|
||||
// MarshalEvidence marshals an Evidence interface. If the given type implements
|
||||
// the Marshaler interface, it is treated as a Proto-defined message and
|
||||
// serialized that way. Otherwise, it falls back on the internal Amino codec.
|
||||
func (c AnyCodec) MarshalEvidence(evidenceI exported.Evidence) ([]byte, error) {
|
||||
return types.MarshalAny(evidenceI)
|
||||
}
|
||||
|
||||
// UnmarshalEvidence returns an Evidence interface from raw encoded evidence
|
||||
// bytes of a Proto-based Evidence type. An error is returned upon decoding
|
||||
// failure.
|
||||
func (c AnyCodec) UnmarshalEvidence(bz []byte) (exported.Evidence, error) {
|
||||
var evi exported.Evidence
|
||||
err := types.UnmarshalAny(c, &evi, bz)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return evi, nil
|
||||
}
|
||||
|
||||
// MarshalEvidenceJSON JSON encodes an evidence object implementing the Evidence
|
||||
// interface.
|
||||
func (c AnyCodec) MarshalEvidenceJSON(evidence exported.Evidence) ([]byte, error) {
|
||||
msg, ok := evidence.(proto.Message)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("cannot proto marshal %T", evidence)
|
||||
}
|
||||
any, err := types.NewAnyWithValue(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c.MarshalJSON(any)
|
||||
}
|
||||
|
||||
// UnmarshalEvidenceJSON returns an Evidence from JSON encoded bytes
|
||||
func (c AnyCodec) UnmarshalEvidenceJSON(bz []byte) (exported.Evidence, error) {
|
||||
var any types.Any
|
||||
if err := c.UnmarshalJSON(bz, &any); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var evi exported.Evidence
|
||||
if err := c.UnpackAny(&any, &evi); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return evi, nil
|
||||
}
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
package types_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/exported"
|
||||
"github.com/cosmos/cosmos-sdk/x/evidence/types"
|
||||
)
|
||||
|
||||
func TestCodec(t *testing.T) {
|
||||
app := simapp.Setup(false)
|
||||
evidenceCodec := types.NewAnyCodec(app.AppCodec())
|
||||
pk := ed25519.GenPrivKey()
|
||||
|
||||
var e exported.Evidence = &types.Equivocation{
|
||||
Height: 10,
|
||||
Time: time.Now().UTC(),
|
||||
Power: 100000,
|
||||
ConsensusAddress: pk.PubKey().Address().Bytes(),
|
||||
}
|
||||
bz, err := evidenceCodec.MarshalEvidence(e)
|
||||
require.NoError(t, err)
|
||||
|
||||
other, err := evidenceCodec.UnmarshalEvidence(bz)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, e, other)
|
||||
}
|
Loading…
Reference in New Issue