Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: init bitcoinindexer module #27

Merged
merged 11 commits into from
Nov 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ run:
linters:
enable:
- bodyclose
- depguard
# - depguard
- dogsled
- dupl
- errcheck
Expand Down Expand Up @@ -67,9 +67,9 @@ linters-settings:
gomodguard:
blocked:
versions: # List of blocked module version constraints
- https://github.com/etcd-io/etcd: # Blocked module with version constraint
version: ">= 3.4.10 || ~3.3.23" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons
reason: "CVE-2020-15114; CVE-2020-15136; CVE-2020-15115" # Reason why the version constraint exists. (Optional)
- https://github.com/dgrijalva/jwt-go: # Blocked module with version constraint
version: ">= 4.0.0-preview1" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons
reason: "CVE-2020-26160" # Reason why the version constraint exists. (Optional)
- https://github.com/etcd-io/etcd: # Blocked module with version constraint
version: ">= 3.4.10 || ~3.3.23" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons
reason: "CVE-2020-15114; CVE-2020-15136; CVE-2020-15115" # Reason why the version constraint exists. (Optional)
- https://github.com/dgrijalva/jwt-go: # Blocked module with version constraint
version: ">= 4.0.0-preview1" # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons
reason: "CVE-2020-26160" # Reason why the version constraint exists. (Optional)
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ endif

ifeq (, $(shell which go-bindata))
@echo "Installing go-bindata..."
@go get github.com/kevinburke/go-bindata/go-bindata
@go get github.com/kevinburke/go-bindata/v4/...@latest
else
@echo "go-bindata already installed; skipping..."
endif
Expand Down
13 changes: 13 additions & 0 deletions proto/ethermint/bitcoinindexer/v1/genesis.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
syntax = "proto3";
package ethermint.bitcoinindexer.v1;

import "ethermint/bitcoinindexer/v1/params.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/evmos/ethermint/x/bitcoinindexer/types";

// GenesisState defines the bitcoinindexer module's genesis state.
message GenesisState {
// params holds all the parameters of this module.
Params params = 1 [(gogoproto.nullable) = false];
}
12 changes: 12 additions & 0 deletions proto/ethermint/bitcoinindexer/v1/params.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
syntax = "proto3";
package ethermint.bitcoinindexer.v1;

import "gogoproto/gogo.proto";

option go_package = "github.com/evmos/ethermint/x/bitcoinindexer/types";

// Params defines the parameters for the module.
message Params {
option (gogoproto.goproto_stringer) = false;

}
26 changes: 26 additions & 0 deletions proto/ethermint/bitcoinindexer/v1/query.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
syntax = "proto3";
package ethermint.bitcoinindexer.v1;

import "ethermint/bitcoinindexer/v1/params.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
// import "cosmos/base/query/v1beta1/pagination.proto";

option go_package = "github.com/evmos/ethermint/x/bitcoinindexer/types";

// Query defines the gRPC querier service.
service Query {
// Params Parameters queries the parameters of the module.
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/ethermint/bitcoinindexer/v1/params";
}
}

// QueryParamsRequest is request type for the Query/Params RPC method.
message QueryParamsRequest {}

// QueryParamsResponse is response type for the Query/Params RPC method.
message QueryParamsResponse {
// params holds all the parameters of this module.
Params params = 1 [(gogoproto.nullable) = false];
}
7 changes: 7 additions & 0 deletions proto/ethermint/bitcoinindexer/v1/tx.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
syntax = "proto3";
package ethermint.bitcoinindexer.v1;

option go_package = "github.com/evmos/ethermint/x/bitcoinindexer/types";

// Msg defines the Msg service.
service Msg {}
52 changes: 52 additions & 0 deletions testutil/keeper/bitcoinindexer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package keeper

import (
"testing"

"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/store"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
typesparams "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/evmos/ethermint/x/bitcoinindexer/keeper"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
"github.com/stretchr/testify/require"
"github.com/tendermint/tendermint/libs/log"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
tmdb "github.com/tendermint/tm-db"
)

func BitcoinindexerKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) {
storeKey := sdk.NewKVStoreKey(types.StoreKey)
memStoreKey := storetypes.NewMemoryStoreKey(types.MemStoreKey)

db := tmdb.NewMemDB()
stateStore := store.NewCommitMultiStore(db)
stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db)
stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil)
require.NoError(t, stateStore.LoadLatestVersion())

registry := codectypes.NewInterfaceRegistry()
cdc := codec.NewProtoCodec(registry)

paramsSubspace := typesparams.NewSubspace(cdc,
types.Amino,
storeKey,
memStoreKey,
"BitcoinindexerParams",
)
k := keeper.NewKeeper(
cdc,
storeKey,
memStoreKey,
paramsSubspace,
)

ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger())

// Initialize params
k.SetParams(ctx, types.DefaultParams())

return k, ctx
}
31 changes: 31 additions & 0 deletions x/bitcoinindexer/client/cli/query.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
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/evmos/ethermint/x/bitcoinindexer/types"
)

// GetQueryCmd returns the cli query commands for this module
func GetQueryCmd(_ string) *cobra.Command {
// Group bitcoinindexer queries under a subcommand
cmd := &cobra.Command{
Use: types.ModuleName,
Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName),
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}

