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
186 lines
7.3 KiB
Go
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)
|
|
}
|