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

Fee burn mechanism #299

Merged
merged 24 commits into from
Jan 9, 2024
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ bin
mytestnet
data
screenlog.0
_build
_build
.idea
51 changes: 51 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,54 @@ clean-testing-data:


.PHONY: ictest-start-cosmos ictest-all ictest-ibc-hooks ictest-ibc
###############################################################################
### Proto ###
###############################################################################

proto-all: proto-format proto-gen

proto:
@echo
@echo "=========== Generate Message ============"
@echo
./scripts/protocgen.sh
@echo
@echo "=========== Generate Complete ============"
@echo

test:
@go test -v ./x/...

docs:
@echo
@echo "=========== Generate Message ============"
@echo
./scripts/generate-docs.sh

statik -src=client/docs/static -dest=client/docs -f -m
@if [ -n "$(git status --porcelain)" ]; then \
echo "\033[91mSwagger docs are out of sync!!!\033[0m";\
exit 1;\
else \
echo "\033[92mSwagger docs are in sync\033[0m";\
fi
@echo
@echo "=========== Generate Complete ============"
@echo

###############################################################################
### Protobuf ###
###############################################################################

containerProtoVer=0.13.0
containerProtoImage=ghcr.io/cosmos/proto-builder:$(containerProtoVer)

proto-gen:
@echo "Generating Protobuf files"
@$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) \
sh ./scripts/protocgen.sh;

