Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 26 additions & 10 deletions modules/light-clients/xx-proxy/types/client_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,19 @@ func NewClientState(upstreamClientID string) *ClientState {
return &ClientState{UpstreamClientId: upstreamClientID}
}

func (cs *ClientState) IsInitialized() bool {
return cs.ProxyClientState != nil
}

func (cs *ClientState) ClientType() string {
return ProxyClientType
}

func (cs *ClientState) GetProxyClientState() exported.ClientState {
state, err := clienttypes.UnpackClientState(cs.ProxyClientState)
if cs.ProxyClientState == nil {
return nil
}
clientState, err := clienttypes.UnpackClientState(cs.ProxyClientState)
if err != nil {
panic(err)
}
return state
return clientState
}

// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
Expand All @@ -44,11 +43,9 @@ func (cs *ClientState) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
return nil
}

// GetLatestHeight returns the latest height of the upstream instead of the proxy
func (cs *ClientState) GetLatestHeight() exported.Height {
if cs.ProxyClientState == nil {
return clienttypes.NewHeight(0, 0)
}
return cs.GetProxyClientState().GetLatestHeight()
return cs.UpstreamHeight
}

func (cs *ClientState) Status(
Expand All @@ -60,6 +57,24 @@ func (cs *ClientState) Status(
}

func (cs *ClientState) Validate() error {
if cs.ProxyClientState == nil {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "ProxyClientState must be non-empty")
}
if cs.UpstreamClientId == "" {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "UpstreamClientId must be non-empty")
}
if cs.ProxyPrefix == nil {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "ProxyPrefix must be non-empty")
}
if cs.IbcPrefix == nil {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "IbcPrefix must be non-empty")
}
if cs.UpstreamHeight.IsZero() {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "UpstreamHeight must be non-empty")
}
if cs.UpstreamTimestamp == 0 {
return sdkerrors.Wrap(clienttypes.ErrInvalidClient, "UpstreamTimestamp must be non-zero")
}
return cs.GetProxyClientState().Validate()
}

Expand Down Expand Up @@ -87,6 +102,7 @@ func (cs *ClientState) Initialize(ctx sdk.Context, cdc codec.BinaryCodec, client
if _, err := clienttypes.UnpackConsensusState(cons.ProxyConsensusState); err != nil {
return sdkerrors.Wrapf(clienttypes.ErrInvalidConsensus, "failed to unpack client state: %v", err)
}
SetUpstreamBlockTime(clientStore, cs.UpstreamHeight, cs.UpstreamTimestamp)
return nil
}

Expand Down
37 changes: 37 additions & 0 deletions modules/light-clients/xx-proxy/types/header.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package types

import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
clienttypes "github.com/cosmos/ibc-go/modules/core/02-client/types"
"github.com/cosmos/ibc-go/modules/core/exported"
)

var _ exported.Header = (*Header)(nil)

func (h *Header) ClientType() string {
return ProxyClientType
}

func (h *Header) GetHeight() exported.Height {
return h.GetProxyHeader().GetHeight()
}

func (h *Header) ValidateBasic() error {
return nil
}

func (h *Header) GetProxyHeader() exported.Header {
header, err := clienttypes.UnpackHeader(h.ProxyHeader)
if err != nil {
panic(err)
}
return header
}

// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
func (h *Header) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
if err := unpacker.UnpackAny(h.ProxyHeader, new(exported.Header)); err != nil {
return err
}
return nil
}
Loading