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

Bridge module #106

Closed
wants to merge 39 commits into from
Closed
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
86d4138
feat: add bridge module
YuexingZeng Jan 16, 2024
89a04a6
feat: add group module dep
YuexingZeng Jan 17, 2024
0ee0625
refa: refa caller and signer struct
YuexingZeng Jan 17, 2024
cb237e0
fix: fix proto
YuexingZeng Jan 17, 2024
c37fd8a
add tx rpc
YuexingZeng Jan 17, 2024
7fb2552
fix: fix proto
YuexingZeng Jan 17, 2024
317ce3b
feat: add module parameters
YuexingZeng Jan 18, 2024
6ff7f08
feat: permission control and sign logic
YuexingZeng Jan 18, 2024
0517fca
refa: refa caller and signer group
YuexingZeng Jan 18, 2024
be7cefc
fix: fix unitest
YuexingZeng Jan 18, 2024
6dcac3f
fix: fix unitest
YuexingZeng Jan 19, 2024
e9fc4cf
unitest: fix unitest
YuexingZeng Jan 19, 2024
4cf4aae
fix: ignore cli unitest
YuexingZeng Jan 19, 2024
7526db3
fix: proto format
YuexingZeng Jan 20, 2024
6d809ca
fix: fix proto lint
YuexingZeng Jan 20, 2024
d195d5b
fix: fix protolint
YuexingZeng Jan 20, 2024
97247ed
refa: refa withdraw struct
YuexingZeng Jan 22, 2024
af0388e
fix: use cosmossdk.io/errors
YuexingZeng Jan 22, 2024
b0cd608
fix: fix golangci-lint
YuexingZeng Jan 24, 2024
880f369
fix: fix shellcheck
YuexingZeng Jan 24, 2024
9223b33
fix: fix shellcheck
YuexingZeng Jan 24, 2024
7d104ca
fix: ignore gitleak in init.bat
YuexingZeng Jan 24, 2024
14867d8
fix: fix gosec check
YuexingZeng Jan 24, 2024
f1e5192
refa: add events and fix genesis-state of groups
YuexingZeng Jan 30, 2024
3cb87ce
fix: fix lint
YuexingZeng Jan 30, 2024
301aab3
refa: refa deposit or withdraw status
YuexingZeng Jan 31, 2024
c35ea18
refa: coin type use enum rather than str
YuexingZeng Feb 4, 2024
a7f9425
refa: use threshold params rather than hard code
YuexingZeng Feb 4, 2024
8bd68f6
fix: fix golangci lint
YuexingZeng Feb 4, 2024
feeb97d
fix: fix golangci-lint and gosec lint
YuexingZeng Feb 4, 2024
105baba
fix: fix gosec lint
YuexingZeng Feb 4, 2024
d334592
refa: update deposit add rollup_tx_hash and aa_address
YuexingZeng Feb 5, 2024
123b94b
feat: get withdraw records by status
YuexingZeng Feb 5, 2024
05c20f1
fix lint
YuexingZeng Feb 5, 2024
f3ec638
refa: value field use int64 rather than uint64
YuexingZeng Feb 6, 2024
d56d6be
refa: refa withdraw record structure
YuexingZeng Feb 6, 2024
7e77da9
fix: fix gonglangci-lint
YuexingZeng Feb 6, 2024
47257b7
feat: add rollup_tx object
YuexingZeng Feb 21, 2024
00b820a
feat: save rollup_tx on chain
YuexingZeng Feb 21, 2024
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
45 changes: 43 additions & 2 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ package app
import (
"encoding/json"
"fmt"
"github.com/cosmos/cosmos-sdk/x/group"
groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper"
groupmodule "github.com/cosmos/cosmos-sdk/x/group/module"
bridgemoduletypes "github.com/evmos/ethermint/x/bridge/types"
"io"
"net/http"
"os"
Expand Down Expand Up @@ -122,6 +126,8 @@ import (
"github.com/evmos/ethermint/ethereum/eip712"
srvflags "github.com/evmos/ethermint/server/flags"
ethermint "github.com/evmos/ethermint/types"
"github.com/evmos/ethermint/x/bridge"
bridgemodulekeeper "github.com/evmos/ethermint/x/bridge/keeper"
"github.com/evmos/ethermint/x/evm"
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
evmtypes "github.com/evmos/ethermint/x/evm/types"
Expand Down Expand Up @@ -171,13 +177,15 @@ var (
ibc.AppModuleBasic{},
authzmodule.AppModuleBasic{},
feegrantmodule.AppModuleBasic{},
groupmodule.AppModuleBasic{},
upgrade.AppModuleBasic{},
evidence.AppModuleBasic{},
transfer.AppModuleBasic{},
vesting.AppModuleBasic{},
// Ethermint modules
evm.AppModuleBasic{},
feemarket.AppModuleBasic{},
bridge.AppModuleBasic{},
)

// module account permissions
Expand Down Expand Up @@ -230,6 +238,7 @@ type EthermintApp struct {
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
GroupKeeper groupkeeper.Keeper
AuthzKeeper authzkeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
EvidenceKeeper evidencekeeper.Keeper
Expand All @@ -242,6 +251,7 @@ type EthermintApp struct {
// Ethermint keepers
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper
BridgeKeeper bridgemodulekeeper.Keeper

// the module manager
mm *module.Manager
Expand Down Expand Up @@ -289,9 +299,9 @@ func NewEthermintApp(
evidencetypes.StoreKey, capabilitytypes.StoreKey,
feegrant.StoreKey, authzkeeper.StoreKey,
// ibc keys
ibchost.StoreKey, ibctransfertypes.StoreKey,
ibchost.StoreKey, ibctransfertypes.StoreKey, group.StoreKey,
// ethermint keys
evmtypes.StoreKey, feemarkettypes.StoreKey,
evmtypes.StoreKey, feemarkettypes.StoreKey, bridgemoduletypes.StoreKey,
)

// Add the EVM transient store key
Expand Down Expand Up @@ -369,6 +379,18 @@ func NewEthermintApp(
&stakingKeeper,
authtypes.FeeCollectorName,
)
groupConfig := group.DefaultConfig()
/*
Example of setting group params:
groupConfig.MaxMetadataLen = 1000
*/
app.GroupKeeper = groupkeeper.NewKeeper(
keys[group.StoreKey],
appCodec,
app.MsgServiceRouter(),
app.AccountKeeper,
groupConfig,
)
app.SlashingKeeper = slashingkeeper.NewKeeper(
appCodec,
keys[slashingtypes.StoreKey],
Expand Down Expand Up @@ -453,6 +475,16 @@ func NewEthermintApp(
),
)

app.BridgeKeeper = *bridgemodulekeeper.NewKeeper(
appCodec,
keys[bridgemoduletypes.StoreKey],
keys[bridgemoduletypes.MemStoreKey],
app.GetSubspace(bridgemoduletypes.ModuleName),

app.GroupKeeper,
)
bridgeModule := bridge.NewAppModule(appCodec, app.BridgeKeeper, app.AccountKeeper, app.BankKeeper)

// Create Transfer Keepers
app.TransferKeeper = ibctransferkeeper.NewKeeper(
appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName),
Expand Down Expand Up @@ -493,6 +525,7 @@ func NewEthermintApp(
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
Expand All @@ -510,6 +543,7 @@ func NewEthermintApp(
// Ethermint app modules
feemarket.NewAppModule(app.FeeMarketKeeper, feeMarketSs),
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper, evmSs),
bridgeModule,
)

// During begin block slashing happens after distr.BeginBlocker so that
Expand Down Expand Up @@ -538,8 +572,10 @@ func NewEthermintApp(
genutiltypes.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
group.ModuleName,
paramstypes.ModuleName,
vestingtypes.ModuleName,
bridgemoduletypes.ModuleName,
)

// NOTE: fee market module must go last in order to retrieve the block gas used.
Expand All @@ -562,9 +598,11 @@ func NewEthermintApp(
evidencetypes.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
group.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
bridgemoduletypes.ModuleName,
)

// NOTE: The genutils module must occur after staking so that pools are
Expand Down Expand Up @@ -594,11 +632,13 @@ func NewEthermintApp(
ibctransfertypes.ModuleName,
authz.ModuleName,
feegrant.ModuleName,
group.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
// NOTE: crisis module must go at the end to check for invariants on each module
crisistypes.ModuleName,
bridgemoduletypes.ModuleName,
)

// Uncomment if you want to set a custom migration order here.
Expand Down Expand Up @@ -868,5 +908,6 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
// ethermint subspaces
paramsKeeper.Subspace(evmtypes.ModuleName).WithKeyTable(evmtypes.ParamKeyTable()) //nolint: staticcheck
paramsKeeper.Subspace(feemarkettypes.ModuleName).WithKeyTable(feemarkettypes.ParamKeyTable())
paramsKeeper.Subspace(bridgemoduletypes.ModuleName)
return paramsKeeper
}
2 changes: 2 additions & 0 deletions init.bat
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ cat %GENESIS% | jq ".app_state[\"staking\"][\"params\"][\"bond_denom\"]=\"aphoto
cat %GENESIS% | jq ".app_state[\"crisis\"][\"constant_fee\"][\"denom\"]=\"aphoton\"" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%
cat %GENESIS% | jq ".app_state[\"gov\"][\"deposit_params\"][\"min_deposit\"][0][\"denom\"]=\"aphoton\"" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%
cat %GENESIS% | jq ".app_state[\"mint\"][\"params\"][\"mint_denom\"]=\"aphoton\"" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%
cat %GENESIS% | jq ".app_state[\"bridge\"][\"callerGroupList\"]=[{\"name\":\"caller group\",\"admin\":\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\",\"members\":[\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\"],\"creator\":\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\",}]" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%
cat %GENESIS% | jq ".app_state[\"bridge\"][\"signerGroupList\"]=[{\"name\":\"signer group\",\"admin\":\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\",\"members\":[\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\"],\"creator\":\"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c\",}]" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%

rem increase block time (?)
cat %GENESIS% | jq ".consensus_params[\"block\"][\"time_iota_ms\"]=\"30000\"" > %TMPGENESIS% && move %TMPGENESIS% %GENESIS%
Expand Down
2 changes: 2 additions & 0 deletions init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["staking"]["params"][
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["bridge"]["callerGroupList"]=[{"name":"caller group","admin":"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c","members":["ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c"],"creator":"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c",}]' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["bridge"]["signerGroupList"]=[{"name":"signer group","admin":"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c","members":["ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c"],"creator":"ethm1apz0lt5udhraewrnmcm6lms8s4xrh7awssta8c",}]' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json

# Set gas limit in genesis
cat $HOME/.ethermintd/config/genesis.json | jq '.consensus_params["block"]["max_gas"]="20000000"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
Expand Down
12 changes: 12 additions & 0 deletions proto/ethermint/bridge/v1/caller_group.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
syntax = "proto3";
package ethermint.bridge.v1;

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

message CallerGroup {
string name = 1;
string admin = 2;
repeated string members = 3;
string creator = 4;
}

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

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

message Deposit {
string txHash = 1;

Check failure on line 7 in proto/ethermint/bridge/v1/deposit.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "txHash" should be lower_snake_case, such as "tx_hash".
string from = 2;
string to = 3;
string coinType = 4;

Check failure on line 10 in proto/ethermint/bridge/v1/deposit.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "coinType" should be lower_snake_case, such as "coin_type".
uint64 value = 5;
string data = 6;
string status = 7;
string creator = 8;
}

22 changes: 22 additions & 0 deletions proto/ethermint/bridge/v1/genesis.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
syntax = "proto3";

package ethermint.bridge.v1;

import "gogoproto/gogo.proto";
import "ethermint/bridge/v1/params.proto";
import "ethermint/bridge/v1/deposit.proto";
import "ethermint/bridge/v1/withdraw.proto";
import "ethermint/bridge/v1/caller_group.proto";
import "ethermint/bridge/v1/signer_group.proto";

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

// GenesisState defines the test module's genesis state.
message GenesisState {
Params params = 1 [(gogoproto.nullable) = false];
repeated Deposit depositList = 2 [(gogoproto.nullable) = false];

Check failure on line 17 in proto/ethermint/bridge/v1/genesis.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "depositList" should be lower_snake_case, such as "deposit_list".
repeated Withdraw withdrawList = 3 [(gogoproto.nullable) = false];

Check failure on line 18 in proto/ethermint/bridge/v1/genesis.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "withdrawList" should be lower_snake_case, such as "withdraw_list".
repeated CallerGroup callerGroupList = 4 [(gogoproto.nullable) = false];

Check failure on line 19 in proto/ethermint/bridge/v1/genesis.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "callerGroupList" should be lower_snake_case, such as "caller_group_list".
repeated SignerGroup signerGroupList = 5 [(gogoproto.nullable) = false];

Check failure on line 20 in proto/ethermint/bridge/v1/genesis.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "signerGroupList" should be lower_snake_case, such as "signer_group_list".
}

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

import "gogoproto/gogo.proto";

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

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

string callerGroupName = 1 [(gogoproto.moretags) = "yaml:\"caller_group_name\""];

Check failure on line 12 in proto/ethermint/bridge/v1/params.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "callerGroupName" should be lower_snake_case, such as "caller_group_name".
string signerGroupName = 2 [(gogoproto.moretags) = "yaml:\"signer_group_name\""];

Check failure on line 13 in proto/ethermint/bridge/v1/params.proto

View workflow job for this annotation

GitHub Actions / lint

Field name "signerGroupName" should be lower_snake_case, such as "signer_group_name".
}
142 changes: 142 additions & 0 deletions proto/ethermint/bridge/v1/query.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
syntax = "proto3";

package ethermint.bridge.v1;

import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "ethermint/bridge/v1/params.proto";
import "ethermint/bridge/v1/deposit.proto";
import "ethermint/bridge/v1/withdraw.proto";
import "ethermint/bridge/v1/caller_group.proto";
import "ethermint/bridge/v1/signer_group.proto";

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

// Query defines the gRPC querier service.
service Query {

// Parameters queries the parameters of the module.
rpc Params (QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/params";

}

// Queries a list of Deposit items.
rpc Deposit (QueryGetDepositRequest) returns (QueryGetDepositResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/deposit/{txHash}";

}
rpc DepositAll (QueryAllDepositRequest) returns (QueryAllDepositResponse) {

Check failure on line 30 in proto/ethermint/bridge/v1/query.proto

View workflow job for this annotation

GitHub Actions / lint

RPC "DepositAll" should have a non-empty comment for documentation.
option (google.api.http).get = "/ethermint/bridge/v1/deposit";

}

// Queries a list of Withdraw items.
rpc Withdraw (QueryGetWithdrawRequest) returns (QueryGetWithdrawResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/withdraw/{txHash}";

}
rpc WithdrawAll (QueryAllWithdrawRequest) returns (QueryAllWithdrawResponse) {

Check failure on line 40 in proto/ethermint/bridge/v1/query.proto

View workflow job for this annotation

GitHub Actions / lint

RPC "WithdrawAll" should have a non-empty comment for documentation.
option (google.api.http).get = "/ethermint/bridge/v1/withdraw";

}

// Queries a list of CallerGroup items.
rpc CallerGroup (QueryGetCallerGroupRequest) returns (QueryGetCallerGroupResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/caller_group/{name}";

}
rpc CallerGroupAll (QueryAllCallerGroupRequest) returns (QueryAllCallerGroupResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/caller_group";

}

// Queries a list of SignerGroup items.
rpc SignerGroup (QueryGetSignerGroupRequest) returns (QueryGetSignerGroupResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/signer_group/{name}";

}
rpc SignerGroupAll (QueryAllSignerGroupRequest) returns (QueryAllSignerGroupResponse) {
option (google.api.http).get = "/ethermint/bridge/v1/signer_group";

}
}
// 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];
}

message QueryGetDepositRequest {
string txHash = 1;
}

message QueryGetDepositResponse {
Deposit deposit = 1 [(gogoproto.nullable) = false];
}

message QueryAllDepositRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllDepositResponse {
repeated Deposit deposit = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

message QueryGetWithdrawRequest {
string txHash = 1;
}

message QueryGetWithdrawResponse {
Withdraw withdraw = 1 [(gogoproto.nullable) = false];
}

message QueryAllWithdrawRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllWithdrawResponse {
repeated Withdraw withdraw = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

message QueryGetCallerGroupRequest {
string name = 1;
}

message QueryGetCallerGroupResponse {
CallerGroup callerGroup = 1 [(gogoproto.nullable) = false];
}

message QueryAllCallerGroupRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllCallerGroupResponse {
repeated CallerGroup callerGroup = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

message QueryGetSignerGroupRequest {
string name = 1;
}

message QueryGetSignerGroupResponse {
SignerGroup signerGroup = 1 [(gogoproto.nullable) = false];
}

message QueryAllSignerGroupRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllSignerGroupResponse {
repeated SignerGroup signerGroup = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

Loading
Loading