Skip to content

Commit

Permalink
Merge pull request #299 from White-Whale-Defi-Platform/feat/feeburn
Browse files Browse the repository at this point in the history
draft: Fee burn mechanism
  • Loading branch information
hoank101 authored Jan 9, 2024
2 parents 974f4ae + 7bc2907 commit 2abe7fc
Show file tree
Hide file tree
Showing 75 changed files with 5,419 additions and 1,005 deletions.
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 @@ import (
"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 @@ import (
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 @@ const (
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 @@ var (
alliancemoduleclient.CreateAllianceProposalHandler,
alliancemoduleclient.UpdateAllianceProposalHandler,
alliancemoduleclient.DeleteAllianceProposalHandler,
feeburnmoduleclient.UpdateTxFeeBurnPercentProposalHandler,
}),
params.AppModuleBasic{},
crisis.AppModuleBasic{},
Expand All @@ -217,11 +224,12 @@ var (
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 @@ type MigalooApp struct {
RouterKeeper routerkeeper.Keeper
ContractKeeper *wasmkeeper.PermissionedKeeper
ConsensusParamsKeeper consensusparamkeeper.Keeper
FeeBurnKeeper feeburnkeeper.Keeper

// IBC hooks
IBCHooksKeeper *ibchookskeeper.Keeper
Expand Down Expand Up @@ -349,7 +358,9 @@ func NewMigalooApp(
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 @@ func NewMigalooApp(
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 @@ func NewMigalooApp(
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 @@ func NewMigalooApp(
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 @@ func NewMigalooApp(
paramstypes.ModuleName,
vestingtypes.ModuleName,
icqtypes.ModuleName,
feeburnmoduletypes.ModuleName,
// additional non simd modules
ibctransfertypes.ModuleName,
ibcexported.ModuleName,
Expand Down Expand Up @@ -813,6 +834,7 @@ func NewMigalooApp(
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
feeburnmoduletypes.ModuleName,
// additional non simd modules
icqtypes.ModuleName,
routertypes.ModuleName,
Expand Down Expand Up @@ -845,6 +867,7 @@ func NewMigalooApp(
minttypes.ModuleName,
crisistypes.ModuleName,
genutiltypes.ModuleName,
feeburnmoduletypes.ModuleName,
evidencetypes.ModuleName,
authz.ModuleName,
icqtypes.ModuleName,
Expand Down Expand Up @@ -900,6 +923,8 @@ func NewMigalooApp(
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 @@ func (app *MigalooApp) LoadHeight(height int64) error {
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 @@ -1142,6 +1172,7 @@ func (app *MigalooApp) setupUpgradeHandlers() {
consensusparamtypes.StoreKey,
crisistypes.StoreKey,
icqtypes.StoreKey,
feeburnmoduletypes.StoreKey,
},
Deleted: []string{
"intertx",
Expand Down Expand Up @@ -1194,6 +1225,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
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

0 comments on commit 2abe7fc

Please sign in to comment.