Skip to content

Commit

Permalink
Merge pull request #6 from AllInBetsCom/cron-fix
Browse files Browse the repository at this point in the history
module refactored post review
  • Loading branch information
rockstarRhino authored Jun 5, 2024
2 parents f05ea11 + 4244071 commit aa85548
Show file tree
Hide file tree
Showing 28 changed files with 233 additions and 209 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ require (
github.com/CosmWasm/wasmd v0.33.0
github.com/bcdevtools/block-explorer-rpc-cosmos v1.2.3
github.com/bcdevtools/wasm-block-explorer-rpc-cosmos v1.1.1
github.com/cosmos/cosmos-proto v1.0.0-beta.3
github.com/cosmos/cosmos-sdk v0.46.16
github.com/cosmos/gogoproto v1.4.11
github.com/cosmos/ibc-go/v6 v6.3.0
Expand Down Expand Up @@ -87,6 +86,7 @@ require (
github.com/containerd/cgroups v1.1.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gorocksdb v1.2.0 // indirect
github.com/cosmos/iavl v0.19.6 // indirect
Expand Down
8 changes: 6 additions & 2 deletions proto/wasmrollapp/cron/v1beta1/cron.proto
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
syntax = "proto3";
package wasmrollapp.cron.v1beta1;

import "gogoproto/gogo.proto";

option go_package = "github.com/dymensionxyz/rollapp-wasm/x/cron/types";

message WhitelistedContract {
// game_id is the unique identifier for the game
uint64 game_id = 1;
// security_address is the address of the security contract
string security_address = 2;
// contract_admin is the address of the contract admin
string contract_admin = 3;
// game_name is the name of the game
string game_name = 4;
// contract_address is the address of the contract
string contract_address = 5;
// game_type is the type of the game, single player or multiplayer or both
uint64 game_type = 6;
}
3 changes: 3 additions & 0 deletions proto/wasmrollapp/cron/v1beta1/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ service Query {
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/wasmrollapp/cron/v1beta1/params";
}
// WhitelistedContracts queries the whitelisted contracts of the module.
rpc QueryWhitelistedContracts(QueryWhitelistedContractsRequest) returns (QueryWhitelistedContractsResponse) {
option (google.api.http).get = "/wasmrollapp/cron/v1beta1/whitelisted_contracts";
}
Expand All @@ -29,11 +30,13 @@ message QueryParamsResponse {
Params params = 1 [(gogoproto.nullable) = false];
}

// QueryWhitelistedContractsRequest is request type for the Query/WhitelistedContracts RPC method.
message QueryWhitelistedContractsRequest{
cosmos.base.query.v1beta1.PageRequest pagination = 1
[(gogoproto.moretags) = "yaml:\"pagination\""];
}

// QueryWhitelistedContractsResponse is response type for the Query/WhitelistedContracts RPC method.
message QueryWhitelistedContractsResponse {
repeated WhitelistedContract whilisted_contracts = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2
Expand Down
22 changes: 12 additions & 10 deletions proto/wasmrollapp/cron/v1beta1/tx.proto
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
syntax = "proto3";
package wasmrollapp.cron.v1beta1;
import "gogoproto/gogo.proto";

import "cosmos/msg/v1/msg.proto";
import "cosmos_proto/cosmos.proto";
import "wasmrollapp/cron/v1beta1/params.proto";


option go_package = "github.com/dymensionxyz/rollapp-wasm/x/cron/types";

// Msg defines the Msg service.
service Msg {
rpc RegisterContract(MsgRegisterContract) returns(MsgRegisterContractResponse);
rpc DeRegisterContract(MsgDeRegisterContract) returns(MsgDeRegisterContractResponse);
rpc DeregisterContract(MsgDeregisterContract) returns(MsgDeregisterContractResponse);
}

// MsgRegisterContract defines the Msg/RegisterContract request type.
message MsgRegisterContract {
// security_address is the address of the security module
string security_address = 1;
// game_name is the name of the game
string game_name = 2;
// contract_address is the address of the contract
string contract_address = 3;
uint64 game_type = 4; // 1 -> single, 2 -> multi, 3 -> both
// game_type is the type of the game 1 -> single, 2 -> multi, 3 -> both
uint64 game_type = 4;
}

// MsgRegisterContractResponse defines the Msg/RegisterContract response type.
message MsgRegisterContractResponse {}

message MsgDeRegisterContract {
// MsgDeregisterContract defines the Msg/DeregisterContract request type.
message MsgDeregisterContract {
string security_address = 1;
uint64 game_id = 2;
}

message MsgDeRegisterContractResponse {}
// MsgDeregisterContractResponse defines the Msg/DeregisterContract response type.
message MsgDeregisterContractResponse {}
2 changes: 1 addition & 1 deletion x/cron/abci.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package cron

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dymensionxyz/rollapp-wasm/x/cron/keeper"
cronTypes "github.com/dymensionxyz/rollapp-wasm/x/cron/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)

func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
Expand Down
2 changes: 0 additions & 2 deletions x/cron/client/cli/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package cli

import (
"fmt"
// "strings"

"github.com/spf13/cobra"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"

// sdk "github.com/cosmos/cosmos-sdk/types"

"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
)
Expand Down
2 changes: 1 addition & 1 deletion x/cron/client/cli/query_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package cli
import (
"context"

"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
"github.com/spf13/cobra"
)

Expand Down
2 changes: 1 addition & 1 deletion x/cron/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func CmdDeRegisterContract() *cobra.Command {
return fmt.Errorf("game-id '%s' not a valid uint", args[0])
}

msg := types.NewMsgDeRegisterContract(
msg := types.NewMsgDeregisterContract(
clientCtx.GetFromAddress().String(),
gameID,
)
Expand Down
2 changes: 1 addition & 1 deletion x/cron/genesis.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package cron

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dymensionxyz/rollapp-wasm/x/cron/keeper"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)

// InitGenesis initializes the capability module's state from a provided genesis
Expand Down
11 changes: 6 additions & 5 deletions x/cron/handler.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package cron

import (
errorsmod "cosmossdk.io/errors"
"fmt"

"github.com/dymensionxyz/rollapp-wasm/x/cron/keeper"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/dymensionxyz/rollapp-wasm/x/cron/keeper"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
)

// NewHandler ...
Expand All @@ -22,13 +23,13 @@ func NewHandler(k keeper.Keeper) sdk.Handler {
case *types.MsgRegisterContract:
res, err := server.RegisterContract(sdk.WrapSDKContext(ctx), msg)
return sdk.WrapServiceResult(ctx, res, err)
case *types.MsgDeRegisterContract:
res, err := server.DeRegisterContract(sdk.WrapSDKContext(ctx), msg)
case *types.MsgDeregisterContract:
res, err := server.DeregisterContract(sdk.WrapSDKContext(ctx), msg)
return sdk.WrapServiceResult(ctx, res, err)
// this line is used by starport scaffolding # 1
default:
errMsg := fmt.Sprintf("unrecognized %s message type: %T", types.ModuleName, msg)
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, errMsg)
return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg)
}
}
}
9 changes: 4 additions & 5 deletions x/cron/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,15 @@ func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) {
panic(err)
}
var (
GameID uint64
gameID uint64
)
// this line is used by starport scaffolding # genesis/module/init
for _, item := range genState.WhitelistedContracts {
if item.GameId > GameID {
GameID = item.GameId
}
k.SetContract(ctx, item)
// Set the gameID to the gameID in the whitelisted contract
gameID = item.GameId
}
k.SetGameID(ctx, GameID)
k.SetGameID(ctx, gameID)
k.SetParams(ctx, genState.Params)
}

