Skip to content
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
df3c257
x/tracking module added which is a split version of x/gastracker with…
iTiky Jul 27, 2022
57ba42b
Gas consumption tests added
iTiky Jul 27, 2022
ac15fdd
x/tracking refactoring; x/rewards added (WIP)
iTiky Jul 27, 2022
fc2d41e
test tracking module genesis imports & exports
edjroz Jul 28, 2022
f212370
x/tracking refactoring; x/rewards added with WASM bindings refactored
iTiky Jul 29, 2022
29d207d
x/rewards: bugfixes; inflation rewards distribution rollback to block…
iTiky Jul 29, 2022
7ff10c4
x/rewards: distribution refactoring; distribution test added
iTiky Jul 30, 2022
464fb1c
x/tracking, x/rewards: tracking data prune added
iTiky Jul 30, 2022
a3da7bf
x/rewards: mintBankKeeper test added; max inflationRewardsRation is l…
iTiky Jul 31, 2022
88d55bf
Frojdi feedback changes: reading x/rewards ratio params twice removed…
iTiky Aug 1, 2022
13e9a52
x/rewards: Ante handler tests added
iTiky Aug 1, 2022
f3f3e6f
x/rewards: SetMetadata tests added
iTiky Aug 1, 2022
57d14a7
x/rewards, x/tracking: basic validation tests added
iTiky Aug 1, 2022
903f3ae
Merge branch 'main' into split_gastracker
edjroz Aug 1, 2022
eeb4ff6
fix go dependencies
edjroz Aug 1, 2022
7f9cf68
dontcover.sh added to prepend DONTCOVER for proto-gen files.
iTiky Aug 2, 2022
e849565
add codecov config
edjroz Aug 2, 2022
a525728
Big integration test added
iTiky Aug 2, 2022
89ef378
Test chain fix
iTiky Aug 2, 2022
db607bb
Parth PR feedback changes
iTiky Aug 2, 2022
fcb015b
Coins split logic changed: doesn't return invalid sdk.Coins if one of…
iTiky Aug 2, 2022
cdc40f6
Tx fees vs rewards demo test added
iTiky Aug 2, 2022
63dbcd3
Minimum consensus fee added
iTiky Aug 3, 2022
60be045
x/rewards: estimate tx fees query added
iTiky Aug 3, 2022
51784e8
Apply suggestions from code review
iTiky Aug 3, 2022
ad68719
remove legacy gastracker integration test
edjroz Aug 9, 2022
6c1e3cd
add legacy gastracker to code coverage ignore
edjroz Aug 9, 2022
b1fc078
add pg.gw.go files to ignroe coverage
edjroz Aug 9, 2022
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
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ proto-all: proto-format proto-lint proto-gen
proto-gen:
@echo "Generating Protobuf files"
$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(PROTO_BUILDER_IMAGE) sh ./scripts/protocgen.sh
./scripts/dontcover.sh ./x/tracking
./scripts/dontcover.sh ./x/rewards

proto-format:
@echo "Formatting Protobuf files"
Expand Down
28 changes: 18 additions & 10 deletions app/ante.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@
package app

import (
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante"
ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper"

wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types"

gastrackerante "github.com/archway-network/archway/x/gastracker/ante"
rewardsAnte "github.com/archway-network/archway/x/rewards/ante"
rewardsKeeper "github.com/archway-network/archway/x/rewards/keeper"
trackingAnte "github.com/archway-network/archway/x/tracking/ante"
trackingKeeper "github.com/archway-network/archway/x/tracking/keeper"
)

// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC
Expand All @@ -24,7 +26,8 @@ type HandlerOptions struct {

TXCounterStoreKey sdk.StoreKey

GasTrackingKeeper gastrackerante.GasTrackingKeeper
TrackingKeeper trackingKeeper.Keeper
RewardsKeeper rewardsKeeper.Keeper
}

func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
Expand Down Expand Up @@ -54,25 +57,30 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
}

