diff --git a/pkg/appconsts/v3/app_consts.go b/pkg/appconsts/v3/app_consts.go new file mode 100644 index 0000000000..32c09b4f23 --- /dev/null +++ b/pkg/appconsts/v3/app_consts.go @@ -0,0 +1,7 @@ +package v3 + +const ( + Version uint64 = 3 + TxSizeCostPerByte uint64 = 10 + GasPerBlobByte uint32 = 8 +) diff --git a/pkg/appconsts/versioned_consts.go b/pkg/appconsts/versioned_consts.go index 67c3c8a8f2..c3c54d88c7 100644 --- a/pkg/appconsts/versioned_consts.go +++ b/pkg/appconsts/versioned_consts.go @@ -1,8 +1,9 @@ package appconsts import ( - v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" - v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" ) const ( @@ -26,7 +27,16 @@ func SquareSizeUpperBound(_ uint64) int { return v1.SquareSizeUpperBound } +func TxSizeCostPerByte(_ uint64) uint64 { + return v3.TxSizeCostPerByte +} + +func GasPerBlobByte(_ uint64) uint32 { + return v3.GasPerBlobByte +} + var ( DefaultSubtreeRootThreshold = SubtreeRootThreshold(LatestVersion) DefaultSquareSizeUpperBound = SquareSizeUpperBound(LatestVersion) + DefaultTxSizeCostPerByte = TxSizeCostPerByte(LatestVersion) ) diff --git a/pkg/appconsts/versioned_consts_test.go b/pkg/appconsts/versioned_consts_test.go index 6fb5cfc48d..7018598bd8 100644 --- a/pkg/appconsts/versioned_consts_test.go +++ b/pkg/appconsts/versioned_consts_test.go @@ -1,7 +1,6 @@ package appconsts_test import ( - "fmt" "testing" "github.com/stretchr/testify/require" @@ -9,52 +8,57 @@ import ( "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" v1 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v1" v2 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v2" + v3 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" ) -func TestSubtreeRootThreshold(t *testing.T) { +func TestVersionedConsts(t *testing.T) { testCases := []struct { - version uint64 - expected int + name string + version uint64 + expectedConstant int + got int }{ { - version: v1.Version, - expected: v1.SubtreeRootThreshold, + name: "SubtreeRootThreshold v1", + version: v1.Version, + expectedConstant: v1.SubtreeRootThreshold, + got: appconsts.SubtreeRootThreshold(v1.Version), }, { - version: v2.Version, - expected: v2.SubtreeRootThreshold, + name: "SubtreeRootThreshold v2", + version: v2.Version, + expectedConstant: v2.SubtreeRootThreshold, + got: appconsts.SubtreeRootThreshold(v2.Version), + }, + { + name: "SquareSizeUpperBound v1", + version: v1.Version, + expectedConstant: v1.SquareSizeUpperBound, + got: appconsts.SquareSizeUpperBound(v1.Version), + }, + { + name: "SquareSizeUpperBound v2", + version: v2.Version, + expectedConstant: v2.SquareSizeUpperBound, + got: appconsts.SquareSizeUpperBound(v2.Version), }, - } - - for _, tc := range testCases { - name := fmt.Sprintf("version %v", tc.version) - t.Run(name, func(t *testing.T) { - got := appconsts.SubtreeRootThreshold(tc.version) - require.Equal(t, tc.expected, got) - }) - } -} - -func TestSquareSizeUpperBound(t *testing.T) { - testCases := []struct { - version uint64 - expected int - }{ { - version: v1.Version, - expected: v1.SquareSizeUpperBound, + name: "TxSizeCostPerByte v3", + version: v3.Version, + expectedConstant: int(v3.TxSizeCostPerByte), + got: int(appconsts.TxSizeCostPerByte(v3.Version)), }, { - version: v2.Version, - expected: v2.SquareSizeUpperBound, + name: "GasPerBlobByte v3", + version: v3.Version, + expectedConstant: v3.GasPerBlobByte, + got: appconsts.GasPerBlobByte(v3.Version), }, } for _, tc := range testCases { - name := fmt.Sprintf("version %v", tc.version) - t.Run(name, func(t *testing.T) { - got := appconsts.SquareSizeUpperBound(tc.version) - require.Equal(t, tc.expected, got) + t.Run(tc.name, func(t *testing.T) { + require.Equal(t, tc.expectedConstant, tc.got) }) } } diff --git a/proto/celestia/blob/v1/params.proto b/proto/celestia/blob/v1/params.proto index 20007e259c..ae02800d6c 100644 --- a/proto/celestia/blob/v1/params.proto +++ b/proto/celestia/blob/v1/params.proto @@ -9,9 +9,6 @@ option go_package = "github.com/celestiaorg/celestia-app/x/blob/types"; message Params { option (gogoproto.goproto_stringer) = false; - uint32 gas_per_blob_byte = 1 - [ (gogoproto.moretags) = "yaml:\"gas_per_blob_byte\"" ]; - uint64 gov_max_square_size = 2 [ (gogoproto.moretags) = "yaml:\"gov_max_square_size\"" ]; } diff --git a/specs/src/specs/ante_handler_v1.md b/specs/src/specs/ante_handler_v1.md index 52109f67f8..3070d2a92c 100644 --- a/specs/src/specs/ante_handler_v1.md +++ b/specs/src/specs/ante_handler_v1.md @@ -11,7 +11,7 @@ The AnteHandler chains together several decorators to ensure the following crite - The tx's count of signatures <= the max number of signatures. The max number of signatures is [`TxSigLimit = 7`](https://github.com/cosmos/cosmos-sdk/blob/a429238fc267da88a8548bfebe0ba7fb28b82a13/x/auth/README.md?plain=1#L231). - The tx's [gas_limit](https://github.com/cosmos/cosmos-sdk/blob/22c28366466e64ebf0df1ce5bec8b1130523552c/proto/cosmos/tx/v1beta1/tx.proto#L211-L213) is > the gas consumed based on the tx's signatures. - The tx's [signatures](https://github.com/cosmos/cosmos-sdk/blob/22c28366466e64ebf0df1ce5bec8b1130523552c/types/tx/signing/signature.go#L10-L26) are valid. For each signature, ensure that the signature's sequence number (a.k.a nonce) matches the account sequence number of the signer. -- The tx's [gas_limit](https://github.com/cosmos/cosmos-sdk/blob/22c28366466e64ebf0df1ce5bec8b1130523552c/proto/cosmos/tx/v1beta1/tx.proto#L211-L213) is > the gas consumed based on the blob size(s). Since blobs are charged based on the number of shares they occupy, the gas consumed is calculated as follows: `gasToConsume = sharesNeeded(blob) * bytesPerShare * gasPerBlobByte`. Where `bytesPerShare` is a global constant (an alias for [`ShareSize = 512`](https://github.com/celestiaorg/celestia-app/blob/c90e61d5a2d0c0bd0e123df4ab416f6f0d141b7f/pkg/appconsts/global_consts.go#L27-L28)) and `gasPerBlobByte` is a governance parameter that can be modified (the [`DefaultGasPerBlobByte = 8`](https://github.com/celestiaorg/celestia-app/blob/c90e61d5a2d0c0bd0e123df4ab416f6f0d141b7f/pkg/appconsts/initial_consts.go#L16-L18)). +- The tx's [gas_limit](https://github.com/cosmos/cosmos-sdk/blob/22c28366466e64ebf0df1ce5bec8b1130523552c/proto/cosmos/tx/v1beta1/tx.proto#L211-L213) is > the gas consumed based on the blob size(s). Since blobs are charged based on the number of shares they occupy, the gas consumed is calculated as follows: `gasToConsume = sharesNeeded(blob) * bytesPerShare * gasPerBlobByte`. Where `bytesPerShare` is a global constant (an alias for [`ShareSize = 512`](https://github.com/celestiaorg/celestia-app/blob/c90e61d5a2d0c0bd0e123df4ab416f6f0d141b7f/pkg/appconsts/global_consts.go#L27-L28)) and `gasPerBlobByte` is an application constant that can be modified through hard fork (the [`DefaultGasPerBlobByte = 8`](https://github.com/celestiaorg/celestia-app/blob/c90e61d5a2d0c0bd0e123df4ab416f6f0d141b7f/pkg/appconsts/initial_consts.go#L16-L18)). - The tx's total blob size is <= the max blob size. The max blob size is derived from the maximum valid square size. The max valid square size is the minimum of: `GovMaxSquareSize` and `SquareSizeUpperBound`. - The tx does not contain a message of type [MsgSubmitProposal](https://github.com/cosmos/cosmos-sdk/blob/d6d929843bbd331b885467475bcb3050788e30ca/proto/cosmos/gov/v1/tx.proto#L33-L43) with zero proposal messages. - The tx is not an IBC packet or update message that has already been processed. diff --git a/x/blob/ante/ante.go b/x/blob/ante/ante.go index fe58eae87c..ef59a07490 100644 --- a/x/blob/ante/ante.go +++ b/x/blob/ante/ante.go @@ -1,6 +1,8 @@ package ante import ( + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" + v3 "github.com/celestiaorg/celestia-app/v3/pkg/appconsts/v3" "github.com/celestiaorg/celestia-app/v3/x/blob/types" "cosmossdk.io/errors" @@ -34,7 +36,7 @@ func (d MinGasPFBDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool if pfb, ok := m.(*types.MsgPayForBlobs); ok { if gasPerByte == 0 { // lazily fetch the gas per byte param - gasPerByte = d.k.GasPerBlobByte(ctx) + gasPerByte = appconsts.GasPerBlobByte(v3.Version) } gasToConsume := pfb.Gas(gasPerByte) if gasToConsume > txGas { diff --git a/x/blob/keeper/keeper.go b/x/blob/keeper/keeper.go index 72a3fb7605..5b864e0d72 100644 --- a/x/blob/keeper/keeper.go +++ b/x/blob/keeper/keeper.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/celestiaorg/celestia-app/v3/pkg/appconsts" "github.com/celestiaorg/celestia-app/v3/x/blob/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -43,7 +44,7 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger { func (k Keeper) PayForBlobs(goCtx context.Context, msg *types.MsgPayForBlobs) (*types.MsgPayForBlobsResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - gasToConsume := types.GasToConsume(msg.BlobSizes, k.GasPerBlobByte(ctx)) + gasToConsume := types.GasToConsume(msg.BlobSizes, appconsts.GasPerBlobByte(appconsts.LatestVersion)) ctx.GasMeter().ConsumeGas(gasToConsume, payForBlobGasDescriptor) err := ctx.EventManager().EmitTypedEvent( diff --git a/x/blob/keeper/params.go b/x/blob/keeper/params.go index c82ca3d9f2..71d85f814e 100644 --- a/x/blob/keeper/params.go +++ b/x/blob/keeper/params.go @@ -8,7 +8,6 @@ import ( // GetParams gets all parameters as types.Params func (k Keeper) GetParams(ctx sdk.Context) types.Params { return types.NewParams( - k.GasPerBlobByte(ctx), k.GovMaxSquareSize(ctx), ) } @@ -18,12 +17,6 @@ func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { k.paramStore.SetParamSet(ctx, ¶ms) } -// GasPerBlobByte returns the GasPerBlobByte param -func (k Keeper) GasPerBlobByte(ctx sdk.Context) (res uint32) { - k.paramStore.Get(ctx, types.KeyGasPerBlobByte, &res) - return res -} - // GovMaxSquareSize returns the GovMaxSquareSize param func (k Keeper) GovMaxSquareSize(ctx sdk.Context) (res uint64) { k.paramStore.Get(ctx, types.KeyGovMaxSquareSize, &res) diff --git a/x/blob/keeper/params_test.go b/x/blob/keeper/params_test.go index 9431ef3828..8c3c88f62a 100644 --- a/x/blob/keeper/params_test.go +++ b/x/blob/keeper/params_test.go @@ -14,5 +14,4 @@ func TestGetParams(t *testing.T) { k.SetParams(ctx, params) require.EqualValues(t, params, k.GetParams(ctx)) - require.EqualValues(t, params.GasPerBlobByte, k.GasPerBlobByte(ctx)) } diff --git a/x/blob/types/params.go b/x/blob/types/params.go index b9289c8940..f27a692a03 100644 --- a/x/blob/types/params.go +++ b/x/blob/types/params.go @@ -12,8 +12,6 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) var ( - KeyGasPerBlobByte = []byte("GasPerBlobByte") - DefaultGasPerBlobByte uint32 = appconsts.DefaultGasPerBlobByte KeyGovMaxSquareSize = []byte("GovMaxSquareSize") DefaultGovMaxSquareSize uint64 = appconsts.DefaultGovMaxSquareSize ) @@ -24,32 +22,26 @@ func ParamKeyTable() paramtypes.KeyTable { } // NewParams creates a new Params instance -func NewParams(gasPerBlobByte uint32, govMaxSquareSize uint64) Params { +func NewParams(govMaxSquareSize uint64) Params { return Params{ - GasPerBlobByte: gasPerBlobByte, GovMaxSquareSize: govMaxSquareSize, } } // DefaultParams returns a default set of parameters func DefaultParams() Params { - return NewParams(DefaultGasPerBlobByte, appconsts.DefaultGovMaxSquareSize) + return NewParams(appconsts.DefaultGovMaxSquareSize) } // ParamSetPairs gets the list of param key-value pairs func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyGasPerBlobByte, &p.GasPerBlobByte, validateGasPerBlobByte), paramtypes.NewParamSetPair(KeyGovMaxSquareSize, &p.GovMaxSquareSize, validateGovMaxSquareSize), } } // Validate validates the set of params func (p Params) Validate() error { - err := validateGasPerBlobByte(p.GasPerBlobByte) - if err != nil { - return err - } return validateGovMaxSquareSize(p.GovMaxSquareSize) } @@ -59,20 +51,6 @@ func (p Params) String() string { return string(out) } -// validateGasPerBlobByte validates the GasPerBlobByte param -func validateGasPerBlobByte(v interface{}) error { - gasPerBlobByte, ok := v.(uint32) - if !ok { - return fmt.Errorf("invalid parameter type: %T", v) - } - - if gasPerBlobByte == 0 { - return fmt.Errorf("gas per blob byte cannot be 0") - } - - return nil -} - // validateGovMaxSquareSize validates the GovMaxSquareSize param func validateGovMaxSquareSize(v interface{}) error { govMaxSquareSize, ok := v.(uint64) diff --git a/x/blob/types/params.pb.go b/x/blob/types/params.pb.go index ba0f2b2ff3..b2f7b3343c 100644 --- a/x/blob/types/params.pb.go +++ b/x/blob/types/params.pb.go @@ -25,7 +25,6 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the module. type Params struct { - GasPerBlobByte uint32 `protobuf:"varint,1,opt,name=gas_per_blob_byte,json=gasPerBlobByte,proto3" json:"gas_per_blob_byte,omitempty" yaml:"gas_per_blob_byte"` GovMaxSquareSize uint64 `protobuf:"varint,2,opt,name=gov_max_square_size,json=govMaxSquareSize,proto3" json:"gov_max_square_size,omitempty" yaml:"gov_max_square_size"` } @@ -61,13 +60,6 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo -func (m *Params) GetGasPerBlobByte() uint32 { - if m != nil { - return m.GasPerBlobByte - } - return 0 -} - func (m *Params) GetGovMaxSquareSize() uint64 { if m != nil { return m.GovMaxSquareSize @@ -82,24 +74,21 @@ func init() { func init() { proto.RegisterFile("celestia/blob/v1/params.proto", fileDescriptor_2145b82d3e5371c6) } var fileDescriptor_2145b82d3e5371c6 = []byte{ - // 270 bytes of a gzipped FileDescriptorProto + // 216 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0x4e, 0xcd, 0x49, 0x2d, 0x2e, 0xc9, 0x4c, 0xd4, 0x4f, 0xca, 0xc9, 0x4f, 0xd2, 0x2f, 0x33, 0xd4, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0x49, 0xeb, 0x81, 0xa4, 0xf5, 0xca, 0x0c, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x92, 0xfa, 0x20, 0x16, 0x44, 0x9d, - 0xd2, 0x32, 0x46, 0x2e, 0xb6, 0x00, 0xb0, 0x46, 0x21, 0x77, 0x2e, 0xc1, 0xf4, 0xc4, 0xe2, 0xf8, - 0x82, 0xd4, 0xa2, 0x78, 0x90, 0x9e, 0xf8, 0xa4, 0xca, 0x92, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, - 0x5e, 0x27, 0x99, 0x4f, 0xf7, 0xe4, 0x25, 0x2a, 0x13, 0x73, 0x73, 0xac, 0x94, 0x30, 0x94, 0x28, - 0x05, 0xf1, 0xa5, 0x27, 0x16, 0x07, 0xa4, 0x16, 0x39, 0xe5, 0xe4, 0x27, 0x39, 0x55, 0x96, 0xa4, - 0x0a, 0xf9, 0x72, 0x09, 0xa7, 0xe7, 0x97, 0xc5, 0xe7, 0x26, 0x56, 0xc4, 0x17, 0x17, 0x96, 0x26, - 0x16, 0xa5, 0xc6, 0x17, 0x67, 0x56, 0xa5, 0x4a, 0x30, 0x29, 0x30, 0x6a, 0xb0, 0x38, 0xc9, 0x7d, - 0xba, 0x27, 0x2f, 0x05, 0x35, 0x0a, 0x53, 0x91, 0x52, 0x90, 0x40, 0x7a, 0x7e, 0x99, 0x6f, 0x62, - 0x45, 0x30, 0x58, 0x2c, 0x38, 0xb3, 0x2a, 0xd5, 0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0x27, 0xaf, - 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, - 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x48, 0xcf, 0x2c, 0xc9, 0x28, - 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x87, 0xf9, 0x3a, 0xbf, 0x28, 0x1d, 0xce, 0xd6, 0x4d, 0x2c, - 0x28, 0xd0, 0xaf, 0x80, 0x04, 0x53, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xef, 0xc6, - 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x2d, 0x7d, 0x23, 0x44, 0x01, 0x00, 0x00, + 0x52, 0x2c, 0x17, 0x5b, 0x00, 0x58, 0x9f, 0x90, 0x2f, 0x97, 0x70, 0x7a, 0x7e, 0x59, 0x7c, 0x6e, + 0x62, 0x45, 0x7c, 0x71, 0x61, 0x69, 0x62, 0x51, 0x6a, 0x7c, 0x71, 0x66, 0x55, 0xaa, 0x04, 0x93, + 0x02, 0xa3, 0x06, 0x8b, 0x93, 0xdc, 0xa7, 0x7b, 0xf2, 0x52, 0x95, 0x89, 0xb9, 0x39, 0x56, 0x4a, + 0x58, 0x14, 0x29, 0x05, 0x09, 0xa4, 0xe7, 0x97, 0xf9, 0x26, 0x56, 0x04, 0x83, 0xc5, 0x82, 0x33, + 0xab, 0x52, 0xad, 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0xf2, 0x3a, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, + 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, + 0xc6, 0x63, 0x39, 0x86, 0x28, 0x83, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, + 0x7d, 0x98, 0x5b, 0xf3, 0x8b, 0xd2, 0xe1, 0x6c, 0xdd, 0xc4, 0x82, 0x02, 0xfd, 0x0a, 0x88, 0xe7, + 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x2e, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, + 0x8c, 0x27, 0x44, 0x25, 0xfa, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -127,11 +116,6 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x10 } - if m.GasPerBlobByte != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.GasPerBlobByte)) - i-- - dAtA[i] = 0x8 - } return len(dAtA) - i, nil } @@ -152,9 +136,6 @@ func (m *Params) Size() (n int) { } var l int _ = l - if m.GasPerBlobByte != 0 { - n += 1 + sovParams(uint64(m.GasPerBlobByte)) - } if m.GovMaxSquareSize != 0 { n += 1 + sovParams(uint64(m.GovMaxSquareSize)) } @@ -196,25 +177,6 @@ func (m *Params) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field GasPerBlobByte", wireType) - } - m.GasPerBlobByte = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowParams - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.GasPerBlobByte |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field GovMaxSquareSize", wireType) diff --git a/x/paramfilter/test/gov_params_test.go b/x/paramfilter/test/gov_params_test.go index c3dfaca1f4..471d325cac 100644 --- a/x/paramfilter/test/gov_params_test.go +++ b/x/paramfilter/test/gov_params_test.go @@ -124,19 +124,6 @@ func (suite *GovParamsTestSuite) TestModifiableParams() { assert.Equal(want, got) }, }, - { - "blob.GasPerBlobByte", - testProposal(proposal.ParamChange{ - Subspace: blobtypes.ModuleName, - Key: string(blobtypes.KeyGasPerBlobByte), - Value: `2`, - }), - func() { - got := suite.app.BlobKeeper.GetParams(suite.ctx).GasPerBlobByte - want := uint32(2) - assert.Equal(want, got) - }, - }, { "blob.GovMaxSquareSize", testProposal(proposal.ParamChange{