Skip to content

Commit

Permalink
chore: use array to store storage costs
Browse files Browse the repository at this point in the history
  • Loading branch information
shifty11 committed Apr 30, 2024
1 parent 4f80f86 commit 469ddef
Show file tree
Hide file tree
Showing 8 changed files with 315 additions and 80 deletions.
18 changes: 8 additions & 10 deletions app/upgrades/v1_5/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package v1_5

import (
"context"
"cosmossdk.io/math"
"fmt"

storetypes "cosmossdk.io/store/types"
Expand Down Expand Up @@ -50,26 +49,25 @@ func migrateStorageCosts(sdkCtx sdk.Context, bundlesKeeper keeper.Keeper, poolKe
}

// Get all storage providers
storageIds := map[uint32]struct{}{}
storageIds[0] = struct{}{} // Default storage provider
storageProviderIds := map[uint32]struct{}{}
for _, pool := range poolKeeper.GetAllPools(sdkCtx) {
storageIds[pool.CurrentStorageProviderId] = struct{}{}
storageProviderIds[pool.CurrentStorageProviderId] = struct{}{}
}

// Copy storage cost from old params to new params
// The storage cost of all storage providers will be the same after this migration
oldParams := v1_4_types.GetParams(sdkCtx, bundlesStoreKey, cdc)
newParams := bundlestypes.Params{
UploadTimeout: oldParams.UploadTimeout,
StorageCosts: make([]math.LegacyDec, len(storageIds)),
StorageCosts: []bundlestypes.StorageCost{},
NetworkFee: oldParams.NetworkFee,
MaxPoints: oldParams.MaxPoints,
}
for storageId := range storageIds {
if int(storageId) > len(newParams.StorageCosts) {
return fmt.Errorf("storage provider id %d is out of bounds", storageId)
}
newParams.StorageCosts[storageId] = oldParams.StorageCost
for storageProviderId := range storageProviderIds {
newParams.StorageCosts = append(newParams.StorageCosts, bundlestypes.StorageCost{
StorageProviderId: storageProviderId,
Cost: oldParams.StorageCost,
})
}

bundlesKeeper.SetParams(sdkCtx, newParams)
Expand Down
22 changes: 20 additions & 2 deletions docs/static/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,16 @@ paths:
storage_costs:
type: array
items:
type: string
type: object
properties:
storage_provider_id:
type: integer
format: int64
description: storage_provider_id ...
cost:
type: string
description: cost ...
title: StorageCost defines the cost for storage providers
description: storage_costs ...
network_fee:
type: string
Expand Down Expand Up @@ -4274,7 +4283,16 @@ paths:
storage_costs:
type: array
items:
type: string
type: object
properties:
storage_provider_id:
type: integer
format: int64
description: storage_provider_id ...
cost:
type: string
description: cost ...
title: StorageCost defines the cost for storage providers
description: storage_costs ...
network_fee:
type: string
Expand Down
16 changes: 12 additions & 4 deletions proto/kyve/bundles/v1beta1/params.proto
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,23 @@ import "gogoproto/gogo.proto";

option go_package = "github.com/KYVENetwork/chain/x/bundles/types";

// StorageCost defines the cost for storage providers
message StorageCost {
// storage_provider_id ...
uint32 storage_provider_id = 1;
// cost ...
string cost = 2 [
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
}

// Params defines the bundles module parameters.
message Params {
// upload_timeout ...
uint64 upload_timeout = 1;
// storage_costs ...
repeated string storage_costs = 2 [
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
repeated StorageCost storage_costs = 2 [(gogoproto.nullable) = false];
// network_fee ...
string network_fee = 3 [
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
Expand Down
6 changes: 4 additions & 2 deletions x/bundles/keeper/getters_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ func (k Keeper) GetUploadTimeout(ctx sdk.Context) (res uint64) {
// GetStorageCost returns the StorageCost param
func (k Keeper) GetStorageCost(ctx sdk.Context, storageProviderId uint32) (res math.LegacyDec) {
storageCosts := k.GetParams(ctx).StorageCosts
if int(storageProviderId) < len(storageCosts) {
return storageCosts[storageProviderId]
for _, storageCost := range storageCosts {
if storageCost.StorageProviderId == storageProviderId {
return storageCost.Cost
}
}
return math.LegacyZeroDec()
}
Expand Down
4 changes: 2 additions & 2 deletions x/bundles/keeper/keeper_suite_valid_bundles_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -960,7 +960,7 @@ var _ = Describe("valid bundles", Ordered, func() {
storageProviderId := uint32(1)

params := s.App().BundlesKeeper.GetParams(s.Ctx())
params.StorageCosts = append(params.StorageCosts, math.LegacyMustNewDecFromStr("0.9"))
params.StorageCosts = append(params.StorageCosts, bundletypes.StorageCost{StorageProviderId: 1, Cost: math.LegacyMustNewDecFromStr("0.9")})
s.App().BundlesKeeper.SetParams(s.Ctx(), params)

pool, _ := s.App().PoolKeeper.GetPool(s.Ctx(), 0)
Expand Down Expand Up @@ -1085,7 +1085,7 @@ var _ = Describe("valid bundles", Ordered, func() {
uploaderPayoutReward := uint64(math.LegacyNewDec(int64(totalUploaderReward)).Mul(uploader.Commission).TruncateInt64())
uploaderDelegationReward := totalUploaderReward - uploaderPayoutReward

// assert storage reward
// assert storage reward -> 0.9 * 100
Expect(storageReward).To(Equal(uint64(90)))
// assert payout transfer
Expect(balanceUploader).To(Equal(initialBalanceStaker0))
Expand Down
37 changes: 20 additions & 17 deletions x/bundles/keeper/msg_server_update_params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
params := s.App().BundlesKeeper.GetParams(s.Ctx())

Expect(params.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(params.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(params.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(params.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(params.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -109,7 +109,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
payload := `{
"upload_timeout": 20,
"storage_costs": [
"0.05"
{"storage_provider_id": 0, "cost": "0.05"}
],
"network_fee": "0.05",
"max_points": 15
Expand Down Expand Up @@ -142,7 +142,10 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(uint64(20)))
Expect(updatedParams.StorageCosts).To(Equal([]math.LegacyDec{math.LegacyMustNewDecFromStr("0.05")}))
Expect(updatedParams.StorageCosts).To(Equal([]types.StorageCost{{
StorageProviderId: 0,
Cost: math.LegacyMustNewDecFromStr("0.05"),
}}))
Expect(updatedParams.NetworkFee).To(Equal(math.LegacyMustNewDecFromStr("0.05")))
Expect(updatedParams.MaxPoints).To(Equal(uint64(15)))
})
Expand Down Expand Up @@ -178,7 +181,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -210,7 +213,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(submitErr).To(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -248,7 +251,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(uint64(20)))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -280,7 +283,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(submitErr).To(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand All @@ -289,8 +292,8 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
// ARRANGE
payload := `{
"storage_costs": [
"0.05",
"0.08"
{"storage_provider_id": 0, "cost": "0.05"},
{"storage_provider_id": 1, "cost": "0.08"}
]
}`

Expand Down Expand Up @@ -321,9 +324,9 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal([]math.LegacyDec{
math.LegacyMustNewDecFromStr("0.05"),
math.LegacyMustNewDecFromStr("0.08"),
Expect(updatedParams.StorageCosts).To(Equal([]types.StorageCost{
{StorageProviderId: 0, Cost: math.LegacyMustNewDecFromStr("0.05")},
{StorageProviderId: 1, Cost: math.LegacyMustNewDecFromStr("0.08")},
}))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
Expand Down Expand Up @@ -358,7 +361,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(submitErr).To(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -396,7 +399,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(math.LegacyMustNewDecFromStr("0.05")))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -428,7 +431,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(submitErr).To(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down Expand Up @@ -466,7 +469,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(voteErr).NotTo(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(uint64(15)))
})
Expand Down Expand Up @@ -498,7 +501,7 @@ var _ = Describe("msg_server_update_params.go", Ordered, func() {
Expect(submitErr).To(HaveOccurred())

Expect(updatedParams.UploadTimeout).To(Equal(types.DefaultUploadTimeout))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts()))
Expect(updatedParams.StorageCosts).To(Equal(types.DefaultStorageCosts))
Expect(updatedParams.NetworkFee).To(Equal(types.DefaultNetworkFee))
Expect(updatedParams.MaxPoints).To(Equal(types.DefaultMaxPoints))
})
Expand Down
15 changes: 4 additions & 11 deletions x/bundles/types/params.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package types

import (
"fmt"

"cosmossdk.io/math"

"github.com/KYVENetwork/chain/util"
Expand All @@ -12,9 +10,7 @@ import (
var DefaultUploadTimeout = uint64(600)

// DefaultStorageCosts ...
func DefaultStorageCosts() []math.LegacyDec {
return []math.LegacyDec{math.LegacyMustNewDecFromStr("0.025")}
}
var DefaultStorageCosts []StorageCost

// DefaultNetworkFee ...
var DefaultNetworkFee = math.LegacyMustNewDecFromStr("0.01")
Expand All @@ -25,7 +21,7 @@ var DefaultMaxPoints = uint64(24)
// NewParams creates a new Params instance
func NewParams(
uploadTimeout uint64,
storageCosts []math.LegacyDec,
storageCosts []StorageCost,
networkFee math.LegacyDec,
maxPoints uint64,
) Params {
Expand All @@ -41,7 +37,7 @@ func NewParams(
func DefaultParams() Params {
return NewParams(
DefaultUploadTimeout,
DefaultStorageCosts(),
DefaultStorageCosts,
DefaultNetworkFee,
DefaultMaxPoints,
)
Expand All @@ -53,11 +49,8 @@ func (p Params) Validate() error {
return err
}

if len(p.StorageCosts) == 0 {
return fmt.Errorf("storage costs cannot be empty")
}
for _, v := range p.StorageCosts {
if err := util.ValidateDecimal(v); err != nil {
if err := util.ValidateDecimal(v.Cost); err != nil {
return err
}
}
Expand Down
Loading

0 comments on commit 469ddef

Please sign in to comment.