proto-format:
@echo "Formatting Protobuf files"
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoFmt}$$"; then docker start -a $(containerProtoFmt); else docker run --name $(containerProtoFmt) -v $(CURDIR):/workspace --workdir /workspace tendermintdev/docker-build-proto \
find ./ -not -path "./third_party/*" -name "*.proto" -exec clang-format -i {} \; ; fi
12 changes: 11 additions & 1 deletion app/ante.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package app

import (
errorsmod "cosmossdk.io/errors"
feeburnAnte "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/ante"
feeburnkeeper "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/keeper"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante"
"github.com/cosmos/ibc-go/v7/modules/core/keeper"

Expand All @@ -18,6 +22,8 @@ type HandlerOptions struct {
ante.HandlerOptions

IBCKeeper *keeper.Keeper
FeeburnKeeper *feeburnkeeper.Keeper
BankKeeper bankkeeper.Keeper
WasmConfig *wasmTypes.WasmConfig
TXCounterStoreKey storetypes.StoreKey
}
Expand All @@ -39,6 +45,10 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "tx counter key is required for ante builder")
}

if options.FeeburnKeeper == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "Fee burn keeper is required for ante builder")
}

sigGasConsumer := options.SigGasConsumer
if sigGasConsumer == nil {
sigGasConsumer = ante.DefaultSigVerificationGasConsumer
Expand All @@ -53,7 +63,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
feeburnAnte.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker, *options.FeeburnKeeper),
// SetPubKeyDecorator must be called before all signature verification decorators
ante.NewSetPubKeyDecorator(options.AccountKeeper),
ante.NewValidateSigCountDecorator(options.AccountKeeper),
Expand Down
40 changes: 36 additions & 4 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
"github.com/cosmos/cosmos-sdk/x/crisis"
crisiskeeper "github.com/cosmos/cosmos-sdk/x/crisis/keeper"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"

feeburnkeeper "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/keeper"
distr "github.com/cosmos/cosmos-sdk/x/distribution"
govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine"
Expand Down Expand Up @@ -130,6 +132,11 @@
tokenfactorykeeper "github.com/terra-money/core/v2/x/tokenfactory/keeper"
tokenfactorytypes "github.com/terra-money/core/v2/x/tokenfactory/types"

feeburnmodule "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn"
feeburnmoduleclient "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/client"
feeburnmodulekeeper "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/keeper"
feeburnmoduletypes "github.com/White-Whale-Defi-Platform/migaloo-chain/v3/x/feeburn/types"

// Note: please do your research before using this in production app, this is a demo and not an officially
// supported IBC team implementation. It has no known issues, but do your own research before using it.

Expand Down Expand Up @@ -161,7 +168,6 @@
MockFeePort string = ibcmock.ModuleName + ibcfeetypes.ModuleName
)

// We pull these out so we can set them with LDFLAGS in the Makefile
var (
NodeDir = ".migalood"
)
Expand Down Expand Up @@ -197,6 +203,7 @@
alliancemoduleclient.CreateAllianceProposalHandler,
alliancemoduleclient.UpdateAllianceProposalHandler,
alliancemoduleclient.DeleteAllianceProposalHandler,
feeburnmoduleclient.UpdateTxFeeBurnPercentProposalHandler,
}),
params.AppModuleBasic{},
crisis.AppModuleBasic{},
Expand All @@ -217,11 +224,12 @@
router.AppModuleBasic{},
ica.AppModuleBasic{},
ibcfee.AppModuleBasic{},
feeburnmodule.AppModuleBasic{},
)

// module account permissions
maccPerms = map[string][]string{
authtypes.FeeCollectorName: nil,
authtypes.FeeCollectorName: {authtypes.Burner},
distrtypes.ModuleName: nil,
minttypes.ModuleName: {authtypes.Minter},
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
Expand Down Expand Up @@ -284,6 +292,7 @@
RouterKeeper routerkeeper.Keeper
ContractKeeper *wasmkeeper.PermissionedKeeper
ConsensusParamsKeeper consensusparamkeeper.Keeper
FeeBurnKeeper feeburnkeeper.Keeper

// IBC hooks
IBCHooksKeeper *ibchookskeeper.Keeper
Expand Down Expand Up @@ -312,7 +321,7 @@
}

func (app *MigalooApp) Close() error {
//TODO implement me

Check failure on line 324 in app/app.go

View workflow job for this annotation

GitHub Actions / lint

commentFormatting: put a space between `//` and comment text (gocritic)
panic("implement me")
}

Expand Down Expand Up @@ -349,7 +358,9 @@
evidencetypes.StoreKey, icqtypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey,
feegrant.StoreKey, authzkeeper.StoreKey, wasmtypes.StoreKey, icahosttypes.StoreKey,
icacontrollertypes.StoreKey, ibcfeetypes.StoreKey, tokenfactorytypes.StoreKey,
alliancemoduletypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, ibchookstypes.StoreKey,
alliancemoduletypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey,
ibchookstypes.StoreKey,
feeburnmoduletypes.StoreKey,
)
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
Expand Down Expand Up @@ -509,6 +520,13 @@
scopedIBCKeeper,
)

app.FeeBurnKeeper = *feeburnmodulekeeper.NewKeeper(
appCodec,
keys[feeburnmoduletypes.StoreKey],
keys[feeburnmoduletypes.MemStoreKey],
authtypes.NewModuleAddress(govtypes.ModuleName),
)

// Register the proposal types
// Deprecated: Avoid adding new handlers, instead use the new proposal flow
// by granting the governance module the right to execute the message.
Expand All @@ -518,7 +536,8 @@
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(&app.UpgradeKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)).
AddRoute(alliancemoduletypes.RouterKey, alliancemodule.NewAllianceProposalHandler(app.AllianceKeeper))
AddRoute(alliancemoduletypes.RouterKey, alliancemodule.NewAllianceProposalHandler(app.AllianceKeeper)).
AddRoute(feeburnmoduletypes.RouterKey, feeburnmodule.NewFeeBurnProposalHandler(app.FeeBurnKeeper))

// RouterKeeper must be created before TransferKeeper
app.RouterKeeper = *routerkeeper.NewKeeper(
Expand Down Expand Up @@ -743,6 +762,7 @@
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.GetSubspace(stakingtypes.ModuleName)),
consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper),
upgrade.NewAppModule(&app.UpgradeKeeper),
feeburnmodule.NewAppModule(appCodec, app.FeeBurnKeeper, app.AccountKeeper, app.BankKeeper),
wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)),
evidence.NewAppModule(app.EvidenceKeeper),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
Expand Down Expand Up @@ -783,6 +803,7 @@
paramstypes.ModuleName,
vestingtypes.ModuleName,
icqtypes.ModuleName,
feeburnmoduletypes.ModuleName,
// additional non simd modules
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
Expand Down Expand Up @@ -813,6 +834,7 @@
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
feeburnmoduletypes.ModuleName,
// additional non simd modules
icqtypes.ModuleName,
routertypes.ModuleName,
Expand Down Expand Up @@ -845,6 +867,7 @@
minttypes.ModuleName,
crisistypes.ModuleName,
genutiltypes.ModuleName,
feeburnmoduletypes.ModuleName,
evidencetypes.ModuleName,
authz.ModuleName,
icqtypes.ModuleName,
Expand Down Expand Up @@ -900,6 +923,8 @@
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
},
IBCKeeper: app.IBCKeeper,
BankKeeper: app.BankKeeper,
FeeburnKeeper: &app.FeeBurnKeeper,
WasmConfig: &wasmConfig,
TXCounterStoreKey: keys[wasm.StoreKey],
},
Expand Down Expand Up @@ -991,6 +1016,11 @@
return app.LoadVersion(height)
}

// InterfaceRegistry returns Migaloo InterfaceRegistry
func (app *MigalooApp) InterfaceRegistry() types.InterfaceRegistry {
return app.interfaceRegistry
}

// ModuleAccountAddrs returns all the app's module account addresses.
func (app *MigalooApp) ModuleAccountAddrs() map[string]bool {
modAccAddrs := make(map[string]bool)
Expand Down Expand Up @@ -1132,7 +1162,7 @@

var storeUpgrades *storetypes.StoreUpgrades

switch upgradeInfo.Name {

Check failure on line 1165 in app/app.go

View workflow job for this annotation

GitHub Actions / lint

singleCaseSwitch: should rewrite switch statement to if statement (gocritic)
case v4.UpgradeName:
// !! ATTENTION !!
// !! WHEN UPGRADING TO SDK v0.47 MAKE SURE TO INCLUDE THIS
Expand All @@ -1142,6 +1172,7 @@
consensusparamtypes.StoreKey,
crisistypes.StoreKey,
icqtypes.StoreKey,
feeburnmoduletypes.StoreKey,
},
Deleted: []string{
"intertx",
Expand Down Expand Up @@ -1194,6 +1225,7 @@
paramsKeeper.Subspace(wasmtypes.ModuleName).WithKeyTable(wasmtypes.ParamKeyTable())
paramsKeeper.Subspace(routertypes.ModuleName).WithKeyTable(routertypes.ParamKeyTable())
paramsKeeper.Subspace(alliancemoduletypes.ModuleName).WithKeyTable(alliancemoduletypes.ParamKeyTable())
paramsKeeper.Subspace(feeburnmoduletypes.ModuleName)

return paramsKeeper
}
Loading
Loading