syntax = "proto3"; package cosmos.epochs.v1beta1; import "gogoproto/gogo.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/cosmos/cosmos-sdk/x/epochs/types"; // EpochInfo is a struct that describes the data going into // a timer defined by the x/epochs module. message EpochInfo { // identifier is a unique reference to this particular timer. string identifier = 1; // start_time is the time at which the timer first ever ticks. // If start_time is in the future, the epoch will not begin until the start // time. google.protobuf.Timestamp start_time = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; // duration is the time in between epoch ticks. // In order for intended behavior to be met, duration should // be greater than the chains expected block time. // Duration must be non-zero. google.protobuf.Duration duration = 3 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.jsontag) = "duration,omitempty"]; // current_epoch is the current epoch number, or in other words, // how many times has the timer 'ticked'. // The first tick (current_epoch=1) is defined as // the first block whose blocktime is greater than the EpochInfo start_time. int64 current_epoch = 4; // current_epoch_start_time describes the start time of the current timer // interval. The interval is (current_epoch_start_time, // current_epoch_start_time + duration] When the timer ticks, this is set to // current_epoch_start_time = last_epoch_start_time + duration only one timer // tick for a given identifier can occur per block. // // NOTE! The current_epoch_start_time may diverge significantly from the // wall-clock time the epoch began at. Wall-clock time of epoch start may be // >> current_epoch_start_time. Suppose current_epoch_start_time = 10, // duration = 5. Suppose the chain goes offline at t=14, and comes back online // at t=30, and produces blocks at every successive time. (t=31, 32, etc.) // * The t=30 block will start the epoch for (10, 15] // * The t=31 block will start the epoch for (15, 20] // * The t=32 block will start the epoch for (20, 25] // * The t=33 block will start the epoch for (25, 30] // * The t=34 block will start the epoch for (30, 35] // * The **t=36** block will start the epoch for (35, 40] google.protobuf.Timestamp current_epoch_start_time = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; // epoch_counting_started is a boolean, that indicates whether this // epoch timer has began yet. bool epoch_counting_started = 6; reserved 7; // current_epoch_start_height is the block height at which the current epoch // started. (The block height at which the timer last ticked) int64 current_epoch_start_height = 8; } // GenesisState defines the epochs module's genesis state. message GenesisState { repeated EpochInfo epochs = 1 [(gogoproto.nullable) = false]; }