Skip to content

Commit e3bcb32

Browse files
authored
Merge pull request #883 from neutron-org/feat/v6.0.0-mainnet-upgrade
Feat: v6.0.0 mainnet upgrade
2 parents 3b36207 + fb6ccde commit e3bcb32

File tree

24 files changed

+214
-86
lines changed

24 files changed

+214
-86
lines changed

app/upgrades/v6.0.0/constants.go

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,54 +13,49 @@ import (
1313

1414
const (
1515
// UpgradeName defines the on-chain upgrade name.
16-
UpgradeName = "sovereign"
16+
UpgradeName = "v6.0.0"
1717

1818
// DropNtrnDenom is the denom of the Drop's NTRN token.
19-
DropNtrnDenom = "factory/neutron1lzfk4aj26jz7gd3c4umxah9d22ezy8xfql677kev37vd0mq8y3tsn78saz/udntrn"
19+
DropNtrnDenom = "factory/neutron1frc0p5czd9uaaymdkug2njz7dc7j65jxukp9apmt9260a8egujkspms2t2/udntrn"
2020
// MainDAOContractAddress is the address of the Neutron DAO core contract.
21-
MainDAOContractAddress = "neutron1yw4xvtc43me9scqfr2jr2gzvcxd3a9y4eq7gaukreugw2yd2f8ts8g30fq"
21+
MainDAOContractAddress = "neutron1suhgf5svhu4usrurvxzlgn54ksxmn8gljarjtxqnapv8kjnp4nrstdxvff"
2222
// VotingRegistryContractAddress is the address of the Neutron DAO voting registry contract.
23-
VotingRegistryContractAddress = "neutron13ehuhysn5mqjeaheeuew2gjs785f6k7jm8vfsqg3jhtpkwppcmzqu8vxt2"
23+
VotingRegistryContractAddress = "neutron1f6jlx7d9y408tlzue7r2qcf79plp549n30yzqjajjud8vm7m4vdspg933s"
2424
)
2525

2626
// WARNING! Constants below represent tuples of addresses and code IDs of the new contracts. If you
2727
// need to update an address, make sure to update the code ID as well (and vice versa).
2828

2929
const (
30-
DropPuppeteerContractAddress = "..." // TODO: populate when known or query from DropCoreContractAddress?
30+
DropPuppeteerContractAddress = "neutron17jsl4t4hhaw37tnhenskrfntm7mv44wzjr3f990hx4p9r5m0gzdqquhtd3"
31+
DropCoreContractAddress = "neutron1lsxvdyvmexak084wdty2yvsq5gj3wt7wm4jaw34yseat7r4qjffqlxlcua"
32+
DropCoreContractCodeID = 3332
3133

32-
DropCoreContractAddress = "neutron18ecx6f2ywwnfxsql2l98jscw97lezczx8ax0g5wp8uj9rm95m0ls798cdq"
33-
DropCoreContractCodeID = 25 // TODO: populate when known
34+
StakingTrackerContractAddress = "neutron1kf9yq7vuyj9rshwpr52xru779y832g7jpgyysprvpm9xzu2m6mlsm6r64n"
35+
StakingTrackerContractCodeID = 3345
3436

35-
StakingTrackerContractAddress = "neutron1nyuryl5u5z04dx4zsqgvsuw7fe8gl2f77yufynauuhklnnmnjncqcls0tj"
36-
StakingTrackerContractCodeID = 20 // TODO: populate when known
37+
StakingVaultContractAddress = "neutron19j2m9enzvq4kpd72tr3cz46z2kq6rnedc2q4pj6w5wq6v86va58qkled36"
38+
StakingVaultContractCodeID = 3346
3739

38-
StakingVaultContractAddress = "neutron1jarq7kgdyd7dcfu2ezeqvg4w4hqdt3m5lv364d8mztnp9pzmwwwqjw7fvg"
39-
StakingVaultContractCodeID = 21 // TODO: populate when known
40+
StakingRewardsContractAddress = "neutron1gqq3c735pj6ese3yru5xr6ud0fvxgltxesygvyyzpsrt74v6yg4sgkrgwq"
41+
StakingRewardsContractCodeID = 3347
4042

41-
StakingRewardsContractAddress = "neutron1mygmlglvg9w45n3s6m6d4txneantmupy0sa0vy63angpvj0qp7usep7kdz"
42-
StakingRewardsContractCodeID = 22 // TODO: populate when known
43-
44-
StakingInfoProxyContractAddress = "neutron1xx35wwa2nhfvfm50lj3ukv077mjxuy9pefxxnctxe9kczk6tz3hqpxknre"
45-
StakingInfoProxyContractCodeID = 23 // TODO: populate when known
43+
StakingInfoProxyContractAddress = "neutron187ufx8wf0neqduppvkn0rknpg8j2s59qdhua80vgfhl7yclk8rrsnjukgq"
44+
StakingInfoProxyContractCodeID = 3348
4645
)
4746

4847
const (
4948
// Constants defining the parameters of the assets redistribution process held by DAO.
50-
TotalToStakeAmount = int64(50_000_000_000_000) // untrn
51-
StakeWithValenceAmount = 45_000_000_000_000 // 90% of TotalToStakeAmount
52-
StakeWithDropAmount = TotalToStakeAmount - StakeWithValenceAmount // 10% of TotalToStakeAmount
53-
54-
ValenceStaker = "neutron1yvxarc3r8agzzky6g4zdxhk5xc59j7rdw2pugjarwskt8jmpkgus9jqvwk"
49+
StakeWithValenceAmount = 150_000_000_000_000
50+
StakeWithDropAmount = 100_000_000_000_000
5551

56-
UsdcLpReceiver = "neutron1l3pk6xsc8p74gwrduxj5qp7djqyx9j5uweufrw5kp8d37xc3hjqs53euye"
57-
UsdcLpDenom = "factory/neutron1czkddm6xqyfa6ukzxqmf65tl4tudry4kve0n8fs5yfc8g6zv52lqznmnnl/astroport/share" // TODO: populate when known
52+
ValenceStaker = "neutron1d846g3px2u0dhs6r7k46e49nhgwcxzzw9973rau07lp9cpsj0v3q05ahf4"
5853

59-
dntrnNtrnLiqAmount = int64(22_500_000_000_000)
60-
dntrnNtrnLiqProvider = "neutron1dmhxfvggstv2k9xd4rg2nmvsdwesh9mj20dl70lmcala93zmfnfsmgls2c"
54+
UsdcLpReceiver = "neutron1d58c25fw3hwpjvg9dzgr2m235qpgtsc7stjt7u08kqg8jd583fgsyr5ytg"
55+
UsdcLpDenom = "factory/neutron18c8qejysp4hgcfuxdpj4wf29mevzwllz5yh8uayjxamwtrs0n9fshq9vtv/astroport/share"
6156

6257
RewardContract = 6_000_000_000_000
63-
RevenueModule = 1_000_000_000_000
58+
RevenueModule = 700_000_000_000
6459
)
6560

6661
var Upgrade = upgrades.Upgrade{

app/upgrades/v6.0.0/deics.go

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77
"errors"
88
"fmt"
99
"io/fs"
10-
"path/filepath"
11-
"time"
1210

1311
"cosmossdk.io/math"
1412
adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types"
@@ -36,17 +34,11 @@ const (
3634
ICSSelfStake = 1
3735
)
3836

39-
// TODO: remove before release
40-
// TEST ONLY CONSTS
41-
const (
42-
Devnet = true
43-
OverrideUnbondingTime = 5 * time.Minute
44-
)
45-
4637
//go:embed validators/staking
4738
var Vals embed.FS
4839

4940
type StakingValidator struct {
41+
Moniker string `json:"moniker"`
5042
Valoper string `json:"valoper"`
5143
PK ed25519.PubKey `json:"pk"`
5244
Identity string `json:"identity,omitempty"`
@@ -74,7 +66,7 @@ func GatherStakingMsgs() ([]types.MsgCreateValidator, error) {
7466
if err != nil {
7567
return err
7668
}
77-
msg := StakingValMsg(filepath.Base(path), SovereignSelfStake, skval.Valoper, skval.PK, skval.Identity, skval.Website, skval.SecurityContact, skval.Details)
69+
msg := StakingValMsg(skval.Moniker, SovereignSelfStake, skval.Valoper, skval.PK, skval.Identity, skval.Website, skval.SecurityContact, skval.Details)
7870
msgs = append(msgs, msg)
7971

8072
return nil
@@ -234,13 +226,10 @@ func DeICS(ctx sdk.Context, sk stakingkeeper.Keeper, consumerKeeper ccvconsumerk
234226
return err
235227
}
236228

237-
cp, err := consumerKeeper.GetParams(ctx)
238-
if err != nil {
239-
return err
240-
}
229+
cp := consumerKeeper.GetConsumerParams(ctx)
241230

242231
p := types.Params{
243-
UnbondingTime: cp.UnbondingTime,
232+
UnbondingTime: cp.UnbondingPeriod,
244233
// During migration MaxValidators MUST be >= all the validators number, old and new ones.
245234
// i.e. chain managed by 150 ICS validators, and we are switching to 70 STAKING, MaxValidators MUST be at least 220,
246235
// otherwise panic during staking begin blocker happens
@@ -252,11 +241,6 @@ func DeICS(ctx sdk.Context, sk stakingkeeper.Keeper, consumerKeeper ccvconsumerk
252241
MinCommissionRate: math.LegacyMustNewDecFromStr("0.0"),
253242
}
254243

255-
// TODO: Remove before release
256-
if Devnet {
257-
p.UnbondingTime = OverrideUnbondingTime
258-
}
259-
260244
_, err = srv.UpdateParams(ctx, &types.MsgUpdateParams{
261245
Authority: authtypes.NewModuleAddress(adminmoduletypes.ModuleName).String(),
262246
Params: p,

app/upgrades/v6.0.0/upgrades.go

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"encoding/json"
66
"fmt"
77

8+
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
9+
810
"cosmossdk.io/math"
911
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
1012
adminmoduletypes "github.com/cosmos/admin-module/v2/x/adminmodule/types"
@@ -90,6 +92,11 @@ func CreateUpgradeHandler(
9092
return vm, fmt.Errorf("SetupDynamicfees failed: %w", err)
9193
}
9294

95+
err = SetupSlashing(ctx, &keepers.SlashingKeeper)
96+
if err != nil {
97+
return vm, fmt.Errorf("SetupSlashing failed: %w", err)
98+
}
99+
93100
err = FundValence(ctx, keepers.BankKeeper)
94101
if err != nil {
95102
return vm, fmt.Errorf("FundValence failed: %w", err)
@@ -100,11 +107,6 @@ func CreateUpgradeHandler(
100107
return vm, fmt.Errorf("FundLiqUSDCLPProvider failed: %w", err)
101108
}
102109

103-
err = FundDNTRNLiqProvider(ctx, keepers.BankKeeper)
104-
if err != nil {
105-
return vm, fmt.Errorf("FundDNTRNLiqProvider failed: %w", err)
106-
}
107-
108110
err = PinNewCodes(ctx, keepers.WasmKeeper)
109111
if err != nil {
110112
return vm, fmt.Errorf("PinNewCodes failed: %w", err)
@@ -115,6 +117,17 @@ func CreateUpgradeHandler(
115117
}
116118
}
117119

120+
func SetupSlashing(ctx context.Context, slashingkeeper *slashingkeeper.Keeper) error {
121+
params, err := slashingkeeper.GetParams(ctx)
122+
if err != nil {
123+
return err
124+
}
125+
params.SlashFractionDowntime = math.LegacyZeroDec()
126+
params.SlashFractionDoubleSign = math.LegacyZeroDec()
127+
err = slashingkeeper.SetParams(ctx, params)
128+
return err
129+
}
130+
118131
type VotingRegistryExecuteMsg struct {
119132
AddVotingVault AddVotingVaultMsg `json:"add_voting_vault"`
120133
}
@@ -128,6 +141,7 @@ func SetupTracking(ctx sdk.Context, harpoonKeeper *harpoonkeeper.Keeper, wasmKee
128141
ContractAddress: StakingTrackerContractAddress,
129142
Hooks: []types.HookType{
130143
types.HOOK_TYPE_AFTER_VALIDATOR_CREATED,
144+
types.HOOK_TYPE_AFTER_VALIDATOR_REMOVED,
131145
types.HOOK_TYPE_AFTER_VALIDATOR_BONDED,
132146
types.HOOK_TYPE_AFTER_VALIDATOR_BEGIN_UNBONDING,
133147
types.HOOK_TYPE_BEFORE_DELEGATION_REMOVED,
@@ -201,16 +215,20 @@ func SetupRevenue(ctx context.Context, rk revenuekeeper.Keeper, bk bankkeeper.Ke
201215
Asset: revenuetypes.DefaultRewardQuoteAsset,
202216
Amount: revenuetypes.DefaultRewardQuoteAmount,
203217
},
204-
BlocksPerformanceRequirement: revenuetypes.DefaultBlocksPerformanceRequirement(),
205-
OracleVotesPerformanceRequirement: revenuetypes.DefaultOracleVotesPerformanceRequirement(),
218+
BlocksPerformanceRequirement: &revenuetypes.PerformanceRequirement{
219+
AllowedToMiss: math.LegacyNewDecWithPrec(5, 3), // 0.005
220+
RequiredAtLeast: math.LegacyNewDecWithPrec(95, 2), // 0.95
221+
},
222+
OracleVotesPerformanceRequirement: &revenuetypes.PerformanceRequirement{
223+
AllowedToMiss: math.LegacyNewDecWithPrec(2, 2), // 0.02
224+
RequiredAtLeast: math.LegacyNewDecWithPrec(95, 2), // 0.95
225+
},
206226
PaymentScheduleType: &revenuetypes.PaymentScheduleType{
207-
PaymentScheduleType: &revenuetypes.PaymentScheduleType_BlockBasedPaymentScheduleType{
208-
BlockBasedPaymentScheduleType: &revenuetypes.BlockBasedPaymentScheduleType{
209-
BlocksPerPeriod: 600,
210-
},
227+
PaymentScheduleType: &revenuetypes.PaymentScheduleType_MonthlyPaymentScheduleType{
228+
MonthlyPaymentScheduleType: &revenuetypes.MonthlyPaymentScheduleType{},
211229
},
212230
},
213-
TwapWindow: 900,
231+
TwapWindow: 7 * 24 * 3600,
214232
}
215233
srv := revenuekeeper.NewMsgServerImpl(&rk)
216234
_, err := srv.UpdateParams(ctx, &revenuetypes.MsgUpdateParams{
@@ -306,18 +324,3 @@ func FundLiqUSDCLPProvider(ctx context.Context, bk bankkeeper.Keeper) error {
306324
}
307325
return nil
308326
}
309-
310-
func FundDNTRNLiqProvider(ctx context.Context, bk bankkeeper.Keeper) error {
311-
amount := math.NewInt(dntrnNtrnLiqAmount)
312-
313-
err := bk.SendCoins(
314-
ctx,
315-
sdk.MustAccAddressFromBech32(MainDAOContractAddress),
316-
sdk.MustAccAddressFromBech32(dntrnNtrnLiqProvider),
317-
sdk.NewCoins(sdk.NewCoin(appparams.DefaultDenom, amount)),
318-
)
319-
if err != nil {
320-
return err
321-
}
322-
return nil
323-
}

app/upgrades/v6.0.0/upgrades_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ func (suite *UpgradeTestSuite) TestUpgrade() {
187187
})
188188
require.NoError(t, err)
189189

190+
cp := app.ConsumerKeeper.GetConsumerParams(ctx)
191+
cp.UnbondingPeriod = 10
192+
app.ConsumerKeeper.SetParams(ctx, cp)
193+
190194
// DEICS
191195
err = v600.DeICS(ctx, *app.StakingKeeper, app.ConsumerKeeper, app.BankKeeper)
192196
require.NoError(t, err)
@@ -238,7 +242,7 @@ func (suite *UpgradeTestSuite) TestUpgrade() {
238242

239243
resp, err := app.RevenueKeeper.GetParams(ctx)
240244
require.NoError(t, err)
241-
require.Equal(t, resp.TwapWindow, int64(900))
245+
require.Equal(t, resp.TwapWindow, int64(604800))
242246

243247
// TEST STAKING ENDBLOCKER and valset update
244248
// the tricky part is - we have valset of 4 initially, and we must to modify staking params to execute staking endblocker
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
{
2-
"valoper": "neutronvaloper1jxxfkkxd9qfjzpvjyr9h3dy7l5693kx47jm4mq",
2+
"valoper": "neutronvaloper1xvl6sq77k6eq8kg9pyjyt8dzxzpyv9ukuuvsay",
33
"pk": {
4-
"key": "d2Pl+sm7zVxHQF7To/Wh6D5BTXpR1YvRFlBumMhBRnE="
5-
}
6-
}
4+
"key": "LwF7IN7YFooTAmQqXyhjfbjjI3szsWu/LduYn5jPhXs="
5+
},
6+
"moniker": "polkachu",
7+
"website": "https://polkachu.com/"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"valoper": "neutronvaloper1pggzzg4wzsyxpcg9g57h5hkwumf3507yvcf4u6",
3+
"pk": {
4+
"key": "M6NdrlJZMAxqZk4JAkFtMy4nh11cBej5TjVOBOIRlMw="
5+
},
6+
"moniker": "SG-1",
7+
"website": "https://sg-1.online/"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"valoper": "neutronvaloper15mfl7wxqww7zrvq2zw3d76mwsdxxff8cju5h5c",
3+
"pk": {
4+
"key": "SdHsrvB7a3U3dynZZIpj+EFG81+EcSsV7quFs32rmJ0="
5+
},
6+
"moniker": "Crosnest",
7+
"website": "https://www.cros-nest.com"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"valoper": "neutronvaloper1c0rct7nkj4evl3j3s5sqzky4str95yr4fsg2mk",
3+
"pk": {
4+
"key": "OuUB+XQPFGXIbGzZUJOSmda8YKMyKs3TzCpD8rF7QKY="
5+
},
6+
"moniker": "Golden Ratio Staking",
7+
"website": "http://goldenstaking.com"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"valoper": "neutronvaloper146mj09yzu3mvz7pmy4dvs4z9wr2mst7rvf204j",
3+
"pk": {
4+
"key": "Vg60NUNH53xZmfV3eBzrL4BiZGJTjsRq5/k4JysuEAk="
5+
},
6+
"moniker": "Kiln",
7+
"website": "https://www.kiln.fi/"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"valoper": "neutronvaloper1uaz9tnrxlvad37t8d7vcevwd7z7xlp7lmu5pjv",
3+
"pk": {
4+
"key": "r8upZgENcA4RRTe/rjPy71Cc618X0qbFu9WKMctENd4="
5+
},
6+
"moniker": "P2P.ORG - P2P Validator",
7+
"website": "http://p2p.org"
8+
}

0 commit comments

Comments
 (0)