Skip to content

Commit 7bc4802

Browse files
authored
Merge pull request #276 from terra-money/feat/0.1/update-weight-range
feat: allow updating of weight range
2 parents 014f68f + 9b41d87 commit 7bc4802

File tree

10 files changed

+136
-46
lines changed

10 files changed

+136
-46
lines changed

docs/proto/proto-docs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@ GenesisState defines the module's genesis state.
573573
| `take_rate` | [string](#string) | | |
574574
| `reward_change_rate` | [string](#string) | | |
575575
| `reward_change_interval` | [google.protobuf.Duration](#google.protobuf.Duration) | | |
576+
| `reward_weight_range` | [RewardWeightRange](#alliance.alliance.RewardWeightRange) | | set a bound of weight range to limit how much reward weights can scale. |
576577

577578

578579

proto/alliance/gov.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ message MsgUpdateAllianceProposal {
8080
(gogoproto.stdduration) = true
8181
];
8282

83+
// set a bound of weight range to limit how much reward weights can scale.
84+
RewardWeightRange reward_weight_range = 8 [
85+
(gogoproto.nullable) = false
86+
];
8387
}
8488

8589
message MsgDeleteAllianceProposal {

x/alliance/client/cli/gov.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func CreateAlliance() *cobra.Command {
118118

119119
func UpdateAlliance() *cobra.Command {
120120
cmd := &cobra.Command{
121-
Use: "update-alliance denom reward-weight take-rate reward-change-rate reward-change-interval",
121+
Use: "update-alliance denom reward-weight reward-weight-min reward-weight-max take-rate reward-change-rate reward-change-interval",
122122
Args: cobra.ExactArgs(5),
123123
Short: "Update an alliance with the specified parameters",
124124
RunE: func(cmd *cobra.Command, args []string) error {
@@ -143,6 +143,16 @@ func UpdateAlliance() *cobra.Command {
143143
return err
144144
}
145145

146+
rewardWeightMin, err := sdk.NewDecFromStr(args[2])
147+
if err != nil {
148+
return err
149+
}
150+
151+
rewardWeightMax, err := sdk.NewDecFromStr(args[3])
152+
if err != nil {
153+
return err
154+
}
155+
146156
takeRate, err := sdk.NewDecFromStr(args[2])
147157
if err != nil {
148158
return err
@@ -175,6 +185,10 @@ func UpdateAlliance() *cobra.Command {
175185
description,
176186
denom,
177187
rewardWeight,
188+
types.RewardWeightRange{
189+
Min: rewardWeightMin,
190+
Max: rewardWeightMax,
191+
},
178192
takeRate,
179193
rewardChangeRate,
180194
rewardChangeInterval,

x/alliance/keeper/asset.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ func (k Keeper) UpdateAllianceAsset(ctx sdk.Context, newAsset types.AllianceAsse
8383
asset.RewardChangeRate = newAsset.RewardChangeRate
8484
asset.RewardChangeInterval = newAsset.RewardChangeInterval
8585
asset.LastRewardChangeTime = newAsset.LastRewardChangeTime
86+
asset.RewardWeightRange = newAsset.RewardWeightRange
8687
k.SetAsset(ctx, asset)
8788

8889
return nil

x/alliance/keeper/proposal.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ func (k Keeper) UpdateAlliance(ctx context.Context, req *types.MsgUpdateAlliance
4242
if !found {
4343
return status.Errorf(codes.NotFound, "Asset with denom: %s does not exist", req.Denom)
4444
}
45+
46+
asset.RewardWeightRange = req.RewardWeightRange
4547
if asset.RewardWeightRange.Min.GT(req.RewardWeight) || asset.RewardWeightRange.Max.LT(req.RewardWeight) {
4648
return types.ErrRewardWeightOutOfBound
4749
}

x/alliance/keeper/tests/asset_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ func TestRewardWeightDecay(t *testing.T) {
740740
Description: "",
741741
Denom: AllianceDenom,
742742
RewardWeight: sdk.MustNewDecFromStr("0.5"),
743+
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)},
743744
TakeRate: sdk.ZeroDec(),
744745
RewardChangeRate: sdk.ZeroDec(),
745746
RewardChangeInterval: 0,
@@ -752,6 +753,7 @@ func TestRewardWeightDecay(t *testing.T) {
752753
Description: "",
753754
Denom: AllianceDenom,
754755
RewardWeight: sdk.MustNewDecFromStr("0.5"),
756+
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)},
755757
TakeRate: sdk.ZeroDec(),
756758
RewardChangeRate: sdk.MustNewDecFromStr("0.1"),
757759
RewardChangeInterval: decayInterval,
@@ -778,6 +780,7 @@ func TestRewardWeightDecay(t *testing.T) {
778780
Description: "",
779781
Denom: AllianceDenomTwo,
780782
RewardWeight: sdk.MustNewDecFromStr("0.5"),
783+
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)},
781784
TakeRate: sdk.ZeroDec(),
782785
RewardChangeRate: sdk.MustNewDecFromStr("0.1"),
783786
RewardChangeInterval: decayInterval,
@@ -1112,6 +1115,7 @@ func TestRewardWeightRateChange(t *testing.T) {
11121115
Description: "",
11131116
Denom: alliance.Denom,
11141117
RewardWeight: alliance.RewardWeight,
1118+
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)},
11151119
TakeRate: alliance.TakeRate,
11161120
RewardChangeRate: sdk.MustNewDecFromStr("1.001"),
11171121
RewardChangeInterval: time.Minute * 5,

x/alliance/keeper/tests/proposal_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,14 @@ func TestUpdateAlliance(t *testing.T) {
103103

104104
// WHEN
105105
updateErr := app.AllianceKeeper.UpdateAlliance(ctx, &types.MsgUpdateAllianceProposal{
106-
Title: "",
107-
Description: "",
108-
Denom: "uluna",
109-
RewardWeight: sdk.NewDec(6),
106+
Title: "",
107+
Description: "",
108+
Denom: "uluna",
109+
RewardWeight: sdk.NewDec(11),
110+
RewardWeightRange: types.RewardWeightRange{
111+
Min: sdk.NewDec(0),
112+
Max: sdk.NewDec(11),
113+
},
110114
TakeRate: sdk.NewDec(7),
111115
RewardChangeInterval: 0,
112116
RewardChangeRate: sdk.ZeroDec(),
@@ -120,8 +124,8 @@ func TestUpdateAlliance(t *testing.T) {
120124
Alliances: []types.AllianceAsset{
121125
{
122126
Denom: "uluna",
123-
RewardWeight: sdk.NewDec(6),
124-
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(10)},
127+
RewardWeight: sdk.NewDec(11),
128+
RewardWeightRange: types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(11)},
125129
TakeRate: sdk.NewDec(7),
126130
TotalTokens: sdk.ZeroInt(),
127131
TotalValidatorShares: sdk.NewDec(0),

x/alliance/types/gov.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (m *MsgCreateAllianceProposal) ValidateBasic() error {
8585
return nil
8686
}
8787

88-
func NewMsgUpdateAllianceProposal(title, description, denom string, rewardWeight, takeRate sdk.Dec, rewardChangeRate sdk.Dec, rewardChangeInterval time.Duration) govtypes.Content {
88+
func NewMsgUpdateAllianceProposal(title, description, denom string, rewardWeight sdk.Dec, rewardWeightRange RewardWeightRange, takeRate sdk.Dec, rewardChangeRate sdk.Dec, rewardChangeInterval time.Duration) govtypes.Content {
8989
return &MsgUpdateAllianceProposal{
9090
Title: title,
9191
Description: description,
@@ -94,6 +94,7 @@ func NewMsgUpdateAllianceProposal(title, description, denom string, rewardWeight
9494
TakeRate: takeRate,
9595
RewardChangeRate: rewardChangeRate,
9696
RewardChangeInterval: rewardChangeInterval,
97+
RewardWeightRange: rewardWeightRange,
9798
}
9899
}
99100
func (m *MsgUpdateAllianceProposal) GetTitle() string { return m.Title }
@@ -122,6 +123,19 @@ func (m *MsgUpdateAllianceProposal) ValidateBasic() error {
122123
return status.Errorf(codes.InvalidArgument, "Alliance rewardChangeInterval must be strictly a positive number")
123124
}
124125

126+
if m.RewardWeightRange.Min.IsNil() || m.RewardWeightRange.Min.LT(sdk.ZeroDec()) ||
127+
m.RewardWeightRange.Max.IsNil() || m.RewardWeightRange.Max.LT(sdk.ZeroDec()) {
128+
return status.Errorf(codes.InvalidArgument, "Alliance rewardWeight min and max must be zero or a positive number")
129+
}
130+
131+
if m.RewardWeightRange.Min.GT(m.RewardWeightRange.Max) {
132+
return status.Errorf(codes.InvalidArgument, "Alliance rewardWeight min must be less or equal to rewardWeight max")
133+
}
134+
135+
if m.RewardWeight.LT(m.RewardWeightRange.Min) || m.RewardWeight.GT(m.RewardWeightRange.Max) {
136+
return status.Errorf(codes.InvalidArgument, "Alliance rewardWeight must be bounded in RewardWeightRange")
137+
}
138+
125139
return nil
126140
}
127141

x/alliance/types/gov.pb.go

Lines changed: 81 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x/alliance/types/tests/types_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ func TestProposalsContent(t *testing.T) {
6262
str: "title:\"Alliance1\" description:\"Alliance with 1\" denom:\"ibc/denom1\" reward_weight:\"1000000000000000000\" take_rate:\"1000000000000000000\" reward_change_rate:\"1000000000000000000\" reward_change_interval:<seconds:1 > reward_weight_range:<min:\"0\" max:\"5000000000000000000\" > ",
6363
},
6464
"msg_update_alliance_proposal": {
65-
p: types.NewMsgUpdateAllianceProposal("Alliance2", "Alliance with 2", "ibc/denom2", sdk.NewDec(2), sdk.NewDec(2), sdk.NewDec(2), time.Hour),
65+
p: types.NewMsgUpdateAllianceProposal("Alliance2", "Alliance with 2", "ibc/denom2", sdk.NewDec(2), types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)}, sdk.NewDec(2), sdk.NewDec(2), time.Hour),
6666
title: "Alliance2",
6767
desc: "Alliance with 2",
6868
typ: "msg_update_alliance_proposal",
69-
str: "title:\"Alliance2\" description:\"Alliance with 2\" denom:\"ibc/denom2\" reward_weight:\"2000000000000000000\" take_rate:\"2000000000000000000\" reward_change_rate:\"2000000000000000000\" reward_change_interval:<seconds:3600 > ",
69+
str: "title:\"Alliance2\" description:\"Alliance with 2\" denom:\"ibc/denom2\" reward_weight:\"2000000000000000000\" take_rate:\"2000000000000000000\" reward_change_rate:\"2000000000000000000\" reward_change_interval:<seconds:3600 > reward_weight_range:<min:\"0\" max:\"5000000000000000000\" > ",
7070
},
7171
"msg_delete_alliance_proposal": {
7272
p: types.NewMsgDeleteAllianceProposal("test", "abcd", "ibc/denom"),
@@ -130,7 +130,7 @@ func TestInvalidProposalsContent(t *testing.T) {
130130
typ: "msg_create_alliance_proposal",
131131
},
132132
"msg_update_alliance_proposal": {
133-
p: types.NewMsgUpdateAllianceProposal("Alliance2", "Alliance with 2", "ibc/denom2", sdk.NewDec(2), sdk.NewDec(2), sdk.NewDec(2), -time.Hour),
133+
p: types.NewMsgUpdateAllianceProposal("Alliance2", "Alliance with 2", "ibc/denom2", sdk.NewDec(2), types.RewardWeightRange{Min: sdk.NewDec(0), Max: sdk.NewDec(5)}, sdk.NewDec(2), sdk.NewDec(2), -time.Hour),
134134
title: "Alliance2",
135135
desc: "Alliance with 2",
136136
typ: "msg_update_alliance_proposal",

0 commit comments

Comments
 (0)