anteDecorators := []sdk.AnteDecorator{
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early
// Outermost AnteDecorator (SetUpContext must be called first)
ante.NewSetUpContextDecorator(),
// After setup context to enforce limits early
wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit),
wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey),
ante.NewRejectExtensionOptionsDecorator(),
ante.NewMempoolFeeDecorator(),
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.AccountKeeper),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
// custom archway fee deduction, which splits fees between gastracker and auths fee collector
gastrackerante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.GasTrackingKeeper),
// Custom Archway minimum fee checker
rewardsAnte.NewMinFeeDecorator(options.RewardsKeeper),
// Custom Archway interceptor to track new transactions
trackingAnte.NewTxGasTrackingDecorator(options.TrackingKeeper),
// Custom Archway fee deduction, which splits fees between x/rewards and x/auth fee collector
rewardsAnte.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.RewardsKeeper),
// SetPubKeyDecorator must be called before all signature verification decorators
ante.NewSetPubKeyDecorator(options.AccountKeeper),
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer),
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewAnteDecorator(options.IBCKeeper),
gastrackerante.NewTxGasTrackingDecorator(options.GasTrackingKeeper),
}

return sdk.ChainAnteDecorators(anteDecorators...), nil
Expand Down
157 changes: 102 additions & 55 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@ import (
"path/filepath"
"strings"

"github.com/archway-network/archway/x/gastracker/mintbankkeeper"

wasmdKeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmdTypes "github.com/CosmWasm/wasmd/x/wasm/types"
cosmwasm "github.com/CosmWasm/wasmvm"
"github.com/archway-network/archway/x/gastracker/wasmbinding"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
Expand Down Expand Up @@ -101,13 +98,19 @@ import (
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
dbm "github.com/tendermint/tm-db"

"github.com/archway-network/archway/x/rewards"
rewardsKeeper "github.com/archway-network/archway/x/rewards/keeper"
"github.com/archway-network/archway/x/rewards/mintbankkeeper"
rewardsTypes "github.com/archway-network/archway/x/rewards/types"
"github.com/archway-network/archway/x/rewards/wasmbinding"
"github.com/archway-network/archway/x/tracking"
trackingKeeper "github.com/archway-network/archway/x/tracking/keeper"
trackingTypes "github.com/archway-network/archway/x/tracking/types"

"github.com/CosmWasm/wasmd/x/wasm"
wasmclient "github.com/CosmWasm/wasmd/x/wasm/client"
archwayappparams "github.com/archway-network/archway/app/params"

"github.com/archway-network/archway/x/gastracker"
gastrackerkeeper "github.com/archway-network/archway/x/gastracker/keeper"
gastrackermodule "github.com/archway-network/archway/x/gastracker/module"
archwayappparams "github.com/archway-network/archway/app/params"

// unnamed import of statik for swagger UI support
_ "github.com/cosmos/cosmos-sdk/client/docs/statik"
Expand Down Expand Up @@ -201,20 +204,21 @@ var (
transfer.AppModuleBasic{},
vesting.AppModuleBasic{},
wasm.AppModuleBasic{},
gastrackermodule.AppModuleBasic{},
tracking.AppModuleBasic{},
rewards.AppModuleBasic{},
)

// module account permissions
maccPerms = map[string][]string{
gastracker.ContractRewardCollector: nil,
authtypes.FeeCollectorName: nil,
distrtypes.ModuleName: nil,
minttypes.ModuleName: {authtypes.Minter},
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
govtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
wasm.ModuleName: {authtypes.Burner},
rewardsTypes.ContractRewardCollector: nil,
authtypes.FeeCollectorName: nil,
distrtypes.ModuleName: nil,
minttypes.ModuleName: {authtypes.Minter},
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
govtypes.ModuleName: {authtypes.Burner},
ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner},
wasm.ModuleName: {authtypes.Burner},
}
)

