diff --git a/modules/core/04-channel/keeper/timeout_test.go b/modules/core/04-channel/keeper/timeout_test.go index 1565bc5adf3..e6dc91c18de 100644 --- a/modules/core/04-channel/keeper/timeout_test.go +++ b/modules/core/04-channel/keeper/timeout_test.go @@ -318,7 +318,7 @@ func (suite *KeeperTestSuite) TestTimeoutExecuted() { channel.State = types.FLUSHING path.EndpointA.SetChannel(channel) path.EndpointA.SetChannelCounterpartyUpgrade(types.Upgrade{ - Timeout: types.DefaultTimeout, + Timeout: types.NewTimeout(clienttypes.ZeroHeight(), uint64(suite.chainA.GetContext().BlockTime().UnixNano())+types.DefaultTimeout.Timestamp), }) }, func(packetCommitment []byte, err error) { @@ -422,10 +422,10 @@ func (suite *KeeperTestSuite) TestTimeoutExecuted() { path.EndpointA.SetChannel(channel) path.EndpointA.SetChannelUpgrade(types.Upgrade{ Fields: path.EndpointA.GetProposedUpgrade().Fields, - Timeout: types.DefaultTimeout, + Timeout: types.NewTimeout(clienttypes.ZeroHeight(), uint64(suite.chainA.GetContext().BlockTime().UnixNano())+types.DefaultTimeout.Timestamp), }) path.EndpointA.SetChannelCounterpartyUpgrade(types.Upgrade{ - Timeout: types.DefaultTimeout, + Timeout: types.NewTimeout(clienttypes.ZeroHeight(), uint64(suite.chainB.GetContext().BlockTime().UnixNano())+types.DefaultTimeout.Timestamp), }) }, func(packetCommitment []byte, err error) { diff --git a/modules/core/04-channel/keeper/upgrade.go b/modules/core/04-channel/keeper/upgrade.go index 3a8bc80f123..06b434e1d5c 100644 --- a/modules/core/04-channel/keeper/upgrade.go +++ b/modules/core/04-channel/keeper/upgrade.go @@ -769,19 +769,16 @@ func (k Keeper) startFlushing(ctx sdk.Context, portID, channelID string, upgrade } upgrade.LatestSequenceSend = nextSequenceSend - 1 - upgrade.Timeout = k.getUpgradeTimeout(ctx) + upgrade.Timeout = k.getAbsoluteUpgradeTimeout(ctx) k.SetUpgrade(ctx, portID, channelID, *upgrade) return nil } -// getUpgradeTimeout returns the absolute timeout for the given upgrade. -func (k Keeper) getUpgradeTimeout(ctx sdk.Context) types.Timeout { - // relativeTimeout := k.GetParams(ctx).UpgradeTimeout - // absoluteTimeoutHeight := clienttypes.NewHeight(clienttypes.ParseChainID(ctx.ChainID()), uint64(ctx.BlockHeight())+relativeTimeout.Height.RevisionHeight) - // absoluteTimeoutTimestamp := uint64(ctx.BlockTime().UnixNano()) + relativeTimeout.Timestamp - // return types.NewTimeout(absoluteTimeoutHeight, absoluteTimeoutTimestamp) - return k.GetParams(ctx).UpgradeTimeout +// getAbsoluteUpgradeTimeout returns the absolute timeout for the given upgrade. +func (k Keeper) getAbsoluteUpgradeTimeout(ctx sdk.Context) types.Timeout { + upgradeTimeout := k.GetParams(ctx).UpgradeTimeout + return types.NewTimeout(clienttypes.ZeroHeight(), uint64(ctx.BlockTime().UnixNano())+upgradeTimeout.Timestamp) } // syncUpgradeSequence ensures current upgrade handshake only continues if both channels are using the same upgrade sequence, diff --git a/modules/core/04-channel/keeper/upgrade_test.go b/modules/core/04-channel/keeper/upgrade_test.go index bcdd7daaa30..5774ac48814 100644 --- a/modules/core/04-channel/keeper/upgrade_test.go +++ b/modules/core/04-channel/keeper/upgrade_test.go @@ -1764,7 +1764,9 @@ func (suite *KeeperTestSuite) TestStartFlush() { suite.Require().Equal(types.FLUSHING, channel.State) suite.Require().Equal(nextSequenceSend-1, upgrade.LatestSequenceSend) - suite.Require().Equal(types.DefaultTimeout, upgrade.Timeout) + expectedTimeoutTimestamp := types.DefaultTimeout.Timestamp + uint64(suite.chainB.GetContext().BlockTime().UnixNano()) + suite.Require().Equal(expectedTimeoutTimestamp, upgrade.Timeout.Timestamp) + suite.Require().Equal(clienttypes.ZeroHeight(), upgrade.Timeout.Height, "only timestamp should be set") suite.Require().NoError(err) } }) diff --git a/modules/core/04-channel/types/params.go b/modules/core/04-channel/types/params.go index cdd4c0230ca..16afc1676ad 100644 --- a/modules/core/04-channel/types/params.go +++ b/modules/core/04-channel/types/params.go @@ -7,9 +7,9 @@ import ( clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ) -// TODO: determine sane default value for upgrade timeout. and make this relative. +// TODO: determine sane default value for upgrade timeout. -var DefaultTimeout = NewTimeout(clienttypes.ZeroHeight(), uint64(time.Now().Add(time.Hour).UnixNano())) +var DefaultTimeout = NewTimeout(clienttypes.ZeroHeight(), uint64(time.Hour.Nanoseconds())) // NewParams creates a new parameter configuration for the channel submodule func NewParams(upgradeTimeout Timeout) Params {