cmd.AddCommand(CmdQueryParams())
// this line is used by starport scaffolding # 1

return cmd
}
34 changes: 34 additions & 0 deletions x/bitcoinindexer/client/cli/query_params.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package cli

import (
"context"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
"github.com/spf13/cobra"
)

func CmdQueryParams() *cobra.Command {
cmd := &cobra.Command{
Use: "params",
Short: "shows the parameters of the module",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx := client.GetClientContextFromCmd(cmd)

queryClient := types.NewQueryClient(clientCtx)

res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{})
if err != nil {
return err
}

return clientCtx.PrintProto(res)
},
}

flags.AddQueryFlagsToCmd(cmd)

return cmd
}
36 changes: 36 additions & 0 deletions x/bitcoinindexer/client/cli/tx.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package cli

import (
"fmt"

"github.com/spf13/cobra"

"github.com/cosmos/cosmos-sdk/client"
// "github.com/cosmos/cosmos-sdk/client/flags"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
)

var (
// NOTE: unused
// DefaultRelativePacketTimeoutTimestamp = uint64((time.Duration(10) * time.Minute).Nanoseconds())
)

const (
// flagPacketTimeoutTimestamp = "packet-timeout-timestamp"
// listSeparator = ","
)

// GetTxCmd returns the transaction commands for this module
func GetTxCmd() *cobra.Command {
cmd := &cobra.Command{
Use: types.ModuleName,
Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName),
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}

// this line is used by starport scaffolding # 1

return cmd
}
23 changes: 23 additions & 0 deletions x/bitcoinindexer/genesis.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package bitcoinindexer

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/evmos/ethermint/x/bitcoinindexer/keeper"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
)

// InitGenesis initializes the module's state from a provided genesis state.
func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState) {
// this line is used by starport scaffolding # genesis/module/init
k.SetParams(ctx, genState.Params)
}

// ExportGenesis returns the module's exported genesis
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
genesis := types.DefaultGenesis()
genesis.Params = k.GetParams(ctx)

// this line is used by starport scaffolding # genesis/module/export

return genesis
}
29 changes: 29 additions & 0 deletions x/bitcoinindexer/genesis_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package bitcoinindexer_test

import (
"testing"

keepertest "github.com/evmos/ethermint/testutil/keeper"
// "github.com/evmos/ethermint/testutil/nullify"
"github.com/evmos/ethermint/x/bitcoinindexer"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
"github.com/stretchr/testify/require"
)

func TestGenesis(t *testing.T) {
genesisState := types.GenesisState{
Params: types.DefaultParams(),

// this line is used by starport scaffolding # genesis/test/state
}

k, ctx := keepertest.BitcoinindexerKeeper(t)
bitcoinindexer.InitGenesis(ctx, *k, genesisState)
got := bitcoinindexer.ExportGenesis(ctx, *k)
require.NotNil(t, got)

// nullify.Fill(&genesisState)
// nullify.Fill(got)

// this line is used by starport scaffolding # genesis/test/assert
}
45 changes: 45 additions & 0 deletions x/bitcoinindexer/keeper/keeper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package keeper

import (
"fmt"

"github.com/cosmos/cosmos-sdk/codec"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/tendermint/tendermint/libs/log"

"github.com/evmos/ethermint/x/bitcoinindexer/types"
)

type (
Keeper struct {
cdc codec.BinaryCodec
storeKey storetypes.StoreKey
memKey storetypes.StoreKey
paramstore paramtypes.Subspace
}
)

func NewKeeper(
cdc codec.BinaryCodec,
storeKey,
memKey storetypes.StoreKey,
ps paramtypes.Subspace,
) *Keeper {
// set KeyTable if it has not already been set
if !ps.HasKeyTable() {
ps = ps.WithKeyTable(types.ParamKeyTable())
}

return &Keeper{
cdc: cdc,
storeKey: storeKey,
memKey: memKey,
paramstore: ps,
}
}

func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName))
}
17 changes: 17 additions & 0 deletions x/bitcoinindexer/keeper/msg_server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package keeper

import (
"github.com/evmos/ethermint/x/bitcoinindexer/types"
)

type msgServer struct {
Keeper
}

// NewMsgServerImpl returns an implementation of the MsgServer interface
// for the provided Keeper.
func NewMsgServerImpl(keeper Keeper) types.MsgServer {
return &msgServer{Keeper: keeper}
}

var _ types.MsgServer = msgServer{}
16 changes: 16 additions & 0 deletions x/bitcoinindexer/keeper/msg_server_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package keeper_test

import (
"context"
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
keepertest "github.com/evmos/ethermint/testutil/keeper"
"github.com/evmos/ethermint/x/bitcoinindexer/keeper"
"github.com/evmos/ethermint/x/bitcoinindexer/types"
)

func setupMsgServer(t testing.TB) (types.MsgServer, context.Context) {
k, ctx := keepertest.BitcoinindexerKeeper(t)
return keeper.NewMsgServerImpl(*k), sdk.WrapSDKContext(ctx)
}
Loading
Loading