Expand Down
11 changes: 5 additions & 6 deletions x/cron/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"

// "github.com/dymensionxyz/dymension-rdk/utils/logger"
"github.com/dymensionxyz/rollapp-wasm/x/cron/expected"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
)
Expand Down Expand Up @@ -76,24 +75,24 @@ func (k Keeper) Store(ctx sdk.Context) sdk.KVStore {
return ctx.KVStore(k.storeKey)
}

func (k Keeper) SinglePlayer(ctx sdk.Context, contractAddress string, ResolveSinglePlayer []byte, gameName string) {
err := k.SudoContractCall(ctx, contractAddress, ResolveSinglePlayer)
func (k Keeper) SinglePlayer(ctx sdk.Context, contractAddress string, resolveSinglePlayer []byte, gameName string) {
err := k.SudoContractCall(ctx, contractAddress, resolveSinglePlayer)
if err != nil {
ctx.Logger().Error("Game %s contract call error for single-player", gameName)
} else {
ctx.Logger().Info("Game %s contract call for single-player success", gameName)
}
}

func (k Keeper) MultiPlayer(ctx sdk.Context, contractAddress string, SetupMultiPlayer []byte, ResolveMultiPlayer []byte, gameName string) {
err := k.SudoContractCall(ctx, contractAddress, SetupMultiPlayer)
func (k Keeper) MultiPlayer(ctx sdk.Context, contractAddress string, setupMultiPlayer []byte, resolveMultiPlayer []byte, gameName string) {
err := k.SudoContractCall(ctx, contractAddress, setupMultiPlayer)
if err != nil {
ctx.Logger().Error("Game %s contract call error for setup multi-player", gameName)
} else {
ctx.Logger().Info("Game %s contract call for setup multi-player success", gameName)
}

err = k.SudoContractCall(ctx, contractAddress, ResolveMultiPlayer)
err = k.SudoContractCall(ctx, contractAddress, resolveMultiPlayer)
if err != nil {
ctx.Logger().Error("Game %s contract call error for resolve multi-player", gameName)
} else {
Expand Down
21 changes: 11 additions & 10 deletions x/cron/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ package keeper

import (
"context"
errorsmod "cosmossdk.io/errors"
"fmt"

"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
)

type msgServer struct {
Expand All @@ -26,7 +27,7 @@ func (k msgServer) RegisterContract(goCtx context.Context, msg *types.MsgRegiste
// check if the cron is globally enabled
params := k.GetParams(ctx)
if !params.EnableCron {
return &types.MsgRegisterContractResponse{}, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "Cron is disabled")
return &types.MsgRegisterContractResponse{}, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Cron is disabled")
}

if err := msg.ValidateBasic(); err != nil {
Expand All @@ -51,7 +52,7 @@ func (k msgServer) RegisterContract(goCtx context.Context, msg *types.MsgRegiste

for _, data := range allContracts {
if data.ContractAddress == msg.ContractAddress {
return &types.MsgRegisterContractResponse{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "contract already registered")
return &types.MsgRegisterContractResponse{}, errorsmod.Wrapf(sdkerrors.ErrNotFound, "contract already registered")
}
}
gameID := k.GetGameID(ctx)
Expand All @@ -70,38 +71,38 @@ func (k msgServer) RegisterContract(goCtx context.Context, msg *types.MsgRegiste
return &types.MsgRegisterContractResponse{}, nil
}

func (k msgServer) DeRegisterContract(goCtx context.Context, msg *types.MsgDeRegisterContract) (*types.MsgDeRegisterContractResponse, error) {
func (k msgServer) DeregisterContract(goCtx context.Context, msg *types.MsgDeregisterContract) (*types.MsgDeregisterContractResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
params := k.GetParams(ctx)
if !params.EnableCron {
return &types.MsgDeRegisterContractResponse{}, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "Cron is disabled")
return &types.MsgDeregisterContractResponse{}, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Cron is disabled")
}

if err := msg.ValidateBasic(); err != nil {
ctx.Logger().Error(fmt.Sprintf("request invalid: %s", err))
return &types.MsgDeRegisterContractResponse{}, err
return &types.MsgDeregisterContractResponse{}, err
}

// Get Game info from Game Id
gameInfo, found := k.GetWhitelistedContract(ctx, msg.GameId)
if !found {
return &types.MsgDeRegisterContractResponse{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "no contract found for this game ID")
return &types.MsgDeregisterContractResponse{}, errorsmod.Wrapf(sdkerrors.ErrNotFound, "no contract found for this game ID")
}

// Validation such that only the user who instantiated the contract can register contract
contractAddr, err := sdk.AccAddressFromBech32(gameInfo.ContractAddress)
if err != nil {
return &types.MsgDeRegisterContractResponse{}, sdkerrors.ErrInvalidAddress
return &types.MsgDeregisterContractResponse{}, sdkerrors.ErrInvalidAddress
}
contractInfo := k.conOps.GetContractInfo(ctx, contractAddr)

// check if sender is authorized
exists := k.CheckSecurityAddress(ctx, msg.SecurityAddress)
if !exists && contractInfo.Admin != msg.SecurityAddress {
return &types.MsgDeRegisterContractResponse{}, sdkerrors.ErrUnauthorized
return &types.MsgDeregisterContractResponse{}, sdkerrors.ErrUnauthorized
}

k.DeleteContract(ctx, msg.GameId)

return &types.MsgDeRegisterContractResponse{}, nil
return &types.MsgDeregisterContractResponse{}, nil
}
2 changes: 1 addition & 1 deletion x/cron/keeper/params.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package keeper

import (
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dymensionxyz/rollapp-wasm/x/cron/types"
)

// GetParams returns the current x/cron module parameters.
Expand Down
4 changes: 2 additions & 2 deletions x/cron/keeper/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ func TestGetParams(t *testing.T) {
appd := app.Setup(t, false)
ctx := appd.BaseApp.NewContext(false, tmproto.Header{})

DefaultSecurityAddress := []string{"cosmos1xkxed7rdzvmyvgdshpe445ddqwn47fru24fnlp"}
params := cronTypes.Params{SecurityAddress: DefaultSecurityAddress, EnableCron: true}
defaultSecurityAddress := []string{"cosmos1xkxed7rdzvmyvgdshpe445ddqwn47fru24fnlp"}
params := cronTypes.Params{SecurityAddress: defaultSecurityAddress, EnableCron: true}

appd.CronKeeper.SetParams(ctx, params)

Expand Down
4 changes: 2 additions & 2 deletions x/cron/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingCo
}

// RegisterRESTRoutes registers the capability module's REST service handlers.
func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) {
func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {
}

// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module.
Expand Down Expand Up @@ -165,7 +165,7 @@ func (am AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.Valid
}

// LegacyQuerierHandler returns the capability module's Querier.
func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
func (am AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier {
return nil
}

Expand Down
Loading

0 comments on commit aa85548

Please sign in to comment.