Skip to content

Commit 9f4c22b

Browse files
Yurist-85Petr Ivanovkioqq
authored
Extend Vesting Lockup periods (#312)
* revesting upgrade draft * add test coverage * chore: add packet forwarding middleware * fix: remove invalid directive toolchain * chore: delint code, remove redundant dependencies in tests * fix duration in tests * set fixed timestamp in upgrade test setup * chore: bump version * chore: add logs * chore: rewrite for better readability * chore: rewrite for better readability * chore: rewrite for better readability * add liquidvesting genesis export and import functionalities * fix linter * fix liquidation schedule shift flow --------- Co-authored-by: Petr Ivanov <[email protected]> Co-authored-by: Evgeniy Abramov <[email protected]>
1 parent 03bba90 commit 9f4c22b

27 files changed

+1121
-39
lines changed

Diff for: .github/workflows/build.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
- uses: actions/checkout@v4
2121
- uses: actions/setup-go@v5
2222
with:
23-
go-version: '1.20'
23+
go-version: '1.21'
2424
- uses: technote-space/get-diff-action@v5
2525
id: git_diff
2626
with:

Diff for: .github/workflows/goreleaser.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- name: Set up Go
1616
uses: actions/setup-go@v5
1717
with:
18-
go-version: '1.20'
18+
go-version: '1.21'
1919
check-latest: true
2020
- name: Pull LFS files
2121
run: git lfs pull

Diff for: .github/workflows/lint.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
steps:
1616
- uses: actions/setup-go@v5
1717
with:
18-
go-version: '1.20'
18+
go-version: '1.21'
1919
- uses: actions/checkout@v4
2020
- uses: technote-space/get-diff-action@v5
2121
with:

Diff for: .github/workflows/snyk.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name: Snyk check
22

33
on: push
44

5+
56
jobs:
67
security:
78
runs-on: ubuntu-latest
@@ -10,7 +11,7 @@ jobs:
1011
- uses: snyk/actions/setup@master
1112
- uses: actions/setup-go@v5
1213
with:
13-
go-version: '1.20'
14+
go-version: '1.21'
1415
- name: Snyk monitor
1516
run: snyk code test
1617
env:

Diff for: .github/workflows/test.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
steps:
2121
- uses: actions/setup-go@v5
2222
with:
23-
go-version: '1.20'
23+
go-version: '1.21'
2424
- name: Display Go Version
2525
run: go version
2626
- name: Install tparse
@@ -37,7 +37,7 @@ jobs:
3737
- name: Set up go
3838
uses: actions/setup-go@v5
3939
with:
40-
go-version: '1.20'
40+
go-version: '1.21'
4141
- name: Checkout source
4242
uses: actions/checkout@v4
4343
- name: Generate LFS file list

Diff for: .golangci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ linters-settings:
5252
staticcheck:
5353
checks: ["All", "-SA1019"]
5454
gofumpt:
55-
lang-version: "1.20"
55+
lang-version: "1.21"
5656
gomodguard:
5757
blocked:
5858
versions: # List of blocked module version constraints

Diff for: .snyk

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
version: 1.19.0
1+
version: v1.25.0
2+
language-settings:
3+
go: "1.21"
24
exclude:
35
global:
46
- client/export.go

Diff for: Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ DIFF_TAG=$(shell git rev-list --tags="v*" --max-count=1 --not $(shell git rev-li
66
DEFAULT_TAG=$(shell git rev-list --tags="v*" --max-count=1)
77
# VERSION ?= $(shell echo $(shell git describe --tags $(or $(DIFF_TAG), $(DEFAULT_TAG))) | sed 's/^v//')
88

9-
VERSION := "1.7.3"
9+
VERSION := "1.7.4"
1010
CBFTVERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::')
1111
COMMIT := $(shell git log -1 --format='%H')
1212
LEDGER_ENABLED ?= true

Diff for: app/app.go

+49-2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ import (
114114
icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types"
115115
icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types"
116116

117+
"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward"
118+
packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper"
119+
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
120+
117121
"github.com/cosmos/cosmos-sdk/x/consensus"
118122
consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
119123
consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
@@ -162,6 +166,7 @@ import (
162166
v171 "github.com/haqq-network/haqq/app/upgrades/v1.7.1"
163167
v172 "github.com/haqq-network/haqq/app/upgrades/v1.7.2"
164168
v173 "github.com/haqq-network/haqq/app/upgrades/v1.7.3"
169+
v174 "github.com/haqq-network/haqq/app/upgrades/v1.7.4"
165170

166171
// NOTE: override ICS20 keeper to support IBC transfers of ERC20 tokens
167172
"github.com/haqq-network/haqq/x/ibc/transfer"
@@ -225,6 +230,7 @@ var (
225230
ibc.AppModuleBasic{},
226231
ibctm.AppModuleBasic{},
227232
ica.AppModuleBasic{},
233+
packetforward.AppModuleBasic{},
228234
authzmodule.AppModuleBasic{},
229235
feegrantmodule.AppModuleBasic{},
230236
upgrade.AppModuleBasic{},
@@ -301,6 +307,7 @@ type Haqq struct {
301307
AuthzKeeper authzkeeper.Keeper
302308
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
303309
ICAHostKeeper icahostkeeper.Keeper
310+
PacketForwardKeeper *packetforwardkeeper.Keeper
304311
EvidenceKeeper evidencekeeper.Keeper
305312
TransferKeeper transferkeeper.Keeper
306313
ConsensusParamsKeeper consensusparamkeeper.Keeper
@@ -383,6 +390,7 @@ func NewHaqq(
383390
feegrant.StoreKey, authzkeeper.StoreKey, crisistypes.StoreKey,
384391
// ibc keys
385392
ibcexported.StoreKey, ibctransfertypes.StoreKey,
393+
packetforwardtypes.StoreKey,
386394
// ica keys
387395
icahosttypes.StoreKey,
388396
// ethermint keys
@@ -561,6 +569,19 @@ func NewHaqq(
561569
),
562570
)
563571

572+
// Initialize the packet forward middleware Keeper
573+
// It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
574+
app.PacketForwardKeeper = packetforwardkeeper.NewKeeper(
575+
appCodec,
576+
keys[packetforwardtypes.StoreKey],
577+
nil, // will be zero-value here, reference is set later on with SetTransferKeeper.
578+
app.IBCKeeper.ChannelKeeper,
579+
app.DistrKeeper,
580+
app.BankKeeper,
581+
app.IBCKeeper.ChannelKeeper,
582+
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
583+
)
584+
564585
// Create Transfer Stack
565586

566587
// SendPacket, since it is originating from the application to core IBC:
@@ -571,12 +592,14 @@ func NewHaqq(
571592

572593
app.TransferKeeper = transferkeeper.NewKeeper(
573594
appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName),
574-
app.IBCKeeper.ChannelKeeper, // ICS4 Wrapper
595+
app.PacketForwardKeeper, // ICS4 Wrapper
575596
app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
576597
app.AccountKeeper, app.BankKeeper, scopedTransferKeeper,
577598
app.Erc20Keeper, // Add ERC20 Keeper for ERC20 transfers
578599
)
579600

601+
app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper)
602+
580603
transferModule := transfer.NewAppModule(app.TransferKeeper)
581604

582605
// Create the app.ICAHostKeeper
@@ -595,14 +618,21 @@ func NewHaqq(
595618
icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
596619

597620
// transfer stack contains (from top to bottom):
598-
// - IBC Firewall Middleware
599621
// - Transfer
622+
// - Packet Forward Middleware
600623
// - ERC20 Middleware
601624

602625
// create IBC module from bottom to top of stack
603626
var transferStack porttypes.IBCModule
604627

605628
transferStack = transfer.NewIBCModule(app.TransferKeeper)
629+
transferStack = packetforward.NewIBCMiddleware(
630+
transferStack,
631+
app.PacketForwardKeeper,
632+
0, // retries on timeout
633+
packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, // forward timeout
634+
packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, // refund timeout
635+
)
606636
transferStack = erc20.NewIBCMiddleware(app.Erc20Keeper, transferStack)
607637

608638
// // Create static IBC router, add transfer route, then set and seal it
@@ -655,6 +685,7 @@ func NewHaqq(
655685
ibc.NewAppModule(app.IBCKeeper),
656686
ica.NewAppModule(nil, &app.ICAHostKeeper),
657687
transferModule,
688+
packetforward.NewAppModule(app.PacketForwardKeeper, app.GetSubspace(packetforwardtypes.ModuleName)),
658689
// Ethermint app modules
659690
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper, app.GetSubspace(evmtypes.ModuleName)),
660691
feemarket.NewAppModule(app.FeeMarketKeeper, app.GetSubspace(feemarkettypes.ModuleName)),
@@ -689,6 +720,7 @@ func NewHaqq(
689720
ibcexported.ModuleName,
690721
// no-op modules
691722
ibctransfertypes.ModuleName,
723+
packetforwardtypes.ModuleName,
692724
icatypes.ModuleName,
693725
authtypes.ModuleName,
694726
banktypes.ModuleName,
@@ -717,6 +749,7 @@ func NewHaqq(
717749
// no-op modules
718750
ibcexported.ModuleName,
719751
ibctransfertypes.ModuleName,
752+
packetforwardtypes.ModuleName,
720753
icatypes.ModuleName,
721754
capabilitytypes.ModuleName,
722755
authtypes.ModuleName,
@@ -765,6 +798,7 @@ func NewHaqq(
765798
genutiltypes.ModuleName,
766799
evidencetypes.ModuleName,
767800
ibctransfertypes.ModuleName,
801+
packetforwardtypes.ModuleName,
768802
icatypes.ModuleName,
769803
authz.ModuleName,
770804
feegrant.ModuleName,
@@ -1129,6 +1163,7 @@ func initParamsKeeper(
11291163
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
11301164
paramsKeeper.Subspace(ibcexported.ModuleName)
11311165
paramsKeeper.Subspace(icahosttypes.SubModuleName)
1166+
paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())
11321167
// ethermint subspaces
11331168
paramsKeeper.Subspace(evmtypes.ModuleName).WithKeyTable(evmtypes.ParamKeyTable()) //nolint: staticcheck
11341169
paramsKeeper.Subspace(feemarkettypes.ModuleName).WithKeyTable(feemarkettypes.ParamKeyTable())
@@ -1227,6 +1262,12 @@ func (app *Haqq) setupUpgradeHandlers() {
12271262
v173.CreateUpgradeHandler(app.mm, app.configurator),
12281263
)
12291264

1265+
// v1.7.4 Revesting upgrade + Packet Forward Middleware
1266+
app.UpgradeKeeper.SetUpgradeHandler(
1267+
v174.UpgradeName,
1268+
v174.CreateUpgradeHandler(app.mm, app.configurator, app.AccountKeeper, app.LiquidVestingKeeper),
1269+
)
1270+
12301271
// When a planned update height is reached, the old binary will panic
12311272
// writing on disk the height and name of the update that triggered it
12321273
// This will read that value, and execute the preparations for the upgrade.
@@ -1261,6 +1302,12 @@ func (app *Haqq) setupUpgradeHandlers() {
12611302
liquidvestingtypes.ModuleName,
12621303
},
12631304
}
1305+
case v174.UpgradeName:
1306+
storeUpgrades = &storetypes.StoreUpgrades{
1307+
Added: []string{
1308+
packetforwardtypes.ModuleName,
1309+
},
1310+
}
12641311
}
12651312

12661313
if storeUpgrades != nil {

Diff for: app/upgrades/v1.7.4/constants.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package v174
2+
3+
const (
4+
// UpgradeName is the shared upgrade plan name for mainnet and testnet
5+
UpgradeName = "v1.7.4"
6+
7+
// VestingStretchLength defines new vesting periods length as three years in days
8+
VestingStretchLength = 1095
9+
10+
// LockupLengthThreshold defines threshold parameter as 1767225600 is timestamp for 2026-01-01
11+
LockupLengthThreshold = 1767225600
12+
13+
// One day in seconds
14+
OneDayInSeconds = int64(86_400)
15+
)

0 commit comments

Comments
 (0)