mukan-ibc/modules/core/exported/client.go
Mukan Erkin Törük 88dd97a9f8
Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:22 +03:00

186 lines
7.3 KiB
Go

package exported
import (
"github.com/cosmos/gogoproto/proto"
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
)
// Status represents the status of a client
type Status string
const (
// Solomachine is used to indicate that the light client is a solo machine.
Solomachine string = "06-solomachine"
// Tendermint is used to indicate that the client uses the Tendermint Consensus Algorithm.
Tendermint string = "07-tendermint"
// Localhost is the client type for the localhost client.
Localhost string = "09-localhost"
// LocalhostClientID is the sentinel client ID for the localhost client.
LocalhostClientID string = Localhost
// Active is a status type of a client. An active client is allowed to be used.
Active Status = "Active"
// Frozen is a status type of a client. A frozen client is not allowed to be used.
Frozen Status = "Frozen"
// Expired is a status type of a client. An expired client is not allowed to be used.
Expired Status = "Expired"
// Unknown indicates there was an error in determining the status of a client.
Unknown Status = "Unknown"
// Unauthorized indicates that the client type is not registered as an allowed client type.
Unauthorized Status = "Unauthorized"
)
// LightClientModule is an interface which core IBC uses to interact with light client modules.
// Light client modules must implement this interface to integrate with core IBC.
type LightClientModule interface {
// Initialize is called upon client creation, it allows the client to perform validation on the client state and initial consensus state.
// The light client module is responsible for setting any client-specific data in the store. This includes the client state,
// initial consensus state and any associated metadata.
Initialize(ctx sdk.Context, clientID string, clientState, consensusState []byte) error
// VerifyClientMessage must verify a ClientMessage. A ClientMessage could be a Header, Misbehaviour, or batch update.
// It must handle each type of ClientMessage appropriately. Calls to CheckForMisbehaviour, UpdateState, and UpdateStateOnMisbehaviour
// will assume that the content of the ClientMessage has been verified and can be trusted. An error should be returned
// if the ClientMessage fails to verify.
VerifyClientMessage(ctx sdk.Context, clientID string, clientMsg ClientMessage) error
// Checks for evidence of a misbehaviour in Header or Misbehaviour type. It assumes the ClientMessage
// has already been verified.
CheckForMisbehaviour(ctx sdk.Context, clientID string, clientMsg ClientMessage) bool
// UpdateStateOnMisbehaviour should perform appropriate state changes on a client state given that misbehaviour has been detected and verified
UpdateStateOnMisbehaviour(ctx sdk.Context, clientID string, clientMsg ClientMessage)
// UpdateState updates and stores as necessary any associated information for an IBC client, such as the ClientState and corresponding ConsensusState.
// Upon successful update, a list of consensus heights is returned. It assumes the ClientMessage has already been verified.
UpdateState(ctx sdk.Context, clientID string, clientMsg ClientMessage) []Height
// VerifyMembership is a generic proof verification method which verifies a proof of the existence of a value at a given CommitmentPath at the specified height.
// The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24).
VerifyMembership(
ctx sdk.Context,
clientID string,
height Height,
delayTimePeriod uint64,
delayBlockPeriod uint64,
proof []byte,
path Path,
value []byte,
) error
// VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height.
// The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24).
VerifyNonMembership(
ctx sdk.Context,
clientID string,
height Height,
delayTimePeriod uint64,
delayBlockPeriod uint64,
proof []byte,
path Path,
) error
// Status must return the status of the client. Only Active clients are allowed to process packets.
Status(ctx sdk.Context, clientID string) Status
// LatestHeight returns the latest height of the client. If no client is present for the provided client identifier a zero value height may be returned.
LatestHeight(ctx sdk.Context, clientID string) Height
// TimestampAtHeight must return the timestamp for the consensus state associated with the provided height.
TimestampAtHeight(
ctx sdk.Context,
clientID string,
height Height,
) (uint64, error)
// RecoverClient must verify that the provided substitute may be used to update the subject client.
// The light client module must set the updated client and consensus states within the clientStore for the subject client.
RecoverClient(ctx sdk.Context, clientID, substituteClientID string) error
// Upgrade functions
// NOTE: proof heights are not included as upgrade to a new revision is expected to pass only on the last
// height committed by the current revision. Clients are responsible for ensuring that the planned last
// height of the current revision is somehow encoded in the proof verification process.
// This is to ensure that no premature upgrades occur, since upgrade plans committed to by the counterparty
// may be cancelled or modified before the last planned height.
// If the upgrade is verified, the upgraded client and consensus states must be set in the client store.
VerifyUpgradeAndUpdateState(
ctx sdk.Context,
clientID string,
newClient []byte,
newConsState []byte,
upgradeClientProof,
upgradeConsensusStateProof []byte,
) error
}
// ClientState defines the required common functions for light clients.
type ClientState interface {
proto.Message
ClientType() string
Validate() error
}
// ConsensusState is the state of the consensus process
type ConsensusState interface {
proto.Message
ClientType() string // Consensus kind
// GetTimestamp returns the timestamp (in nanoseconds) of the consensus state
//
// Deprecated: GetTimestamp is not used outside of the light client implementations,
// and therefore it doesn't need to be an interface function.
GetTimestamp() uint64
ValidateBasic() error
}
// ClientMessage is an interface used to update an IBC client.
// The update may be done by a single header, a batch of headers, misbehaviour, or any type which when verified produces
// a change to state of the IBC client
type ClientMessage interface {
proto.Message
ClientType() string
ValidateBasic() error
}
// Height is a wrapper interface over clienttypes.Height
// all clients must use the concrete implementation in types
type Height interface {
IsZero() bool
LT(Height) bool
LTE(Height) bool
EQ(Height) bool
GT(Height) bool
GTE(Height) bool
GetRevisionNumber() uint64
GetRevisionHeight() uint64
Increment() Height
Decrement() (Height, bool)
String() string
}
// GenesisMetadata is a wrapper interface over clienttypes.GenesisMetadata
// all clients must use the concrete implementation in types
type GenesisMetadata interface {
// return store key that contains metadata without clientID-prefix
GetKey() []byte
// returns metadata value
GetValue() []byte
}
// String returns the string representation of a client status.
func (s Status) String() string {
return string(s)
}