Expand All @@ -238,24 +242,25 @@ type ArchwayApp struct {
memKeys map[string]*sdk.MemoryStoreKey

// keepers
AccountKeeper authkeeper.AccountKeeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper stakingkeeper.Keeper
slashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper govkeeper.Keeper
CrisisKeeper crisiskeeper.Keeper
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
EvidenceKeeper evidencekeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
AuthzKeeper authzkeeper.Keeper
WASMKeeper wasm.Keeper
GasTrackingKeeper gastrackerkeeper.Keeper
AccountKeeper authkeeper.AccountKeeper
BankKeeper bankkeeper.Keeper
CapabilityKeeper *capabilitykeeper.Keeper
StakingKeeper stakingkeeper.Keeper
slashingKeeper slashingkeeper.Keeper
MintKeeper mintkeeper.Keeper
DistrKeeper distrkeeper.Keeper
GovKeeper govkeeper.Keeper
CrisisKeeper crisiskeeper.Keeper
UpgradeKeeper upgradekeeper.Keeper
ParamsKeeper paramskeeper.Keeper
IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
EvidenceKeeper evidencekeeper.Keeper
TransferKeeper ibctransferkeeper.Keeper
FeeGrantKeeper feegrantkeeper.Keeper
AuthzKeeper authzkeeper.Keeper
WASMKeeper wasm.Keeper
TrackingKeeper trackingKeeper.Keeper
RewardsKeeper rewardsKeeper.Keeper

ScopedIBCKeeper capabilitykeeper.ScopedKeeper
ScopedTransferKeeper capabilitykeeper.ScopedKeeper
Expand Down Expand Up @@ -300,7 +305,8 @@ func NewArchwayApp(
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey,
evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey,
feegrant.StoreKey, authzkeeper.StoreKey, wasm.StoreKey, gastracker.StoreKey,
feegrant.StoreKey, authzkeeper.StoreKey, wasm.StoreKey,
trackingTypes.StoreKey, rewardsTypes.StoreKey,
)
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
Expand Down Expand Up @@ -452,11 +458,9 @@ func NewArchwayApp(

defaultGasRegister := wasmdKeeper.NewDefaultWasmGasRegister()

app.GasTrackingKeeper = gastrackerkeeper.NewGasTrackingKeeper(
keys[gastracker.StoreKey],
app.appCodec,
app.getSubspace(gastracker.DefaultParamSpace),
nil,
app.TrackingKeeper = trackingKeeper.NewKeeper(
appCodec,
keys[trackingTypes.StoreKey],
defaultGasRegister,
)

Expand All @@ -474,10 +478,11 @@ func NewArchwayApp(
if err != nil {
panic(err)
}

trackingWasmVm := wasmdTypes.NewTrackingWasmerEngine(wasmer, &wasmdTypes.NoOpContractGasProcessor{})

wasmOpts = append(wasmOpts, wasmdKeeper.WithWasmEngine(trackingWasmVm), wasmdKeeper.WithGasRegister(defaultGasRegister))
wasmOpts = append(wasmOpts, wasmbinding.GetCustomWasmOptions(&app.GasTrackingKeeper)...)
wasmOpts = append(wasmOpts, wasmbinding.GetCustomWasmOptions(&app.RewardsKeeper)...) // using a pointer as the keeper is initialized below

app.WASMKeeper = wasm.NewKeeper(
appCodec,
Expand All @@ -498,22 +503,31 @@ func NewArchwayApp(
supportedFeatures,
wasmOpts...,
)
app.GasTrackingKeeper.SetContractInfoView(app.WASMKeeper) // post initialization

// note we set up mint keeper after gastracking keeper
// Setting gas recorder here to avoid cyclic loop
trackingWasmVm.SetGasRecorder(app.TrackingKeeper)

app.RewardsKeeper = rewardsKeeper.NewKeeper(
appCodec,
keys[rewardsTypes.StoreKey],
app.WASMKeeper,
app.TrackingKeeper,
app.AccountKeeper,
app.BankKeeper,
app.getSubspace(rewardsTypes.ModuleName),
)

// Note we set up mint keeper after the x/rewards keeper
app.MintKeeper = mintkeeper.NewKeeper(
appCodec,
keys[minttypes.StoreKey],
app.getSubspace(minttypes.ModuleName),
&stakingKeeper,
app.AccountKeeper,
mintbankkeeper.NewKeeper(app.BankKeeper, app.GasTrackingKeeper),
mintbankkeeper.NewKeeper(app.BankKeeper, app.RewardsKeeper),
authtypes.FeeCollectorName,
)

// Setting gas recorder here to avoid cyclic loop
trackingWasmVm.SetGasRecorder(app.GasTrackingKeeper)

// The gov proposal types can be individually enabled
if len(enabledProposals) != 0 {
govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WASMKeeper, enabledProposals))
Expand Down Expand Up @@ -562,7 +576,8 @@ func NewArchwayApp(
ibc.NewAppModule(app.IBCKeeper),
params.NewAppModule(app.ParamsKeeper),
transferModule,
gastrackermodule.NewAppModule(app.appCodec, app.GasTrackingKeeper, app.BankKeeper),
tracking.NewAppModule(app.appCodec, app.TrackingKeeper),
rewards.NewAppModule(app.appCodec, app.RewardsKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants), // always be last to make sure that it checks for all invariants and not only part of them
)

Expand All @@ -574,7 +589,6 @@ func NewArchwayApp(
upgradetypes.ModuleName,
capabilitytypes.ModuleName,
minttypes.ModuleName,
gastracker.ModuleName,
distrtypes.ModuleName,
slashingtypes.ModuleName,
evidencetypes.ModuleName,
Expand All @@ -591,7 +605,38 @@ func NewArchwayApp(
// additional non simd modules
ibchost.ModuleName,
ibctransfertypes.ModuleName,
// wasm
wasm.ModuleName,
// wasm gas tracking
trackingTypes.ModuleName,
rewardsTypes.ModuleName,
)

app.mm.SetOrderEndBlockers(
// we have to specify all modules here (Cosmos's order is taken as a reference)
crisistypes.ModuleName,
govtypes.ModuleName,
stakingtypes.ModuleName,
ibctransfertypes.ModuleName,
ibchost.ModuleName,
feegrant.ModuleName,
authz.ModuleName,
capabilitytypes.ModuleName,
authtypes.ModuleName,
banktypes.ModuleName,
distrtypes.ModuleName,
slashingtypes.ModuleName,
minttypes.ModuleName,
genutiltypes.ModuleName,
evidencetypes.ModuleName,
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
// wasm
wasm.ModuleName,
// wasm gas tracking
trackingTypes.ModuleName,
rewardsTypes.ModuleName,
)

// NOTE: The genutils module must occur after staking so that pools are
Expand All @@ -608,7 +653,6 @@ func NewArchwayApp(
distrtypes.ModuleName,
stakingtypes.ModuleName,
slashingtypes.ModuleName,
gastracker.ModuleName,
govtypes.ModuleName,
minttypes.ModuleName,
crisistypes.ModuleName,
Expand All @@ -624,6 +668,9 @@ func NewArchwayApp(
ibctransfertypes.ModuleName,
// wasm after ibc transfer
wasm.ModuleName,
// wasm gas tracking
trackingTypes.ModuleName,
rewardsTypes.ModuleName,
)

// Uncomment if you want to set a custom migration order here.
Expand Down Expand Up @@ -654,8 +701,7 @@ func NewArchwayApp(
evidence.NewAppModule(app.EvidenceKeeper),
wasm.NewAppModule(appCodec, &app.WASMKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
ibc.NewAppModule(app.IBCKeeper),
transfer.NewAppModule(app.TransferKeeper),
gastrackermodule.NewAppModule(app.appCodec, app.GasTrackingKeeper, app.BankKeeper),
transferModule,
)

app.sm.RegisterStoreDecoders()
Expand All @@ -677,7 +723,8 @@ func NewArchwayApp(
IBCKeeper: app.IBCKeeper,
WasmConfig: &wasmConfig,
TXCounterStoreKey: keys[wasm.StoreKey],
GasTrackingKeeper: app.GasTrackingKeeper,
TrackingKeeper: app.TrackingKeeper,
RewardsKeeper: app.RewardsKeeper,
},
)
if err != nil {
Expand Down Expand Up @@ -839,7 +886,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
paramsKeeper.Subspace(ibchost.ModuleName)
paramsKeeper.Subspace(wasm.ModuleName)
paramsKeeper.Subspace(gastracker.DefaultParamSpace)
paramsKeeper.Subspace(rewardsTypes.ModuleName)

return paramsKeeper
}
13 changes: 13 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
coverage:
status:
project:
default:
target: 70
threshold: 1%

patch:
default: false
ignore:
- "**/*.pb.go"
- "third_party"
- "vendor"
Loading