From 3504e09fb210ff4d3e2784e702d20b2684444962 Mon Sep 17 00:00:00 2001 From: avendauz Date: Wed, 11 Aug 2021 21:42:07 -0400 Subject: [PATCH] moved feeder start to endblocker, remove account keeper from feeder --- app/app.go | 2 -- x/oracle/abci.go | 10 ++++++++-- x/oracle/feeder.go | 18 +++++++----------- x/oracle/module.go | 3 ++- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/app.go b/app/app.go index 24e43e95..2718c2d9 100644 --- a/app/app.go +++ b/app/app.go @@ -488,8 +488,6 @@ func NewCRUDApp( tmos.Exit(err.Error()) } - go oracle.StartFeeder(app.oracleKeeper, app.accountKeeper, cdc) - return app } diff --git a/x/oracle/abci.go b/x/oracle/abci.go index 979d3c82..06cdca93 100644 --- a/x/oracle/abci.go +++ b/x/oracle/abci.go @@ -4,6 +4,7 @@ import ( "github.com/bluzelle/curium/app/ante/gasmeter" sdk "github.com/cosmos/cosmos-sdk/types" abci "github.com/tendermint/tendermint/abci/types" + "sync" ) // BeginBlocker check for infraction evidence or downtime of validators @@ -13,6 +14,11 @@ func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) { currCtx = &ctx } +var once sync.Once + // EndBlocker called every block, process inflation, update validator set. -func EndBlocker(ctx sdk.Context) { -} +func EndBlocker(ctx sdk.Context, am AppModule) { + once.Do(func () { + go StartFeeder(am.keeper) + }) +} \ No newline at end of file diff --git a/x/oracle/feeder.go b/x/oracle/feeder.go index 070a4573..6afa9dc1 100644 --- a/x/oracle/feeder.go +++ b/x/oracle/feeder.go @@ -5,9 +5,7 @@ import ( curium "github.com/bluzelle/curium/x/curium/keeper" "github.com/bluzelle/curium/x/oracle/keeper" "github.com/bluzelle/curium/x/oracle/types" - "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" "github.com/robfig/cron/v3" "github.com/tendermint/tendermint/libs/log" nestedJson "github.com/wenxiang/go-nestedjson" @@ -22,11 +20,9 @@ import ( var logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) -var accountKeeper auth.AccountKeeper -func RunFeeder(ctx sdk.Context, oracleKeeper Keeper, accKeeper auth.AccountKeeper, cdc *codec.Codec) { +func RunFeeder(ctx sdk.Context, oracleKeeper Keeper) { logger.Info("Starting oracle feeder service") - accountKeeper = accKeeper c := cron.New() c.AddFunc("* * * * *", func() { @@ -35,7 +31,7 @@ func RunFeeder(ctx sdk.Context, oracleKeeper Keeper, accKeeper auth.AccountKeepe return } logger.Info("Oracle feeder run", "Valcons", keeper.GetValconsAddress()) - GetValueAndSendProofAndVote(ctx, oracleKeeper, cdc) + GetValueAndSendProofAndVote(ctx, oracleKeeper) }) c.Start() } @@ -45,12 +41,12 @@ type SourceAndValue struct { value float64 } -func GetValueAndSendProofAndVote(ctx sdk.Context, oracleKeeper Keeper, cdc *codec.Codec) { +func GetValueAndSendProofAndVote(ctx sdk.Context, oracleKeeper Keeper) { sources, _ := oracleKeeper.ListSources(*currCtx) logger.Info("Oracle fetching from sources", "count", len(sources)) if len(sources) > 0 { values := fetchValues(sources) - sendPreflightMsgs(ctx, values, cdc, oracleKeeper) + sendPreflightMsgs(ctx, values, oracleKeeper) time.AfterFunc(time.Second*20, func() { sendVoteMsgs(ctx, values, oracleKeeper) }) @@ -134,7 +130,7 @@ func readValueFromJson(jsonIn []byte, prop string) (float64, error) { return out, nil } -func sendPreflightMsgs(ctx sdk.Context, values []SourceAndValue, cdc *codec.Codec, keeper Keeper) string { +func sendPreflightMsgs(ctx sdk.Context, values []SourceAndValue, keeper Keeper) string { var msgs []sdk.Msg for _, value := range values { msg, _ := generateVoteProofMsg(value, keeper.KeyringReader) @@ -211,14 +207,14 @@ func generateVoteProofMsg(source SourceAndValue, keyringReader *curium.KeyringRe var currCtx *sdk.Context -func StartFeeder(oracleKeeper Keeper, accountKeeper auth.AccountKeeper, cdc *codec.Codec) { +func StartFeeder(oracleKeeper Keeper) { defer func() { if err := recover(); err != nil { fmt.Println("panic occurred:", err) } }() waitForCtx() - RunFeeder(*currCtx, oracleKeeper, accountKeeper, cdc) + RunFeeder(*currCtx, oracleKeeper) } func waitForCtx() { diff --git a/x/oracle/module.go b/x/oracle/module.go index d6434fbd..3558369e 100644 --- a/x/oracle/module.go +++ b/x/oracle/module.go @@ -73,6 +73,7 @@ func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command { type AppModule struct { AppModuleBasic keeper keeper.Keeper + } // NewAppModule creates a new AppModule object @@ -135,7 +136,7 @@ func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { // EndBlock returns the end blocker for the oracle module. It returns no validator // updates. func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { - EndBlocker(ctx) + EndBlocker(ctx, am) return []abci.ValidatorUpdate{} }