diff --git a/app/abci.go b/app/abci.go index 30193bc1fb..f066ac9859 100644 --- a/app/abci.go +++ b/app/abci.go @@ -182,7 +182,7 @@ func (app *App) DeliverTxBatch(ctx sdk.Context, req sdk.DeliverTxBatchRequest) ( scheduler := tasks.NewScheduler(app.ConcurrencyWorkers(), app.TracingInfo, app.DeliverTx) txRes, err := scheduler.ProcessAll(ctx, req.TxEntries) if err != nil { - ctx.Logger().Error("error while processing scheduler", "err", err) + logger.Error("error while processing scheduler", "err", err) panic(err) } for _, tx := range txRes { diff --git a/app/ante/cosmos_checktx.go b/app/ante/cosmos_checktx.go index 177cc2b449..111b6261b3 100644 --- a/app/ante/cosmos_checktx.go +++ b/app/ante/cosmos_checktx.go @@ -491,21 +491,21 @@ func UpdateSigners(ctx sdk.Context, tx sdk.Tx, accountKeeper authkeeper.AccountK continue } if acc.GetPubKey() == nil { - ctx.Logger().Error(fmt.Sprintf("missing pubkey for %s", signer.String())) + logger.Error("missing pubkey for signer", "signer", signer) events = append(events, sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue } pk, err := btcec.ParsePubKey(acc.GetPubKey().Bytes()) if err != nil { - ctx.Logger().Debug(fmt.Sprintf("failed to parse pubkey for %s, likely due to the fact that it isn't on secp256k1 curve", acc.GetPubKey()), "err", err) + logger.Debug("failed to parse pubkey, likely due to the fact that it isn't on secp256k1 curve", "pub-key", acc.GetPubKey(), "err", err) events = append(events, sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue } evmAddr, err := helpers.PubkeyToEVMAddress(pk.SerializeUncompressed()) if err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to get EVM address from pubkey due to %s", err)) + logger.Error("failed to get EVM address from pubkey", "err", err) events = append(events, sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue @@ -516,7 +516,7 @@ func UpdateSigners(ctx sdk.Context, tx sdk.Tx, accountKeeper authkeeper.AccountK evmKeeper.SetAddressMapping(ctx, signer, evmAddr) associationHelper := helpers.NewAssociationHelper(evmKeeper, evmKeeper.BankKeeper(), accountKeeper) if err := associationHelper.MigrateBalance(ctx, evmAddr, signer, false); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to migrate EVM address balance (%s) %s", evmAddr.Hex(), err)) + logger.Error("failed to migrate EVM address balance", "address", evmAddr, "err", err) return nil, err } if evmtypes.IsTxMsgAssociate(tx) { diff --git a/app/ante/evm_checktx.go b/app/ante/evm_checktx.go index 0fa1ffd268..73878163ce 100644 --- a/app/ante/evm_checktx.go +++ b/app/ante/evm_checktx.go @@ -30,8 +30,11 @@ import ( "github.com/sei-protocol/sei-chain/x/evm/state" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" "github.com/sei-protocol/sei-chain/x/evm/types/ethtx" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("app", "ante") + func EvmCheckTxAnte( ctx sdk.Context, txConfig client.TxConfig, @@ -174,13 +177,13 @@ func EvmStatelessChecks(ctx sdk.Context, tx sdk.Tx, chainID *big.Int) error { case ethtypes.LegacyTxType: // legacy either can have a zero or correct chain ID if txChainID.Cmp(big.NewInt(0)) != 0 && txChainID.Cmp(chainID) != 0 { - ctx.Logger().Debug("chainID mismatch", "txChainID", txChainID, "chainID", chainID) + logger.Debug("chainID mismatch", "txChainID", txChainID, "chainID", chainID) return sdkerrors.ErrInvalidChainID } default: // after legacy, all transactions must have the correct chain ID if txChainID.Cmp(chainID) != 0 { - ctx.Logger().Debug("chainID mismatch", "txChainID", txChainID, "chainID", chainID) + logger.Debug("chainID mismatch", "txChainID", txChainID, "chainID", chainID) return sdkerrors.ErrInvalidChainID } } diff --git a/app/antedecorators/authz_nested_message_test.go b/app/antedecorators/authz_nested_message_test.go index 90fc1e097d..5b3c02d5fd 100644 --- a/app/antedecorators/authz_nested_message_test.go +++ b/app/antedecorators/authz_nested_message_test.go @@ -20,7 +20,7 @@ func TestAuthzNestedEvmMessage(t *testing.T) { anteDecorators := []sdk.AnteDecorator{ antedecorators.NewAuthzNestedMessageDecorator(), } - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) chainedHandler := sdk.ChainAnteDecorators(anteDecorators...) nestedEvmMessage := authz.NewMsgExec(addr1, []sdk.Msg{&evmtypes.MsgEVMTransaction{}}) diff --git a/app/antedecorators/gasless.go b/app/antedecorators/gasless.go index 94ecd012e2..0133c2cfc9 100644 --- a/app/antedecorators/gasless.go +++ b/app/antedecorators/gasless.go @@ -10,8 +10,11 @@ import ( evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" oraclekeeper "github.com/sei-protocol/sei-chain/x/oracle/keeper" oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("app", "antedecorators") + type GaslessDecorator struct { wrapped []sdk.AnteDecorator oracleKeeper oraclekeeper.Keeper @@ -70,7 +73,7 @@ func (gd GaslessDecorator) handleWrapped(ctx sdk.Context, tx sdk.Tx, simulate bo func IsTxGasless(tx sdk.Tx, ctx sdk.Context, oracleKeeper oraclekeeper.Keeper, evmKeeper *evmkeeper.Keeper) (isGasless bool, err error) { defer func() { if r := recover(); r != nil { - ctx.Logger().Error("panic recovered in IsTxGasless", "panic", r) + logger.Error("panic recovered in IsTxGasless", "err", r) err = fmt.Errorf("panic in IsTxGasless: %v", r) isGasless = false } diff --git a/app/antedecorators/gasless_test.go b/app/antedecorators/gasless_test.go index 6bb4a3240f..9c674a393a 100644 --- a/app/antedecorators/gasless_test.go +++ b/app/antedecorators/gasless_test.go @@ -137,7 +137,7 @@ func TestNonGaslessMsg(t *testing.T) { // this needs to be updated if its changed from constant true // reset gasless gasless = true - err := CallGaslessDecoratorWithMsg(sdk.NewContext(nil, tmproto.Header{}, false, nil).WithIsCheckTx(true), &oracletypes.MsgDelegateFeedConsent{}, oraclekeeper.Keeper{}, nil) + err := CallGaslessDecoratorWithMsg(sdk.NewContext(nil, tmproto.Header{}, false).WithIsCheckTx(true), &oracletypes.MsgDelegateFeedConsent{}, oraclekeeper.Keeper{}, nil) require.NoError(t, err) require.False(t, gasless) } diff --git a/app/antedecorators/priority_test.go b/app/antedecorators/priority_test.go index af56238cfa..0cfd05c9d8 100644 --- a/app/antedecorators/priority_test.go +++ b/app/antedecorators/priority_test.go @@ -24,7 +24,7 @@ func TestPriorityAnteDecorator(t *testing.T) { anteDecorators := []sdk.AnteDecorator{ antedecorators.NewPriorityDecorator(), } - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) chainedHandler := sdk.ChainAnteDecorators(anteDecorators...) // test with normal priority newCtx, err := chainedHandler( @@ -41,7 +41,7 @@ func TestPriorityAnteDecoratorTooHighPriority(t *testing.T) { anteDecorators := []sdk.AnteDecorator{ antedecorators.NewPriorityDecorator(), } - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) chainedHandler := sdk.ChainAnteDecorators(anteDecorators...) // test with too high priority, should be auto capped newCtx, err := chainedHandler( @@ -62,7 +62,7 @@ func TestPriorityAnteDecoratorOracleMsg(t *testing.T) { anteDecorators := []sdk.AnteDecorator{ antedecorators.NewPriorityDecorator(), } - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) chainedHandler := sdk.ChainAnteDecorators(anteDecorators...) // test with zero priority, should be bumped up to oracle priority newCtx, err := chainedHandler( diff --git a/app/antedecorators/traced_test.go b/app/antedecorators/traced_test.go index a70ba18f92..0c06354d05 100644 --- a/app/antedecorators/traced_test.go +++ b/app/antedecorators/traced_test.go @@ -21,6 +21,6 @@ func TestTracedDecorator(t *testing.T) { return antedecorators.NewTracedAnteDecorator(d, nil) }) chainedHandler := sdk.ChainAnteDecorators(tracedDecorators...) - chainedHandler(sdk.NewContext(nil, tmproto.Header{}, false, nil), FakeTx{}, false) + chainedHandler(sdk.NewContext(nil, tmproto.Header{}, false), FakeTx{}, false) require.Equal(t, "onetwothree", output) } diff --git a/app/app.go b/app/app.go index 85e844d6a6..5e9e89c9f7 100644 --- a/app/app.go +++ b/app/app.go @@ -99,6 +99,7 @@ import ( upgradekeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/keeper" upgradetypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/types" seidb "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" + "github.com/sei-protocol/seilog" "github.com/gogo/protobuf/proto" "github.com/gorilla/mux" @@ -131,7 +132,6 @@ import ( ibckeeper "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/keeper" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -198,6 +198,8 @@ func getGovProposalHandlers() []govclient.ProposalHandler { } var ( + logger = seilog.NewLogger("app") + // DefaultNodeHome default home directories for the application daemon DefaultNodeHome string @@ -457,7 +459,6 @@ type AppOption func(*App) // New returns a reference to an initialized blockchain app func New( - logger log.Logger, db dbm.DB, traceStore io.Writer, _ bool, @@ -477,9 +478,9 @@ func New( cdc := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry - bAppOptions, stateStore := SetupSeiDB(logger, homePath, appOpts, baseAppOptions) + bAppOptions, stateStore := SetupSeiDB(homePath, appOpts, baseAppOptions) - bApp := baseapp.NewBaseApp(AppName, logger, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, bAppOptions...) + bApp := baseapp.NewBaseApp(AppName, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, bAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) @@ -683,7 +684,7 @@ func New( receiptConfig.DBDirectory = receiptStorePath receiptConfig.KeepRecent = cast.ToInt(appOpts.Get(server.FlagMinRetainBlocks)) if app.receiptStore == nil { - receiptStore, err := receipt.NewReceiptStore(logger, receiptConfig, keys[evmtypes.StoreKey]) + receiptStore, err := receipt.NewReceiptStore(receiptConfig, keys[evmtypes.StoreKey]) if err != nil { panic(fmt.Sprintf("error while creating receipt store: %s", err)) } @@ -995,7 +996,7 @@ func New( // benchmarkEnabled is enabled via build flag (make install-bench) if benchmarkEnabled { evmChainID := evmconfig.GetEVMChainID(app.ChainID).Int64() - app.InitBenchmark(context.Background(), app.ChainID, evmChainID, logger) + app.InitBenchmark(context.Background(), app.ChainID, evmChainID) app.SetPrepareProposalHandler(app.PrepareProposalBenchmarkHandler) } else { app.SetPrepareProposalHandler(app.PrepareProposalHandler) @@ -1044,7 +1045,7 @@ func New( app.RegisterDeliverTxHook(app.AddCosmosEventsToEVMReceiptIfApplicable) - app.txPrioritizer = NewSeiTxPrioritizer(logger, &app.EvmKeeper, &app.UpgradeKeeper, &app.ParamsKeeper).GetTxPriorityHint + app.txPrioritizer = NewSeiTxPrioritizer(&app.EvmKeeper, &app.UpgradeKeeper, &app.ParamsKeeper).GetTxPriorityHint app.SetTxPrioritizer(app.txPrioritizer) return app @@ -1062,7 +1063,7 @@ func (app *App) HandleClose() error { // Close receipt store if app.receiptStore != nil { if err := app.receiptStore.Close(); err != nil { - app.Logger().Error("failed to close receipt store", "error", err) + logger.Error("failed to close receipt store", "err", err) errs = append(errs, fmt.Errorf("failed to close receipt store: %w", err)) } } @@ -1232,7 +1233,7 @@ func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcess if shouldStartOptimisticProcessing { plan, found := app.UpgradeKeeper.GetUpgradePlan(ctx) if found && plan.ShouldExecute(ctx) { - app.Logger().Info("Potential upgrade planned; skipping optimistic processing", "height", plan.Height) + logger.Info("Potential upgrade planned; skipping optimistic processing", "height", plan.Height) app.optimisticProcessingInfoMutex.Lock() app.optimisticProcessingInfo.Aborted = true completion := app.optimisticProcessingInfo.Completion @@ -1247,7 +1248,7 @@ func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcess app.optimisticProcessingInfoMutex.Lock() if processErr != nil { // ProcessBlock failed (including GetSigners panics), mark as aborted - app.Logger().Info("ProcessBlock failed in optimistic processing", "error", processErr) + logger.Info("ProcessBlock failed in optimistic processing", "err", processErr) app.optimisticProcessingInfo.Aborted = true } else { // ProcessBlock succeeded, store results @@ -1281,7 +1282,7 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) defer func() { app.ClearOptimisticProcessingInfo() duration := time.Since(startTime) - ctx.Logger().Info(fmt.Sprintf("FinalizeBlock took %dms", duration/time.Millisecond)) + logger.Info("FinalizeBlock complete", "took-ms", duration/time.Millisecond) // End block processing timing (started at ProcessProposal) app.EndBenchmarkBlockProcessing() // Process receipts for benchmark deployment tracking @@ -1319,10 +1320,10 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) } } metrics.IncrementOptimisticProcessingCounter(false) - ctx.Logger().Info("optimistic processing ineligible") + logger.Info("optimistic processing ineligible") events, txResults, endBlockResp, processErr := app.ProcessBlock(ctx, req.Txs, req, req.DecidedLastCommit, false) if processErr != nil { - ctx.Logger().Error("ProcessBlock failed in FinalizeBlocker", "error", processErr) + logger.Error("ProcessBlock failed in FinalizeBlocker", "err", processErr) return nil, processErr } @@ -1356,7 +1357,7 @@ func (app *App) DeliverTxWithResult(ctx sdk.Context, tx []byte, typedTx sdk.Tx) // since oracle votes will now exist in state. We know it was gasless, skip metrics. skipMetrics = true } else { - ctx.Logger().Debug("error checking if tx is gasless for metrics", "error", err) + logger.Debug("error checking if tx is gasless for metrics", "err", err) // If we can't determine if it's gasless, record metrics to maintain existing behavior } } else if isGasless { @@ -1406,7 +1407,7 @@ func (app *App) ProcessTxsSynchronousGiga(ctx sdk.Context, txs [][]byte, typedTx // Cache block-level constants (identical for all txs in this block). cache, cacheErr := newGigaBlockCache(ctx, &app.GigaEvmKeeper) if cacheErr != nil { - ctx.Logger().Error("failed to build giga block cache", "error", cacheErr, "height", ctx.BlockHeight()) + logger.Error("failed to build giga block cache", "error", cacheErr, "height", ctx.BlockHeight()) return nil } @@ -1511,7 +1512,7 @@ func (app *App) ProcessTXsWithOCCV2(ctx sdk.Context, txs [][]byte, typedTxs []sd // since oracle votes will now exist in state. We know it was gasless, skip metrics. recordGasMetrics = false } else { - ctx.Logger().Debug("error checking if tx is gasless for OCC metrics", "error", err, "txIndex", i) + logger.Debug("error checking if tx is gasless for OCC metrics", "error", err, "txIndex", i) // If we can't determine if it's gasless, record metrics to maintain existing behavior } } else if isGasless { @@ -1561,7 +1562,7 @@ func (app *App) ProcessTXsWithOCCGiga(ctx sdk.Context, txs [][]byte, typedTxs [] // Must use evmCtx (not ctx) because giga KV stores are registered in CacheContext. cache, cacheErr := newGigaBlockCache(evmCtx, &app.GigaEvmKeeper) if cacheErr != nil { - ctx.Logger().Error("failed to build giga block cache", "error", cacheErr, "height", ctx.BlockHeight()) + logger.Error("failed to build giga block cache", "error", cacheErr, "height", ctx.BlockHeight()) return nil, ctx } @@ -1576,7 +1577,7 @@ func (app *App) ProcessTXsWithOCCGiga(ctx sdk.Context, txs [][]byte, typedTxs [] if evmSchedErr != nil { // TODO: DeliverTxBatch panics in this case // TODO: detect if it was interop, and use v2 if so - ctx.Logger().Error("benchmark OCC scheduler error (EVM txs)", "error", evmSchedErr, "height", ctx.BlockHeight(), "txCount", len(evmEntries)) + logger.Error("benchmark OCC scheduler error (EVM txs)", "error", evmSchedErr, "height", ctx.BlockHeight(), "txCount", len(evmEntries)) return nil, ctx } @@ -1609,7 +1610,7 @@ func (app *App) ProcessTXsWithOCCGiga(ctx sdk.Context, txs [][]byte, typedTxs [] ) v2BatchResult, v2SchedErr := v2Scheduler.ProcessAll(ctx, v2Entries) if v2SchedErr != nil { - ctx.Logger().Error("benchmark OCC scheduler error", "error", v2SchedErr, "height", ctx.BlockHeight(), "txCount", len(v2Entries)) + logger.Error("benchmark OCC scheduler error", "error", v2SchedErr, "height", ctx.BlockHeight(), "txCount", len(v2Entries)) return nil, ctx } @@ -1651,11 +1652,11 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ // Re-panic for upgrade-related panics to allow proper upgrade mechanism if upgradePanicRe.MatchString(panicMsg) { - ctx.Logger().Error("upgrade panic detected, panicking to trigger upgrade", "panic", r) + logger.Error("upgrade panic detected, panicking to trigger upgrade", "panic", r) panic(r) // Re-panic to trigger upgrade mechanism } stack := string(debug.Stack()) - ctx.Logger().Error("panic recovered in ProcessBlock", "panic", r, "stack", stack) + logger.Error("panic recovered in ProcessBlock", "panic", r, "stack", stack) err = fmt.Errorf("ProcessBlock panic: %v", r) events = nil txResults = nil @@ -1919,8 +1920,8 @@ func (app *App) executeEVMTxWithGigaExecutor(ctx sdk.Context, msg *evmtypes.MsgE stateDB.SetNonce(sender, stateDB.GetNonce(sender)+1, tracing.NonceChangeEoACall) surplus, ferr := stateDB.Finalize() if ferr != nil { - ctx.Logger().Error("giga: failed to finalize stateDB on consensus error", - "txHash", ethTx.Hash().Hex(), + logger.Error("giga: failed to finalize stateDB on consensus error", + "tx-hash", ethTx.Hash(), "error", ferr, ) } @@ -2051,7 +2052,7 @@ func (app *App) makeGigaDeliverTx(cache *gigaBlockCache) func(sdk.Context, abci. // OCC abort panics are expected - the scheduler uses them to detect conflicts // and reschedule transactions. Don't log these as errors. if _, isOCCAbort := r.(occ.Abort); !isOCCAbort { - ctx.Logger().Error("benchmark panic in gigaDeliverTx", "panic", r, "stack", string(debug.Stack())) + logger.Error("benchmark panic in gigaDeliverTx", "panic", r, "stack", string(debug.Stack())) } } }() @@ -2115,20 +2116,20 @@ func (app *App) DecodeTransactionsConcurrently(ctx sdk.Context, txs [][]byte) [] defer wg.Done() defer func() { if err := recover(); err != nil { - ctx.Logger().Error(fmt.Sprintf("encountered panic during transaction decoding: %s", err)) + logger.Error("encountered panic during transaction decoding", "err", err) typedTxs[idx] = nil } }() typedTx, err := app.txDecoder(encodedTx) // get txkey from tx if err != nil { - ctx.Logger().Error(fmt.Sprintf("error decoding transaction at index %d due to %s", idx, err)) + logger.Error("error decoding transaction at index", "index", idx, "error", err) typedTxs[idx] = nil } else { if isEVM, _ := evmante.IsEVMMessage(typedTx); isEVM && !app.GigaExecutorEnabled { msg := evmtypes.MustGetEVMTransactionMessage(typedTx) if err := evmante.Preprocess(ctx, msg, app.EvmKeeper.ChainID(ctx), app.EvmKeeper.EthBlockTestConfig.Enabled); err != nil { - ctx.Logger().Error(fmt.Sprintf("error preprocessing EVM tx due to %s", err)) + logger.Error("error preprocessing EVM tx", "err", err) typedTxs[idx] = nil return } @@ -2301,7 +2302,7 @@ func (app *App) RegisterTendermintService(clientCtx client.Context) { } if app.evmRPCConfig.HTTPEnabled { - evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BeginBlockKeepers, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, txConfigProvider, DefaultNodeHome, app.GetStateStore(), nil) + evmHTTPServer, err := evmrpc.NewEVMHTTPServer(app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BeginBlockKeepers, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, txConfigProvider, DefaultNodeHome, app.GetStateStore(), nil) if err != nil { panic(err) } @@ -2314,7 +2315,7 @@ func (app *App) RegisterTendermintService(clientCtx client.Context) { } if app.evmRPCConfig.WSEnabled { - evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.Logger(), app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BeginBlockKeepers, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, txConfigProvider, DefaultNodeHome, app.GetStateStore()) + evmWSServer, err := evmrpc.NewEVMWebSocketServer(app.evmRPCConfig, clientCtx.Client, &app.EvmKeeper, app.BeginBlockKeepers, app.BaseApp, app.TracerAnteHandler, app.RPCContextProvider, txConfigProvider, DefaultNodeHome, app.GetStateStore()) if err != nil { panic(err) } @@ -2344,7 +2345,7 @@ func RegisterSwaggerAPI(rtr *mux.Router) { func (app *App) checkTotalBlockGas(ctx sdk.Context, txs [][]byte) (result bool) { defer func() { if r := recover(); r != nil { - ctx.Logger().Error("panic recovered in checkTotalBlockGas", "panic", r) + logger.Error("panic recovered in checkTotalBlockGas", "panic", r) result = false // Reject proposal if panic occurs } }() @@ -2362,11 +2363,11 @@ func (app *App) checkTotalBlockGas(ctx sdk.Context, txs [][]byte) (result bool) if err != nil { if strings.Contains(err.Error(), "panic in IsTxGasless") { // This is a unexpected panic, reject the entire proposal - ctx.Logger().Error("malicious transaction detected in gasless check", "error", err) + logger.Error("malicious transaction detected in gasless check", "err", err) return false } // Other business logic errors (like duplicate votes) - continue processing but tx is not gasless - ctx.Logger().Info("transaction failed gasless check but not malicious", "error", err) + logger.Info("transaction failed gasless check but not malicious", "err", err) continue } if isGasless { diff --git a/app/apptesting/test_suite.go b/app/apptesting/test_suite.go index b70a8e45c4..73fa4191a3 100644 --- a/app/apptesting/test_suite.go +++ b/app/apptesting/test_suite.go @@ -18,7 +18,6 @@ import ( stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" minttypes "github.com/sei-protocol/sei-chain/x/mint/types" "github.com/stretchr/testify/suite" @@ -51,11 +50,10 @@ func (s *KeeperTestHelper) Setup() { // CreateTestContext creates a test context. func (s *KeeperTestHelper) CreateTestContext() sdk.Context { db := dbm.NewMemDB() - logger := log.NewNopLogger() - ms := rootmulti.NewStore(db, log.NewNopLogger()) + ms := rootmulti.NewStore(db) - return sdk.NewContext(ms, tmtypes.Header{}, false, logger) + return sdk.NewContext(ms, tmtypes.Header{}, false) } // CreateTestContext creates a test context. diff --git a/app/benchmark.go b/app/benchmark.go index dff6e9e9ae..ae2624160e 100644 --- a/app/benchmark.go +++ b/app/benchmark.go @@ -8,14 +8,13 @@ import ( "github.com/sei-protocol/sei-chain/app/benchmark" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" evmcfg "github.com/sei-protocol/sei-chain/x/evm/config" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" ) // InitBenchmark initializes the benchmark system with the configured scenarios. // This is called during app initialization when the benchmark build tag is enabled. -func (app *App) InitBenchmark(ctx context.Context, chainID string, evmChainID int64, logger log.Logger) { +func (app *App) InitBenchmark(ctx context.Context, chainID string, evmChainID int64) { // Defensive check: prevent benchmarking on live chains if evmcfg.IsLiveEVMChainID(evmChainID) { panic("benchmark not allowed on live chains") @@ -23,7 +22,7 @@ func (app *App) InitBenchmark(ctx context.Context, chainID string, evmChainID in logger.Info("Initializing benchmark mode", "chainID", chainID, "evmChainID", evmChainID) - manager, err := benchmark.NewManager(ctx, app.encodingConfig.TxConfig, chainID, evmChainID, logger) + manager, err := benchmark.NewManager(ctx, app.encodingConfig.TxConfig, chainID, evmChainID) if err != nil { panic("failed to initialize benchmark manager: " + err.Error()) } @@ -62,7 +61,7 @@ func (app *App) ProcessBenchmarkReceipts(ctx sdk.Context) { return } - ctx.Logger().Info("benchmark: Looking for deployment receipts", + logger.Info("benchmark: Looking for deployment receipts", "pendingCount", len(pendingHashes), "height", ctx.BlockHeight()) @@ -70,13 +69,13 @@ func (app *App) ProcessBenchmarkReceipts(ctx sdk.Context) { for _, txHash := range pendingHashes { receipt, err := app.EvmKeeper.GetReceipt(ctx, txHash) if err != nil { - ctx.Logger().Info("benchmark: Receipt not found for deployment tx", - "txHash", txHash.Hex(), - "error", err.Error()) + logger.Info("benchmark: Receipt not found for deployment tx", + "tx-hash", txHash, + "error", err) continue } - ctx.Logger().Info("benchmark: Found deployment receipt", - "txHash", txHash.Hex(), + logger.Info("benchmark: Found deployment receipt", + "tx-hash", txHash, "status", receipt.Status, "contractAddress", receipt.ContractAddress, "gasUsed", receipt.GasUsed) diff --git a/app/benchmark/benchmark.go b/app/benchmark/benchmark.go index 23804d448a..c468d9a06f 100644 --- a/app/benchmark/benchmark.go +++ b/app/benchmark/benchmark.go @@ -12,7 +12,7 @@ // Usage: // // cfg, _ := benchmark.LoadConfig(configPath, evmChainID, seiChainID) -// gen, _ := benchmark.NewGenerator(cfg, txConfig, logger) +// gen, _ := benchmark.NewGenerator(cfg, txConfig) // benchLogger := benchmark.NewLogger(logger) // proposalCh := gen.StartProposalChannel(ctx, benchLogger) // @@ -27,11 +27,13 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/sei-protocol/sei-chain/sei-cosmos/client" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" evmcfg "github.com/sei-protocol/sei-chain/x/evm/config" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("app", "benchmark") + // Manager coordinates benchmark generation and logging. type Manager struct { Generator *Generator @@ -40,7 +42,7 @@ type Manager struct { } // NewManager creates a new benchmark manager from configuration. -func NewManager(ctx context.Context, txConfig client.TxConfig, chainID string, evmChainID int64, logger log.Logger) (*Manager, error) { +func NewManager(ctx context.Context, txConfig client.TxConfig, chainID string, evmChainID int64) (*Manager, error) { // Defensive check: prevent benchmarking on live chains if evmcfg.IsLiveEVMChainID(evmChainID) { panic("benchmark not allowed on live chains") @@ -54,12 +56,12 @@ func NewManager(ctx context.Context, txConfig client.TxConfig, chainID string, e return nil, err } - gen, err := NewGenerator(cfg, txConfig, logger) + gen, err := NewGenerator(cfg, txConfig) if err != nil { return nil, err } - benchLogger := NewLogger(logger) + benchLogger := NewLogger() go benchLogger.Start(ctx) proposalCh := gen.StartProposalChannel(ctx, benchLogger) diff --git a/app/benchmark/generator.go b/app/benchmark/generator.go index 57504b6322..429ab312a5 100644 --- a/app/benchmark/generator.go +++ b/app/benchmark/generator.go @@ -12,7 +12,6 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/sei-protocol/sei-chain/sei-cosmos/client" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" "github.com/sei-protocol/sei-chain/x/evm/types/ethtx" "github.com/sei-protocol/sei-load/config" @@ -66,12 +65,11 @@ type Generator struct { loadGenerator generator.Generator txsPerBatch int - mu sync.RWMutex - logger log.Logger + mu sync.RWMutex } // NewGenerator creates a new benchmark generator from a config. -func NewGenerator(cfg *config.LoadConfig, txConfig client.TxConfig, logger log.Logger) (*Generator, error) { +func NewGenerator(cfg *config.LoadConfig, txConfig client.TxConfig) (*Generator, error) { // Read number of transactions per batch from environment variable, default to 1000 txsPerBatch := 1000 if envVal := os.Getenv("BENCHMARK_TXS_PER_BATCH"); envVal != "" { @@ -90,7 +88,6 @@ func NewGenerator(cfg *config.LoadConfig, txConfig client.TxConfig, logger log.L phase: PhaseWarmup, // Start with warmup to let chain initialize warmupCounter: 0, txsPerBatch: txsPerBatch, - logger: logger, } logger.Info("benchmark: Generator will wait for warmup blocks before deploying", "warmupBlocks", WarmupBlocks) @@ -198,16 +195,16 @@ func (g *Generator) craftDeploymentTx(state *scenarioState, txScenario *loadtype case scenarios.Disperse: deployData = getDisperseDeployData() default: - g.logger.Info("benchmark: Unknown contract scenario, skipping deployment", "scenario", state.scenario.Name()) + logger.Info("benchmark: Unknown contract scenario, skipping deployment", "scenario", state.scenario.Name()) return nil } nonce := g.deployer.GetAndIncrementNonce() - g.logger.Info("benchmark: Creating deployment transaction", + logger.Info("benchmark: Creating deployment transaction", "scenario", state.scenario.Name(), - "deployer", g.deployer.Address.Hex(), + "deployer", g.deployer.Address, "nonce", nonce, - "chainID", g.chainID.String(), + "chainID", g.chainID, "dataLen", len(deployData)) // Create deployment transaction with chain ID set @@ -226,12 +223,12 @@ func (g *Generator) craftDeploymentTx(state *scenarioState, txScenario *loadtype signer := ethtypes.NewCancunSigner(g.chainID) signedTx, err := ethtypes.SignTx(ethtypes.NewTx(tx), signer, g.deployer.PrivKey) if err != nil { - g.logger.Error("benchmark: Failed to sign deployment tx", "error", err) + logger.Error("benchmark: Failed to sign deployment tx", "error", err) panic(err) } - g.logger.Info("benchmark: Deployment transaction signed", - "txHash", signedTx.Hash().Hex(), + logger.Info("benchmark: Deployment transaction signed", + "txHash", signedTx.Hash(), "gas", signedTx.Gas()) return signedTx @@ -263,7 +260,7 @@ func (g *Generator) generateSetupBlock() []*abci.TxRecord { deployTx := g.createDeploymentTx(state) if deployTx == nil { // Scenario doesn't need deployment (e.g., EVMTransfer) - g.logger.Info("benchmark: Scenario doesn't need deployment, attaching with zero address", + logger.Info("benchmark: Scenario doesn't need deployment, attaching with zero address", "scenario", state.scenario.Name()) state.deployed = true if err := state.scenario.Attach(g.cfg, common.Address{}); err != nil { @@ -276,9 +273,9 @@ func (g *Generator) generateSetupBlock() []*abci.TxRecord { state.deployTxHash = deployTx.Hash() g.pendingDeploys[deployTx.Hash()] = state - g.logger.Info("benchmark: Created deployment transaction (will only deploy once)", + logger.Info("benchmark: Created deployment transaction (will only deploy once)", "scenario", state.config.Name, - "txHash", deployTx.Hash().Hex()) + "txHash", deployTx.Hash()) // Convert to Cosmos SDK tx txRecord, err := g.ethTxToTxRecord(deployTx) @@ -370,22 +367,22 @@ func (g *Generator) ProcessReceipts(receipts map[common.Hash]*evmtypes.Receipt) return } - g.logger.Info("benchmark: Processing receipts for pending deployments", + logger.Info("benchmark: Processing receipts for pending deployments", "pendingCount", len(g.pendingDeploys), "receiptsProvided", len(receipts)) for txHash, state := range g.pendingDeploys { receipt, ok := receipts[txHash] if !ok { - g.logger.Info("benchmark: Receipt not yet available for deployment", + logger.Info("benchmark: Receipt not yet available for deployment", "scenario", state.config.Name, - "txHash", txHash.Hex()) + "txHash", txHash) continue } - g.logger.Info("benchmark: Found receipt for deployment", + logger.Info("benchmark: Found receipt for deployment", "scenario", state.config.Name, - "txHash", txHash.Hex(), + "txHash", txHash, "status", receipt.Status, "gasUsed", receipt.GasUsed, "contractAddress", receipt.ContractAddress, @@ -397,10 +394,10 @@ func (g *Generator) ProcessReceipts(receipts map[common.Hash]*evmtypes.Receipt) } addr := common.HexToAddress(receipt.ContractAddress) - g.logger.Info("benchmark: Contract deployed successfully", + logger.Info("benchmark: Contract deployed successfully", "scenario", state.config.Name, - "address", addr.Hex(), - "txHash", txHash.Hex(), + "address", addr, + "txHash", txHash, "gasUsed", receipt.GasUsed) // Attach the deployed address to the scenario @@ -408,9 +405,9 @@ func (g *Generator) ProcessReceipts(receipts map[common.Hash]*evmtypes.Receipt) panic(fmt.Sprintf("benchmark: Failed to attach scenario %s to address %s: %v", state.config.Name, addr.Hex(), err)) } - g.logger.Info("benchmark: Scenario attached to deployed contract", + logger.Info("benchmark: Scenario attached to deployed contract", "scenario", state.config.Name, - "address", addr.Hex()) + "address", addr) state.address = addr state.deployed = true delete(g.pendingDeploys, txHash) @@ -424,24 +421,24 @@ func (g *Generator) ProcessReceipts(receipts map[common.Hash]*evmtypes.Receipt) // transitionToLoadPhase switches from setup to load generation. func (g *Generator) transitionToLoadPhase() { - g.logger.Info("benchmark: All scenarios deployed, transitioning to load phase") + logger.Info("benchmark: All scenarios deployed, transitioning to load phase") g.phase = PhaseLoad // Create weighted generator from deployed scenarios weightedConfigs := make([]*generator.WeightedCfg, 0, len(g.scenarios)) for _, state := range g.scenarios { if !state.deployed { - g.logger.Info("benchmark: Scenario not deployed, skipping", "scenario", state.config.Name) + logger.Info("benchmark: Scenario not deployed, skipping", "scenario", state.config.Name) continue } if state.config.Weight == 0 { - g.logger.Info("benchmark: Skipping scenario with weight 0", "scenario", state.config.Name) + logger.Info("benchmark: Skipping scenario with weight 0", "scenario", state.config.Name) continue } - g.logger.Info("benchmark: Adding scenario to load generator", + logger.Info("benchmark: Adding scenario to load generator", "scenario", state.config.Name, "weight", state.config.Weight, - "address", state.address.Hex()) + "address", state.address) gen := generator.NewScenarioGenerator(state.accounts, state.scenario) weightedConfigs = append(weightedConfigs, generator.WeightedConfig(state.config.Weight, gen)) } @@ -451,7 +448,7 @@ func (g *Generator) transitionToLoadPhase() { } g.loadGenerator = generator.NewWeightedGenerator(weightedConfigs...) - g.logger.Info("benchmark: Load generator initialized and ready", "scenarios", len(weightedConfigs)) + logger.Info("benchmark: Load generator initialized and ready", "scenarios", len(weightedConfigs)) } // Generate returns the next batch of transaction records. @@ -463,12 +460,12 @@ func (g *Generator) Generate() []*abci.TxRecord { if phase == PhaseWarmup { g.warmupCounter++ if g.warmupCounter >= WarmupBlocks { - g.logger.Info("benchmark: Warmup complete, transitioning to setup phase", + logger.Info("benchmark: Warmup complete, transitioning to setup phase", "blocksWaited", g.warmupCounter) g.phase = PhaseSetup phase = PhaseSetup } else { - g.logger.Info("benchmark: Warming up, waiting for chain to initialize", + logger.Info("benchmark: Warming up, waiting for chain to initialize", "block", g.warmupCounter, "needed", WarmupBlocks) g.mu.Unlock() diff --git a/app/benchmark/logger.go b/app/benchmark/logger.go index 714b004df4..416d90b922 100644 --- a/app/benchmark/logger.go +++ b/app/benchmark/logger.go @@ -4,8 +4,6 @@ import ( "context" "sync" "time" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) // Logger tracks benchmark metrics and periodically logs statistics. @@ -28,14 +26,11 @@ type Logger struct { maxBlockProcessTime time.Duration // Maximum block processing time in the window totalBlockProcessTime time.Duration // Sum of all block processing times in the window blockProcessCount int64 // Number of block processing times recorded - logger log.Logger } // NewLogger creates a new benchmark logger. -func NewLogger(logger log.Logger) *Logger { - return &Logger{ - logger: logger, - } +func NewLogger() *Logger { + return &Logger{} } // Increment records transaction count and block timing information. @@ -213,7 +208,7 @@ func (l *Logger) FlushLog() { now := time.Now() stats, _ := l.getAndResetStats(now) - l.logger.Info("benchmark", + logger.Info("benchmark", "txs", stats.txCount, "blocks", stats.blockCount, "height", stats.latestHeight, diff --git a/app/benchmark/logger_test.go b/app/benchmark/logger_test.go index 2afd1cb0d0..44487fc671 100644 --- a/app/benchmark/logger_test.go +++ b/app/benchmark/logger_test.go @@ -5,7 +5,6 @@ import ( "testing" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" ) @@ -170,7 +169,7 @@ func TestCalculateTheoreticalTPS(t *testing.T) { } func TestLogger_Increment(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() baseTime := time.Now() @@ -205,7 +204,7 @@ func TestLogger_Increment(t *testing.T) { } func TestLogger_GetAndResetStats(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() baseTime := time.Now() bl.lastFlushTime = baseTime @@ -248,7 +247,7 @@ func TestLogger_GetAndResetStats(t *testing.T) { } func TestLogger_StartStop(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -284,7 +283,7 @@ func TestLogger_StartStop(t *testing.T) { } func TestLogger_ConcurrentIncrement(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() baseTime := time.Now() numGoroutines := 10 @@ -312,7 +311,7 @@ func TestLogger_ConcurrentIncrement(t *testing.T) { } func TestLogger_BlockTimeCalculations(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() baseTime := time.Now() @@ -335,7 +334,7 @@ func TestLogger_BlockTimeCalculations(t *testing.T) { } func TestLogger_FlushLog(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() baseTime := time.Now() bl.lastFlushTime = baseTime @@ -369,7 +368,7 @@ func TestLogger_FlushLog(t *testing.T) { } func TestLogger_RecordCommitTime(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() // Record some commit times bl.RecordCommitTime(100 * time.Millisecond) @@ -382,7 +381,7 @@ func TestLogger_RecordCommitTime(t *testing.T) { } func TestLogger_BlockProcessingTime(t *testing.T) { - bl := NewLogger(log.NewNopLogger()) + bl := NewLogger() // Start and end block processing bl.StartBlockProcessing() diff --git a/app/benchmark_test.go b/app/benchmark_test.go index f763369aaf..c040ae65fd 100644 --- a/app/benchmark_test.go +++ b/app/benchmark_test.go @@ -9,7 +9,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store/rootmulti" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -17,14 +16,14 @@ import ( func createTestContext() sdk.Context { db := dbm.NewMemDB() - logger := log.NewNopLogger() - ms := rootmulti.NewStore(db, log.NewNopLogger()) - return sdk.NewContext(ms, tmtypes.Header{}, false, logger) + + ms := rootmulti.NewStore(db) + return sdk.NewContext(ms, tmtypes.Header{}, false) } func TestPrepareProposalBenchmarkHandler(t *testing.T) { // Create a mock app with benchmark mode enabled - logger := log.NewNopLogger() + app := &App{} // Test handler with nil manager (should return empty proposal) @@ -49,7 +48,7 @@ func TestPrepareProposalBenchmarkHandler(t *testing.T) { proposalCh <- testProposal app.benchmarkManager = &benchmark.Manager{ - Logger: benchmark.NewLogger(logger), + Logger: benchmark.NewLogger(), } // We can't easily set the proposalCh since it's unexported, so we test the nil case @@ -73,7 +72,7 @@ func TestBenchmarkHelperMethods(t *testing.T) { require.Nil(t, app.BenchmarkLogger()) // Create a benchmark manager with logger - benchLogger := benchmark.NewLogger(log.NewNopLogger()) + benchLogger := benchmark.NewLogger() app.benchmarkManager = &benchmark.Manager{ Logger: benchLogger, } @@ -89,7 +88,7 @@ func TestBenchmarkHelperMethods(t *testing.T) { } func TestInitBenchmark_PanicsOnLiveChainID(t *testing.T) { - logger := log.NewNopLogger() + chainID := "pacific-1" liveEVMChainID := int64(1329) // pacific-1's EVM chain ID (live) @@ -102,7 +101,7 @@ func TestInitBenchmark_PanicsOnLiveChainID(t *testing.T) { // Test that InitBenchmark panics with live chain ID require.Panics(t, func() { - app.InitBenchmark(ctx, chainID, liveEVMChainID, logger) + app.InitBenchmark(ctx, chainID, liveEVMChainID) }, "InitBenchmark should panic on live chain ID") // Verify nothing was initialized @@ -110,7 +109,7 @@ func TestInitBenchmark_PanicsOnLiveChainID(t *testing.T) { } func TestInitBenchmark_AllLiveChainIDs(t *testing.T) { - logger := log.NewNopLogger() + liveChainIDs := []struct { chainID string evmChainID int64 @@ -129,14 +128,14 @@ func TestInitBenchmark_AllLiveChainIDs(t *testing.T) { ctx := context.Background() require.Panics(t, func() { - app.InitBenchmark(ctx, tc.chainID, tc.evmChainID, logger) + app.InitBenchmark(ctx, tc.chainID, tc.evmChainID) }, "InitBenchmark should panic on live chain ID: %s", tc.description) }) } } func TestInitBenchmark_Success(t *testing.T) { - logger := log.NewNopLogger() + chainID := "test-chain" evmChainID := int64(12345) // Non-live chain ID @@ -149,7 +148,7 @@ func TestInitBenchmark_Success(t *testing.T) { defer cancel() // Test InitBenchmark with non-live chain ID - app.InitBenchmark(ctx, chainID, evmChainID, logger) + app.InitBenchmark(ctx, chainID, evmChainID) // Verify benchmarkManager is set require.NotNil(t, app.benchmarkManager, "benchmarkManager should be initialized") diff --git a/app/eth_replay.go b/app/eth_replay.go index 490cd907d3..587840b171 100644 --- a/app/eth_replay.go +++ b/app/eth_replay.go @@ -52,16 +52,16 @@ func Replay(a *App) { panic(err) } if latestBlock < uint64(h+initHeight) { //nolint:gosec - a.Logger().Info(fmt.Sprintf("Latest block is %d. Sleeping for a minute", latestBlock)) + logger.Info("latest block behind target, sleeping", "latest-block", latestBlock) time.Sleep(1 * time.Minute) continue } - a.Logger().Info(fmt.Sprintf("Replaying block height %d", h+initHeight)) + logger.Info("replaying block height", "height", h+initHeight) if h+initHeight >= 19426587 && evmtypes.DefaultChainConfig().CancunTime < 0 { - a.Logger().Error("Reaching Cancun upgrade height. Turn on Cancun by setting CancunTime in x/evm/types/config.go:DefaultChainConfig() to 0") + logger.Error("Reaching Cancun upgrade height. Turn on Cancun by setting CancunTime in x/evm/types/config.go:DefaultChainConfig() to 0") break } else if h+initHeight < 19426587 && evmtypes.DefaultChainConfig().CancunTime >= 0 { - a.Logger().Error("Haven't reached Cancun upgrade height. Turn off Cancun by setting CancunTime in x/evm/types/config.go:DefaultChainConfig() to -1") + logger.Error("Haven't reached Cancun upgrade height. Turn off Cancun by setting CancunTime in x/evm/types/config.go:DefaultChainConfig() to -1") break } b, err := a.EvmKeeper.EthClient.BlockByNumber(context.Background(), big.NewInt(h+initHeight)) @@ -90,7 +90,7 @@ func Replay(a *App) { } _, _ = s.Finalize() for _, tx := range b.Txs { - a.Logger().Info(fmt.Sprintf("Verifying tx %s", tx.Hash().Hex())) + logger.Info("verifying tx", "tx-hash", tx.Hash()) if tx.To() != nil { a.EvmKeeper.VerifyBalance(ctx, *tx.To()) if a.EvmKeeper.EthReplayConfig.ContractStateChecks { diff --git a/app/invariance.go b/app/invariance.go index 71d5224ac3..c8def4baf8 100644 --- a/app/invariance.go +++ b/app/invariance.go @@ -58,7 +58,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { ) ckv, ok := cms.GetStore(app.BankKeeper.GetStoreKey()).(*commitment.Store) if !ok { - app.Logger().Error("bank store is not a memiavl store; cannot run light invariance check") + logger.Error("bank store is not a memiavl store; cannot run light invariance check") return } balanceChangePairs := ckv.GetChangedPairs(banktypes.BalancesPrefix) @@ -73,7 +73,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "sei", }, }) - app.Logger().Error(fmt.Sprintf("invalid changed pair key for usei: %X", p.Key)) + logger.Error("invalid changed pair key for usei", "key", fmt.Sprintf("%X", p.Key)) continue } addrLen := int(p.Key[1]) @@ -85,7 +85,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "sei", }, }) - app.Logger().Error(fmt.Sprintf("invalid changed pair key for usei: %X", p.Key)) + logger.Error("invalid changed pair key for usei", "key", fmt.Sprintf("%X", p.Key)) continue } addr := p.Key[2 : addrLen+2] @@ -105,7 +105,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "post_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal balance: %s", err)) + logger.Error("failed to unmarshal balance", "err", err) continue } if balance.Amount.IsNegative() { @@ -133,7 +133,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "pre_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal preblock balance: %s", err)) + logger.Error("failed to unmarshal preblock balance", "err", err) continue } useiPreTotal = useiPreTotal.Add(balance.Amount) @@ -150,7 +150,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "wei", }, }) - app.Logger().Error(fmt.Sprintf("invalid changed pair key: %X", p.Key)) + logger.Error("invalid changed pair key", "key", fmt.Sprintf("%X", p.Key)) continue } if !p.Delete { @@ -164,7 +164,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "post_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal wei balance: %s", err)) + logger.Error("failed to unmarshal wei balance", "err", err) continue } weiPostTotal = weiPostTotal.Add(amt) @@ -192,7 +192,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "pre_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal preblock wei balance: %s", err)) + logger.Error("failed to unmarshal preblock wei balance", "err", err) continue } weiPreTotal = weiPreTotal.Add(amt) @@ -212,7 +212,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "pre_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal pre total supply: %s", err)) + logger.Error("failed to unmarshal pre total supply", "err", err) return } preTotalSupply = amt @@ -233,7 +233,7 @@ func (app *App) LightInvarianceTotalSupply(cms sdk.CommitMultiStore) { Value: "post_block", }, }) - app.Logger().Error(fmt.Sprintf("failed to unmarshal total supply: %s", err)) + logger.Error("failed to unmarshal total supply", "err", err) } else { supplyChanged = amt.Sub(preTotalSupply) } diff --git a/app/prioritizer.go b/app/prioritizer.go index 95c25edda1..a0b6f38f92 100644 --- a/app/prioritizer.go +++ b/app/prioritizer.go @@ -12,7 +12,6 @@ import ( cosmosante "github.com/sei-protocol/sei-chain/sei-cosmos/x/auth/ante" paramskeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/keeper" upgradekeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/keeper" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" evmante "github.com/sei-protocol/sei-chain/x/evm/ante" "github.com/sei-protocol/sei-chain/x/evm/derived" @@ -27,12 +26,10 @@ type SeiTxPrioritizer struct { evmKeeper *evmkeeper.Keeper upgradeKeeper *upgradekeeper.Keeper paramsKeeper *paramskeeper.Keeper - logger log.Logger } -func NewSeiTxPrioritizer(logger log.Logger, ek *evmkeeper.Keeper, uk *upgradekeeper.Keeper, pk *paramskeeper.Keeper) *SeiTxPrioritizer { +func NewSeiTxPrioritizer(ek *evmkeeper.Keeper, uk *upgradekeeper.Keeper, pk *paramskeeper.Keeper) *SeiTxPrioritizer { return &SeiTxPrioritizer{ - logger: logger, evmKeeper: ek, upgradeKeeper: uk, paramsKeeper: pk, @@ -46,7 +43,7 @@ func (s *SeiTxPrioritizer) GetTxPriorityHint(ctx sdk.Context, tx sdk.Tx) (_prior // vectors where a malicious actor crafts a transaction that panics the // prioritizer. Since the prioritizer is used as a hint only, it's safe to fall // back to zero priority in this case and log the panic for monitoring purposes. - s.logger.Error("tx prioritizer panicked. Falling back on no priority", "error", r) + logger.Error("tx prioritizer panicked. Falling back on no priority", "err", r) _priorityHint = 0 _err = nil } diff --git a/app/prioritizer_test.go b/app/prioritizer_test.go index cd5a2abd29..8b2582e32c 100644 --- a/app/prioritizer_test.go +++ b/app/prioritizer_test.go @@ -6,7 +6,6 @@ import ( cosmostypes "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" xparamtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -27,9 +26,7 @@ func TestPrioritizerTestSuite(t *testing.T) { func (s *PrioritizerTestSuite) SetupTest() { s.KeeperTestHelper.Setup() - logger, err := log.NewDefaultLogger(log.LogFormatPlain, "info") - require.NoError(s.T(), err) - s.prioritizer = app.NewSeiTxPrioritizer(logger, &s.App.EvmKeeper, &s.App.UpgradeKeeper, &s.App.ParamsKeeper) + s.prioritizer = app.NewSeiTxPrioritizer(&s.App.EvmKeeper, &s.App.UpgradeKeeper, &s.App.ParamsKeeper) } var ( diff --git a/app/receipt.go b/app/receipt.go index 57dca7f286..a0a5496b56 100644 --- a/app/receipt.go +++ b/app/receipt.go @@ -59,7 +59,7 @@ func (app *App) AddCosmosEventsToEVMReceiptIfApplicable(ctx sdk.Context, tx sdk. ownerEventsMap := map[string][]abci.Event{} for _, ownerEvent := range ownerEvents { if len(ownerEvent.Attributes) != 3 { - ctx.Logger().Error("received owner event with number of attributes != 3") + logger.Error("received owner event with number of attributes != 3") continue } ownerEventKey := getOwnerEventKey(string(ownerEvent.Attributes[0].Value), string(ownerEvent.Attributes[1].Value)) @@ -219,13 +219,13 @@ func (app *App) translateCW721Event(ctx sdk.Context, wasmEvent abci.Event, point ownerEvmAddr := app.EvmKeeper.GetEVMAddressOrDefault(ctx, ownerSeiAddr) sender = common.BytesToHash(ownerEvmAddr[:]) } else { - ctx.Logger().Error("Translate CW721 error: invalid bech32 owner", "error", err, "address", ownerSeiAddrStr) + logger.Error("Translate CW721 error: invalid bech32 owner", "address", ownerSeiAddrStr, "err", err) } } else { - ctx.Logger().Error("Translate CW721 error: insufficient owner events", "key", ownerEventKey, "counter", currentCounter, "events", len(ownerEvents)) + logger.Error("Translate CW721 error: insufficient owner events", "key", ownerEventKey, "counter", currentCounter, "events", len(ownerEvents)) } } else { - ctx.Logger().Error("Translate CW721 error: owner event not found", "key", ownerEventKey) + logger.Error("Translate CW721 error: owner event not found", "key", ownerEventKey) } res = append(res, ðtypes.Log{ Address: pointerAddr, @@ -352,7 +352,7 @@ func (app *App) translateCW1155Event(ctx sdk.Context, wasmEvent abci.Event, poin dataArgs := cw1155.GetParsedABI().Events["TransferBatch"].Inputs.NonIndexed() value, err := dataArgs.Pack(action.TokenIds, action.Amounts) if err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to parse TransferBatch event data due to %s", err)) + logger.Error("Failed to parse TransferBatch event data", "err", err) continue } res = append(res, ðtypes.Log{ diff --git a/app/seidb.go b/app/seidb.go index 448de9960f..0c51f36980 100644 --- a/app/seidb.go +++ b/app/seidb.go @@ -11,7 +11,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/storev2/rootmulti" "github.com/sei-protocol/sei-chain/sei-db/config" seidb "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) const ( @@ -52,7 +51,6 @@ const ( var GigaKeys = []string{"evm", "bank"} func SetupSeiDB( - logger log.Logger, homePath string, appOpts servertypes.AppOptions, baseAppOptions []func(*baseapp.BaseApp), @@ -63,10 +61,10 @@ func SetupSeiDB( return baseAppOptions, nil } scConfig := parseSCConfigs(appOpts) - logger.Info(fmt.Sprintf("SeiDB SC is enabled, running node with sc config %v", scConfig)) + logger.Info("SeiDB SC is enabled", "sc-config", scConfig) ssConfig := parseSSConfigs(appOpts) if ssConfig.Enable { - logger.Info(fmt.Sprintf("SeiDB SS is enabled, running %s for historical state", ssConfig.Backend)) + logger.Info("SeiDB SS is enabled", "backend", ssConfig.Backend) } if ssConfig.EVMEnabled() { logger.Info("SeiDB EVM StateStore optimization is enabled", @@ -83,7 +81,7 @@ func SetupSeiDB( } // cms must be overridden before the other options, because they may use the cms, // make sure the cms aren't be overridden by the other options later on. - cms := rootmulti.NewStore(homePath, logger, scConfig, ssConfig, gigaStoreKeys) + cms := rootmulti.NewStore(homePath, scConfig, ssConfig, gigaStoreKeys) baseAppOptions = append([]func(*baseapp.BaseApp){ func(baseApp *baseapp.BaseApp) { baseApp.SetCMS(cms) diff --git a/app/test_helpers.go b/app/test_helpers.go index c9d5320548..a080373bae 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -1,12 +1,15 @@ package app import ( + "bytes" "context" + "encoding/hex" "encoding/json" "fmt" "math/rand" "os" "path/filepath" + "strconv" "testing" "time" @@ -22,12 +25,7 @@ import ( evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" "github.com/stretchr/testify/suite" - "bytes" - "encoding/hex" - "strconv" - abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/stretchr/testify/require" @@ -323,7 +321,7 @@ func setupReceiptStore(storeKey sdk.StoreKey) (receipt.ReceiptStore, error) { receiptConfig := ssconfig.DefaultReceiptStoreConfig() receiptConfig.KeepRecent = 0 // No min retain blocks in test receiptConfig.DBDirectory = tempDir - receiptStore, err := receipt.NewReceiptStore(log.NewNopLogger(), receiptConfig, storeKey) + receiptStore, err := receipt.NewReceiptStore(receiptConfig, storeKey) if err != nil { return nil, err } @@ -361,7 +359,6 @@ func SetupWithAppOptsAndDefaultHome(isCheckTx bool, appOpts TestAppOpts, enableE } res = New( - log.NewNopLogger(), dbm.NewMemDB(), nil, true, @@ -434,7 +431,6 @@ func SetupWithDB(tb testing.TB, db dbm.DB, isCheckTx bool, enableEVMCustomPrecom } res = New( - log.NewNopLogger(), db, nil, true, @@ -488,7 +484,6 @@ func SetupWithSc(t *testing.T, isCheckTx bool, enableEVMCustomPrecompiles bool, } res = New( - log.NewNopLogger(), db, nil, true, @@ -538,7 +533,6 @@ func SetupTestingAppWithLevelDb(t *testing.T, isCheckTx bool, enableEVMCustomPre encodingConfig := MakeEncodingConfig() cdc := encodingConfig.Marshaler app := New( - log.NewNopLogger(), db, nil, true, @@ -606,7 +600,6 @@ func setup(t *testing.T, withGenesis bool, invCheckPeriod uint) (*App, GenesisSt db := dbm.NewMemDB() encCdc := MakeEncodingConfig() app := New( - log.NewNopLogger(), db, nil, true, diff --git a/app/upgrades/fork_manager.go b/app/upgrades/fork_manager.go index 75059da025..708b81e229 100644 --- a/app/upgrades/fork_manager.go +++ b/app/upgrades/fork_manager.go @@ -5,8 +5,11 @@ import ( "github.com/sei-protocol/goutils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("app", "upgrades") + // Chain-ID constants for use in hard fork handlers. const ( ChainIDSeiHardForkTest = "sei-hard-fork-test" @@ -78,20 +81,19 @@ func (hfm *HardForkManager) ExecuteForTargetHeight(ctx sdk.Context) { } for _, handler := range handlers { handlerName := handler.GetName() - ctx.Logger().Info(fmt.Sprintf( - "Executing hard fork handler %s for chain ID %s at height %d", - handlerName, - handler.GetTargetChainID(), - handler.GetTargetHeight(), - )) + logger.Info("Executing hard fork handler and chain ID at height", + "handler", handlerName, + "chain-id", handler.GetTargetChainID(), + "height", handler.GetTargetHeight(), + ) err := handler.ExecuteHandler(ctx) if err != nil { panic(err) } - ctx.Logger().Info(fmt.Sprintf( - "Completed execution for hard fork handler %s", - handlerName, - )) + logger.Info( + "Completed execution for hard fork handler", + "handler", handlerName, + ) } // TODO: do we want to emit any events to the context event manager (for use in beginBlockResponse) } diff --git a/cmd/seid/cmd/blocktest.go b/cmd/seid/cmd/blocktest.go index d10bd007da..accaf621e2 100644 --- a/cmd/seid/cmd/blocktest.go +++ b/cmd/seid/cmd/blocktest.go @@ -20,7 +20,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/server" "github.com/sei-protocol/sei-chain/sei-cosmos/store" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" ) @@ -52,14 +51,12 @@ func BlocktestCmd(defaultNodeHome string) *cobra.Command { return err } - logger := log.NewTMLogger(os.Stdout) cache := store.NewCommitKVStoreCacheManager() wasmGasRegisterConfig := wasmkeeper.DefaultGasRegisterConfig() wasmGasRegisterConfig.GasMultiplier = 21_000_000 // turn on Cancun for block test evmtypes.CancunTime = 0 a := app.New( - logger, db, nil, true, diff --git a/cmd/seid/cmd/ethreplay.go b/cmd/seid/cmd/ethreplay.go index 5ac9c69cec..993a59f04e 100644 --- a/cmd/seid/cmd/ethreplay.go +++ b/cmd/seid/cmd/ethreplay.go @@ -4,7 +4,6 @@ import ( "net/http" //nolint:gosec _ "net/http/pprof" - "os" "path/filepath" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm" @@ -19,7 +18,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" ) @@ -36,10 +34,10 @@ func ReplayCmd(defaultNodeHome string) *cobra.Command { return err } go func() { - serverCtx.Logger.Info("Listening for profiling at http://localhost:6060/debug/pprof/") + logger.Info("Listening for profiling at http://localhost:6060/debug/pprof/") err := http.ListenAndServe(":6060", nil) if err != nil { - serverCtx.Logger.Error("Error from profiling server", "error", err) + logger.Error("Error from profiling server", "error", err) } }() @@ -49,12 +47,10 @@ func ReplayCmd(defaultNodeHome string) *cobra.Command { return err } - logger := log.NewTMLogger(os.Stdout) cache := store.NewCommitKVStoreCacheManager() wasmGasRegisterConfig := wasmkeeper.DefaultGasRegisterConfig() wasmGasRegisterConfig.GasMultiplier = 21_000_000 a := app.New( - logger, db, nil, true, diff --git a/cmd/seid/cmd/init.go b/cmd/seid/cmd/init.go index 4ef0058892..a568425513 100644 --- a/cmd/seid/cmd/init.go +++ b/cmd/seid/cmd/init.go @@ -13,7 +13,6 @@ import ( "github.com/sei-protocol/sei-chain/app/params" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/spf13/cobra" @@ -24,7 +23,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/client/flags" "github.com/sei-protocol/sei-chain/sei-cosmos/client/input" "github.com/sei-protocol/sei-chain/sei-cosmos/codec" - "github.com/sei-protocol/sei-chain/sei-cosmos/server" srvconfig "github.com/sei-protocol/sei-chain/sei-cosmos/server/config" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/types/module" @@ -145,8 +143,7 @@ For validator or seed nodes, pass --mode validator or --mode seed so RPC and P2P genFile := tmConfig.GenesisFile() overwrite, _ := cmd.Flags().GetBool(FlagOverwrite) - serverCtx := server.GetServerContextFromCmd(cmd) - genDoc, err := loadOrWriteGenesis(serverCtx.Logger, genFile, chainID, overwrite, mbm, cdc) + genDoc, err := loadOrWriteGenesis(genFile, chainID, overwrite, mbm, cdc) if err != nil { return err } @@ -218,7 +215,7 @@ func checkConfigOverwrite(configPath string, overwrite bool) error { } // loadOrWriteGenesis loads existing genesis at genFile if present and !overwrite, else writes embedded (well-known) or default. -func loadOrWriteGenesis(logger log.Logger, genFile, chainID string, overwrite bool, mbm module.BasicManager, cdc codec.JSONCodec) (*types.GenesisDoc, error) { +func loadOrWriteGenesis(genFile, chainID string, overwrite bool, mbm module.BasicManager, cdc codec.JSONCodec) (*types.GenesisDoc, error) { if !overwrite && tmos.FileExists(genFile) { if err := ensureGenesisPathIsFile(genFile); err != nil { return nil, err diff --git a/cmd/seid/cmd/init_test.go b/cmd/seid/cmd/init_test.go index 5c4f50abd4..f6c47add8f 100644 --- a/cmd/seid/cmd/init_test.go +++ b/cmd/seid/cmd/init_test.go @@ -14,7 +14,6 @@ import ( srvconfig "github.com/sei-protocol/sei-chain/sei-cosmos/server/config" seidbconfig "github.com/sei-protocol/sei-chain/sei-db/config" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -293,7 +292,7 @@ func TestLoadOrWriteGenesis_ExplicitConfigWins(t *testing.T) { require.NoError(t, err) encCfg := app.MakeEncodingConfig() - genDoc, err := loadOrWriteGenesis(log.NewNopLogger(), genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) + genDoc, err := loadOrWriteGenesis(genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) require.NoError(t, err) require.NotNil(t, genDoc) require.Equal(t, chainID, genDoc.ChainID) @@ -313,7 +312,7 @@ func TestLoadOrWriteGenesis_WrongChainID(t *testing.T) { require.NoError(t, err) encCfg := app.MakeEncodingConfig() - _, err = loadOrWriteGenesis(log.NewNopLogger(), genFile, "atlantic-2", false, app.ModuleBasics, encCfg.Marshaler) + _, err = loadOrWriteGenesis(genFile, "atlantic-2", false, app.ModuleBasics, encCfg.Marshaler) require.Error(t, err) require.Contains(t, err.Error(), "chain_id") } @@ -325,7 +324,7 @@ func TestLoadOrWriteGenesis_PathIsDirectory(t *testing.T) { require.NoError(t, os.MkdirAll(genFile, 0755)) encCfg := app.MakeEncodingConfig() - _, err := loadOrWriteGenesis(log.NewNopLogger(), genFile, "atlantic-2", false, app.ModuleBasics, encCfg.Marshaler) + _, err := loadOrWriteGenesis(genFile, "atlantic-2", false, app.ModuleBasics, encCfg.Marshaler) require.Error(t, err) require.Contains(t, err.Error(), "directory") } @@ -338,7 +337,7 @@ func TestLoadOrWriteGenesis_WellKnownWritesEmbedded(t *testing.T) { require.True(t, genesis.IsWellKnown(chainID), "atlantic-2 should be well-known") encCfg := app.MakeEncodingConfig() - genDoc, err := loadOrWriteGenesis(log.NewNopLogger(), genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) + genDoc, err := loadOrWriteGenesis(genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) require.NoError(t, err) require.NotNil(t, genDoc) require.Equal(t, chainID, genDoc.ChainID) @@ -358,7 +357,7 @@ func TestLoadOrWriteGenesis_OverwriteReplacesFile(t *testing.T) { require.NoError(t, existing.SaveAs(genFile)) encCfg := app.MakeEncodingConfig() - genDoc, err := loadOrWriteGenesis(log.NewNopLogger(), genFile, chainID, true, app.ModuleBasics, encCfg.Marshaler) + genDoc, err := loadOrWriteGenesis(genFile, chainID, true, app.ModuleBasics, encCfg.Marshaler) require.NoError(t, err) require.NotNil(t, genDoc) // Should be overwritten @@ -373,7 +372,7 @@ func TestLoadOrWriteGenesis_UnknownChainWritesDefault(t *testing.T) { require.False(t, genesis.IsWellKnown(chainID), "custom-chain-1 should not be well-known") encCfg := app.MakeEncodingConfig() - genDoc, err := loadOrWriteGenesis(log.NewNopLogger(), genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) + genDoc, err := loadOrWriteGenesis(genFile, chainID, false, app.ModuleBasics, encCfg.Marshaler) require.NoError(t, err) require.NotNil(t, genDoc) require.Equal(t, chainID, genDoc.ChainID) diff --git a/cmd/seid/cmd/root.go b/cmd/seid/cmd/root.go index 235f98f0f1..f6cd10ad24 100644 --- a/cmd/seid/cmd/root.go +++ b/cmd/seid/cmd/root.go @@ -39,15 +39,17 @@ import ( seidbconfig "github.com/sei-protocol/sei-chain/sei-db/config" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" tmcli "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm" wasmkeeper "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm/keeper" "github.com/sei-protocol/sei-chain/tools" + "github.com/sei-protocol/seilog" "github.com/spf13/cast" "github.com/spf13/cobra" dbm "github.com/tendermint/tm-db" ) +var logger = seilog.NewLogger("cmd", "seid", "cmd") + // Option configures root command option. type Option func(*rootOptions) @@ -230,7 +232,6 @@ func addModuleInitFlags(startCmd *cobra.Command) { // newApp creates a new Cosmos SDK app func newApp( - logger log.Logger, db dbm.DB, traceStore io.Writer, tmConfig *tmcfg.Config, @@ -273,7 +274,6 @@ func newApp( wasmGasRegisterConfig.GasMultiplier = 21_000_000 app := app.New( - logger, db, traceStore, true, @@ -313,7 +313,6 @@ func newApp( // appExport creates a new simapp (optionally at a given height) func appExport( - logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, @@ -323,7 +322,6 @@ func appExport( file *os.File, ) (servertypes.ExportedApp, error) { exportableApp, err := getExportableApp( - logger, db, traceStore, height, @@ -341,7 +339,6 @@ func appExport( } func getExportableApp( - logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, @@ -358,12 +355,12 @@ func getExportableApp( } if height != -1 { - exportableApp = app.New(logger, db, traceStore, false, map[int64]bool{}, cast.ToString(appOpts.Get(flags.FlagHome)), uint(1), true, nil, encCfg, app.GetWasmEnabledProposals(), appOpts, app.EmptyWasmOpts, app.EmptyAppOptions) + exportableApp = app.New(db, traceStore, false, map[int64]bool{}, cast.ToString(appOpts.Get(flags.FlagHome)), uint(1), true, nil, encCfg, app.GetWasmEnabledProposals(), appOpts, app.EmptyWasmOpts, app.EmptyAppOptions) if err := exportableApp.LoadHeight(height); err != nil { return nil, err } } else { - exportableApp = app.New(logger, db, traceStore, true, map[int64]bool{}, cast.ToString(appOpts.Get(flags.FlagHome)), uint(1), true, nil, encCfg, app.GetWasmEnabledProposals(), appOpts, app.EmptyWasmOpts, app.EmptyAppOptions) + exportableApp = app.New(db, traceStore, true, map[int64]bool{}, cast.ToString(appOpts.Get(flags.FlagHome)), uint(1), true, nil, encCfg, app.GetWasmEnabledProposals(), appOpts, app.EmptyWasmOpts, app.EmptyAppOptions) } return exportableApp, nil diff --git a/cmd/seid/cmd/snapshot.go b/cmd/seid/cmd/snapshot.go index 4d1cebdbbc..ac82ec3226 100644 --- a/cmd/seid/cmd/snapshot.go +++ b/cmd/seid/cmd/snapshot.go @@ -11,7 +11,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -57,9 +56,6 @@ func SnapshotCmd() *cobra.Command { panic(err) } - // Create logger - logger := log.NewTMLogger(os.Stdout) - // Get app options from server context appOpts := serverCtx.Viper @@ -68,7 +64,6 @@ func SnapshotCmd() *cobra.Command { // Initialize app with correct options app := app.New( - logger, dbm.NewMemDB(), nil, true, diff --git a/evmrpc/endpoints.go b/evmrpc/endpoints.go index b7414ac45b..df1f77f559 100644 --- a/evmrpc/endpoints.go +++ b/evmrpc/endpoints.go @@ -22,7 +22,6 @@ import ( "net/http" "time" - "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" ) @@ -78,19 +77,19 @@ func checkModuleAvailability(modules []string, apis []rpc.API) (bad, available [ // CheckTimeouts ensures that timeout values are meaningful func CheckTimeouts(timeouts *rpc.HTTPTimeouts) { if timeouts.ReadTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadTimeout) + logger.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadTimeout) timeouts.ReadTimeout = rpc.DefaultHTTPTimeouts.ReadTimeout } if timeouts.ReadHeaderTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP read header timeout", "provided", timeouts.ReadHeaderTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadHeaderTimeout) + logger.Warn("Sanitizing invalid HTTP read header timeout", "provided", timeouts.ReadHeaderTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadHeaderTimeout) timeouts.ReadHeaderTimeout = rpc.DefaultHTTPTimeouts.ReadHeaderTimeout } if timeouts.WriteTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", rpc.DefaultHTTPTimeouts.WriteTimeout) + logger.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", rpc.DefaultHTTPTimeouts.WriteTimeout) timeouts.WriteTimeout = rpc.DefaultHTTPTimeouts.WriteTimeout } if timeouts.IdleTimeout < time.Second { - log.Warn("Sanitizing invalid HTTP idle timeout", "provided", timeouts.IdleTimeout, "updated", rpc.DefaultHTTPTimeouts.IdleTimeout) + logger.Warn("Sanitizing invalid HTTP idle timeout", "provided", timeouts.IdleTimeout, "updated", rpc.DefaultHTTPTimeouts.IdleTimeout) timeouts.IdleTimeout = rpc.DefaultHTTPTimeouts.IdleTimeout } } diff --git a/evmrpc/filter.go b/evmrpc/filter.go index 727d44c894..672340b888 100644 --- a/evmrpc/filter.go +++ b/evmrpc/filter.go @@ -26,9 +26,12 @@ import ( "github.com/sei-protocol/sei-chain/utils/metrics" "github.com/sei-protocol/sei-chain/x/evm/keeper" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" "golang.org/x/time/rate" ) +var logger = seilog.NewLogger("evmrpc") + const TxSearchPerPage = 10 const ( @@ -968,7 +971,7 @@ func (f *LogFetcher) collectLogs(block *coretypes.ResultBlock, crit filters.Filt for txIdx, txHashEntry := range txHashes { rcpt, err := f.k.GetReceipt(ctx, txHashEntry.hash) if err != nil { - ctx.Logger().Error(fmt.Sprintf("collectLogs: unable to find receipt for hash %s: %v", txHashEntry.hash.Hex(), err)) + logger.Error("collectLogs: unable to find receipt for hash", "hash", txHashEntry.hash, "err", err) continue } diff --git a/evmrpc/info.go b/evmrpc/info.go index 943ff0687e..ca46f86925 100644 --- a/evmrpc/info.go +++ b/evmrpc/info.go @@ -203,7 +203,7 @@ func (i *InfoAPI) FeeHistory(ctx context.Context, blockCount gmath.HexOrDecimal6 calculatedRatio, err := i.CalculateGasUsedRatio(ctx, blockNum) if err != nil { // If we can't calculate the ratio, use 0.0 as fallback - sdkCtx.Logger().Error("Error calculating gas used ratio, falling back to 0.0", "error", err) + logger.Error("Error calculating gas used ratio, falling back to 0.0", "error", err) gasUsedRatio = 0.0 } else { gasUsedRatio = calculatedRatio diff --git a/evmrpc/rpcstack.go b/evmrpc/rpcstack.go index 635699f0e5..fe35390a0d 100644 --- a/evmrpc/rpcstack.go +++ b/evmrpc/rpcstack.go @@ -19,6 +19,7 @@ package evmrpc import ( "compress/gzip" "context" + "errors" "fmt" "io" "net" @@ -33,7 +34,6 @@ import ( "github.com/ethereum/go-ethereum/rpc" "github.com/gorilla/websocket" "github.com/rs/cors" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) // HTTPConfig is the JSON-RPC/HTTP configuration. @@ -67,7 +67,6 @@ type rpcHandler struct { } type HTTPServer struct { - log log.Logger timeouts rpc.HTTPTimeouts mux http.ServeMux // registered handlers go here @@ -97,8 +96,8 @@ const ( metricsPrinterInterval = 5 * time.Second ) -func NewHTTPServer(log log.Logger, timeouts rpc.HTTPTimeouts) *HTTPServer { - h := &HTTPServer{log: log, timeouts: timeouts, handlerNames: make(map[string]string)} +func NewHTTPServer(timeouts rpc.HTTPTimeouts) *HTTPServer { + h := &HTTPServer{timeouts: timeouts, handlerNames: make(map[string]string)} h.httpHandler.Store((*rpcHandler)(nil)) h.wsHandler.Store((*rpcHandler)(nil)) @@ -161,8 +160,8 @@ func (h *HTTPServer) Start() error { } h.listener = listener go func() { - if err := h.server.Serve(listener); err != nil { - h.log.Error(fmt.Sprintf("server exiting due to %s\n", err)) + if err := h.server.Serve(listener); !errors.Is(err, http.ErrServerClosed) { + logger.Error("server stopped erroneously", "err", err) } }() @@ -171,14 +170,14 @@ func (h *HTTPServer) Start() error { if h.WsConfig.prefix != "" { url += h.WsConfig.prefix } - h.log.Info("WebSocket enabled", "url", url) + logger.Info("WebSocket enabled", "url", url) } // if server is websocket only, return after logging if !h.rpcAllowed() { return nil } // Log http endpoint. - h.log.Info("HTTP server started", + logger.Info("HTTP server started", "endpoint", listener.Addr(), "auth", (h.HTTPConfig.JwtSecret != nil), "prefix", h.HTTPConfig.prefix, "cors", strings.Join(h.HTTPConfig.CorsAllowedOrigins, ","), @@ -199,7 +198,7 @@ func (h *HTTPServer) Start() error { for _, path := range paths { name := h.handlerNames[path] if !logged[name] { - h.log.Info(name+" enabled", "url", "http://"+listener.Addr().String()+path) + logger.Info(name+" enabled", "url", "http://"+listener.Addr().String()+path) logged[name] = true } } @@ -251,9 +250,9 @@ func CheckPath(r *http.Request, path string) bool { func (h *HTTPServer) Stop() { h.mu.Lock() defer h.mu.Unlock() - h.log.Info("Stopping EVM HTTP Server") + logger.Info("Stopping EVM HTTP Server") h.doStop() - h.log.Info("EVM HTTP Server stopped") + logger.Info("EVM HTTP Server stopped") } func (h *HTTPServer) doStop() { @@ -280,12 +279,12 @@ func (h *HTTPServer) doStop() { defer cancel() err := h.server.Shutdown(ctx) if err != nil && err == ctx.Err() { - h.log.Error("HTTP server graceful shutdown timed out") + logger.Error("HTTP server graceful shutdown timed out") _ = h.server.Close() } _ = h.listener.Close() - h.log.Info("HTTP server stopped", "endpoint", h.listener.Addr()) + logger.Info("HTTP server stopped", "endpoint", h.listener.Addr()) // Clear out everything to allow re-configuring it later. h.host, h.port, h.endpoint = "", 0, "" @@ -304,11 +303,11 @@ func (h *HTTPServer) EnableRPC(apis []rpc.API, config HTTPConfig) error { // Create RPC server and handler. srv := rpc.NewServer() srv.SetBatchLimits(config.batchItemLimit, config.batchResponseSizeLimit) - h.log.Info("Registering apis for evm rpc") - if err := RegisterApis(h.log, apis, config.Modules, srv); err != nil { + logger.Info("Registering apis for evm rpc") + if err := RegisterApis(apis, config.Modules, srv); err != nil { return err } - h.log.Info(fmt.Sprintf("[Debug] Registering deny list for evm rpc:%v", config.DenyList)) + logger.Info("Registering deny list for evm rpc", "deny-list", config.DenyList) for _, method := range config.DenyList { srv.RegisterDenyList(method) } @@ -342,8 +341,8 @@ func (h *HTTPServer) EnableWS(apis []rpc.API, config WsConfig) error { srv := rpc.NewServer() srv.SetBatchLimits(config.batchItemLimit, config.batchResponseSizeLimit) srv.SetReadLimits(config.readLimit) - h.log.Info("Registering apis for evm websocket") - if err := RegisterApis(h.log, apis, config.Modules, srv); err != nil { + logger.Info("Registering apis for evm websocket") + if err := RegisterApis(apis, config.Modules, srv); err != nil { return err } h.WsConfig = config @@ -580,7 +579,7 @@ func NewGzipHandler(next http.Handler) http.Handler { // RegisterApis checks the given modules' availability, generates an allowlist based on the allowed modules, // and then registers all of the APIs exposed by the services. -func RegisterApis(logger log.Logger, apis []rpc.API, modules []string, srv *rpc.Server) error { +func RegisterApis(apis []rpc.API, modules []string, srv *rpc.Server) error { if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 { logger.Error("Unavailable modules in HTTP API list", "unavailable", bad, "available", available) } diff --git a/evmrpc/rpcstack_test.go b/evmrpc/rpcstack_test.go index af284ba101..403ef898a5 100644 --- a/evmrpc/rpcstack_test.go +++ b/evmrpc/rpcstack_test.go @@ -32,7 +32,6 @@ import ( "github.com/golang-jwt/jwt/v4" "github.com/gorilla/websocket" "github.com/sei-protocol/sei-chain/evmrpc" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/assert" ) @@ -226,7 +225,7 @@ func createAndStartServer(t *testing.T, conf *evmrpc.HTTPConfig, ws bool, wsConf if timeouts == nil { timeouts = &rpc.DefaultHTTPTimeouts } - srv := evmrpc.NewHTTPServer(log.NewNopLogger(), *timeouts) + srv := evmrpc.NewHTTPServer(*timeouts) assert.NoError(t, srv.EnableRPC(apis(), *conf)) if ws { assert.NoError(t, srv.EnableWS(nil, *wsConf)) diff --git a/evmrpc/server.go b/evmrpc/server.go index 8cd2650930..5c4ceed66e 100644 --- a/evmrpc/server.go +++ b/evmrpc/server.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/client" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpcclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client" evmCfg "github.com/sei-protocol/sei-chain/x/evm/config" "github.com/sei-protocol/sei-chain/x/evm/keeper" @@ -35,7 +34,6 @@ type EVMServer interface { } func NewEVMHTTPServer( - logger log.Logger, config evmrpcconfig.Config, tmClient rpcclient.Client, k *keeper.Keeper, @@ -69,9 +67,9 @@ func NewEVMHTTPServer( } // Initialize RPC tracker - stats.InitRPCTracker(ctxProvider(LatestCtxHeight).Context(), logger, config.RPCStatsInterval) + stats.InitRPCTracker(ctxProvider(LatestCtxHeight).Context(), config.RPCStatsInterval) - httpServer := NewHTTPServer(logger, rpc.HTTPTimeouts{ + httpServer := NewHTTPServer(rpc.HTTPTimeouts{ ReadTimeout: config.ReadTimeout, ReadHeaderTimeout: config.ReadHeaderTimeout, WriteTimeout: config.WriteTimeout, @@ -228,7 +226,6 @@ func NewEVMHTTPServer( } func NewEVMWebSocketServer( - logger log.Logger, config evmrpcconfig.Config, tmClient rpcclient.Client, k *keeper.Keeper, @@ -240,16 +237,14 @@ func NewEVMWebSocketServer( homeDir string, stateStore types.StateStore, ) (EVMServer, error) { - logger = logger.With("module", "evmrpc") - // Initialize global worker pool with configuration (metrics are embedded in pool) // This is idempotent - if HTTP server already initialized it, this is a no-op InitGlobalWorkerPool(config.WorkerPoolSize, config.WorkerQueueSize) // Initialize WebSocket tracker. - stats.InitWSTracker(ctxProvider(LatestCtxHeight).Context(), logger, config.RPCStatsInterval) + stats.InitWSTracker(ctxProvider(LatestCtxHeight).Context(), config.RPCStatsInterval) - httpServer := NewHTTPServer(logger, rpc.HTTPTimeouts{ + httpServer := NewHTTPServer(rpc.HTTPTimeouts{ ReadTimeout: config.ReadTimeout, ReadHeaderTimeout: config.ReadHeaderTimeout, WriteTimeout: config.WriteTimeout, diff --git a/evmrpc/setup_test.go b/evmrpc/setup_test.go index 37503c27a1..31355c47e8 100644 --- a/evmrpc/setup_test.go +++ b/evmrpc/setup_test.go @@ -29,7 +29,6 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" types2 "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/mock" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" @@ -594,12 +593,8 @@ func init() { goodConfig.WSPort = TestWSPort goodConfig.FilterTimeout = 500 * time.Millisecond goodConfig.MaxLogNoBlock = 10 - infoLog, err := log.NewDefaultLogger("text", "info") - if err != nil { - panic(err) - } txConfigProvider := func(int64) client.TxConfig { return TxConfig } - HttpServer, err := evmrpc.NewEVMHTTPServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore(), isPanicTxFunc) + HttpServer, err := evmrpc.NewEVMHTTPServer(goodConfig, &MockClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore(), isPanicTxFunc) if err != nil { panic(err) } @@ -611,7 +606,7 @@ func init() { badConfig := evmrpcconfig.DefaultConfig badConfig.HTTPPort = TestBadPort badConfig.FilterTimeout = 500 * time.Millisecond - badHTTPServer, err := evmrpc.NewEVMHTTPServer(infoLog, badConfig, &MockBadClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore(), nil) + badHTTPServer, err := evmrpc.NewEVMHTTPServer(badConfig, &MockBadClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore(), nil) if err != nil { panic(err) } @@ -626,7 +621,6 @@ func init() { strictConfig.MaxTraceLookbackBlocks = 1 // Artificially low lookback block strictServer, err := evmrpc.NewEVMHTTPServer( - infoLog, strictConfig, &MockClient{}, EVMKeeper, @@ -652,7 +646,6 @@ func init() { archiveConfig.WSPort = TestArchivePort + 1 archiveConfig.MaxTraceLookbackBlocks = -1 // No lookback limit archiveServer, err := evmrpc.NewEVMHTTPServer( - infoLog, archiveConfig, &MockClient{}, EVMKeeper, @@ -673,7 +666,7 @@ func init() { } // Start ws server - wsServer, err := evmrpc.NewEVMWebSocketServer(infoLog, goodConfig, &MockClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore()) + wsServer, err := evmrpc.NewEVMWebSocketServer(goodConfig, &MockClient{}, EVMKeeper, testApp.BeginBlockKeepers, testApp.BaseApp, testApp.TracerAnteHandler, ctxProvider, txConfigProvider, "", testApp.GetStateStore()) if err != nil { panic(err) } diff --git a/evmrpc/stats/tracker.go b/evmrpc/stats/tracker.go index 8a6197b12a..64fa7caef7 100644 --- a/evmrpc/stats/tracker.go +++ b/evmrpc/stats/tracker.go @@ -3,14 +3,17 @@ package stats import ( "context" "encoding/json" + "log/slog" "sync" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" + "github.com/sei-protocol/seilog" ) // Global tracker state var ( + logger = seilog.NewLogger("evmrpc", "stats") + httpTracker *tracker wsTracker *tracker ) @@ -40,21 +43,21 @@ type methodStats struct { } // InitRPCTracker initializes the HTTP/RPC tracker. -func InitRPCTracker(ctx context.Context, logger log.Logger, interval time.Duration) { +func InitRPCTracker(ctx context.Context, interval time.Duration) { if interval > 0 { - httpTracker = newTracker(ctx, logger, "http", interval) + httpTracker = newTracker(ctx, "http", interval) } } // InitWSTracker initializes the WebSocket tracker. -func InitWSTracker(ctx context.Context, logger log.Logger, interval time.Duration) { +func InitWSTracker(ctx context.Context, interval time.Duration) { if interval > 0 { - wsTracker = newTracker(ctx, logger, "ws", interval) + wsTracker = newTracker(ctx, "ws", interval) } } type tracker struct { - logger log.Logger + logger *slog.Logger ch chan apiEvent interval time.Duration ctx context.Context @@ -64,20 +67,21 @@ type tracker struct { // Simple current period tracking mu sync.RWMutex currentPeriod *periodStats + connType string } // newTracker creates a new stats tracker. -func newTracker(ctx context.Context, logger log.Logger, +func newTracker(ctx context.Context, connType string, interval time.Duration) *tracker { - logger = logger.With("conn_type", connType) trackerCtx, cancel := context.WithCancel(ctx) t := &tracker{ - logger: logger, ch: make(chan apiEvent, 10000), interval: interval, ctx: trackerCtx, cancel: cancel, + connType: connType, + logger: logger.With("connType", connType), } t.wg.Add(1) diff --git a/evmrpc/stats/tracker_test.go b/evmrpc/stats/tracker_test.go deleted file mode 100644 index b8cacd10c5..0000000000 --- a/evmrpc/stats/tracker_test.go +++ /dev/null @@ -1,556 +0,0 @@ -package stats - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/stretchr/testify/require" -) - -// mockLogger implements log.Logger for testing -type mockLogger struct { - logs []logEntry - mu sync.Mutex -} - -type logEntry struct { - level string - msg string - keyvals []interface{} -} - -func newMockLogger() *mockLogger { - return &mockLogger{ - logs: make([]logEntry, 0), - } -} - -func (m *mockLogger) Debug(msg string, keyvals ...interface{}) { - m.mu.Lock() - defer m.mu.Unlock() - m.logs = append(m.logs, logEntry{level: "debug", msg: msg, keyvals: keyvals}) -} - -func (m *mockLogger) Info(msg string, keyvals ...interface{}) { - m.mu.Lock() - defer m.mu.Unlock() - m.logs = append(m.logs, logEntry{level: "info", msg: msg, keyvals: keyvals}) -} - -func (m *mockLogger) Error(msg string, keyvals ...interface{}) { - m.mu.Lock() - defer m.mu.Unlock() - m.logs = append(m.logs, logEntry{level: "error", msg: msg, keyvals: keyvals}) -} - -func (m *mockLogger) With(keyvals ...interface{}) log.Logger { - return m // Simple implementation for testing -} - -func (m *mockLogger) getLogs() []logEntry { - m.mu.Lock() - defer m.mu.Unlock() - return append([]logEntry(nil), m.logs...) -} - -func (m *mockLogger) getLogsByLevel(level string) []logEntry { - m.mu.Lock() - defer m.mu.Unlock() - var filtered []logEntry - for _, entry := range m.logs { - if entry.level == level { - filtered = append(filtered, entry) - } - } - return filtered -} - -func (m *mockLogger) hasLogWithMessage(msg string) bool { - m.mu.Lock() - defer m.mu.Unlock() - for _, entry := range m.logs { - if entry.msg == msg { - return true - } - } - return false -} - -// Test scenarios using struct-based approach -func TestTracker(t *testing.T) { - scenarios := []struct { - name string - setup func() (*tracker, *mockLogger, context.CancelFunc) - test func(t *testing.T, tracker *tracker, logger *mockLogger) - cleanup func(*tracker, context.CancelFunc) - expectError bool - }{ - { - name: "basic_tracker_creation", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 100*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - require.NotNil(t, tracker) - require.NotNil(t, tracker.ch) - require.Equal(t, 100*time.Millisecond, tracker.interval) - - // Wait a bit for startup log - time.Sleep(50 * time.Millisecond) - require.True(t, logger.hasLogWithMessage("stats tracker started")) - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - tracker.Stop() - }, - }, - { - name: "tracker_stop_lifecycle", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 100*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Let it run briefly - time.Sleep(50 * time.Millisecond) - - tracker.Stop() - - // Check stop log appears - time.Sleep(50 * time.Millisecond) - require.True(t, logger.hasLogWithMessage("stats tracker stopped")) - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // Already stopped in test - }, - }, - { - name: "track_message_successful_request", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 50*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Track a successful message - startTime := time.Now() - tracker.TrackMessage("eth_getBalance", "http", startTime, true) - - // Give enough time for the event to be processed from the channel - time.Sleep(50 * time.Millisecond) - - // Stop the tracker to force reporting of all remaining periods - tracker.Stop() - - // Check that stats were logged during shutdown - infoLogs := logger.getLogsByLevel("info") - var foundOverallStats, foundMethodStats bool - for _, log := range infoLogs { - if log.msg == "stats" { - foundOverallStats = true - } - if log.msg == "method stats" { - foundMethodStats = true - } - } - require.True(t, foundOverallStats, "Expected to find overall stats log") - require.True(t, foundMethodStats, "Expected to find method stats log") - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // Already stopped in test - }, - }, - { - name: "track_message_error_request", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 100*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Track a failed message - startTime := time.Now() - tracker.TrackMessage("eth_sendTransaction", "websocket", startTime, false) - - // Give enough time for the event to be processed from the channel - time.Sleep(50 * time.Millisecond) - - // Stop the tracker to force reporting of all remaining periods - tracker.Stop() - - // Verify error was tracked - infoLogs := logger.getLogsByLevel("info") - var foundOverallStats, foundMethodStats bool - var overallSuccessRate float64 - - for _, log := range infoLogs { - if log.msg == "stats" { - foundOverallStats = true - // Check that overall success rate reflects the error - for i := 0; i < len(log.keyvals); i += 2 { - if log.keyvals[i] == "success_rate_pct" { - overallSuccessRate = log.keyvals[i+1].(float64) - } - } - } - if log.msg == "method stats" { - foundMethodStats = true - } - } - require.True(t, foundOverallStats, "Expected to find overall stats log") - require.True(t, foundMethodStats, "Expected to find method stats log") - require.Equal(t, 0.0, overallSuccessRate, "Expected 0% overall success rate for error request") - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // Already stopped in test - }, - }, - { - name: "channel_overflow_handling", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 1*time.Second) // Longer interval to prevent flushing - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Send multiple messages to test channel handling - for i := 0; i < 100; i++ { - startTime := time.Now() - tracker.TrackMessage("test_method", "http", startTime, true) - } - - // Check for potential overflow debug logs - time.Sleep(50 * time.Millisecond) - debugLogs := logger.getLogsByLevel("debug") - - // We might not hit overflow with just 100 requests, but the test verifies the structure works - require.True(t, len(debugLogs) >= 0, "Debug logs should be accessible") - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - tracker.Stop() - }, - }, - { - name: "concurrent_tracking", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - tracker := newTracker(ctx, logger, "http", 200*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Run concurrent message tracking - var wg sync.WaitGroup - numRequests := 50 - - for i := 0; i < numRequests; i++ { - wg.Add(1) - go func(id int) { - defer wg.Done() - startTime := time.Now() - method := "eth_call" - if id%2 == 0 { - method = "eth_getBalance" - } - tracker.TrackMessage(method, "http", startTime, true) - }(i) - } - - wg.Wait() - - // Give enough time for all events to be processed from the channel - time.Sleep(100 * time.Millisecond) - - // Stop the tracker to force reporting of all remaining periods - tracker.Stop() - - // Verify stats were collected - infoLogs := logger.getLogsByLevel("info") - var foundOverallStats, foundMethodStats bool - var totalEvents int - for _, log := range infoLogs { - if log.msg == "stats" { - foundOverallStats = true - for i := 0; i < len(log.keyvals); i += 2 { - if log.keyvals[i] == "count" { - totalEvents = log.keyvals[i+1].(int) - break - } - } - } - if log.msg == "method stats" { - foundMethodStats = true - } - } - require.True(t, foundOverallStats, "Expected to find overall stats log") - require.True(t, foundMethodStats, "Expected to find method stats log") - require.Equal(t, numRequests, totalEvents, "Expected all requests to be tracked") - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // Already stopped in test - }, - }, - { - name: "period_completion_reporting", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - // Use very short interval for faster testing - tracker := newTracker(ctx, logger, "http", 50*time.Millisecond) - return tracker, logger, cancel - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // Track a message in the first period - startTime := time.Now() - tracker.TrackMessage("eth_getBalance", "http", startTime, true) - - // Wait for event to be processed - time.Sleep(10 * time.Millisecond) - - // Wait long enough for the period to complete and for the ticker to trigger - time.Sleep(100 * time.Millisecond) - - // Check if the first period was automatically reported - infoLogs := logger.getLogsByLevel("info") - var foundAutoReportedPeriod bool - - for _, log := range infoLogs { - if log.msg == "stats" { - // This should be from automatic period completion, not from Stop() - foundAutoReportedPeriod = true - break - } - } - - require.True(t, foundAutoReportedPeriod, "Expected automatic period reporting") - - // Stop tracker - tracker.Stop() - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // Already stopped in test - }, - }, - { - name: "nil_tracker_handling", - setup: func() (*tracker, *mockLogger, context.CancelFunc) { - logger := newMockLogger() - _, cancel := context.WithCancel(context.Background()) - return nil, logger, cancel // Return nil tracker - }, - test: func(t *testing.T, tracker *tracker, logger *mockLogger) { - // This should not panic even with nil tracker - if tracker != nil { - startTime := time.Now() - tracker.TrackMessage("eth_getBalance", "http", startTime, true) - } - // Test passes if no panic occurs - }, - cleanup: func(tracker *tracker, cancel context.CancelFunc) { - // No cleanup needed for nil tracker - }, - }, - } - - for _, scenario := range scenarios { - t.Run(scenario.name, func(t *testing.T) { - tracker, logger, cancel := scenario.setup() - - // Run the test - scenario.test(t, tracker, logger) - - // Cleanup - scenario.cleanup(tracker, cancel) - }) - } -} - -func TestExtractMethod(t *testing.T) { - testCases := []struct { - name string - input []byte - expected string - }{ - { - name: "valid_json_rpc", - input: []byte(`{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x123"],"id":1}`), - expected: "eth_getBalance", - }, - { - name: "minimal_valid_json", - input: []byte(`{"method":"test_method"}`), - expected: "test_method", - }, - { - name: "empty_method", - input: []byte(`{"method":""}`), - expected: "unknown", - }, - { - name: "malformed_json", - input: []byte(`{invalid json`), - expected: "unknown", - }, - { - name: "missing_method", - input: []byte(`{"jsonrpc":"2.0","params":[],"id":1}`), - expected: "unknown", - }, - { - name: "empty_input", - input: []byte(``), - expected: "unknown", - }, - { - name: "null_input", - input: nil, - expected: "unknown", - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - result := extractMethod(tc.input) - require.Equal(t, tc.expected, result) - }) - } -} - -func TestTrackMessage(t *testing.T) { - logger := newMockLogger() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - tracker := newTracker(ctx, logger, "http", 100*time.Millisecond) - defer tracker.Stop() - - // Test tracking different connection types - startTime := time.Now() - tracker.TrackMessage("eth_getBalance", "http", startTime, true) - - startTime2 := time.Now() - tracker.TrackMessage("eth_sendTransaction", "websocket", startTime2, false) - - // Give time for events to be processed - time.Sleep(50 * time.Millisecond) - - // Stop the tracker to force reporting - tracker.Stop() - - // Verify that stats were logged - require.True(t, logger.hasLogWithMessage("stats tracker started")) - require.True(t, logger.hasLogWithMessage("stats tracker stopped")) - - // Check that we have some stats logs - var foundOverallStats, foundMethodStats bool - for _, entry := range logger.logs { - if entry.msg == "stats" { - foundOverallStats = true - } - if entry.msg == "method stats" { - foundMethodStats = true - } - } - - require.True(t, foundOverallStats, "Expected to find overall stats log") - require.True(t, foundMethodStats, "Expected to find method stats log") -} - -func TestNilTrackerHandling(t *testing.T) { - var tracker *tracker = nil - // This should not panic even with nil tracker - startTime := time.Now() - tracker.TrackMessage("eth_getBalance", "http", startTime, true) - // Test passes if no panic occurs. -} - -func TestRecordAPIInvocation(t *testing.T) { - // Test the new separate tracker initialization approach - logger := newMockLogger() - ctx := context.Background() - startTime := time.Now() - - // Initialize both trackers - InitRPCTracker(ctx, logger, 100*time.Millisecond) - InitWSTracker(ctx, logger, 100*time.Millisecond) - - // Now these should work - RecordAPIInvocation("eth_getBalance", "http", startTime, true) - RecordAPIInvocation("eth_sendTransaction", "websocket", startTime, false) - RecordAPIInvocation("eth_call", "http", startTime, true) - - // Give time for events to be processed - time.Sleep(150 * time.Millisecond) - - // Verify that trackers were created - httpExists := httpTracker != nil - wsExists := wsTracker != nil - - require.True(t, httpExists, "HTTP tracker should be initialized") - require.True(t, wsExists, "WebSocket tracker should be initialized") - - // Cleanup - if httpTracker != nil { - httpTracker.Stop() - httpTracker = nil - } - if wsTracker != nil { - wsTracker.Stop() - wsTracker = nil - } -} - -func TestRecordAPIInvocationConcurrent(t *testing.T) { - // Test concurrent calls to RecordAPIInvocation with separate tracker initialization - logger := newMockLogger() - ctx := context.Background() - - // Initialize both trackers before concurrent access - InitRPCTracker(ctx, logger, 100*time.Millisecond) - InitWSTracker(ctx, logger, 100*time.Millisecond) - - var wg sync.WaitGroup - numCalls := 50 - - for i := 0; i < numCalls; i++ { - wg.Add(1) - go func(id int) { - defer wg.Done() - startTime := time.Now() - method := "eth_call" - connType := "http" - if id%2 == 0 { - method = "eth_getBalance" - connType = "websocket" - } - RecordAPIInvocation(method, connType, startTime, true) - }(i) - } - - wg.Wait() - - // Give time for events to be processed - time.Sleep(50 * time.Millisecond) - - // Cleanup - if httpTracker != nil { - httpTracker.Stop() - httpTracker = nil - } - if wsTracker != nil { - wsTracker.Stop() - wsTracker = nil - } - - // Test passes if no panic occurs during concurrent access -} diff --git a/evmrpc/tests/utils.go b/evmrpc/tests/utils.go index 27745f2e14..c6803f5611 100644 --- a/evmrpc/tests/utils.go +++ b/evmrpc/tests/utils.go @@ -21,7 +21,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/client" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" testkeeper "github.com/sei-protocol/sei-chain/testutil/keeper" seiutils "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/x/evm/types" @@ -142,7 +141,6 @@ func setupTestServer( cfg.HTTPEnabled = true cfg.HTTPPort = port s, err := evmrpc.NewEVMHTTPServer( - log.NewNopLogger(), cfg, mockClient, &a.EvmKeeper, diff --git a/evmrpc/tx.go b/evmrpc/tx.go index 27ef364800..c260b2a77c 100644 --- a/evmrpc/tx.go +++ b/evmrpc/tx.go @@ -240,8 +240,8 @@ func (t *TransactionAPI) GetTransactionByHash(ctx context.Context, hash common.H if etx != nil && etx.Hash() == hash { from, err := rpcutils.RecoverEVMSenderWithContext(sdkCtx, etx) if err != nil { // codecov:ignore - defensive error handling for invalid signatures - sdkCtx.Logger().Error("failed to recover sender", "err", err, "tx", etx.Hash().Hex()) // codecov:ignore - return nil, err // codecov:ignore + logger.Error("failed to recover sender", "err", err, "tx", etx.Hash()) // codecov:ignore + return nil, err // codecov:ignore } v, r, s := etx.RawSignatureValues() res := export.RPCTransaction{ diff --git a/giga/deps/tasks/scheduler.go b/giga/deps/tasks/scheduler.go index b19f69f58b..fc1e925a60 100644 --- a/giga/deps/tasks/scheduler.go +++ b/giga/deps/tasks/scheduler.go @@ -15,10 +15,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/occ" "github.com/sei-protocol/sei-chain/sei-cosmos/utils/tracing" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) +var logger = seilog.NewLogger("giga", "deps", "tasks") + type status string const ( @@ -335,7 +338,7 @@ func (s *scheduler) ProcessAll(ctx sdk.Context, reqs []*sdk.DeliverTxEntry) ([]t } s.metrics.maxIncarnation = s.maxIncarnation - ctx.Logger().Info("occ scheduler", "height", ctx.BlockHeight(), "txs", len(tasks), "latency_ms", time.Since(startTime).Milliseconds(), "retries", s.metrics.retries, "maxIncarnation", s.maxIncarnation, "iterations", iterations, "sync", s.synchronous, "workers", s.workers) + logger.Info("occ scheduler", "height", ctx.BlockHeight(), "txs", len(tasks), "latency_ms", time.Since(startTime).Milliseconds(), "retries", s.metrics.retries, "maxIncarnation", s.maxIncarnation, "iterations", iterations, "sync", s.synchronous, "workers", s.workers) return s.collectResponses(tasks), nil } diff --git a/giga/deps/testutil/keeper/epoch.go b/giga/deps/testutil/keeper/epoch.go index e3ae8c3f18..ae5c1db588 100644 --- a/giga/deps/testutil/keeper/epoch.go +++ b/giga/deps/testutil/keeper/epoch.go @@ -10,7 +10,6 @@ import ( storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" typesparams "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/x/epoch/keeper" "github.com/sei-protocol/sei-chain/x/epoch/types" @@ -48,7 +47,7 @@ func EpochKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { paramsSubspace, ) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false) // Initialize params k.SetParams(ctx, types.DefaultParams()) diff --git a/giga/deps/testutil/network/network.go b/giga/deps/testutil/network/network.go index d382318f98..b9c30bae92 100644 --- a/giga/deps/testutil/network/network.go +++ b/giga/deps/testutil/network/network.go @@ -69,7 +69,7 @@ func DefaultConfig() network.Config { AccountRetriever: authtypes.AccountRetriever{}, AppConstructor: func(val network.Validator) servertypes.Application { return app.New( - val.Ctx.Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, false, + tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, false, nil, encoding, wasm.EnableAllProposals, diff --git a/giga/deps/xbank/keeper/deferred_cache.go b/giga/deps/xbank/keeper/deferred_cache.go index 3d66e910d2..edc0fbd9e2 100644 --- a/giga/deps/xbank/keeper/deferred_cache.go +++ b/giga/deps/xbank/keeper/deferred_cache.go @@ -103,7 +103,7 @@ func (d *DeferredCache) IterateDeferredBalances(ctx sdk.Context, cb func(moduleA d.cdc.MustUnmarshal(iterator.Value(), &balance) moduleAddr, err := types.AddressFromDeferredCacheStore(iterator.Key()) if err != nil { - ctx.Logger().With("key", iterator.Key(), "err", err).Error("failed to get address from deferred cache store") + logger.Error("failed to get address from deferred cache store", "key", iterator.Key(), "err", err) panic(err) } diff --git a/giga/deps/xbank/keeper/keeper.go b/giga/deps/xbank/keeper/keeper.go index b6b1ed1297..54cff2ef59 100644 --- a/giga/deps/xbank/keeper/keeper.go +++ b/giga/deps/xbank/keeper/keeper.go @@ -13,9 +13,14 @@ import ( vestexported "github.com/sei-protocol/sei-chain/sei-cosmos/x/auth/vesting/exported" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" ) -var _ Keeper = (*BaseKeeper)(nil) +var ( + logger = seilog.NewLogger("giga", "deps", "xbank", "keeper") + + _ Keeper = (*BaseKeeper)(nil) +) // Keeper defines a module interface that facilitates the transfer of coins // between accounts. @@ -319,7 +324,7 @@ func (k BaseKeeper) SendCoinsFromModuleToModule( return nil } - k.Logger(ctx).Debug("Sending coins from module to module", "sender", senderModule, "sender_address", senderAddr.String(), "recipient", recipientModule, "recipient_address", recipientAcc.GetAddress().String(), "amount", amt.String()) + logger.Debug("Sending coins from module to module", "sender", senderModule, "sender_address", senderAddr, "recipient", recipientModule, "recipient_address", recipientAcc.GetAddress(), "amount", amt) return k.SendCoins(ctx, senderAddr, recipientAcc.GetAddress(), amt) } @@ -403,12 +408,12 @@ func (k BaseKeeper) WriteDeferredBalances(ctx sdk.Context) []abci.Event { amount, ok := moduleAddrBalanceMap[moduleBech32Addr] if !ok { err := fmt.Errorf("failed to get module balance for writing deferred balances for address=%s", moduleBech32Addr) - ctx.Logger().Error(err.Error()) + logger.Error(err.Error()) panic(err) } err := k.AddCoins(ctx, sdk.MustAccAddressFromBech32(moduleBech32Addr), amount, true) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to add coin=%s to module address=%s, error is: %s", amount, moduleBech32Addr, err)) + logger.Error("Failed to add coin to module address", "coin", amount, "address", moduleBech32Addr, "err", err) panic(err) } } @@ -467,7 +472,7 @@ func (k BaseKeeper) UndelegateCoinsFromModuleToAccount( func (k BaseKeeper) createCoins(ctx sdk.Context, moduleName string, amounts sdk.Coins, addFn AddFn) error { err := k.mintCoinsRestrictionFn(ctx, amounts) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Module %q attempted to mint coins %s it doesn't have permission for, error %v", moduleName, amounts, err)) + logger.Error("Module attempted to mint coins it doesn't have permission for", "module", moduleName, "coins", amounts, "err", err) return err } acc := k.ak.GetModuleAccount(ctx, moduleName) @@ -489,8 +494,7 @@ func (k BaseKeeper) createCoins(ctx sdk.Context, moduleName string, amounts sdk. k.SetSupply(ctx, supply) } - logger := k.Logger(ctx) - logger.Info("minted coins from module account", "amount", amounts.String(), "from", moduleName) + logger.Info("minted coins from module account", "amount", amounts, "from", moduleName) // emit mint event ctx.EventManager().EmitEvent( @@ -539,8 +543,7 @@ func (k BaseKeeper) destroyCoins(ctx sdk.Context, moduleName string, amounts sdk k.SetSupply(ctx, supply) } - logger := k.Logger(ctx) - logger.Info("burned tokens from module account", "amount", amounts.String(), "from", moduleName) + logger.Info("burned tokens from module account", "amount", amounts, "from", moduleName) // emit burn event ctx.EventManager().EmitEvent( diff --git a/giga/deps/xbank/keeper/view.go b/giga/deps/xbank/keeper/view.go index 14f13f2117..ad786683ee 100644 --- a/giga/deps/xbank/keeper/view.go +++ b/giga/deps/xbank/keeper/view.go @@ -1,8 +1,6 @@ package keeper import ( - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/giga/deps/xbank/types" "github.com/sei-protocol/sei-chain/sei-cosmos/codec" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" @@ -44,11 +42,6 @@ func NewBaseViewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak types.Ac } } -// Logger returns a module-specific logger. -func (k BaseViewKeeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // GetKVStore returns the appropriate KVStore based on the UseRegularStore flag. // When UseRegularStore is true (for debugging/testing), returns regular KVStore. // Otherwise returns GigaKVStore. diff --git a/giga/deps/xevm/keeper/deferred.go b/giga/deps/xevm/keeper/deferred.go index 25ff791d18..6f0b5f2d08 100644 --- a/giga/deps/xevm/keeper/deferred.go +++ b/giga/deps/xevm/keeper/deferred.go @@ -2,15 +2,17 @@ package keeper import ( "encoding/binary" - "fmt" "github.com/ethereum/go-ethereum/common" ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/sei-protocol/sei-chain/giga/deps/xevm/types" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("giga", "deps", "xevm", "keeper") + func (k *Keeper) GetAllEVMTxDeferredInfo(ctx sdk.Context) (res []*types.DeferredInfo) { store := prefix.NewStore(ctx.TransientStore(k.transientStoreKey), types.DeferredInfoPrefix) for txIdx, msg := range k.msgs { @@ -29,7 +31,7 @@ func (k *Keeper) GetAllEVMTxDeferredInfo(ctx sdk.Context) (res []*types.Deferred panic("etx is nil for EVM DeferredInfo msg.AsTransaction(). This should never happen.") } if txRes.Code == 0 { - ctx.Logger().Error(fmt.Sprintf("transaction %s has code 0 but no deferred info", etx.Hash().Hex())) + logger.Error("transaction has code 0 but no deferred info", "tx", etx.Hash()) } res = append(res, &types.DeferredInfo{ TxIndex: uint32(txIdx), //nolint:gosec @@ -76,7 +78,7 @@ func (k *Keeper) GetEVMTxDeferredInfo(ctx sdk.Context) (*types.DeferredInfo, boo return nil, false } if err := val.Unmarshal(bz); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to unmarshal EVM deferred info: %s", err)) + logger.Error("failed to unmarshal EVM deferred info", "err", err) return nil, false } return val, true diff --git a/giga/deps/xevm/keeper/keeper.go b/giga/deps/xevm/keeper/keeper.go index f37df72ed4..c4e2b69f93 100644 --- a/giga/deps/xevm/keeper/keeper.go +++ b/giga/deps/xevm/keeper/keeper.go @@ -302,7 +302,7 @@ func (k *Keeper) GetVMBlockContext(ctx sdk.Context, gp core.GasPool) (*vm.BlockC func (k *Keeper) GetHashFn(ctx sdk.Context) vm.GetHashFunc { return func(height uint64) common.Hash { if height > math.MaxInt64 { - ctx.Logger().Error("Sei block height is bounded by int64 range") + logger.Error("Sei block height is bounded by int64 range") return common.Hash{} } h := int64(height) diff --git a/giga/deps/xevm/keeper/receipt.go b/giga/deps/xevm/keeper/receipt.go index c362f4cece..0eb418b79a 100644 --- a/giga/deps/xevm/keeper/receipt.go +++ b/giga/deps/xevm/keeper/receipt.go @@ -184,7 +184,7 @@ func (k *Keeper) WriteReceipt( if perr := stateDB.GetPrecompileError(); perr != nil { if receipt.Status > 0 { - ctx.Logger().Error(fmt.Sprintf("Transaction %s succeeded in execution but has precompile error %s", receipt.TxHashHex, perr.Error())) + logger.Error("Transaction succeeded in execution but has precompile error", "tx", receipt.TxHashHex, "err", perr) } else { // append precompile error to VM error receipt.VmError = fmt.Sprintf("%s|%s", receipt.VmError, perr.Error()) diff --git a/giga/deps/xevm/state/mock_balances.go b/giga/deps/xevm/state/mock_balances.go index 24e75165a7..5fe2bfef28 100644 --- a/giga/deps/xevm/state/mock_balances.go +++ b/giga/deps/xevm/state/mock_balances.go @@ -16,8 +16,6 @@ package state import ( "math/big" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/ethereum/go-ethereum/common" "github.com/sei-protocol/sei-chain/giga/deps/xevm/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" @@ -64,7 +62,7 @@ func (s *DBImpl) topOffAccount(seiAddr sdk.AccAddress, amt *big.Int) { // Mint and send (use NopLogger to suppress log spam) usei, wei := SplitUseiWeiAmount(amt) coinsAmt := sdk.NewCoins(sdk.NewCoin(s.k.GetBaseDenom(s.ctx), usei.Add(sdk.OneInt()))) - ctx := s.ctx.WithLogger(log.NewNopLogger()) + ctx := s.ctx if err := s.k.BankKeeper().MintCoins(ctx, types.ModuleName, coinsAmt); err != nil { return } diff --git a/giga/deps/xevm/state/statedb.go b/giga/deps/xevm/state/statedb.go index ec2ccca4b1..9d0240c39f 100644 --- a/giga/deps/xevm/state/statedb.go +++ b/giga/deps/xevm/state/statedb.go @@ -10,8 +10,11 @@ import ( ethutils "github.com/ethereum/go-ethereum/trie/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/utils" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("giga", "deps", "xevm", "state") + // Initialized for each transaction individually type DBImpl struct { ctx sdk.Context @@ -173,7 +176,7 @@ func (s *DBImpl) Copy() vm.StateDB { } func (s *DBImpl) Finalise(bool) { - s.ctx.Logger().Info("Finalise should only be called during simulation and will no-op") + logger.Info("Finalise should only be called during simulation and will no-op") } func (s *DBImpl) Commit(uint64, bool, bool) (common.Hash, error) { diff --git a/precompiles/bank/bank.go b/precompiles/bank/bank.go index 319b9e5f29..ff79766c0e 100644 --- a/precompiles/bank/bank.go +++ b/precompiles/bank/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v552/bank.go b/precompiles/bank/legacy/v552/bank.go index 626dfa9d48..bf34075c74 100644 --- a/precompiles/bank/legacy/v552/bank.go +++ b/precompiles/bank/legacy/v552/bank.go @@ -14,7 +14,6 @@ import ( pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v552" putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/x/evm/state" ) @@ -389,7 +388,3 @@ func (Precompile) IsTransaction(method string) bool { return false } } - -func (p Precompile) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} diff --git a/precompiles/bank/legacy/v555/bank.go b/precompiles/bank/legacy/v555/bank.go index 277a63445b..d537f6a76d 100644 --- a/precompiles/bank/legacy/v555/bank.go +++ b/precompiles/bank/legacy/v555/bank.go @@ -14,7 +14,6 @@ import ( pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v555" putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/x/evm/state" ) @@ -389,7 +388,3 @@ func (Precompile) IsTransaction(method string) bool { return false } } - -func (p Precompile) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} diff --git a/precompiles/bank/legacy/v562/bank.go b/precompiles/bank/legacy/v562/bank.go index 9aec7788c3..209665c971 100644 --- a/precompiles/bank/legacy/v562/bank.go +++ b/precompiles/bank/legacy/v562/bank.go @@ -14,7 +14,6 @@ import ( pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v562" putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -361,7 +360,3 @@ func (PrecompileExecutor) IsTransaction(method string) bool { return false } } - -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} diff --git a/precompiles/bank/legacy/v580/bank.go b/precompiles/bank/legacy/v580/bank.go index 2a424a1d72..9f5e6b0c11 100644 --- a/precompiles/bank/legacy/v580/bank.go +++ b/precompiles/bank/legacy/v580/bank.go @@ -13,7 +13,6 @@ import ( pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v580" putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -347,7 +346,3 @@ func (PrecompileExecutor) IsTransaction(method string) bool { return false } } - -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} diff --git a/precompiles/bank/legacy/v600/bank.go b/precompiles/bank/legacy/v600/bank.go index a50b69678b..d8ccd1ac40 100644 --- a/precompiles/bank/legacy/v600/bank.go +++ b/precompiles/bank/legacy/v600/bank.go @@ -13,7 +13,6 @@ import ( pcommon "github.com/sei-protocol/sei-chain/precompiles/common/legacy/v600" putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -347,7 +346,3 @@ func (PrecompileExecutor) IsTransaction(method string) bool { return false } } - -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} diff --git a/precompiles/bank/legacy/v601/bank.go b/precompiles/bank/legacy/v601/bank.go index a5df03d171..5081639c80 100644 --- a/precompiles/bank/legacy/v601/bank.go +++ b/precompiles/bank/legacy/v601/bank.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" ) @@ -375,10 +374,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v603/bank.go b/precompiles/bank/legacy/v603/bank.go index 25ab3342f5..4bde3805c2 100644 --- a/precompiles/bank/legacy/v603/bank.go +++ b/precompiles/bank/legacy/v603/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -381,10 +380,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v605/bank.go b/precompiles/bank/legacy/v605/bank.go index 7d5d62aed2..c32b2fd715 100644 --- a/precompiles/bank/legacy/v605/bank.go +++ b/precompiles/bank/legacy/v605/bank.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v606/bank.go b/precompiles/bank/legacy/v606/bank.go index c79b26c23f..d193f6b350 100644 --- a/precompiles/bank/legacy/v606/bank.go +++ b/precompiles/bank/legacy/v606/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v610/bank.go b/precompiles/bank/legacy/v610/bank.go index 3a1bce59d4..ce67ee5148 100644 --- a/precompiles/bank/legacy/v610/bank.go +++ b/precompiles/bank/legacy/v610/bank.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v614/bank.go b/precompiles/bank/legacy/v614/bank.go index 4f285eb986..dada3de40e 100644 --- a/precompiles/bank/legacy/v614/bank.go +++ b/precompiles/bank/legacy/v614/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v620/bank.go b/precompiles/bank/legacy/v620/bank.go index 62be2a30ec..a12abcf004 100644 --- a/precompiles/bank/legacy/v620/bank.go +++ b/precompiles/bank/legacy/v620/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/bank/legacy/v630/bank.go b/precompiles/bank/legacy/v630/bank.go index de884090bd..082826099c 100644 --- a/precompiles/bank/legacy/v630/bank.go +++ b/precompiles/bank/legacy/v630/bank.go @@ -14,7 +14,6 @@ import ( putils "github.com/sei-protocol/sei-chain/precompiles/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/metrics" ) @@ -382,10 +381,6 @@ func (PrecompileExecutor) IsTransaction(method string) bool { } } -func (p PrecompileExecutor) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("precompile", "bank") -} - func (p PrecompileExecutor) EVMKeeper() putils.EVMKeeper { return p.evmKeeper } diff --git a/precompiles/staking/legacy/v630/staking.go b/precompiles/staking/legacy/v630/staking.go index ecf844e16a..08ae8c360a 100644 --- a/precompiles/staking/legacy/v630/staking.go +++ b/precompiles/staking/legacy/v630/staking.go @@ -17,8 +17,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/query" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("precompiles", "staking", "legacy", "v630") + const ( DelegateMethod = "delegate" RedelegateMethod = "redelegate" @@ -232,7 +235,7 @@ func (p PrecompileExecutor) delegate(ctx sdk.Context, method *abi.Method, caller // Emit EVM event if emitErr := pcommon.EmitDelegateEvent(evm, p.address, caller, validatorBech32, value); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM delegate event", "error", emitErr) + logger.Error("Failed to emit EVM delegate event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -270,7 +273,7 @@ func (p PrecompileExecutor) redelegate(ctx sdk.Context, method *abi.Method, call // Emit EVM event if emitErr := pcommon.EmitRedelegateEvent(evm, p.address, caller, srcValidatorBech32, dstValidatorBech32, amount); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM redelegate event", "error", emitErr) + logger.Error("Failed to emit EVM redelegate event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -306,7 +309,7 @@ func (p PrecompileExecutor) undelegate(ctx sdk.Context, method *abi.Method, call // Emit EVM event if emitErr := pcommon.EmitUndelegateEvent(evm, p.address, caller, validatorBech32, amount); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM undelegate event", "error", emitErr) + logger.Error("Failed to emit EVM undelegate event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -560,7 +563,7 @@ func (p PrecompileExecutor) createValidator(ctx sdk.Context, method *abi.Method, // Emit EVM event if emitErr := pcommon.EmitValidatorCreatedEvent(evm, p.address, caller, sdk.ValAddress(valAddress).String(), moniker); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM validator created event", "error", emitErr) + logger.Error("Failed to emit EVM validator created event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -634,7 +637,7 @@ func (p PrecompileExecutor) editValidator(ctx sdk.Context, method *abi.Method, c // Emit EVM event if emitErr := pcommon.EmitValidatorEditedEvent(evm, p.address, caller, sdk.ValAddress(valAddress).String(), moniker); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM validator edited event", "error", emitErr) + logger.Error("Failed to emit EVM validator edited event", "error", emitErr) } bz, err := method.Outputs.Pack(true) diff --git a/precompiles/staking/staking.go b/precompiles/staking/staking.go index b92d5d9d96..10d3168775 100644 --- a/precompiles/staking/staking.go +++ b/precompiles/staking/staking.go @@ -18,8 +18,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/query" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("precompiles", "staking") + const ( DelegateMethod = "delegate" RedelegateMethod = "redelegate" @@ -248,12 +251,12 @@ func (p PrecompileExecutor) delegate(ctx sdk.Context, method *abi.Method, caller // Emit EVM event if emitErr := pcommon.EmitDelegateEvent(evm, p.address, caller, validatorBech32, value); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM delegate event", "error", emitErr) + logger.Error("Failed to emit EVM delegate event", "error", emitErr) } if emitErr := pcommon.EmitDelegationRewardsWithdrawnEvent(evm, p.address, caller, validatorBech32, rewardsAmount.BigInt()); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit rewards withdrawn event", "error", emitErr) + logger.Error("Failed to emit rewards withdrawn event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -311,17 +314,17 @@ func (p PrecompileExecutor) redelegate(ctx sdk.Context, method *abi.Method, call // Emit EVM event if emitErr := pcommon.EmitRedelegateEvent(evm, p.address, caller, srcValidatorBech32, dstValidatorBech32, amount); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM redelegate event", "error", emitErr) + logger.Error("Failed to emit EVM redelegate event", "error", emitErr) } if emitErr := pcommon.EmitDelegationRewardsWithdrawnEvent(evm, p.address, caller, srcValidatorBech32, srcRewardsWithdrawn.Amount.BigInt()); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit rewards withdrawn event", "error", emitErr) + logger.Error("Failed to emit rewards withdrawn event", "error", emitErr) } if emitErr := pcommon.EmitDelegationRewardsWithdrawnEvent(evm, p.address, caller, dstValidatorBech32, dstRewardAmount); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit rewards withdrawn event", "error", emitErr) + logger.Error("Failed to emit rewards withdrawn event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -361,12 +364,12 @@ func (p PrecompileExecutor) undelegate(ctx sdk.Context, method *abi.Method, call // Emit EVM event if emitErr := pcommon.EmitUndelegateEvent(evm, p.address, caller, validatorBech32, amount); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM undelegate event", "error", emitErr) + logger.Error("Failed to emit EVM undelegate event", "error", emitErr) } if emitErr := pcommon.EmitDelegationRewardsWithdrawnEvent(evm, p.address, caller, validatorBech32, rewardsWithdrawn.Amount.BigInt()); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit rewards withdrawn event", "error", emitErr) + logger.Error("Failed to emit rewards withdrawn event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -620,7 +623,7 @@ func (p PrecompileExecutor) createValidator(ctx sdk.Context, method *abi.Method, // Emit EVM event if emitErr := pcommon.EmitValidatorCreatedEvent(evm, p.address, caller, sdk.ValAddress(valAddress).String(), moniker); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM validator created event", "error", emitErr) + logger.Error("Failed to emit EVM validator created event", "error", emitErr) } bz, err := method.Outputs.Pack(true) @@ -694,7 +697,7 @@ func (p PrecompileExecutor) editValidator(ctx sdk.Context, method *abi.Method, c // Emit EVM event if emitErr := pcommon.EmitValidatorEditedEvent(evm, p.address, caller, sdk.ValAddress(valAddress).String(), moniker); emitErr != nil { // Log error but don't fail the transaction - ctx.Logger().Error("Failed to emit EVM validator edited event", "error", emitErr) + logger.Error("Failed to emit EVM validator edited event", "error", emitErr) } bz, err := method.Outputs.Pack(true) diff --git a/sei-cosmos/baseapp/abci.go b/sei-cosmos/baseapp/abci.go index 4ca28a1510..e631554be5 100644 --- a/sei-cosmos/baseapp/abci.go +++ b/sei-cosmos/baseapp/abci.go @@ -180,7 +180,7 @@ func (app *BaseApp) DeliverTxBatch(ctx sdk.Context, req sdk.DeliverTxBatchReques scheduler := tasks.NewScheduler(app.concurrencyWorkers, app.TracingInfo, app.DeliverTx) txRes, err := scheduler.ProcessAll(ctx, req.TxEntries) if err != nil { - ctx.Logger().Error("error while processing scheduler", "err", err) + logger.Error("error while processing scheduler", "err", err) panic(err) } for _, tx := range txRes { @@ -336,7 +336,7 @@ func (app *BaseApp) Commit(ctx context.Context) (res *abci.ResponseCommit, err e func (app *BaseApp) SnapshotIfApplicable(height uint64) { if app.snapshotInterval > 0 && height%app.snapshotInterval == 0 { if height > uint64(math.MaxInt64) { - app.logger.Error("snapshot height exceeds max int64", "height", height) + logger.Error("snapshot height exceeds max int64", "height", height) return } go app.Snapshot(int64(height)) //nolint:gosec // bounds checked above @@ -346,7 +346,7 @@ func (app *BaseApp) SnapshotIfApplicable(height uint64) { // halt attempts to gracefully shutdown the node via SIGINT and SIGTERM falling // back on os.Exit if both fail. func (app *BaseApp) halt() { - app.logger.Info("halting node per configuration", "height", app.haltHeight, "time", app.haltTime) + logger.Info("halting node per configuration", "height", app.haltHeight, "time", app.haltTime) p, err := os.FindProcess(os.Getpid()) if err == nil { @@ -361,42 +361,42 @@ func (app *BaseApp) halt() { // Resort to exiting immediately if the process could not be found or killed // via SIGINT/SIGTERM signals. - app.logger.Info("failed to send SIGINT/SIGTERM; exiting...") + logger.Info("failed to send SIGINT/SIGTERM; exiting...") os.Exit(0) } // Snapshot takes a snapshot of the current state and prunes any old snapshottypes. func (app *BaseApp) Snapshot(height int64) { if app.snapshotManager == nil { - app.logger.Info("snapshot manager not configured") + logger.Info("snapshot manager not configured") return } if height < 0 { - app.logger.Error("cannot create snapshot for negative height", "height", height) + logger.Error("cannot create snapshot for negative height", "height", height) return } - app.logger.Info("creating state snapshot", "height", height) + logger.Info("creating state snapshot", "height", height) snapshot, err := app.snapshotManager.Create(uint64(height)) //nolint:gosec // bounds checked above if err != nil { - app.logger.Error("failed to create state snapshot", "height", height, "err", err) + logger.Error("failed to create state snapshot", "height", height, "err", err) return } - app.logger.Info("completed state snapshot", "height", height, "format", snapshot.Format) + logger.Info("completed state snapshot", "height", height, "format", snapshot.Format) if app.snapshotKeepRecent > 0 { - app.logger.Debug("pruning state snapshots") + logger.Debug("pruning state snapshots") pruned, err := app.snapshotManager.Prune(app.snapshotKeepRecent) if err != nil { - app.logger.Error("Failed to prune state snapshots", "err", err) + logger.Error("Failed to prune state snapshots", "err", err) return } - app.logger.Debug("pruned state snapshots", "pruned", pruned) + logger.Debug("pruned state snapshots", "pruned", pruned) } } @@ -462,14 +462,14 @@ func (app *BaseApp) ListSnapshots(context context.Context, req *abci.RequestList snapshots, err := app.snapshotManager.List() if err != nil { - app.logger.Error("failed to list snapshots", "err", err) + logger.Error("failed to list snapshots", "err", err) return resp, nil } for _, snapshot := range snapshots { abciSnapshot, err := snapshot.ToABCI() if err != nil { - app.logger.Error("failed to list snapshots", "err", err) + logger.Error("failed to list snapshots", "err", err) return resp, nil } resp.Snapshots = append(resp.Snapshots, &abciSnapshot) @@ -485,7 +485,7 @@ func (app *BaseApp) LoadSnapshotChunk(context context.Context, req *abci.Request } chunk, err := app.snapshotManager.LoadChunk(req.Height, req.Format, req.Chunk) if err != nil { - app.logger.Error( + logger.Error( "failed to load snapshot chunk", "height", req.Height, "format", req.Format, @@ -500,18 +500,18 @@ func (app *BaseApp) LoadSnapshotChunk(context context.Context, req *abci.Request // OfferSnapshot implements the ABCI interface. It delegates to app.snapshotManager if set. func (app *BaseApp) OfferSnapshot(context context.Context, req *abci.RequestOfferSnapshot) (*abci.ResponseOfferSnapshot, error) { if app.snapshotManager == nil { - app.logger.Error("snapshot manager not configured") + logger.Error("snapshot manager not configured") return &abci.ResponseOfferSnapshot{Result: abci.ResponseOfferSnapshot_ABORT}, nil } if req.Snapshot == nil { - app.logger.Error("received nil snapshot") + logger.Error("received nil snapshot") return &abci.ResponseOfferSnapshot{Result: abci.ResponseOfferSnapshot_REJECT}, nil } snapshot, err := snapshottypes.SnapshotFromABCI(req.Snapshot) if err != nil { - app.logger.Error("failed to decode snapshot metadata", "err", err) + logger.Error("failed to decode snapshot metadata", "err", err) return &abci.ResponseOfferSnapshot{Result: abci.ResponseOfferSnapshot_REJECT}, nil } @@ -524,7 +524,7 @@ func (app *BaseApp) OfferSnapshot(context context.Context, req *abci.RequestOffe return &abci.ResponseOfferSnapshot{Result: abci.ResponseOfferSnapshot_REJECT_FORMAT}, nil case errors.Is(err, snapshottypes.ErrInvalidMetadata): - app.logger.Error( + logger.Error( "rejecting invalid snapshot", "height", req.Snapshot.Height, "format", req.Snapshot.Format, @@ -533,7 +533,7 @@ func (app *BaseApp) OfferSnapshot(context context.Context, req *abci.RequestOffe return &abci.ResponseOfferSnapshot{Result: abci.ResponseOfferSnapshot_REJECT}, nil default: - app.logger.Error( + logger.Error( "failed to restore snapshot", "height", req.Snapshot.Height, "format", req.Snapshot.Format, @@ -549,7 +549,7 @@ func (app *BaseApp) OfferSnapshot(context context.Context, req *abci.RequestOffe // ApplySnapshotChunk implements the ABCI interface. It delegates to app.snapshotManager if set. func (app *BaseApp) ApplySnapshotChunk(context context.Context, req *abci.RequestApplySnapshotChunk) (*abci.ResponseApplySnapshotChunk, error) { if app.snapshotManager == nil { - app.logger.Error("snapshot manager not configured") + logger.Error("snapshot manager not configured") return &abci.ResponseApplySnapshotChunk{Result: abci.ResponseApplySnapshotChunk_ABORT}, nil } @@ -564,7 +564,7 @@ func (app *BaseApp) ApplySnapshotChunk(context context.Context, req *abci.Reques return &abci.ResponseApplySnapshotChunk{Result: abci.ResponseApplySnapshotChunk_ACCEPT}, nil case errors.Is(err, snapshottypes.ErrChunkHashMismatch): - app.logger.Error( + logger.Error( "chunk checksum mismatch; rejecting sender and requesting refetch", "chunk", req.Index, "sender", req.Sender, @@ -577,7 +577,7 @@ func (app *BaseApp) ApplySnapshotChunk(context context.Context, req *abci.Reques }, nil default: - app.logger.Error("failed to restore snapshot", "err", err) + logger.Error("failed to restore snapshot", "err", err) return &abci.ResponseApplySnapshotChunk{Result: abci.ResponseApplySnapshotChunk_ABORT}, nil } } @@ -677,7 +677,7 @@ func (app *BaseApp) CreateQueryContext(height int64, prove bool) (sdk.Context, e checkStateCtx := app.checkState.Context() // branch the commit-multistore for safety ctx := sdk.NewContext( - cacheMS, checkStateCtx.BlockHeader(), true, app.logger, + cacheMS, checkStateCtx.BlockHeader(), true, ).WithMinGasPrices(app.minGasPrices).WithBlockHeight(height) return ctx, nil @@ -987,7 +987,7 @@ func (app *BaseApp) PrepareProposal(ctx context.Context, req *abci.RequestPrepar defer func() { if err := recover(); err != nil { - app.logger.Error( + logger.Error( "panic recovered in PrepareProposal", "height", req.Height, "time", req.Time, @@ -1060,7 +1060,7 @@ func (app *BaseApp) ProcessProposal(ctx context.Context, req *abci.RequestProces defer func() { if err := recover(); err != nil { - app.logger.Error( + logger.Error( "panic recovered in ProcessProposal", "height", req.Height, "time", req.Time, @@ -1162,7 +1162,7 @@ func (app *BaseApp) GetTxPriorityHint(_ context.Context, req *abci.RequestGetTxP // vectors where a malicious actor crafts a transaction that panics the // prioritizer. Since the prioritizer is used as a hint only, it's safe to fall // back to zero priority in this case and log the panic for monitoring purposes. - app.logger.Error("tx prioritizer base app panicked. Falling back on no priority", "error", r) + logger.Error("tx prioritizer base app panicked. Falling back on no priority", "error", r) if _err == nil { _resp = &abci.ResponseGetTxPriorityHint{Priority: 0} } diff --git a/sei-cosmos/baseapp/abci_test.go b/sei-cosmos/baseapp/abci_test.go index 3f4357e8d2..797c4d644f 100644 --- a/sei-cosmos/baseapp/abci_test.go +++ b/sei-cosmos/baseapp/abci_test.go @@ -16,7 +16,6 @@ import ( ) func TestGetBlockRentionHeight(t *testing.T) { - logger := defaultLogger() db := dbm.NewMemDB() name := t.Name() @@ -27,20 +26,20 @@ func TestGetBlockRentionHeight(t *testing.T) { expected int64 }{ "defaults": { - bapp: NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}), + bapp: NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}), maxAgeBlocks: 0, commitHeight: 499000, expected: 0, }, "pruning unbonding time only": { - bapp: NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}, SetMinRetainBlocks(1)), + bapp: NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}, SetMinRetainBlocks(1)), maxAgeBlocks: 362880, commitHeight: 499000, expected: 136120, }, "pruning iavl snapshot only": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetPruning(sdk.PruningOptions{KeepEvery: 10000}), SetMinRetainBlocks(1), ), @@ -50,7 +49,7 @@ func TestGetBlockRentionHeight(t *testing.T) { }, "pruning state sync snapshot only": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetSnapshotInterval(50000), SetSnapshotKeepRecent(3), SetMinRetainBlocks(1), @@ -61,7 +60,7 @@ func TestGetBlockRentionHeight(t *testing.T) { }, "pruning min retention only": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetMinRetainBlocks(400000), ), maxAgeBlocks: 0, @@ -70,7 +69,7 @@ func TestGetBlockRentionHeight(t *testing.T) { }, "pruning all conditions": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetPruning(sdk.PruningOptions{KeepEvery: 10000}), SetMinRetainBlocks(400000), SetSnapshotInterval(50000), SetSnapshotKeepRecent(3), @@ -81,7 +80,7 @@ func TestGetBlockRentionHeight(t *testing.T) { }, "no pruning due to no persisted state": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetPruning(sdk.PruningOptions{KeepEvery: 10000}), SetMinRetainBlocks(400000), SetSnapshotInterval(50000), SetSnapshotKeepRecent(3), @@ -92,7 +91,7 @@ func TestGetBlockRentionHeight(t *testing.T) { }, "disable pruning": { bapp: NewBaseApp( - name, logger, db, nil, nil, &testutil.TestAppOpts{}, + name, db, nil, nil, &testutil.TestAppOpts{}, SetPruning(sdk.PruningOptions{KeepEvery: 10000}), SetMinRetainBlocks(0), SetSnapshotInterval(50000), SetSnapshotKeepRecent(3), @@ -130,10 +129,9 @@ func TestGetBlockRentionHeight(t *testing.T) { func TestBaseAppCreateQueryContext(t *testing.T) { t.Parallel() - logger := defaultLogger() db := dbm.NewMemDB() name := t.Name() - app := NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}) + app := NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}) app.FinalizeBlock(context.Background(), &abci.RequestFinalizeBlock{Height: 1}) app.SetDeliverStateToCommit() @@ -204,10 +202,10 @@ func (ps *paramStore) Get(_ sdk.Context, key []byte, ptr interface{}) { } } func TestHandleQueryStore_NonQueryableMultistore(t *testing.T) { - logger := defaultLogger() + db := dbm.NewMemDB() name := t.Name() - app := NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}) + app := NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}) // Mock a non-queryable cms mockCMS := &mockNonQueryableMultiStore{} diff --git a/sei-cosmos/baseapp/baseapp.go b/sei-cosmos/baseapp/baseapp.go index ae6829d676..7b163f6688 100644 --- a/sei-cosmos/baseapp/baseapp.go +++ b/sei-cosmos/baseapp/baseapp.go @@ -22,9 +22,9 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/x/auth/legacy/legacytx" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" sdbm "github.com/sei-protocol/sei-tm-db/backends" + "github.com/sei-protocol/seilog" "github.com/spf13/cast" leveldbutils "github.com/syndtr/goleveldb/leveldb/util" dbm "github.com/tendermint/tm-db" @@ -61,6 +61,8 @@ const ( ) var ( + logger = seilog.NewLogger("cosmos", "baseapp") + _ abci.Application = (*BaseApp)(nil) ) @@ -80,7 +82,6 @@ type ( // BaseApp reflects the ABCI application implementation. type BaseApp struct { // initialized on creation - logger log.Logger name string // application name from abci.Info interfaceRegistry types.InterfaceRegistry txDecoder sdk.TxDecoder // unmarshal []byte into sdk.Tx @@ -222,7 +223,7 @@ type snapshotData struct { // // NOTE: The db is used to store the version number for now. func NewBaseApp( - name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, tmConfig *tmcfg.Config, appOpts servertypes.AppOptions, options ...func(*BaseApp), + name string, db dbm.DB, txDecoder sdk.TxDecoder, tmConfig *tmcfg.Config, appOpts servertypes.AppOptions, options ...func(*BaseApp), ) *BaseApp { cms := store.NewCommitMultiStore(db) archivalVersion := cast.ToInt64(appOpts.Get(FlagArchivalVersion)) @@ -253,8 +254,7 @@ func NewBaseApp( tr = tp.Tracer("component-main") } app := &BaseApp{ - logger: logger, - name: name, + name: name, appStore: appStore{ db: db, cms: cms, @@ -318,7 +318,7 @@ func (app *BaseApp) ConcurrencyWorkers() int { return app.concurrencyWorkers } -// OccEnabled returns the whether OCC is enabled for the BaseApp. +// OccEnabled returns whether OCC is enabled for the BaseApp. func (app *BaseApp) OccEnabled() bool { return app.occEnabled } @@ -328,11 +328,6 @@ func (app *BaseApp) Version() string { return app.version } -// Logger returns the logger of the BaseApp. -func (app *BaseApp) Logger() log.Logger { - return app.logger -} - // Trace returns the boolean value for logging error stack traces. func (app *BaseApp) Trace() bool { return app.trace @@ -541,7 +536,7 @@ func (app *BaseApp) IsSealed() bool { return app.sealed } // on Commit. func (app *BaseApp) setCheckState(header tmproto.Header) { ms := app.cms.CacheMultiStore() - ctx := sdk.NewContext(ms, header, true, app.logger).WithMinGasPrices(app.minGasPrices) + ctx := sdk.NewContext(ms, header, true).WithMinGasPrices(app.minGasPrices) app.checkTxStateLock.Lock() defer app.checkTxStateLock.Unlock() if app.checkState == nil { @@ -562,7 +557,7 @@ func (app *BaseApp) setCheckState(header tmproto.Header) { // Commit. func (app *BaseApp) setDeliverState(header tmproto.Header) { ms := app.cms.CacheMultiStore() - ctx := sdk.NewContext(ms, header, false, app.logger) + ctx := sdk.NewContext(ms, header, false) if app.deliverState == nil { app.deliverState = &state{ ms: ms, @@ -577,7 +572,7 @@ func (app *BaseApp) setDeliverState(header tmproto.Header) { func (app *BaseApp) setPrepareProposalState(header tmproto.Header) { ms := app.cms.CacheMultiStore() - ctx := sdk.NewContext(ms, header, false, app.logger) + ctx := sdk.NewContext(ms, header, false) if app.prepareProposalState == nil { app.prepareProposalState = &state{ ms: ms, @@ -592,7 +587,7 @@ func (app *BaseApp) setPrepareProposalState(header tmproto.Header) { func (app *BaseApp) setProcessProposalState(header tmproto.Header) { ms := app.cms.CacheMultiStore() - ctx := sdk.NewContext(ms, header, false, app.logger) + ctx := sdk.NewContext(ms, header, false) if app.processProposalState == nil { app.processProposalState = &state{ ms: ms, @@ -1115,11 +1110,11 @@ func (app *BaseApp) startCompactionRoutine(db dbm.DB) { for { time.Sleep(time.Duration(app.compactionInterval) * time.Second) //nolint:gosec // compactionInterval is a small config value if err := goleveldb.DB().CompactRange(leveldbutils.Range{Start: nil, Limit: nil}); err != nil { - app.Logger().Error(fmt.Sprintf("error compacting DB: %s", err)) + logger.Error("Failed to compact DB", "err", err) } } } else { - app.Logger().Info("exit compaction routine because underlying DB does not support compaction") + logger.Info("Exit compaction routine because underlying DB does not support compaction") } }() } diff --git a/sei-cosmos/baseapp/baseapp_test.go b/sei-cosmos/baseapp/baseapp_test.go index be0f8bb7da..daa452fae7 100644 --- a/sei-cosmos/baseapp/baseapp_test.go +++ b/sei-cosmos/baseapp/baseapp_test.go @@ -6,7 +6,6 @@ import ( "testing" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -23,17 +22,11 @@ var ( capKey2 = sdk.NewKVStoreKey("key2") ) -func defaultLogger() log.Logger { - logger, _ := log.NewDefaultLogger("plain", "info") - return logger -} - func newBaseApp(name string, options ...func(*BaseApp)) *BaseApp { - logger := defaultLogger() db := dbm.NewMemDB() codec := codec.NewLegacyAmino() registerTestCodec(codec) - return NewBaseApp(name, logger, db, testTxDecoder(codec), nil, &testutil.TestAppOpts{}, options...) + return NewBaseApp(name, db, testTxDecoder(codec), nil, &testutil.TestAppOpts{}, options...) } func registerTestCodec(cdc *codec.LegacyAmino) { @@ -71,7 +64,6 @@ func setupBaseApp(t *testing.T, options ...func(*BaseApp)) *BaseApp { } func TestLoadVersionPruning(t *testing.T) { - logger := log.NewNopLogger() pruningOptions := store.PruningOptions{ KeepRecent: 2, KeepEvery: 3, @@ -80,7 +72,7 @@ func TestLoadVersionPruning(t *testing.T) { pruningOpt := SetPruning(pruningOptions) db := dbm.NewMemDB() name := t.Name() - app := NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}, pruningOpt) + app := NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}, pruningOpt) // make a cap key and mount the store capKey := sdk.NewKVStoreKey("key1") @@ -119,7 +111,7 @@ func TestLoadVersionPruning(t *testing.T) { } // reload with LoadLatestVersion, check it loads last version - app = NewBaseApp(name, logger, db, nil, nil, &testutil.TestAppOpts{}, pruningOpt) + app = NewBaseApp(name, db, nil, nil, &testutil.TestAppOpts{}, pruningOpt) app.MountStores(capKey) err = app.LoadLatestVersion() diff --git a/sei-cosmos/baseapp/deliver_tx_test.go b/sei-cosmos/baseapp/deliver_tx_test.go index 55ce088227..d7d7b2ce1c 100644 --- a/sei-cosmos/baseapp/deliver_tx_test.go +++ b/sei-cosmos/baseapp/deliver_tx_test.go @@ -15,7 +15,6 @@ import ( "github.com/gogo/protobuf/jsonpb" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -238,7 +237,6 @@ func TestWithRouter(t *testing.T) { func TestBaseApp_EndBlock(t *testing.T) { db := dbm.NewMemDB() name := t.Name() - logger := defaultLogger() cp := &tmproto.ConsensusParams{ Block: &tmproto.BlockParams{ @@ -247,7 +245,7 @@ func TestBaseApp_EndBlock(t *testing.T) { } codec := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(codec), nil, &testutil.TestAppOpts{}) + app := NewBaseApp(name, db, testTxDecoder(codec), nil, &testutil.TestAppOpts{}) app.SetParamStore(¶mStore{db: dbm.NewMemDB()}) app.InitChain(context.Background(), &abci.RequestInitChain{ ConsensusParams: cp, @@ -1128,9 +1126,9 @@ func TestInitChainer(t *testing.T) { // keep the db and logger ourselves so // we can reload the same app later db := dbm.NewMemDB() - logger := defaultLogger() + cc := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) + app := NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) capKey := sdk.NewKVStoreKey("main") capKey2 := sdk.NewKVStoreKey("key2") app.MountStores(capKey, capKey2) @@ -1186,7 +1184,7 @@ func TestInitChainer(t *testing.T) { // reload app cc = codec.NewLegacyAmino() - app = NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) + app = NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) app.SetInitChainer(initChainer) app.MountStores(capKey, capKey2) err = app.LoadLatestVersion() // needed to make stores non-nil @@ -1210,9 +1208,9 @@ func TestInitChainer(t *testing.T) { func TestInitChain_WithInitialHeight(t *testing.T) { name := t.Name() db := dbm.NewMemDB() - logger := defaultLogger() + cc := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) + app := NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}) app.InitChain( context.Background(), &abci.RequestInitChain{ @@ -1562,10 +1560,10 @@ func TestDeliverTxHooks(t *testing.T) { } func TestOptionFunction(t *testing.T) { - logger := defaultLogger() + db := dbm.NewMemDB() cc := codec.NewLegacyAmino() - bap := NewBaseApp("starting name", logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, testChangeNameHelper("new name")) + bap := NewBaseApp("starting name", db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, testChangeNameHelper("new name")) require.Equal(t, bap.name, "new name", "BaseApp should have had name changed via option function") } @@ -1651,12 +1649,12 @@ func TestBaseAppOptionSeal(t *testing.T) { } func TestVersionSetterGetter(t *testing.T) { - logger := defaultLogger() + pruningOpt := SetPruning(store.PruneDefault) db := dbm.NewMemDB() name := t.Name() cc := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) + app := NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) require.Equal(t, "", app.Version()) res, _ := app.Query(context.Background(), &abci.RequestQuery{Path: "app/version"}) @@ -1672,12 +1670,12 @@ func TestVersionSetterGetter(t *testing.T) { } func TestLoadVersionInvalid(t *testing.T) { - logger := log.NewNopLogger() + pruningOpt := SetPruning(store.PruneNothing) db := dbm.NewMemDB() name := t.Name() cc := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) + app := NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) err := app.LoadLatestVersion() require.Nil(t, err) @@ -1693,7 +1691,7 @@ func TestLoadVersionInvalid(t *testing.T) { // create a new app with the stores mounted under the same cap key cc = codec.NewLegacyAmino() - app = NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) + app = NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) // require we can load the latest version err = app.LoadVersion(1) @@ -1786,12 +1784,12 @@ func TestMountStores(t *testing.T) { // Test that we can make commits and then reload old versions. // Test that LoadLatestVersion actually does. func TestLoadVersion(t *testing.T) { - logger := defaultLogger() + pruningOpt := SetPruning(store.PruneNothing) db := dbm.NewMemDB() name := t.Name() cc := codec.NewLegacyAmino() - app := NewBaseApp(name, logger, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) + app := NewBaseApp(name, db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, pruningOpt) // make a cap key and mount the store err := app.LoadLatestVersion() // needed to make stores non-nil @@ -1823,7 +1821,7 @@ func useDefaultLoader(app *BaseApp) { } func initStore(t *testing.T, db dbm.DB, storeKey string, k, v []byte) { - rs := rootmulti.NewStore(db, log.NewNopLogger()) + rs := rootmulti.NewStore(db) rs.SetPruning(store.PruneNothing) key := sdk.NewKVStoreKey(storeKey) rs.MountStoreWithDB(key, store.StoreTypeIAVL, nil) @@ -1840,7 +1838,7 @@ func initStore(t *testing.T, db dbm.DB, storeKey string, k, v []byte) { } func checkStore(t *testing.T, db dbm.DB, ver int64, storeKey string, k, v []byte) { - rs := rootmulti.NewStore(db, log.NewNopLogger()) + rs := rootmulti.NewStore(db) rs.SetPruning(store.PruneDefault) key := sdk.NewKVStoreKey(storeKey) rs.MountStoreWithDB(key, store.StoreTypeIAVL, nil) @@ -1889,7 +1887,7 @@ func TestSetLoader(t *testing.T) { opts = append(opts, tc.setLoader) } cc := codec.NewLegacyAmino() - app := NewBaseApp(t.Name(), defaultLogger(), db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, opts...) + app := NewBaseApp(t.Name(), db, testTxDecoder(cc), nil, &testutil.TestAppOpts{}, opts...) app.MountStores(sdk.NewKVStoreKey(tc.loadStoreKey)) err := app.LoadLatestVersion() require.Nil(t, err) diff --git a/sei-cosmos/baseapp/grpcrouter_test.go b/sei-cosmos/baseapp/grpcrouter_test.go index 672dbd8f4b..445022d487 100644 --- a/sei-cosmos/baseapp/grpcrouter_test.go +++ b/sei-cosmos/baseapp/grpcrouter_test.go @@ -4,18 +4,15 @@ import ( "context" "testing" - tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" - "github.com/sei-protocol/sei-chain/sei-wasmd/app" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/stretchr/testify/require" - dbm "github.com/tendermint/tm-db" - "github.com/sei-protocol/sei-chain/sei-cosmos/baseapp" "github.com/sei-protocol/sei-chain/sei-cosmos/codec/types" "github.com/sei-protocol/sei-chain/sei-cosmos/testutil" "github.com/sei-protocol/sei-chain/sei-cosmos/testutil/testdata" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" + "github.com/sei-protocol/sei-chain/sei-wasmd/app" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" ) func TestGRPCGatewayRouter(t *testing.T) { @@ -25,7 +22,7 @@ func TestGRPCGatewayRouter(t *testing.T) { testdata.RegisterQueryServer(qr, testdata.QueryImpl{}) helper := &baseapp.QueryServiceTestHelper{ GRPCQueryRouter: qr, - Ctx: sdk.NewContext(nil, tmproto.Header{}, false, nil).WithContext(context.Background()), + Ctx: sdk.NewContext(nil, tmproto.Header{}, false).WithContext(context.Background()), } client := testdata.NewQueryClient(helper) @@ -56,7 +53,7 @@ func TestRegisterQueryServiceTwice(t *testing.T) { // Setup baseapp. db := dbm.NewMemDB() encCfg := app.MakeEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTestingLogger(t), db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) + app := baseapp.NewBaseApp("test", db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterInterfaces(encCfg.InterfaceRegistry) diff --git a/sei-cosmos/baseapp/msg_service_router_test.go b/sei-cosmos/baseapp/msg_service_router_test.go index a9c17c18b6..a371be3783 100644 --- a/sei-cosmos/baseapp/msg_service_router_test.go +++ b/sei-cosmos/baseapp/msg_service_router_test.go @@ -6,7 +6,6 @@ import ( "testing" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-wasmd/app" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -25,7 +24,7 @@ func TestRegisterMsgService(t *testing.T) { // Create an encoding config that doesn't register testdata Msg services. encCfg := app.MakeEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTestingLogger(t), db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) + app := baseapp.NewBaseApp("test", db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) require.Panics(t, func() { testdata.RegisterMsgServer( @@ -48,7 +47,7 @@ func TestRegisterMsgServiceTwice(t *testing.T) { // Setup baseapp. db := dbm.NewMemDB() encCfg := app.MakeEncodingConfig() - app := baseapp.NewBaseApp("test", log.NewTestingLogger(t), db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) + app := baseapp.NewBaseApp("test", db, encCfg.TxConfig.TxDecoder(), nil, &testutil.TestAppOpts{}) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterInterfaces(encCfg.InterfaceRegistry) @@ -75,7 +74,7 @@ func TestMsgService(t *testing.T) { testdata.RegisterInterfaces(encCfg.InterfaceRegistry) db := dbm.NewMemDB() decoder := encCfg.TxConfig.TxDecoder() - app := baseapp.NewBaseApp("test", log.NewTestingLogger(t), db, decoder, nil, &testutil.TestAppOpts{}) + app := baseapp.NewBaseApp("test", db, decoder, nil, &testutil.TestAppOpts{}) app.SetInterfaceRegistry(encCfg.InterfaceRegistry) testdata.RegisterMsgServer( app.MsgServiceRouter(), diff --git a/sei-cosmos/baseapp/options.go b/sei-cosmos/baseapp/options.go index c936bd7475..611278dde1 100644 --- a/sei-cosmos/baseapp/options.go +++ b/sei-cosmos/baseapp/options.go @@ -295,7 +295,7 @@ func (app *BaseApp) SetSnapshotStore(snapshotStore *snapshots.Store) { app.snapshotManager = nil return } - app.snapshotManager = snapshots.NewManager(snapshotStore, app.cms, app.logger) + app.snapshotManager = snapshots.NewManager(snapshotStore, app.cms) } // SetSnapshotInterval sets the snapshot interval. diff --git a/sei-cosmos/baseapp/test_helpers.go b/sei-cosmos/baseapp/test_helpers.go index ebaba6b78a..e8775bac8a 100644 --- a/sei-cosmos/baseapp/test_helpers.go +++ b/sei-cosmos/baseapp/test_helpers.go @@ -39,15 +39,15 @@ func (app *BaseApp) Deliver(txEncoder sdk.TxEncoder, tx sdk.Tx) (sdk.GasInfo, *s // Context with current {check, deliver}State of the app used by tests. func (app *BaseApp) NewContext(isCheckTx bool, header tmproto.Header) sdk.Context { if isCheckTx { - return sdk.NewContext(app.checkState.ms, header, true, app.logger). + return sdk.NewContext(app.checkState.ms, header, true). WithMinGasPrices(app.minGasPrices) } - return sdk.NewContext(app.deliverState.ms, header, false, app.logger) + return sdk.NewContext(app.deliverState.ms, header, false) } func (app *BaseApp) NewUncachedContext(isCheckTx bool, header tmproto.Header) sdk.Context { - return sdk.NewContext(app.cms, header, isCheckTx, app.logger) + return sdk.NewContext(app.cms, header, isCheckTx) } func (app *BaseApp) GetContextForDeliverTx(txBytes []byte) sdk.Context { diff --git a/sei-cosmos/client/pruning/main.go b/sei-cosmos/client/pruning/main.go index a5f42204de..a196056af5 100644 --- a/sei-cosmos/client/pruning/main.go +++ b/sei-cosmos/client/pruning/main.go @@ -3,7 +3,6 @@ package pruning import ( "fmt" "math" - "os" "path/filepath" "github.com/spf13/cobra" @@ -15,7 +14,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store/rootmulti" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" ) @@ -63,8 +61,7 @@ func PruningCmd(appCreator servertypes.AppCreator) *cobra.Command { return err } - logger := log.NewTMLogger(os.Stdout) - app := appCreator(logger, db, nil, nil, vp) + app := appCreator(db, nil, nil, vp) cms := app.CommitMultiStore() rootMultiStore, ok := cms.(*rootmulti.Store) diff --git a/sei-cosmos/server/api/server.go b/sei-cosmos/server/api/server.go index ab5cf74fad..79495d1c6f 100644 --- a/sei-cosmos/server/api/server.go +++ b/sei-cosmos/server/api/server.go @@ -13,8 +13,8 @@ import ( "github.com/gorilla/handlers" "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrpcserver "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-cosmos/client" "github.com/sei-protocol/sei-chain/sei-cosmos/server/config" @@ -26,13 +26,14 @@ import ( _ "github.com/sei-protocol/sei-chain/sei-cosmos/client/docs/statik" ) +var logger = seilog.NewLogger("tendermint", "server", "api") + // Server defines the server's API interface. type Server struct { Router *mux.Router GRPCGatewayRouter *runtime.ServeMux ClientCtx client.Context - logger log.Logger metrics *telemetry.Metrics // Start() is blocking and generally called from a separate goroutine. // Close() can be called asynchronously and access shared memory @@ -56,7 +57,7 @@ func CustomGRPCHeaderMatcher(key string) (string, bool) { } } -func New(clientCtx client.Context, logger log.Logger) *Server { +func New(clientCtx client.Context) *Server { // The default JSON marshaller used by the gRPC-Gateway is unable to marshal non-nullable non-scalar fields. // Using the gogo/gateway package with the gRPC-Gateway WithMarshaler option fixes the scalar field marshalling issue. marshalerOption := &gateway.JSONPb{ @@ -69,7 +70,6 @@ func New(clientCtx client.Context, logger log.Logger) *Server { return &Server{ Router: mux.NewRouter(), ClientCtx: clientCtx, - logger: logger, GRPCGatewayRouter: runtime.NewServeMux( // Custom marshaler option is required for gogo proto runtime.WithMarshalerOption(runtime.MIMEWildcard, marshalerOption), @@ -116,12 +116,12 @@ func (s *Server) Start(cfg config.Config, apiMetrics *telemetry.Metrics) error { if cfg.API.EnableUnsafeCORS { allowAllCORS := handlers.CORS(handlers.AllowedHeaders([]string{"Content-Type"})) s.mtx.Unlock() - return tmrpcserver.Serve(context.Background(), s.listener, allowAllCORS(h), s.logger, tmCfg) + return tmrpcserver.Serve(context.Background(), s.listener, allowAllCORS(h), tmCfg) } - s.logger.Info("starting API server...") + logger.Info("starting API server...") s.mtx.Unlock() - return tmrpcserver.Serve(context.Background(), s.listener, s.Router, s.logger, tmCfg) + return tmrpcserver.Serve(context.Background(), s.listener, s.Router, tmCfg) } // Close closes the API server. diff --git a/sei-cosmos/server/export.go b/sei-cosmos/server/export.go index 51b5fd1c59..2fbf10063b 100644 --- a/sei-cosmos/server/export.go +++ b/sei-cosmos/server/export.go @@ -101,7 +101,7 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com return err } defer func() { _ = file.Close() }() - exported, err := appExporter(serverCtx.Logger, db, traceWriter, height, forZeroHeight, jailAllowedAddrs, serverCtx.Viper, file) + exported, err := appExporter(db, traceWriter, height, forZeroHeight, jailAllowedAddrs, serverCtx.Viper, file) if err != nil { return fmt.Errorf("error exporting state: %v", err) } @@ -147,7 +147,7 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com return fmt.Errorf("error writing genesis state to file: %v", err) } - exported, err := appExporter(serverCtx.Logger, db, traceWriter, height, forZeroHeight, jailAllowedAddrs, serverCtx.Viper, nil) + exported, err := appExporter(db, traceWriter, height, forZeroHeight, jailAllowedAddrs, serverCtx.Viper, nil) if err != nil { return fmt.Errorf("error exporting state: %v", err) } diff --git a/sei-cosmos/server/mock/app.go b/sei-cosmos/server/mock/app.go index 11c644fa4a..59f5457c0c 100644 --- a/sei-cosmos/server/mock/app.go +++ b/sei-cosmos/server/mock/app.go @@ -9,8 +9,8 @@ import ( "path/filepath" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" bam "github.com/sei-protocol/sei-chain/sei-cosmos/baseapp" "github.com/sei-protocol/sei-chain/sei-cosmos/codec" @@ -19,10 +19,12 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" ) +var logger = seilog.NewLogger("cosmos", "server", "mock") + // NewApp creates a simple mock kvstore app for testing. It should work // similar to a real app. Make sure rootDir is empty before running the test, // in order to guarantee consistent results -func NewApp(rootDir string, logger log.Logger) (abci.Application, error) { +func NewApp(rootDir string) (abci.Application, error) { db, err := sdk.NewLevelDB("mock", filepath.Join(rootDir, "data")) if err != nil { return nil, err @@ -32,7 +34,7 @@ func NewApp(rootDir string, logger log.Logger) (abci.Application, error) { capKeyMainStore := sdk.NewKVStoreKey("main") // Create BaseApp. - baseApp := bam.NewBaseApp("kvstore", logger, db, decodeTx, nil, &testutil.TestAppOpts{}) + baseApp := bam.NewBaseApp("kvstore", db, decodeTx, nil, &testutil.TestAppOpts{}) // Set mounts for BaseApp's MultiStore. baseApp.MountStores(capKeyMainStore) diff --git a/sei-cosmos/server/mock/helpers.go b/sei-cosmos/server/mock/helpers.go index b355b70de0..0ce8b314d5 100644 --- a/sei-cosmos/server/mock/helpers.go +++ b/sei-cosmos/server/mock/helpers.go @@ -4,21 +4,14 @@ import ( "testing" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" ) // SetupApp returns an application as well as a clean-up function // to be used to quickly setup a test case with an app func SetupApp(t *testing.T) abci.Application { - logger, err := log.NewDefaultLogger( - log.LogFormatText, - "info", - ) - require.NoError(t, err) rootDir := t.TempDir() - - app, err := NewApp(rootDir, logger) + app, err := NewApp(rootDir) require.NoError(t, err) return app } diff --git a/sei-cosmos/server/rollback.go b/sei-cosmos/server/rollback.go index 1ef8709f50..07966b93b1 100644 --- a/sei-cosmos/server/rollback.go +++ b/sei-cosmos/server/rollback.go @@ -59,7 +59,6 @@ restarting Tendermint the node will re-fetch and re-execute the transactions in } app := appCreator( - ctx.Logger, db, nil, nil, diff --git a/sei-cosmos/server/rollback_test.go b/sei-cosmos/server/rollback_test.go index ab24538ad9..d44e1904b9 100644 --- a/sei-cosmos/server/rollback_test.go +++ b/sei-cosmos/server/rollback_test.go @@ -26,7 +26,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/tmhash" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" tmstate "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/state" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" @@ -119,7 +118,7 @@ func setupTestApp(t *testing.T, height int64) (*mockApplication, string) { db, err := dbm.NewDB("test", dbm.MemDBBackend, tempDir) require.NoError(t, err) - cms := rootmulti.NewStore(db, log.NewNopLogger()) + cms := rootmulti.NewStore(db) key := storetypes.NewKVStoreKey("test") cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db) err = cms.LoadLatestVersion() @@ -411,7 +410,7 @@ func TestRollbackScenario1_BothAtSameHeight(t *testing.T) { cfg := setupTendermintStateDB(t, tempDir, initialHeight) // Create app creator - appCreator := func(log.Logger, dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { + appCreator := func(dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { return app } @@ -422,7 +421,6 @@ func TestRollbackScenario1_BothAtSameHeight(t *testing.T) { // Set up server context ctx := &Context{ Config: cfg, - Logger: log.NewNopLogger(), Viper: nil, } cmdCtx := context.WithValue(context.Background(), ServerContextKey, ctx) @@ -454,7 +452,7 @@ func TestRollbackScenario2_AppAheadOfTendermint(t *testing.T) { cfg := setupTendermintStateDB(t, tempDir, tmHeight) // Create app creator - appCreator := func(log.Logger, dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { + appCreator := func(dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { return app } @@ -465,7 +463,6 @@ func TestRollbackScenario2_AppAheadOfTendermint(t *testing.T) { // Set up server context ctx := &Context{ Config: cfg, - Logger: log.NewNopLogger(), Viper: nil, } cmdCtx := context.WithValue(context.Background(), ServerContextKey, ctx) @@ -497,7 +494,7 @@ func TestRollbackScenario3_TendermintAheadOfApp(t *testing.T) { cfg := setupTendermintStateDB(t, tempDir, tmHeight) // Create app creator - appCreator := func(log.Logger, dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { + appCreator := func(dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { return app } @@ -508,7 +505,6 @@ func TestRollbackScenario3_TendermintAheadOfApp(t *testing.T) { // Set up server context ctx := &Context{ Config: cfg, - Logger: log.NewNopLogger(), Viper: nil, } cmdCtx := context.WithValue(context.Background(), ServerContextKey, ctx) @@ -536,7 +532,7 @@ func TestRollbackErrorCases(t *testing.T) { // Setup tendermint state at height 0 cfg := setupTendermintStateDB(t, tempDir, 0) - appCreator := func(log.Logger, dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { + appCreator := func(dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { return app } @@ -545,7 +541,6 @@ func TestRollbackErrorCases(t *testing.T) { ctx := &Context{ Config: cfg, - Logger: log.NewNopLogger(), Viper: nil, } cmdCtx := context.WithValue(context.Background(), ServerContextKey, ctx) @@ -569,7 +564,7 @@ func TestRollbackWithNumBlocks(t *testing.T) { cfg := setupTendermintStateDB(t, tempDir, initialHeight) // Create app creator - appCreator := func(log.Logger, dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { + appCreator := func(dbm.DB, io.Writer, *tmconfig.Config, servertypes.AppOptions) servertypes.Application { return app } @@ -581,7 +576,6 @@ func TestRollbackWithNumBlocks(t *testing.T) { // Set up server context ctx := &Context{ Config: cfg, - Logger: log.NewNopLogger(), Viper: nil, } cmdCtx := context.WithValue(context.Background(), ServerContextKey, ctx) diff --git a/sei-cosmos/server/start.go b/sei-cosmos/server/start.go index 3cead9e78d..28ce831d00 100644 --- a/sei-cosmos/server/start.go +++ b/sei-cosmos/server/start.go @@ -144,7 +144,7 @@ is performed. Note, when enabled, gRPC will also be automatically enabled. if enableProfile, _ := cmd.Flags().GetBool(FlagProfile); enableProfile { go func() { - serverCtx.Logger.Info("Listening for profiling at http://localhost:6060/debug/pprof/") + logger.Info("Listening for profiling at http://localhost:6060/debug/pprof/") // TODO: Should this be bound to all interfaces? server := &http.Server{ Addr: "localhost:6060", @@ -153,7 +153,7 @@ is performed. Note, when enabled, gRPC will also be automatically enabled. } err := server.ListenAndServe() if err != nil { - serverCtx.Logger.Error("Error from profiling server", "error", err) + logger.Error("Error from profiling server", "error", err) } }() } @@ -179,14 +179,17 @@ is performed. Note, when enabled, gRPC will also be automatically enabled. serverCtx.Viper.Set(flags.FlagChainID, chainID) if enableTracing, _ := cmd.Flags().GetBool(tracing.FlagTracing); !enableTracing { - serverCtx.Logger.Info("--tracing not passed in, tracing is not enabled") + logger.Info("--tracing not passed in, tracing is not enabled") tracerProviderOptions = []trace.TracerProviderOption{} } - serverCtx.Logger.Info("Creating node metrics provider") + logger.Info("Creating node metrics provider") nodeMetricsProvider := node.DefaultMetricsProvider(serverCtx.Config.Instrumentation)(clientCtx.ChainID) - config, _ := config.GetConfig(serverCtx.Viper) + config, err := config.GetConfig(serverCtx.Viper) + if err != nil { + return err + } apiMetrics, err := telemetry.New(config.Telemetry) if err != nil { return fmt.Errorf("failed to initialize telemetry: %w", err) @@ -198,7 +201,7 @@ is performed. Note, when enabled, gRPC will also be automatically enabled. } } - serverCtx.Logger.Info("Starting Process") + logger.Info("Starting Process") for { err := startInProcess( serverCtx, @@ -211,7 +214,7 @@ is performed. Note, when enabled, gRPC will also be automatically enabled. if !errors.Is(err, ErrShouldRestart) { return err } - serverCtx.Logger.Info("restarting node...") + logger.Info("restarting node...") } }, } @@ -293,7 +296,7 @@ func startInProcess( } cpuProfileCleanup = func() { - ctx.Logger.Info("stopping CPU profiler", "profile", cpuProfile) + logger.Info("stopping CPU profiler", "profile", cpuProfile) pprof.StopCPUProfile() _ = f.Close() } @@ -316,11 +319,11 @@ func startInProcess( } if err := config.ValidateBasic(ctx.Config); err != nil { - ctx.Logger.Error("WARNING: The minimum-gas-prices config in app.toml is set to the empty string. " + + logger.Error("WARNING: The minimum-gas-prices config in app.toml is set to the empty string. " + "This defaults to 0 in the current version, but will error in the next version " + "(SDK v0.45). Please explicitly put the desired minimum-gas-prices in your app.toml.") } - app := appCreator(ctx.Logger, db, traceWriter, ctx.Config, ctx.Viper) + app := appCreator(db, traceWriter, ctx.Config, ctx.Viper) gRPCOnly := ctx.Viper.GetBool(flagGRPCOnly) var tmNode service.Service @@ -338,10 +341,10 @@ func startInProcess( } if gRPCOnly { - ctx.Logger.Info("starting node in gRPC only mode; Tendermint is disabled") + logger.Info("starting node in gRPC only mode; Tendermint is disabled") config.GRPC.Enable = true } else { - ctx.Logger.Info("starting node with ABCI Tendermint in-process") + logger.Info("starting node with ABCI Tendermint in-process") var gen *tmtypes.GenesisDoc if config.Genesis.StreamImport { lines := genesistypes.IngestGenesisFileLineByLine(config.Genesis.GenesisStreamFile) @@ -359,7 +362,6 @@ func startInProcess( tmNode, err = node.New( goCtx, ctx.Config, - ctx.Logger, restartEvent, app, gen, @@ -378,7 +380,7 @@ func startInProcess( // service if API or gRPC is enabled, and avoid doing so in the general // case, because it spawns a new local tendermint RPC client. if (config.API.Enable || config.GRPC.Enable) && tmNode != nil { - localClient, err := local.New(ctx.Logger, tmNode.(local.NodeService)) + localClient, err := local.New(tmNode.(local.NodeService)) if err != nil { return err } @@ -391,7 +393,7 @@ func startInProcess( var apiSrv *api.Server if config.API.Enable { clientCtx := clientCtx.WithHomeDir(home).WithChainID(clientCtx.ChainID) - apiSrv = api.New(clientCtx, ctx.Logger.With("module", "api-server")) + apiSrv = api.New(clientCtx) app.RegisterAPIRoutes(apiSrv, config.API) errCh := make(chan error) @@ -423,7 +425,7 @@ func startInProcess( if config.GRPCWeb.Enable { grpcWebSrv, err = servergrpc.StartGRPCWeb(grpcSrv, config) if err != nil { - ctx.Logger.Error("failed to start grpc-web http server: ", err) + logger.Error("failed to start grpc-web http server", "err", err) return err } } @@ -499,9 +501,9 @@ func startInProcess( } } - ctx.Logger.Info("close any other open resource...") + logger.Info("close any other open resource...") if err := app.Close(); err != nil { - ctx.Logger.Error("error closing database", "err", err) + logger.Error("error closing database", "err", err) } }() diff --git a/sei-cosmos/server/types/app.go b/sei-cosmos/server/types/app.go index d9beece423..a2c2b48fe2 100644 --- a/sei-cosmos/server/types/app.go +++ b/sei-cosmos/server/types/app.go @@ -11,7 +11,6 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/spf13/cobra" @@ -68,7 +67,7 @@ type ( // AppCreator is a function that allows us to lazily initialize an // application using various configurations. - AppCreator func(log.Logger, dbm.DB, io.Writer, *tmcfg.Config, AppOptions) Application + AppCreator func(dbm.DB, io.Writer, *tmcfg.Config, AppOptions) Application // ModuleInitFlags takes a start command and adds modules specific init flags. ModuleInitFlags func(startCmd *cobra.Command) @@ -89,5 +88,5 @@ type ( // AppExporter is a function that dumps all app state to // JSON-serializable structure and returns the current validator set. // If a file is specified, - AppExporter func(log.Logger, dbm.DB, io.Writer, int64, bool, []string, AppOptions, *os.File) (ExportedApp, error) + AppExporter func(dbm.DB, io.Writer, int64, bool, []string, AppOptions, *os.File) (ExportedApp, error) ) diff --git a/sei-cosmos/server/util.go b/sei-cosmos/server/util.go index 017e67d705..f1e716407e 100644 --- a/sei-cosmos/server/util.go +++ b/sei-cosmos/server/util.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "log/slog" "net" "os" "os/signal" @@ -18,7 +19,7 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/cmd/tendermint/commands" "github.com/sei-protocol/sei-chain/sei-tendermint/cmd/tendermint/commands/debug" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - tmlog "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" + "github.com/sei-protocol/seilog" "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/spf13/viper" @@ -40,22 +41,13 @@ const ServerContextKey = sdk.ContextKey("server.context") var ( ErrShouldRestart = errors.New("node should be restarted") - logger tmlog.Logger + logger = seilog.NewLogger("cosmos", "server") ) -func init() { - var err error - logger, err = tmlog.NewDefaultLogger(tmlog.LogFormatPlain, tmlog.LogLevelInfo) - if err != nil { - panic(fmt.Sprintf("failed to initialize logger: %v", err)) - } -} - // server context type Context struct { Viper *viper.Viper Config *tmcfg.Config - Logger tmlog.Logger } // ErrorCode contains the exit code for server exit. @@ -71,12 +63,11 @@ func NewDefaultContext() *Context { return NewContext( viper.New(), tmcfg.DefaultConfig(), - logger, ) } -func NewContext(v *viper.Viper, config *tmcfg.Config, logger tmlog.Logger) *Context { - return &Context{v, config, logger} +func NewContext(v *viper.Viper, config *tmcfg.Config) *Context { + return &Context{Viper: v, Config: config} } func bindFlags(basename string, cmd *cobra.Command, v *viper.Viper) (err error) { @@ -186,18 +177,44 @@ func InterceptConfigsPreRunHandler(cmd *cobra.Command, customAppConfigTemplate s } logLvlFormat := serverCtx.Viper.GetString(flags.FlagLogFormat) - if logLvlFormat == "" { - logLvlFormat = serverCtx.Config.LogFormat + if logLvlFormat != "" { + // For logging efficiency, seilog takes the log format at the time of + // initialization and intentionally does not provide the ability to dynamically + // alter log format at runtime. This means seilog can operate with + // zero-allocations during logging operation. + logger.Warn("log_format flag is deprecated, please use SEI_LOG_FORMAT and SEI_LOG_OUTPUT environment variables instead.") } logLvlStr := serverCtx.Viper.GetString(flags.FlagLogLevel) - if logLvlStr == "" { + + // The order of extrapolation priority for log level is: + // 1. explicit flag + // 2. env var + // 3. seid config + // + // Here, we check if flag is explicitly set first, if so override all log levels to it. + // If not, check if env var is set in which case it is already picked up by seilog; nothing to do. + // Otherwise, make sure to set the log level to what's configured in the config files. + var overrideLogLevel bool + switch { + case logLvlStr != "": + // CLI flag set; take presence. + overrideLogLevel = true + case os.Getenv("SEI_LOG_LEVEL") == "": + // No CLI flag and no env var; fall back to config logLvlStr = serverCtx.Config.LogLevel + overrideLogLevel = true + default: + // Do nothing, since flag was not set but env var was non-empty, which gets + // handled by seilog init. } - serverCtx.Logger, err = tmlog.NewDefaultLogger(logLvlFormat, logLvlStr) - if err != nil { - return fmt.Errorf("failed to initialize logger: %w", err) + if overrideLogLevel { + var lvl slog.Level + if err := lvl.UnmarshalText([]byte(logLvlStr)); err != nil { + return fmt.Errorf("failed to parse log level (%s): %w", logLvlStr, err) + } + seilog.SetDefaultLevel(lvl, true) } return SetCmdServerContext(cmd, serverCtx) @@ -328,24 +345,20 @@ func AddCommands( panic(err) } - logger, err := tmlog.NewDefaultLogger(conf.LogFormat, conf.LogLevel) - if err != nil { - panic(err) - } tendermintCmd.AddCommand( ShowNodeIDCmd(), ShowValidatorCmd(), ShowAddressCmd(), VersionCmd(), commands.MakeGenValidatorCommand(), - commands.MakeReindexEventCommand(conf, logger), - commands.MakeLightCommand(conf, logger), - commands.MakeResetCommand(conf, logger), - commands.MakeUnsafeResetAllCommand(conf, logger), + commands.MakeReindexEventCommand(conf), + commands.MakeLightCommand(conf), + commands.MakeResetCommand(conf), + commands.MakeUnsafeResetAllCommand(conf), commands.GenNodeKeyCmd, - commands.MakeInspectCommand(conf, logger), - commands.MakeKeyMigrateCommand(conf, logger), - debug.GetDebugCommand(logger), + commands.MakeInspectCommand(conf), + commands.MakeKeyMigrateCommand(conf), + debug.GetDebugCommand(), commands.NewCompletionCmd(tendermintCmd, true), ) diff --git a/sei-cosmos/snapshots/helpers_test.go b/sei-cosmos/snapshots/helpers_test.go index 69b69db1a6..2fe48ca30d 100644 --- a/sei-cosmos/snapshots/helpers_test.go +++ b/sei-cosmos/snapshots/helpers_test.go @@ -10,7 +10,6 @@ import ( "sync" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "golang.org/x/sync/errgroup" protoio "github.com/gogo/protobuf/io" @@ -155,7 +154,7 @@ func setupBusyManager(t *testing.T) *snapshots.Manager { started := make(chan struct{}) hung := newHungSnapshotter(started) - mgr := snapshots.NewManager(store, hung, log.NewNopLogger()) + mgr := snapshots.NewManager(store, hung) var eg errgroup.Group eg.Go(func() error { diff --git a/sei-cosmos/snapshots/manager.go b/sei-cosmos/snapshots/manager.go index 62186264b0..2ee10d77a0 100644 --- a/sei-cosmos/snapshots/manager.go +++ b/sei-cosmos/snapshots/manager.go @@ -12,9 +12,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "snapshots") + const ( opNone operation = "" opSnapshot operation = "snapshot" @@ -50,7 +52,6 @@ type restoreDone struct { // errors via io.Pipe.CloseWithError(). type Manager struct { store *Store - logger log.Logger multistore types.Snapshotter extensions map[string]types.ExtensionSnapshotter @@ -63,9 +64,8 @@ type Manager struct { } // NewManager creates a new manager. -func NewManager(store *Store, multistore types.Snapshotter, logger log.Logger) *Manager { +func NewManager(store *Store, multistore types.Snapshotter) *Manager { return &Manager{ - logger: logger, store: store, multistore: multistore, extensions: make(map[string]types.ExtensionSnapshotter), @@ -189,7 +189,7 @@ func (m *Manager) createSnapshot(height uint64, ch chan<- io.ReadCloser) { } defer func() { _ = streamWriter.Close() }() if err := m.multistore.Snapshot(height, streamWriter); err != nil { - m.logger.Error("Snapshot creation failed", "err", err) + logger.Error("Snapshot creation failed", "err", err) streamWriter.CloseWithError(err) return } @@ -289,7 +289,7 @@ func (m *Manager) Restore(snapshot types.Snapshot) error { err: err, } close(chDone) - m.logger.Info(fmt.Sprintf("Restoring snapshot for version %d took %s", snapshot.Height, time.Since(startTime))) + logger.Info("Restoring snapshot for version", "version", snapshot.Height, "took", time.Since(startTime)) }() m.chRestore = chChunks diff --git a/sei-cosmos/snapshots/manager_test.go b/sei-cosmos/snapshots/manager_test.go index 45cbc11856..5f33e0f53d 100644 --- a/sei-cosmos/snapshots/manager_test.go +++ b/sei-cosmos/snapshots/manager_test.go @@ -6,14 +6,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots" "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestManager_List(t *testing.T) { store := setupStore(t) - manager := snapshots.NewManager(store, nil, log.NewNopLogger()) + manager := snapshots.NewManager(store, nil) mgrList, err := manager.List() require.NoError(t, err) @@ -32,7 +31,7 @@ func TestManager_List(t *testing.T) { func TestManager_LoadChunk(t *testing.T) { store := setupStore(t) - manager := snapshots.NewManager(store, nil, log.NewNopLogger()) + manager := snapshots.NewManager(store, nil) // Existing chunk should return body chunk, err := manager.LoadChunk(2, 1, 1) @@ -62,7 +61,7 @@ func TestManager_Take(t *testing.T) { items: items, } expectChunks := snapshotItems(items) - manager := snapshots.NewManager(store, snapshotter, log.NewNopLogger()) + manager := snapshots.NewManager(store, snapshotter) // nil manager should return error _, err := (*snapshots.Manager)(nil).Create(1) @@ -98,7 +97,7 @@ func TestManager_Take(t *testing.T) { func TestManager_Prune(t *testing.T) { store := setupStore(t) - manager := snapshots.NewManager(store, nil, log.NewNopLogger()) + manager := snapshots.NewManager(store, nil) pruned, err := manager.Prune(2) require.NoError(t, err) @@ -117,7 +116,7 @@ func TestManager_Prune(t *testing.T) { func TestManager_Restore(t *testing.T) { store := setupStore(t) target := &mockSnapshotter{} - manager := snapshots.NewManager(store, target, log.NewNopLogger()) + manager := snapshots.NewManager(store, target) expectItems := [][]byte{ {1, 2, 3}, diff --git a/sei-cosmos/store/iavl/store.go b/sei-cosmos/store/iavl/store.go index f0f77cbc7f..78382feb70 100644 --- a/sei-cosmos/store/iavl/store.go +++ b/sei-cosmos/store/iavl/store.go @@ -10,8 +10,8 @@ import ( ics23 "github.com/confio/ics23/go" iavl "github.com/sei-protocol/sei-chain/sei-iavl" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmcrypto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-cosmos/store/cachekv" @@ -22,6 +22,8 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/kv" ) +var logger = seilog.NewLogger("cosmos", "store", "iavl") + const ( DefaultIAVLCacheSize = 500000 ) @@ -43,15 +45,15 @@ type Store struct { // LoadStore returns an IAVL Store as a CommitKVStore. Internally, it will load the // store's version (id) from the provided DB. An error is returned if the version // fails to load, or if called with a positive version on an empty tree. -func LoadStore(db dbm.DB, logger log.Logger, key types.StoreKey, id types.CommitID, lazyLoading bool, cacheSize int, disableFastNode bool, orphanConfig *iavl.Options) (types.CommitKVStore, error) { - return LoadStoreWithInitialVersion(db, logger, key, id, lazyLoading, 0, cacheSize, disableFastNode, orphanConfig) +func LoadStore(db dbm.DB, key types.StoreKey, id types.CommitID, lazyLoading bool, cacheSize int, disableFastNode bool, orphanConfig *iavl.Options) (types.CommitKVStore, error) { + return LoadStoreWithInitialVersion(db, key, id, lazyLoading, 0, cacheSize, disableFastNode, orphanConfig) } // LoadStoreWithInitialVersion returns an IAVL Store as a CommitKVStore setting its initialVersion // to the one given. Internally, it will load the store's version (id) from the // provided DB. An error is returned if the version fails to load, or if called with a positive // version on an empty tree. -func LoadStoreWithInitialVersion(db dbm.DB, logger log.Logger, key types.StoreKey, id types.CommitID, lazyLoading bool, initialVersion uint64, cacheSize int, disableFastNode bool, orphanConfig *iavl.Options) (types.CommitKVStore, error) { +func LoadStoreWithInitialVersion(db dbm.DB, key types.StoreKey, id types.CommitID, lazyLoading bool, initialVersion uint64, cacheSize int, disableFastNode bool, orphanConfig *iavl.Options) (types.CommitKVStore, error) { opts := iavl.Options{ InitialVersion: initialVersion, Sync: false, diff --git a/sei-cosmos/store/iavl/store_test.go b/sei-cosmos/store/iavl/store_test.go index 848032b058..66871165f6 100644 --- a/sei-cosmos/store/iavl/store_test.go +++ b/sei-cosmos/store/iavl/store_test.go @@ -6,15 +6,12 @@ import ( "testing" "github.com/sei-protocol/sei-chain/sei-cosmos/store/cachekv" - + "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" + "github.com/sei-protocol/sei-chain/sei-cosmos/types/kv" iavl "github.com/sei-protocol/sei-chain/sei-iavl" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" - - "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" - "github.com/sei-protocol/sei-chain/sei-cosmos/types/kv" ) var ( @@ -100,17 +97,17 @@ func TestLoadStore(t *testing.T) { require.Equal(t, string(hcStore.Get([]byte("hello"))), "ciao") // Querying a new store at some previous non-pruned height H - newHStore, err := LoadStore(db, log.NewNopLogger(), types.NewKVStoreKey("test"), cIDH, false, DefaultIAVLCacheSize, false, &iavl.Options{}) + newHStore, err := LoadStore(db, types.NewKVStoreKey("test"), cIDH, false, DefaultIAVLCacheSize, false, &iavl.Options{}) require.NoError(t, err) require.Equal(t, string(newHStore.Get([]byte("hello"))), "hallo") // Querying a new store at some previous pruned height Hp - newHpStore, err := LoadStore(db, log.NewNopLogger(), types.NewKVStoreKey("test"), cIDHp, false, DefaultIAVLCacheSize, false, &iavl.Options{}) + newHpStore, err := LoadStore(db, types.NewKVStoreKey("test"), cIDHp, false, DefaultIAVLCacheSize, false, &iavl.Options{}) require.NoError(t, err) require.Equal(t, string(newHpStore.Get([]byte("hello"))), "hola") // Querying a new store at current height H - newHcStore, err := LoadStore(db, log.NewNopLogger(), types.NewKVStoreKey("test"), cIDHc, false, DefaultIAVLCacheSize, false, &iavl.Options{}) + newHcStore, err := LoadStore(db, types.NewKVStoreKey("test"), cIDHc, false, DefaultIAVLCacheSize, false, &iavl.Options{}) require.NoError(t, err) require.Equal(t, string(newHcStore.Get([]byte("hello"))), "ciao") } diff --git a/sei-cosmos/store/rootmulti/proof_test.go b/sei-cosmos/store/rootmulti/proof_test.go index 275104be3b..6745687104 100644 --- a/sei-cosmos/store/rootmulti/proof_test.go +++ b/sei-cosmos/store/rootmulti/proof_test.go @@ -5,7 +5,6 @@ import ( iavltree "github.com/sei-protocol/sei-chain/sei-iavl" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -16,7 +15,7 @@ import ( func TestVerifyIAVLStoreQueryProof(t *testing.T) { // Create main tree for testing. db := dbm.NewMemDB() - iStore, err := iavl.LoadStore(db, log.NewNopLogger(), types.NewKVStoreKey("test"), types.CommitID{}, false, iavl.DefaultIAVLCacheSize, false, &iavltree.Options{}) + iStore, err := iavl.LoadStore(db, types.NewKVStoreKey("test"), types.CommitID{}, false, iavl.DefaultIAVLCacheSize, false, &iavltree.Options{}) store := iStore.(*iavl.Store) require.Nil(t, err) store.Set([]byte("MYKEY"), []byte("MYVALUE")) @@ -59,7 +58,7 @@ func TestVerifyIAVLStoreQueryProof(t *testing.T) { func TestVerifyMultiStoreQueryProof(t *testing.T) { // Create main tree for testing. db := dbm.NewMemDB() - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) iavlStoreKey := types.NewKVStoreKey("iavlStoreKey") store.MountStoreWithDB(iavlStoreKey, types.StoreTypeIAVL, nil) @@ -114,7 +113,7 @@ func TestVerifyMultiStoreQueryProof(t *testing.T) { func TestVerifyMultiStoreQueryProofAbsence(t *testing.T) { // Create main tree for testing. db := dbm.NewMemDB() - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) iavlStoreKey := types.NewKVStoreKey("iavlStoreKey") store.MountStoreWithDB(iavlStoreKey, types.StoreTypeIAVL, nil) diff --git a/sei-cosmos/store/rootmulti/snapshot_test.go b/sei-cosmos/store/rootmulti/snapshot_test.go index ba419675ab..a06e311e91 100644 --- a/sei-cosmos/store/rootmulti/snapshot_test.go +++ b/sei-cosmos/store/rootmulti/snapshot_test.go @@ -10,7 +10,6 @@ import ( "math/rand" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -23,7 +22,7 @@ import ( ) func newMultiStoreWithGeneratedData(db dbm.DB, stores uint8, storeKeys uint64) *rootmulti.Store { - multiStore := rootmulti.NewStore(db, log.NewNopLogger()) + multiStore := rootmulti.NewStore(db) r := rand.New(rand.NewSource(49872768940)) // Fixed seed for deterministic tests keys := []*types.KVStoreKey{} @@ -55,7 +54,7 @@ func newMultiStoreWithGeneratedData(db dbm.DB, stores uint8, storeKeys uint64) * } func newMultiStoreWithMixedMounts(db dbm.DB) *rootmulti.Store { - store := rootmulti.NewStore(db, log.NewNopLogger()) + store := rootmulti.NewStore(db) store.MountStoreWithDB(types.NewKVStoreKey("iavl1"), types.StoreTypeIAVL, nil) store.MountStoreWithDB(types.NewKVStoreKey("iavl2"), types.StoreTypeIAVL, nil) store.MountStoreWithDB(types.NewKVStoreKey("iavl3"), types.StoreTypeIAVL, nil) @@ -234,7 +233,7 @@ func benchmarkMultistoreSnapshot(b *testing.B, stores uint8, storeKeys uint64) { b.StartTimer() for i := 0; i < b.N; i++ { - target := rootmulti.NewStore(dbm.NewMemDB(), log.NewNopLogger()) + target := rootmulti.NewStore(dbm.NewMemDB()) for key := range source.GetStores() { target.MountStoreWithDB(key, types.StoreTypeIAVL, nil) } @@ -269,7 +268,7 @@ func benchmarkMultistoreSnapshotRestore(b *testing.B, stores uint8, storeKeys ui b.StartTimer() for i := 0; i < b.N; i++ { - target := rootmulti.NewStore(dbm.NewMemDB(), log.NewNopLogger()) + target := rootmulti.NewStore(dbm.NewMemDB()) for key := range source.GetStores() { target.MountStoreWithDB(key, types.StoreTypeIAVL, nil) } diff --git a/sei-cosmos/store/rootmulti/store.go b/sei-cosmos/store/rootmulti/store.go index 09e2fc1394..2fb09b7043 100644 --- a/sei-cosmos/store/rootmulti/store.go +++ b/sei-cosmos/store/rootmulti/store.go @@ -16,8 +16,8 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" iavltree "github.com/sei-protocol/sei-chain/sei-iavl" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" snapshottypes "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots/types" @@ -31,6 +31,8 @@ import ( sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" ) +var logger = seilog.NewLogger("cosmos", "store", "rootmulti") + const ( latestVersionKey = "s/latest" pruneHeightsKey = "s/pruneheights" @@ -46,7 +48,6 @@ const iavlDisablefastNodeDefault = true // the CommitMultiStore interface. type Store struct { db dbm.DB - logger log.Logger archivalDb dbm.DB lastCommitInfo *types.CommitInfo lastCommitInfoMtx sync.RWMutex @@ -92,10 +93,9 @@ func keysForStoreKeyMap[V any](m map[types.StoreKey]V) []types.StoreKey { // store will be created with a PruneNothing pruning strategy by default. After // a store is created, KVStores must be mounted and finally LoadLatestVersion or // LoadVersion must be called. -func NewStore(db dbm.DB, logger log.Logger) *Store { +func NewStore(db dbm.DB) *Store { return &Store{ db: db, - logger: logger, pruningOpts: types.PruneNothing, iavlCacheSize: iavl.DefaultIAVLCacheSize, iavlDisableFastNode: iavlDisablefastNodeDefault, @@ -106,8 +106,8 @@ func NewStore(db dbm.DB, logger log.Logger) *Store { } } -func NewStoreWithArchival(db, archivalDb dbm.DB, archivalVersion int64, logger log.Logger) *Store { - store := NewStore(db, logger) +func NewStoreWithArchival(db, archivalDb dbm.DB, archivalVersion int64) *Store { + store := NewStore(db) store.archivalDb = archivalDb store.archivalVersion = archivalVersion return store @@ -790,7 +790,7 @@ func (rs *Store) Snapshot(height uint64, protoWriter protoio.Writer) error { if err != nil { return err } - rs.logger.Info(fmt.Sprintf("Exporting snapshot for store %s", store.name)) + logger.Info("Exporting snapshot for store", "store", store.name) for { node, err := exporter.Next() if errors.Is(err, iavltree.ExportDone) { @@ -830,8 +830,8 @@ func (rs *Store) Snapshot(height uint64, protoWriter protoio.Writer) error { float32(totalValueBytes), []metrics.Label{telemetry.NewLabel("store_name", store.name)}, ) - rs.logger.Info(fmt.Sprintf("Exported snapshot for store %s, with total number of keys %d, total key bytes %d, total value bytes %d", - store.name, totalNumKeys, totalKeyBytes, totalValueBytes)) + logger.Info("Exported snapshot for store", "store", + store.name, "key-count", totalNumKeys, "key-bytes", totalKeyBytes, "value-bytes", totalValueBytes) exporter.Close() } @@ -958,9 +958,9 @@ func (rs *Store) loadCommitStoreFromParams(key types.StoreKey, id types.CommitID var err error if params.initialVersion == 0 { - store, err = iavl.LoadStore(db, rs.logger, key, id, rs.lazyLoading, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.orphanOpts) + store, err = iavl.LoadStore(db, key, id, rs.lazyLoading, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.orphanOpts) } else { - store, err = iavl.LoadStoreWithInitialVersion(db, rs.logger, key, id, rs.lazyLoading, params.initialVersion, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.orphanOpts) + store, err = iavl.LoadStoreWithInitialVersion(db, key, id, rs.lazyLoading, params.initialVersion, rs.iavlCacheSize, rs.iavlDisableFastNode, rs.orphanOpts) } if err != nil { @@ -1051,7 +1051,7 @@ func (rs *Store) flushMetadata(db dbm.DB, version int64, cInfo *types.CommitInfo panic(fmt.Errorf("error on batch write %w", err)) } if cInfo != nil { - rs.logger.Info("App State Saved height=%d hash=%X\n", cInfo.CommitID().Version, cInfo.CommitID().Hash) + logger.Info("App State Saved", "height", cInfo.CommitID().Version, "hash", cInfo.CommitID().Hash) } } diff --git a/sei-cosmos/store/rootmulti/store_test.go b/sei-cosmos/store/rootmulti/store_test.go index 22f0ca302c..075e93770f 100644 --- a/sei-cosmos/store/rootmulti/store_test.go +++ b/sei-cosmos/store/rootmulti/store_test.go @@ -7,7 +7,6 @@ import ( "time" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -22,7 +21,7 @@ import ( func TestStoreType(t *testing.T) { db := dbm.NewMemDB() - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) store.MountStoreWithDB(types.NewKVStoreKey("store1"), types.StoreTypeIAVL, db) } @@ -45,7 +44,7 @@ func TestGetCommitKVStore(t *testing.T) { func TestStoreMount(t *testing.T) { db := dbm.NewMemDB() - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) key1 := types.NewKVStoreKey("store1") key2 := types.NewKVStoreKey("store2") @@ -668,7 +667,7 @@ var ( ) func newMultiStoreWithMounts(db dbm.DB, pruningOpts types.PruningOptions) *Store { - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) store.pruningOpts = pruningOpts store.MountStoreWithDB(testStoreKey1, types.StoreTypeIAVL, nil) @@ -679,7 +678,7 @@ func newMultiStoreWithMounts(db dbm.DB, pruningOpts types.PruningOptions) *Store } func newMultiStoreWithModifiedMounts(db dbm.DB, pruningOpts types.PruningOptions) (*Store, *types.StoreUpgrades) { - store := NewStore(db, log.NewNopLogger()) + store := NewStore(db) store.pruningOpts = pruningOpts store.MountStoreWithDB(types.NewKVStoreKey("store1"), types.StoreTypeIAVL, nil) diff --git a/sei-cosmos/store/store.go b/sei-cosmos/store/store.go index fb2a904a34..e6c9f76b0c 100644 --- a/sei-cosmos/store/store.go +++ b/sei-cosmos/store/store.go @@ -1,7 +1,6 @@ package store import ( - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-cosmos/store/cache" @@ -10,11 +9,11 @@ import ( ) func NewCommitMultiStore(db dbm.DB) types.CommitMultiStore { - return rootmulti.NewStore(db, log.NewNopLogger()) + return rootmulti.NewStore(db) } func NewCommitMultiStoreWithArchival(db dbm.DB, archivalDb dbm.DB, archivalVersion int64) types.CommitMultiStore { - return rootmulti.NewStoreWithArchival(db, archivalDb, archivalVersion, log.NewNopLogger()) + return rootmulti.NewStoreWithArchival(db, archivalDb, archivalVersion) } func NewCommitKVStoreCacheManager() types.MultiStorePersistentCache { diff --git a/sei-cosmos/store/types/iterator_test.go b/sei-cosmos/store/types/iterator_test.go index 8a190b5487..551bd89045 100644 --- a/sei-cosmos/store/types/iterator_test.go +++ b/sei-cosmos/store/types/iterator_test.go @@ -4,7 +4,6 @@ import ( "testing" iavltree "github.com/sei-protocol/sei-chain/sei-iavl" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -14,7 +13,7 @@ import ( func newMemTestKVStore(t *testing.T) types.KVStore { db := dbm.NewMemDB() - store, err := iavl.LoadStore(db, log.NewNopLogger(), types.NewKVStoreKey("test"), types.CommitID{}, false, iavl.DefaultIAVLCacheSize, false, &iavltree.Options{}) + store, err := iavl.LoadStore(db, types.NewKVStoreKey("test"), types.CommitID{}, false, iavl.DefaultIAVLCacheSize, false, &iavltree.Options{}) require.NoError(t, err) return store } diff --git a/sei-cosmos/store/types/utils_test.go b/sei-cosmos/store/types/utils_test.go index 2b72d1a007..15df41ac0d 100644 --- a/sei-cosmos/store/types/utils_test.go +++ b/sei-cosmos/store/types/utils_test.go @@ -4,7 +4,6 @@ import ( "bytes" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -14,7 +13,7 @@ import ( func initTestStores(t *testing.T) (types.KVStore, types.KVStore) { db := dbm.NewMemDB() - ms := rootmulti.NewStore(db, log.NewNopLogger()) + ms := rootmulti.NewStore(db) key1 := types.NewKVStoreKey("store1") key2 := types.NewKVStoreKey("store2") diff --git a/sei-cosmos/storev2/commitment/store.go b/sei-cosmos/storev2/commitment/store.go index 72c418b4b9..a3ce742ed2 100644 --- a/sei-cosmos/storev2/commitment/store.go +++ b/sei-cosmos/storev2/commitment/store.go @@ -14,7 +14,6 @@ import ( sctypes "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" iavl "github.com/sei-protocol/sei-chain/sei-iavl" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" ) @@ -26,14 +25,12 @@ var ( // Store Implements types.KVStore and CommitKVStore. type Store struct { tree sctypes.CommitKVStore - logger log.Logger changeSet iavl.ChangeSet } -func NewStore(tree sctypes.CommitKVStore, logger log.Logger) *Store { +func NewStore(tree sctypes.CommitKVStore) *Store { return &Store{ - tree: tree, - logger: logger, + tree: tree, } } diff --git a/sei-cosmos/storev2/commitment/store_test.go b/sei-cosmos/storev2/commitment/store_test.go index aedf658c24..8ba93e1766 100644 --- a/sei-cosmos/storev2/commitment/store_test.go +++ b/sei-cosmos/storev2/commitment/store_test.go @@ -5,12 +5,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/memiavl" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" ) func TestLastCommitID(t *testing.T) { tree := memiavl.New(100) - store := NewStore(tree, log.NewNopLogger()) + store := NewStore(tree) require.Equal(t, types.CommitID{Hash: tree.RootHash()}, store.LastCommitID()) } diff --git a/sei-cosmos/storev2/rootmulti/store.go b/sei-cosmos/storev2/rootmulti/store.go index b132b7723b..baa0c14efc 100644 --- a/sei-cosmos/storev2/rootmulti/store.go +++ b/sei-cosmos/storev2/rootmulti/store.go @@ -13,6 +13,7 @@ import ( "cosmossdk.io/errors" "github.com/armon/go-metrics" + "github.com/sei-protocol/seilog" "golang.org/x/time/rate" protoio "github.com/gogo/protobuf/io" @@ -35,17 +36,17 @@ import ( "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss/pruning" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" ) var ( + logger = seilog.NewLogger("cosmos", "storev2", "rootmulti") + _ types.CommitMultiStore = (*Store)(nil) _ types.Queryable = (*Store)(nil) ) type Store struct { - logger log.Logger mtx sync.RWMutex scStore sctypes.Committer ssStore seidbtypes.StateStore @@ -67,7 +68,6 @@ type VersionedChangesets struct { func NewStore( homeDir string, - logger log.Logger, scConfig config.StateCommitConfig, ssConfig config.StateStoreConfig, gigaKeys []string, @@ -92,12 +92,11 @@ func NewStore( limiter = rate.NewLimiter(rate.Limit(scConfig.HistoricalProofRateLimit), burst) } ctx := context.Background() - scStore := composite.NewCompositeCommitStore(ctx, scDir, logger, scConfig) + scStore := composite.NewCompositeCommitStore(ctx, scDir, scConfig) if err := scStore.CleanupCrashArtifacts(); err != nil { panic(err) } store := &Store{ - logger: logger, scStore: scStore, storesParams: make(map[types.StoreKey]storeParams), storeKeys: make(map[string]types.StoreKey), @@ -107,7 +106,7 @@ func NewStore( histProofLimiter: limiter, } if ssConfig.Enable { - ssStore, err := ss.NewStateStore(logger, homeDir, ssConfig) + ssStore, err := ss.NewStateStore(homeDir, ssConfig) if err != nil { panic(err) } @@ -322,7 +321,7 @@ func (rs *Store) CacheMultiStoreForExport(version int64) (types.CacheMultiStore, for k, store := range rs.ckvStores { if store.GetStoreType() == types.StoreTypeIAVL { tree := scStore.GetChildStoreByName(k.Name()) - stores[k] = commitment.NewStore(tree, rs.logger) + stores[k] = commitment.NewStore(tree) } } rs.mtx.RUnlock() @@ -489,7 +488,7 @@ func (rs *Store) loadCommitStoreFromParams(key types.StoreKey, params storeParam if tree == nil { return nil, fmt.Errorf("new store is not added in upgrades: %s", key.Name()) } - return types.CommitKVStore(commitment.NewStore(tree, rs.logger)), nil + return types.CommitKVStore(commitment.NewStore(tree)), nil case types.StoreTypeDB: panic("recursive MultiStores not yet supported") case types.StoreTypeTransient: @@ -601,13 +600,13 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { ) if latest { // latest never needs historical LoadVersion clone - store = types.Queryable(commitment.NewStore(rs.scStore.GetChildStoreByName(storeName), rs.logger)) + store = types.Queryable(commitment.NewStore(rs.scStore.GetChildStoreByName(storeName))) commitInfo = convertCommitInfo(rs.scStore.LastCommitInfo()) commitInfo = amendCommitInfo(commitInfo, rs.storesParams) } else { // historical path (this is where RPC pressure happens) if err := rs.tryAcquireHistProofPermit(); err != nil { - rs.logger.Debug("Failed to acquire historical proof permit", "err", err) + logger.Debug("Failed to acquire historical proof permit", "err", err) telemetry.IncrCounterWithLabels([]string{"historical", "abci", "query"}, 1, []metrics.Label{ @@ -631,7 +630,7 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { } defer func() { _ = scStore.Close() }() - store = types.Queryable(commitment.NewStore(scStore.GetChildStoreByName(storeName), rs.logger)) + store = types.Queryable(commitment.NewStore(scStore.GetChildStoreByName(storeName))) commitInfo = convertCommitInfo(scStore.LastCommitInfo()) commitInfo = amendCommitInfo(commitInfo, rs.storesParams) @@ -830,7 +829,7 @@ loop: restoreErr = err break loop } - rs.logger.Info(fmt.Sprintf("Start restoring store: %s", storeKey)) + logger.Info("Start restoring store", "key", storeKey) case *snapshottypes.SnapshotItem_IAVL: if item.IAVL.Height > math.MaxInt8 { restoreErr = errors.Wrapf(sdkerrors.ErrLogic, "node height %v cannot exceed %v", @@ -878,7 +877,7 @@ loop: // initialize the earliest version for SS store if rs.ssStore != nil { if err := rs.ssStore.SetEarliestVersion(height, false); err != nil { - rs.logger.Error("Failed to set earliest version during DB restore", "err", err) + logger.Error("Failed to set earliest version during DB restore", "err", err) } } diff --git a/sei-cosmos/storev2/rootmulti/store_test.go b/sei-cosmos/storev2/rootmulti/store_test.go index 9801e7d038..484a239ec2 100644 --- a/sei-cosmos/storev2/rootmulti/store_test.go +++ b/sei-cosmos/storev2/rootmulti/store_test.go @@ -10,13 +10,12 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/storev2/state" "github.com/sei-protocol/sei-chain/sei-db/config" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" "golang.org/x/time/rate" ) func TestLastCommitID(t *testing.T) { - store := NewStore(t.TempDir(), log.NewNopLogger(), config.StateCommitConfig{}, config.StateStoreConfig{}, []string{}) + store := NewStore(t.TempDir(), config.StateCommitConfig{}, config.StateStoreConfig{}, []string{}) require.Equal(t, types.CommitID{}, store.LastCommitID()) } @@ -37,7 +36,7 @@ func TestSCSS_WriteAndHistoricalRead(t *testing.T) { ssCfg := config.DefaultStateStoreConfig() ssCfg.Enable = true - store := NewStore(home, log.NewNopLogger(), scCfg, ssCfg, []string{}) + store := NewStore(home, scCfg, ssCfg, []string{}) defer func() { _ = store.Close() }() // Mount one IAVL store and load @@ -124,7 +123,7 @@ func TestCacheMultiStoreWithVersion_OnlyUsesSSStores(t *testing.T) { ssCfg.Enable = tc.ssEnabled ssCfg.AsyncWriteBuffer = 0 - store := NewStore(home, log.NewNopLogger(), scCfg, ssCfg, []string{}) + store := NewStore(home, scCfg, ssCfg, []string{}) defer func() { _ = store.Close() }() iavlKey1 := types.NewKVStoreKey("iavl_store1") @@ -236,7 +235,7 @@ func TestQuery_HistoricalNoProofWithoutSS_UsesPermit(t *testing.T) { ssCfg := config.DefaultStateStoreConfig() ssCfg.Enable = false - store := NewStore(home, log.NewNopLogger(), scCfg, ssCfg, []string{}) + store := NewStore(home, scCfg, ssCfg, []string{}) defer func() { _ = store.Close() }() key := types.NewKVStoreKey("store1") @@ -287,7 +286,7 @@ func TestCacheMultiStoreWithVersion_NoReentrantRLockDeadlock(t *testing.T) { ssCfg := config.DefaultStateStoreConfig() ssCfg.Enable = false - store := NewStore(home, log.NewNopLogger(), scCfg, ssCfg, []string{}) + store := NewStore(home, scCfg, ssCfg, []string{}) defer func() { _ = store.Close() }() key := types.NewKVStoreKey("store1") @@ -370,7 +369,7 @@ func TestQuery_LatestProofBypassesHistoricalPermit(t *testing.T) { ssCfg := config.DefaultStateStoreConfig() ssCfg.Enable = false - store := NewStore(home, log.NewNopLogger(), scCfg, ssCfg, []string{}) + store := NewStore(home, scCfg, ssCfg, []string{}) defer func() { _ = store.Close() }() key := types.NewKVStoreKey("store1") diff --git a/sei-cosmos/tasks/scheduler.go b/sei-cosmos/tasks/scheduler.go index 18f34e7079..20273f3aee 100644 --- a/sei-cosmos/tasks/scheduler.go +++ b/sei-cosmos/tasks/scheduler.go @@ -15,10 +15,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/occ" "github.com/sei-protocol/sei-chain/sei-cosmos/utils/tracing" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) +var logger = seilog.NewLogger("cosmos", "tasks") + type status string const ( @@ -331,7 +334,7 @@ func (s *scheduler) ProcessAll(ctx sdk.Context, reqs []*sdk.DeliverTxEntry) ([]t } s.metrics.maxIncarnation = s.maxIncarnation - ctx.Logger().Info("occ scheduler", "height", ctx.BlockHeight(), "txs", len(tasks), "latency_ms", time.Since(startTime).Milliseconds(), "retries", s.metrics.retries, "maxIncarnation", s.maxIncarnation, "iterations", iterations, "sync", s.synchronous, "workers", s.workers) + logger.Info("occ scheduler", "height", ctx.BlockHeight(), "txs", len(tasks), "latency_ms", time.Since(startTime).Milliseconds(), "retries", s.metrics.retries, "maxIncarnation", s.maxIncarnation, "iterations", iterations, "sync", s.synchronous, "workers", s.workers) return s.collectResponses(tasks), nil } diff --git a/sei-cosmos/tasks/scheduler_test.go b/sei-cosmos/tasks/scheduler_test.go index ea72a33f22..694110df22 100644 --- a/sei-cosmos/tasks/scheduler_test.go +++ b/sei-cosmos/tasks/scheduler_test.go @@ -12,7 +12,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" "go.opentelemetry.io/otel" @@ -69,7 +68,6 @@ func initTestCtx(injectStores bool) sdk.Context { } store := cachemulti.NewStore(db, stores, keys, nil, nil, nil) ctx = ctx.WithMultiStore(&store) - ctx = ctx.WithLogger(log.NewNopLogger()) return ctx } diff --git a/sei-cosmos/tests/mocks/tendermint_tendermint_libs_log_DB.go b/sei-cosmos/tests/mocks/tendermint_tendermint_libs_log_DB.go index 502a47de7b..23932806b9 100644 --- a/sei-cosmos/tests/mocks/tendermint_tendermint_libs_log_DB.go +++ b/sei-cosmos/tests/mocks/tendermint_tendermint_libs_log_DB.go @@ -8,7 +8,6 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - log "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) // MockLogger is a mock of Logger interface. @@ -85,20 +84,8 @@ func (mr *MockLoggerMockRecorder) Info(arg0 interface{}, arg1 ...interface{}) *g return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Info", reflect.TypeOf((*MockLogger)(nil).Info), varargs...) } -// With mocks base method. -func (m *MockLogger) With(arg0 ...interface{}) log.Logger { - m.ctrl.T.Helper() - varargs := []interface{}{} - for _, a := range arg0 { - varargs = append(varargs, a) - } - ret := m.ctrl.Call(m, "With", varargs...) - ret0, _ := ret[0].(log.Logger) - return ret0 -} - // With indicates an expected call of With. func (mr *MockLoggerMockRecorder) With(arg0 ...interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "With", reflect.TypeOf((*MockLogger)(nil).With), arg0...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "With", reflect.TypeOf((*MockLogger)(nil)), arg0...) } diff --git a/sei-cosmos/testutil/context.go b/sei-cosmos/testutil/context.go index b07c9cb033..04ee8209e7 100644 --- a/sei-cosmos/testutil/context.go +++ b/sei-cosmos/testutil/context.go @@ -1,7 +1,6 @@ package testutil import ( - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -19,7 +18,7 @@ func DefaultContext(key sdk.StoreKey, tkey sdk.StoreKey) sdk.Context { if err != nil { panic(err) } - ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cms, tmproto.Header{}, false) return ctx } diff --git a/sei-cosmos/testutil/network/network.go b/sei-cosmos/testutil/network/network.go index 719c36c24d..262d1d2bb1 100644 --- a/sei-cosmos/testutil/network/network.go +++ b/sei-cosmos/testutil/network/network.go @@ -18,7 +18,6 @@ import ( "github.com/sei-protocol/sei-chain/app" "github.com/sei-protocol/sei-chain/app/params" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmservice "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" tmclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client" "github.com/stretchr/testify/require" @@ -263,13 +262,6 @@ func New(t *testing.T, cfg Config) *Network { } } - logger := log.NewNopLogger() - if cfg.EnableLogging { - logger = log.NewTestingLogger(t) - } - - ctx.Logger = logger - nodeDirName := fmt.Sprintf("node%d", i) nodeDir := filepath.Join(network.BaseDir, nodeDirName, "simd") clientDir := filepath.Join(network.BaseDir, nodeDirName, "simcli") diff --git a/sei-cosmos/testutil/network/util.go b/sei-cosmos/testutil/network/util.go index adda08d42e..5b86ffabcf 100644 --- a/sei-cosmos/testutil/network/util.go +++ b/sei-cosmos/testutil/network/util.go @@ -25,7 +25,6 @@ import ( ) func startInProcess(cfg Config, val *Validator) error { - logger := val.Ctx.Logger tmCfg := val.Ctx.Config tmCfg.Instrumentation.Prometheus = false @@ -54,7 +53,6 @@ func startInProcess(cfg Config, val *Validator) error { tmNode, err := node.New( val.GoCtx, tmCfg, - logger, func() {}, app, defaultGensis, @@ -73,7 +71,7 @@ func startInProcess(cfg Config, val *Validator) error { val.tmNode = tmNode if val.RPCAddress != "" { - localClient, _ := local.New(logger, tmNode.(local.NodeService)) + localClient, _ := local.New(tmNode.(local.NodeService)) val.RPCClient = localClient } @@ -90,7 +88,7 @@ func startInProcess(cfg Config, val *Validator) error { } if val.APIAddress != "" { - apiSrv := api.New(val.ClientCtx, logger.With("module", "api-server")) + apiSrv := api.New(val.ClientCtx) app.RegisterAPIRoutes(apiSrv, val.AppConfig.API) errCh := make(chan error) diff --git a/sei-cosmos/types/context.go b/sei-cosmos/types/context.go index 883cf22680..675c46cb7b 100644 --- a/sei-cosmos/types/context.go +++ b/sei-cosmos/types/context.go @@ -8,7 +8,6 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-cosmos/store/gaskv" @@ -33,7 +32,6 @@ type Context struct { chainID string txBytes []byte txSum [32]byte - logger log.Logger voteInfo []abci.VoteInfo gasMeter GasMeter gasEstimate uint64 @@ -112,10 +110,6 @@ func (c Context) TxSum() [32]byte { return c.txSum } -func (c Context) Logger() log.Logger { - return c.logger -} - func (c Context) VoteInfos() []abci.VoteInfo { return c.voteInfo } @@ -254,7 +248,7 @@ func (c Context) ConsensusParams() *tmproto.ConsensusParams { } // create a new context -func NewContext(ms MultiStore, header tmproto.Header, isCheckTx bool, logger log.Logger) Context { +func NewContext(ms MultiStore, header tmproto.Header, isCheckTx bool) Context { // https://github.com/gogo/protobuf/issues/519 header.Time = header.Time.UTC() return Context{ @@ -263,7 +257,6 @@ func NewContext(ms MultiStore, header tmproto.Header, isCheckTx bool, logger log header: header, chainID: header.ChainID, checkTx: isCheckTx, - logger: logger, gasMeter: NewInfiniteGasMeter(1, 1), minGasPrice: DecCoins{}, eventManager: NewEventManager(), @@ -339,12 +332,6 @@ func (c Context) WithTxSum(txSum [32]byte) Context { return c } -// WithLogger returns a Context with an updated logger. -func (c Context) WithLogger(logger log.Logger) Context { - c.logger = logger - return c -} - // WithVoteInfos returns a Context with an updated consensus VoteInfo. func (c Context) WithVoteInfos(voteInfo []abci.VoteInfo) Context { c.voteInfo = voteInfo diff --git a/sei-cosmos/types/context_test.go b/sei-cosmos/types/context_test.go index 3b850d00e0..71aa464eac 100644 --- a/sei-cosmos/types/context_test.go +++ b/sei-cosmos/types/context_test.go @@ -13,7 +13,6 @@ import ( "github.com/stretchr/testify/suite" "github.com/sei-protocol/sei-chain/sei-cosmos/crypto/keys/secp256k1" - "github.com/sei-protocol/sei-chain/sei-cosmos/tests/mocks" "github.com/sei-protocol/sei-chain/sei-cosmos/testutil" "github.com/sei-protocol/sei-chain/sei-cosmos/types" ) @@ -53,23 +52,6 @@ func (s *contextTestSuite) TestCacheContext() { s.Require().Equal(v2, store.Get(k2)) } -func (s *contextTestSuite) TestLogContext() { - key := types.NewKVStoreKey(s.T().Name()) - ctx := testutil.DefaultContext(key, types.NewTransientStoreKey("transient_"+s.T().Name())) - ctrl := gomock.NewController(s.T()) - s.T().Cleanup(ctrl.Finish) - - logger := mocks.NewMockLogger(ctrl) - logger.EXPECT().Debug("debug") - logger.EXPECT().Info("info") - logger.EXPECT().Error("error") - - ctx = ctx.WithLogger(logger) - ctx.Logger().Debug("debug") - ctx.Logger().Info("info") - ctx.Logger().Error("error") -} - type dummy int64 //nolint:unused func (d dummy) Clone() interface{} { @@ -90,13 +72,12 @@ func (s *contextTestSuite) TestContextWithCustom() { ischeck := true isOCC := true txbytes := []byte("txbytes") - logger := mocks.NewMockLogger(ctrl) voteinfos := []abci.VoteInfo{{}} meter := types.NewGasMeterWithMultiplier(ctx, 10000) minGasPrices := types.DecCoins{types.NewInt64DecCoin("feetoken", 1)} headerHash := []byte("headerHash") - ctx = types.NewContext(nil, header, ischeck, logger) + ctx = types.NewContext(nil, header, ischeck) s.Require().Equal(header, ctx.BlockHeader()) ctx = ctx. @@ -114,7 +95,6 @@ func (s *contextTestSuite) TestContextWithCustom() { s.Require().Equal(ischeck, ctx.IsCheckTx()) s.Require().Equal(isOCC, ctx.IsOCCEnabled()) s.Require().Equal(txbytes, ctx.TxBytes()) - s.Require().Equal(logger, ctx.Logger()) s.Require().Equal(voteinfos, ctx.VoteInfos()) s.Require().Equal(meter, ctx.GasMeter()) s.Require().Equal(minGasPrices, ctx.MinGasPrices()) @@ -147,7 +127,7 @@ func (s *contextTestSuite) TestContextHeader() { addr := secp256k1.GenPrivKey().PubKey().Address() proposer := types.ConsAddress(addr) - ctx = types.NewContext(nil, tmproto.Header{}, false, nil) + ctx = types.NewContext(nil, tmproto.Header{}, false) fmt.Printf("Start ctx\n") @@ -205,7 +185,7 @@ func (s *contextTestSuite) TestContextHeaderClone() { for name, tc := range cases { tc := tc s.T().Run(name, func(t *testing.T) { - ctx := types.NewContext(nil, tc.h, false, nil) + ctx := types.NewContext(nil, tc.h, false) s.Require().Equal(tc.h.Height, ctx.BlockHeight()) s.Require().Equal(tc.h.Time.UTC(), ctx.BlockTime()) @@ -219,7 +199,7 @@ func (s *contextTestSuite) TestContextHeaderClone() { } func (s *contextTestSuite) TestUnwrapSDKContext() { - sdkCtx := types.NewContext(nil, tmproto.Header{}, false, nil) + sdkCtx := types.NewContext(nil, tmproto.Header{}, false) ctx := types.WrapSDKContext(sdkCtx) sdkCtx2 := types.UnwrapSDKContext(ctx) s.Require().Equal(sdkCtx, sdkCtx2) diff --git a/sei-cosmos/types/module/configurator.go b/sei-cosmos/types/module/configurator.go index 4ab668f165..ac22dcdb23 100644 --- a/sei-cosmos/types/module/configurator.go +++ b/sei-cosmos/types/module/configurator.go @@ -1,10 +1,7 @@ package module import ( - "fmt" - "github.com/gogo/protobuf/grpc" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" @@ -105,7 +102,7 @@ func (c configurator) runModuleMigrations(ctx sdk.Context, moduleName string, fr if !found { return sdkerrors.Wrapf(sdkerrors.ErrNotFound, "no migration found for module %s from version %d to version %d", moduleName, i, i+1) } - ctx.Logger().Info(fmt.Sprintf("migrating module %s from version %d to version %d", moduleName, i, i+1)) + logger.Info("migrating module from version to version", "module", moduleName, "from-version", i, "to-version", i+1) err := migrateFn(ctx) if err != nil { diff --git a/sei-cosmos/types/module/module.go b/sei-cosmos/types/module/module.go index c4967c628a..0b914f1d28 100644 --- a/sei-cosmos/types/module/module.go +++ b/sei-cosmos/types/module/module.go @@ -38,6 +38,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" "github.com/spf13/cobra" "github.com/sei-protocol/sei-chain/sei-cosmos/client" @@ -48,6 +49,8 @@ import ( genesistypes "github.com/sei-protocol/sei-chain/sei-cosmos/types/genesis" ) +var logger = seilog.NewLogger("cosmos", "types", "module") + // AppModuleBasic is the standard form for basic non-dependant elements of an application module. type AppModuleBasic interface { Name() string @@ -557,7 +560,7 @@ func (m Manager) RunMigrations(ctx sdk.Context, cfg Configurator, fromVM Version } moduleValUpdates := module.InitGenesis(ctx, cfgtor.cdc, module.DefaultGenesis(cfgtor.cdc)) - ctx.Logger().Info(fmt.Sprintf("adding a new module: %s", moduleName)) + logger.Info("adding a new module", "moduile", moduleName) // The module manager assumes only one module will update the // validator set, and that it will not be by a new module. if len(moduleValUpdates) > 0 { diff --git a/sei-cosmos/types/module/module_test.go b/sei-cosmos/types/module/module_test.go index c74b07a00e..0f99f0861e 100644 --- a/sei-cosmos/types/module/module_test.go +++ b/sei-cosmos/types/module/module_test.go @@ -256,5 +256,5 @@ func TestManager_MidBlock(t *testing.T) { mockAppModule1.EXPECT().MidBlock(gomock.Any(), gomock.Eq(height)).Times(1) mockAppModule2.EXPECT().MidBlock(gomock.Any(), gomock.Eq(height)).Times(1) - mm.MidBlock(sdk.NewContext(nil, tmproto.Header{}, false, nil), height) + mm.MidBlock(sdk.NewContext(nil, tmproto.Header{}, false), height) } diff --git a/sei-cosmos/types/result_test.go b/sei-cosmos/types/result_test.go index 3195c0a7f8..523df60fa8 100644 --- a/sei-cosmos/types/result_test.go +++ b/sei-cosmos/types/result_test.go @@ -3,10 +3,11 @@ package types_test import ( "encoding/hex" "fmt" - tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "strings" "testing" + tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" + "github.com/golang/protobuf/proto" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" @@ -220,7 +221,7 @@ func (s *resultTestSuite) TestResponseFormatBroadcastTxCommit() { } func TestWrapServiceResult(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) res, err := sdk.WrapServiceResult(ctx, nil, fmt.Errorf("test")) require.Nil(t, res) diff --git a/sei-cosmos/types/store_test.go b/sei-cosmos/types/store_test.go index 68e0485932..8cdf4d56ab 100644 --- a/sei-cosmos/types/store_test.go +++ b/sei-cosmos/types/store_test.go @@ -3,7 +3,6 @@ package types_test import ( "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" @@ -131,7 +130,7 @@ func (s *storeTestSuite) TestDiffKVStores() { func (s *storeTestSuite) initTestStores() (types.KVStore, types.KVStore) { db := dbm.NewMemDB() - ms := rootmulti.NewStore(db, log.NewNopLogger()) + ms := rootmulti.NewStore(db) key1 := types.NewKVStoreKey("store1") key2 := types.NewKVStoreKey("store2") diff --git a/sei-cosmos/x/auth/keeper/keeper.go b/sei-cosmos/x/auth/keeper/keeper.go index f50e13b50f..6150943a25 100644 --- a/sei-cosmos/x/auth/keeper/keeper.go +++ b/sei-cosmos/x/auth/keeper/keeper.go @@ -4,8 +4,6 @@ import ( "fmt" gogotypes "github.com/gogo/protobuf/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" cryptotypes "github.com/sei-protocol/sei-chain/sei-cosmos/crypto/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" @@ -91,11 +89,6 @@ func NewAccountKeeper( } } -// Logger returns a module-specific logger. -func (ak AccountKeeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // GetPubKey Returns the PubKey of the account at address func (ak AccountKeeper) GetPubKey(ctx sdk.Context, addr sdk.AccAddress) (cryptotypes.PubKey, error) { acc := ak.GetAccount(ctx, addr) diff --git a/sei-cosmos/x/auth/legacy/legacytx/stdtx_test.go b/sei-cosmos/x/auth/legacy/legacytx/stdtx_test.go index 8c319bdcd7..5ea2c058e9 100644 --- a/sei-cosmos/x/auth/legacy/legacytx/stdtx_test.go +++ b/sei-cosmos/x/auth/legacy/legacytx/stdtx_test.go @@ -4,7 +4,6 @@ import ( "fmt" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" @@ -102,7 +101,7 @@ func TestStdSignBytes(t *testing.T) { } func TestTxValidateBasic(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{ChainID: "mychainid"}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{ChainID: "mychainid"}, false) // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() diff --git a/sei-cosmos/x/authz/keeper/keeper.go b/sei-cosmos/x/authz/keeper/keeper.go index 0d06a41f82..fb41049568 100644 --- a/sei-cosmos/x/authz/keeper/keeper.go +++ b/sei-cosmos/x/authz/keeper/keeper.go @@ -1,20 +1,17 @@ package keeper import ( - "fmt" "strconv" "time" "github.com/gogo/protobuf/proto" - abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/baseapp" "github.com/sei-protocol/sei-chain/sei-cosmos/codec" codectypes "github.com/sei-protocol/sei-chain/sei-cosmos/codec/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" "github.com/sei-protocol/sei-chain/sei-cosmos/x/authz" + abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" ) type Keeper struct { @@ -32,11 +29,6 @@ func NewKeeper(storeKey sdk.StoreKey, cdc codec.BinaryCodec, router *baseapp.Msg } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", authz.ModuleName)) -} - // getGrant returns grant stored at skey. func (k Keeper) getGrant(ctx sdk.Context, skey []byte) (grant authz.Grant, found bool) { store := ctx.KVStore(k.storeKey) diff --git a/sei-cosmos/x/bank/handler_test.go b/sei-cosmos/x/bank/handler_test.go index 6ee6a50c75..54f5352995 100644 --- a/sei-cosmos/x/bank/handler_test.go +++ b/sei-cosmos/x/bank/handler_test.go @@ -22,7 +22,7 @@ import ( func TestInvalidMsg(t *testing.T) { h := bank.NewHandler(nil) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) diff --git a/sei-cosmos/x/bank/keeper/deferred_cache.go b/sei-cosmos/x/bank/keeper/deferred_cache.go index 6956235cca..e6e7fec66a 100644 --- a/sei-cosmos/x/bank/keeper/deferred_cache.go +++ b/sei-cosmos/x/bank/keeper/deferred_cache.go @@ -103,7 +103,7 @@ func (d *DeferredCache) IterateDeferredBalances(ctx sdk.Context, cb func(moduleA d.cdc.MustUnmarshal(iterator.Value(), &balance) moduleAddr, err := types.AddressFromDeferredCacheStore(iterator.Key()) if err != nil { - ctx.Logger().With("key", iterator.Key(), "err", err).Error("failed to get address from deferred cache store") + logger.Error("failed to get address from deferred cache store", "key", iterator.Key(), "err", err) panic(err) } diff --git a/sei-cosmos/x/bank/keeper/keeper.go b/sei-cosmos/x/bank/keeper/keeper.go index 36d35271ee..56e44c2bed 100644 --- a/sei-cosmos/x/bank/keeper/keeper.go +++ b/sei-cosmos/x/bank/keeper/keeper.go @@ -14,9 +14,14 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" ) -var _ Keeper = (*BaseKeeper)(nil) +var ( + logger = seilog.NewLogger("cosmos", "x", "bank", "keeper") + + _ Keeper = (*BaseKeeper)(nil) +) // Keeper defines a module interface that facilitates the transfer of coins // between accounts. @@ -382,7 +387,7 @@ func (k BaseKeeper) SendCoinsFromModuleToModule( return nil } - k.Logger(ctx).Debug("Sending coins from module to module", "sender", senderModule, "sender_address", senderAddr.String(), "recipient", recipientModule, "recipient_address", recipientAcc.GetAddress().String(), "amount", amt.String()) + logger.Debug("Sending coins from module to module", "sender", senderModule, "sender_address", senderAddr.String(), "recipient", recipientModule, "recipient_address", recipientAcc.GetAddress().String(), "amount", amt.String()) return k.SendCoins(ctx, senderAddr, recipientAcc.GetAddress(), amt) } @@ -469,12 +474,12 @@ func (k BaseKeeper) WriteDeferredBalances(ctx sdk.Context) []abci.Event { amount, ok := moduleAddrBalanceMap[moduleBech32Addr] if !ok { err := fmt.Errorf("failed to get module balance for writing deferred balances for address=%s", moduleBech32Addr) - ctx.Logger().Error(err.Error()) + logger.Error(err.Error()) panic(err) } err := k.AddCoins(ctx, sdk.MustAccAddressFromBech32(moduleBech32Addr), amount, true) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to add coin=%s to module address=%s, error is: %s", amount, moduleBech32Addr, err)) + logger.Error("Failed to add coin to module address", "coin", amount, "address", moduleBech32Addr, "err", err) panic(err) } } @@ -533,7 +538,7 @@ func (k BaseKeeper) UndelegateCoinsFromModuleToAccount( func (k BaseKeeper) createCoins(ctx sdk.Context, moduleName string, amounts sdk.Coins, addFn AddFn) error { err := k.mintCoinsRestrictionFn(ctx, amounts) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Module %q attempted to mint coins %s it doesn't have permission for, error %v", moduleName, amounts, err)) + logger.Error("Module attempted to mint coins it doesn't have permission for", "module", moduleName, "coins", amounts, "err", err) return err } acc := k.ak.GetModuleAccount(ctx, moduleName) @@ -555,8 +560,7 @@ func (k BaseKeeper) createCoins(ctx sdk.Context, moduleName string, amounts sdk. k.SetSupply(ctx, supply) } - logger := k.Logger(ctx) - logger.Info("minted coins from module account", "amount", amounts.String(), "from", moduleName) + logger.Info("minted coins from module account", "amount", amounts, "from", moduleName) // emit mint event ctx.EventManager().EmitEvent( @@ -605,8 +609,7 @@ func (k BaseKeeper) destroyCoins(ctx sdk.Context, moduleName string, amounts sdk k.SetSupply(ctx, supply) } - logger := k.Logger(ctx) - logger.Info("burned tokens from module account", "amount", amounts.String(), "from", moduleName) + logger.Info("burned tokens from module account", "amount", amounts, "from", moduleName) // emit burn event ctx.EventManager().EmitEvent( diff --git a/sei-cosmos/x/bank/keeper/view.go b/sei-cosmos/x/bank/keeper/view.go index ef5e774050..d0d8d21c40 100644 --- a/sei-cosmos/x/bank/keeper/view.go +++ b/sei-cosmos/x/bank/keeper/view.go @@ -3,8 +3,6 @@ package keeper import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" @@ -50,11 +48,6 @@ func NewBaseViewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak types.Ac } } -// Logger returns a module-specific logger. -func (k BaseViewKeeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // HasBalance returns whether or not an account has at least amt balance. func (k BaseViewKeeper) HasBalance(ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coin) bool { return k.GetBalance(ctx, addr, amt.Denom).IsGTE(amt) @@ -145,7 +138,7 @@ func (k BaseViewKeeper) IterateAllBalances(ctx sdk.Context, cb func(sdk.AccAddre for ; iterator.Valid(); iterator.Next() { address, err := types.AddressFromBalancesStore(iterator.Key()) if err != nil { - k.Logger(ctx).With("key", iterator.Key(), "err", err).Error("failed to get address from balances store") + logger.Error("failed to get address from balances store", "key", iterator.Key(), "err", err) // TODO: revisit, for now, panic here to keep same behavior as in 0.42 // ref: https://github.com/cosmos/cosmos-sdk/issues/7409 panic(err) diff --git a/sei-cosmos/x/capability/keeper/keeper.go b/sei-cosmos/x/capability/keeper/keeper.go index 417a593981..3f0c9ba79f 100644 --- a/sei-cosmos/x/capability/keeper/keeper.go +++ b/sei-cosmos/x/capability/keeper/keeper.go @@ -4,15 +4,16 @@ import ( "fmt" "strings" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "capability", "keeper") + type ( // Keeper defines the capability module's keeper. It is responsible for provisioning, // tracking, and authenticating capabilities at runtime. During application @@ -259,7 +260,7 @@ func (sk ScopedKeeper) NewCapability(ctx sdk.Context, name string) (*types.Capab // Set the mapping from index from index to in-memory capability in the go map sk.capMap[index] = cap - logger(ctx).Info("created new capability", "module", sk.module, "name", name) + logger.Info("created new capability", "module", sk.module, "name", name) return cap, nil } @@ -308,7 +309,7 @@ func (sk ScopedKeeper) ClaimCapability(ctx sdk.Context, cap *types.Capability, n // and retrieve the in-memory pointer to the capability from our map memStore.Set(types.RevCapabilityKey(sk.module, name), sdk.Uint64ToBigEndian(cap.GetIndex())) - logger(ctx).Info("claimed capability", "module", sk.module, "name", name, "capability", cap.GetIndex()) + logger.Info("claimed capability", "module", sk.module, "name", name, "capability", cap.GetIndex()) return nil } @@ -480,7 +481,3 @@ func (sk ScopedKeeper) getOwners(ctx sdk.Context, cap *types.Capability) *types. sk.cdc.MustUnmarshal(bz, &capOwners) return &capOwners } - -func logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) -} diff --git a/sei-cosmos/x/crisis/keeper/keeper.go b/sei-cosmos/x/crisis/keeper/keeper.go index 9480347daa..00764bd968 100644 --- a/sei-cosmos/x/crisis/keeper/keeper.go +++ b/sei-cosmos/x/crisis/keeper/keeper.go @@ -4,13 +4,14 @@ import ( "fmt" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/crisis/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "crisis", "keeper") + // Keeper - crisis keeper type Keeper struct { routes []types.InvarRoute @@ -42,11 +43,6 @@ func NewKeeper( } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // RegisterRoute register the routes for each of the invariants func (k *Keeper) RegisterRoute(moduleName, route string, invar sdk.Invariant) { invarRoute := types.NewInvarRoute(moduleName, route, invar) @@ -70,7 +66,6 @@ func (k Keeper) Invariants() []sdk.Invariant { // AssertInvariants asserts all registered invariants. If any invariant fails, // the method panics. func (k Keeper) AssertInvariants(ctx sdk.Context) { - logger := k.Logger(ctx) start := time.Now() invarRoutes := k.Routes() diff --git a/sei-cosmos/x/crisis/keeper/keeper_test.go b/sei-cosmos/x/crisis/keeper/keeper_test.go index caf68c6964..b3c715de41 100644 --- a/sei-cosmos/x/crisis/keeper/keeper_test.go +++ b/sei-cosmos/x/crisis/keeper/keeper_test.go @@ -10,16 +10,8 @@ import ( seiapp "github.com/sei-protocol/sei-chain/app" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-cosmos/x/crisis/types" ) -func TestLogger(t *testing.T) { - app := seiapp.Setup(t, false, false, false) - - ctx := app.NewContext(true, tmproto.Header{}) - require.Equal(t, ctx.Logger().With("module", "x/"+types.ModuleName), app.CrisisKeeper.Logger(ctx)) -} - func TestInvariants(t *testing.T) { app := seiapp.Setup(t, false, false, false) app.Commit(context.Background()) diff --git a/sei-cosmos/x/distribution/keeper/allocation.go b/sei-cosmos/x/distribution/keeper/allocation.go index d1b5db95e3..82bc95275f 100644 --- a/sei-cosmos/x/distribution/keeper/allocation.go +++ b/sei-cosmos/x/distribution/keeper/allocation.go @@ -1,8 +1,6 @@ package keeper import ( - "fmt" - sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/distribution/types" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" @@ -17,8 +15,6 @@ func (k Keeper) AllocateTokens( previousProposer sdk.ConsAddress, bondedVotes []abci.VoteInfo, ) { - logger := k.Logger(ctx) - // fetch and clear the collected fees for distribution, since this is // called in BeginBlock, collected fees will be from the previous block // (and distributed to the previous proposer) @@ -70,12 +66,11 @@ func (k Keeper) AllocateTokens( // e.g. a validator undelegates at block X, it's removed entirely by // block X+1's endblock, then X+2 we need to refer to the previous // proposer for X+1, but we've forgotten about them. - logger.Error(fmt.Sprintf( - "WARNING: Attempt to allocate proposer rewards to unknown proposer %s. "+ - "This should happen only if the proposer unbonded completely within a single block, "+ - "which generally should not happen except in exceptional circumstances (or fuzz testing). "+ - "We recommend you investigate immediately.", - previousProposer.String())) + logger.Error("attempt to allocate proposer rewards to unknown proposer; "+ + "this should happen only if the proposer unbonded completely within a single block, "+ + "which generally should not happen except in exceptional circumstances (or fuzz testing); "+ + "we recommend you investigate immediately", + "proposer", previousProposer) } // calculate fraction allocated to validators diff --git a/sei-cosmos/x/distribution/keeper/delegation.go b/sei-cosmos/x/distribution/keeper/delegation.go index 8e34e98925..825654e914 100644 --- a/sei-cosmos/x/distribution/keeper/delegation.go +++ b/sei-cosmos/x/distribution/keeper/delegation.go @@ -6,8 +6,11 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/distribution/types" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "distribution", "keeper") + // initialize starting info for a new delegation func (k Keeper) initializeDelegation(ctx sdk.Context, val sdk.ValAddress, del sdk.AccAddress) { // period has already been incremented - we want to store the period ended by this delegation action @@ -151,7 +154,7 @@ func (k Keeper) withdrawDelegationRewards(ctx sdk.Context, val stakingtypes.Vali // of the decCoins due to operation order of the distribution mechanism. rewards := rewardsRaw.Intersect(outstanding) if !rewards.IsEqual(rewardsRaw) { - logger := k.Logger(ctx) + logger.Info( "rounding error withdrawing rewards from validator", "delegator", del.GetDelegatorAddr().String(), diff --git a/sei-cosmos/x/distribution/keeper/keeper.go b/sei-cosmos/x/distribution/keeper/keeper.go index 2c4517488f..db84b910f5 100644 --- a/sei-cosmos/x/distribution/keeper/keeper.go +++ b/sei-cosmos/x/distribution/keeper/keeper.go @@ -3,8 +3,6 @@ package keeper import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" @@ -55,11 +53,6 @@ func NewKeeper( } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // SetWithdrawAddr sets a new address that will receive the rewards upon withdrawal func (k Keeper) SetWithdrawAddr(ctx sdk.Context, delegatorAddr sdk.AccAddress, withdrawAddr sdk.AccAddress) error { if k.blockedAddrs[withdrawAddr.String()] { diff --git a/sei-cosmos/x/distribution/keeper/proposal_handler.go b/sei-cosmos/x/distribution/keeper/proposal_handler.go index 7fe4692b8c..796aced9ad 100644 --- a/sei-cosmos/x/distribution/keeper/proposal_handler.go +++ b/sei-cosmos/x/distribution/keeper/proposal_handler.go @@ -21,7 +21,6 @@ func HandleCommunityPoolSpendProposal(ctx sdk.Context, k Keeper, p *types.Commun return err } - logger := k.Logger(ctx) logger.Info("transferred from the community pool to recipient", "amount", p.Amount.String(), "recipient", p.Recipient) return nil diff --git a/sei-cosmos/x/evidence/abci.go b/sei-cosmos/x/evidence/abci.go index b8ed39e2d0..62a0009fae 100644 --- a/sei-cosmos/x/evidence/abci.go +++ b/sei-cosmos/x/evidence/abci.go @@ -1,7 +1,6 @@ package evidence import ( - "fmt" "time" "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" @@ -9,8 +8,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/x/evidence/keeper" "github.com/sei-protocol/sei-chain/sei-cosmos/x/evidence/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "evidence") + // BeginBlocker iterates through and handles any newly discovered evidence of // misbehavior submitted by Tendermint. Currently, only equivocation is handled. func BeginBlocker(ctx sdk.Context, byzantineValidators []abci.Misbehavior, k keeper.Keeper) { @@ -25,7 +27,7 @@ func BeginBlocker(ctx sdk.Context, byzantineValidators []abci.Misbehavior, k kee k.HandleEquivocationEvidence(ctx, evidence.(*types.Equivocation)) default: - k.Logger(ctx).Error(fmt.Sprintf("ignored unknown evidence type: %s", tmEvidence.Type)) + logger.Error("ignored unknown evidence type", "type", tmEvidence.Type) } } } diff --git a/sei-cosmos/x/evidence/keeper/infraction.go b/sei-cosmos/x/evidence/keeper/infraction.go index 0eeeb7d500..00fda5228b 100644 --- a/sei-cosmos/x/evidence/keeper/infraction.go +++ b/sei-cosmos/x/evidence/keeper/infraction.go @@ -4,10 +4,13 @@ import ( "fmt" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-cosmos/x/evidence/types" ) +var logger = seilog.NewLogger("cosmos", "x", "evidence", "keeper") + // HandleEquivocationEvidence implements an equivocation evidence handler. Assuming the // evidence is valid, the validator committing the misbehavior will be slashed, // jailed and tombstoned. Once tombstoned, the validator will not be able to @@ -23,7 +26,7 @@ import ( // TODO: Some of the invalid constraints listed above may need to be reconsidered // in the case of a lunatic attack. func (k Keeper) HandleEquivocationEvidence(ctx sdk.Context, evidence *types.Equivocation) { - logger := k.Logger(ctx) + consAddr := evidence.GetConsensusAddress() if _, err := k.slashingKeeper.GetPubkey(ctx, consAddr.Bytes()); err != nil { diff --git a/sei-cosmos/x/evidence/keeper/keeper.go b/sei-cosmos/x/evidence/keeper/keeper.go index b57b764002..4317492ef6 100644 --- a/sei-cosmos/x/evidence/keeper/keeper.go +++ b/sei-cosmos/x/evidence/keeper/keeper.go @@ -3,15 +3,13 @@ package keeper import ( "fmt" - tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" "github.com/sei-protocol/sei-chain/sei-cosmos/x/evidence/exported" "github.com/sei-protocol/sei-chain/sei-cosmos/x/evidence/types" + tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" ) // Keeper defines the evidence module's keeper. The keeper is responsible for @@ -38,11 +36,6 @@ func NewKeeper( } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // SetRouter sets the Evidence Handler router for the x/evidence module. Note, // we allow the ability to set the router after the Keeper is constructed as a // given Handler may need access the Keeper before being constructed. The router diff --git a/sei-cosmos/x/feegrant/keeper/keeper.go b/sei-cosmos/x/feegrant/keeper/keeper.go index c536f710a8..84d4e799f4 100644 --- a/sei-cosmos/x/feegrant/keeper/keeper.go +++ b/sei-cosmos/x/feegrant/keeper/keeper.go @@ -1,10 +1,6 @@ package keeper import ( - "fmt" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" @@ -31,11 +27,6 @@ func NewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak feegrant.Account } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", feegrant.ModuleName)) -} - // GrantAllowance creates a new grant func (k Keeper) GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error { diff --git a/sei-cosmos/x/genutil/client/cli/init_test.go b/sei-cosmos/x/genutil/client/cli/init_test.go index d859b5336a..e5ea1e73d1 100644 --- a/sei-cosmos/x/genutil/client/cli/init_test.go +++ b/sei-cosmos/x/genutil/client/cli/init_test.go @@ -9,7 +9,6 @@ import ( "testing" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -51,11 +50,11 @@ func TestInitCmd(t *testing.T) { tt := tt t.Run(tt.name, func(t *testing.T) { home := t.TempDir() - logger := log.NewNopLogger() + cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewProtoCodec(interfaceRegistry) clientCtx := client.Context{}. @@ -85,11 +84,11 @@ func TestInitCmd(t *testing.T) { func TestInitRecover(t *testing.T) { home := t.TempDir() - logger := log.NewNopLogger() + cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewProtoCodec(interfaceRegistry) clientCtx := client.Context{}. @@ -116,11 +115,11 @@ func TestInitRecover(t *testing.T) { func TestEmptyState(t *testing.T) { home := t.TempDir() - logger := log.NewNopLogger() + cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewProtoCodec(interfaceRegistry) clientCtx := client.Context{}. diff --git a/sei-cosmos/x/genutil/client/testutil/helpers.go b/sei-cosmos/x/genutil/client/testutil/helpers.go index 92454ed911..b1975939d2 100644 --- a/sei-cosmos/x/genutil/client/testutil/helpers.go +++ b/sei-cosmos/x/genutil/client/testutil/helpers.go @@ -6,7 +6,6 @@ import ( tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/spf13/viper" "github.com/sei-protocol/sei-chain/sei-cosmos/client" @@ -18,14 +17,14 @@ import ( ) func ExecInitCmd(testMbm module.BasicManager, home string, cdc codec.Codec) error { - logger := log.NewNopLogger() + cfg, err := CreateDefaultTendermintConfig(home) if err != nil { return err } cmd := genutilcli.InitCmd(testMbm, home) - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) clientCtx := client.Context{}.WithCodec(cdc).WithHomeDir(home) _, out := testutil.ApplyMockIO(cmd) diff --git a/sei-cosmos/x/gov/abci.go b/sei-cosmos/x/gov/abci.go index 06a932c3b8..ef1c78598e 100644 --- a/sei-cosmos/x/gov/abci.go +++ b/sei-cosmos/x/gov/abci.go @@ -8,14 +8,15 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/gov/keeper" "github.com/sei-protocol/sei-chain/sei-cosmos/x/gov/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "gov") + // EndBlocker called every block, process inflation, update validator set. func EndBlocker(ctx sdk.Context, keeper keeper.Keeper) { defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) - logger := keeper.Logger(ctx) - // delete inactive proposal from store and its deposits keeper.IterateInactiveProposalsQueue(ctx, ctx.BlockHeader().Time, func(proposal types.Proposal) bool { keeper.DeleteProposal(ctx, proposal.ProposalId) diff --git a/sei-cosmos/x/gov/handler_test.go b/sei-cosmos/x/gov/handler_test.go index 227bdafe0c..e6dc335114 100644 --- a/sei-cosmos/x/gov/handler_test.go +++ b/sei-cosmos/x/gov/handler_test.go @@ -19,7 +19,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := gov.NewHandler(k) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized gov message type")) diff --git a/sei-cosmos/x/gov/keeper/keeper.go b/sei-cosmos/x/gov/keeper/keeper.go index 133cdd5f91..ab4753e4a2 100644 --- a/sei-cosmos/x/gov/keeper/keeper.go +++ b/sei-cosmos/x/gov/keeper/keeper.go @@ -4,8 +4,6 @@ import ( "fmt" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" authtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/auth/types" @@ -83,11 +81,6 @@ func (keeper *Keeper) SetHooks(gh types.GovHooks) *Keeper { return keeper } -// Logger returns a module-specific logger. -func (keeper Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // Router returns the gov Keeper's Router func (keeper Keeper) Router() types.Router { return keeper.router diff --git a/sei-cosmos/x/params/keeper/keeper.go b/sei-cosmos/x/params/keeper/keeper.go index 03f4c00bc4..7329521c93 100644 --- a/sei-cosmos/x/params/keeper/keeper.go +++ b/sei-cosmos/x/params/keeper/keeper.go @@ -4,12 +4,9 @@ import ( "encoding/json" "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types/proposal" ) // Keeper of the global paramstore @@ -94,11 +91,6 @@ func (k Keeper) GetCosmosGasParams(ctx sdk.Context) types.CosmosGasParams { return cosmosGasParams } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+proposal.ModuleName) -} - // Allocate subspace used for keepers func (k Keeper) Subspace(s string) types.Subspace { _, ok := k.spaces[s] diff --git a/sei-cosmos/x/params/proposal_handler.go b/sei-cosmos/x/params/proposal_handler.go index 7640a5e793..d2015dde93 100644 --- a/sei-cosmos/x/params/proposal_handler.go +++ b/sei-cosmos/x/params/proposal_handler.go @@ -1,15 +1,16 @@ package params import ( - "fmt" - sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" govtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/gov/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/keeper" "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types/proposal" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "params") + // NewParamChangeProposalHandler creates a new governance Handler for a ParamChangeProposal func NewParamChangeProposalHandler(k keeper.Keeper) govtypes.Handler { return func(ctx sdk.Context, content govtypes.Content) error { @@ -30,9 +31,7 @@ func handleParameterChangeProposal(ctx sdk.Context, k keeper.Keeper, p *proposal return sdkerrors.Wrap(proposal.ErrUnknownSubspace, c.Subspace) } - k.Logger(ctx).Info( - fmt.Sprintf("attempt to set new parameter value; key: %s, value: %s", c.Key, c.Value), - ) + logger.Info("attempt to set new parameter value", "key", c.Key, "value", c.Value) if err := ss.Update(ctx, []byte(c.Key), []byte(c.Value)); err != nil { return sdkerrors.Wrapf(proposal.ErrSettingParameter, "key: %s, value: %s, err: %s", c.Key, c.Value, err.Error()) diff --git a/sei-cosmos/x/params/types/subspace_test.go b/sei-cosmos/x/params/types/subspace_test.go index 746c85ba31..b554197cb3 100644 --- a/sei-cosmos/x/params/types/subspace_test.go +++ b/sei-cosmos/x/params/types/subspace_test.go @@ -5,7 +5,6 @@ import ( "testing" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" @@ -39,7 +38,7 @@ func (suite *SubspaceTestSuite) SetupTest() { suite.cdc = encCfg.Marshaler suite.amino = encCfg.Amino - suite.ctx = sdk.NewContext(ms, tmproto.Header{}, false, log.NewNopLogger()) + suite.ctx = sdk.NewContext(ms, tmproto.Header{}, false) suite.ss = ss.WithKeyTable(paramKeyTable()) } diff --git a/sei-cosmos/x/slashing/handler_test.go b/sei-cosmos/x/slashing/handler_test.go index 48bd451780..7e2beea2d9 100644 --- a/sei-cosmos/x/slashing/handler_test.go +++ b/sei-cosmos/x/slashing/handler_test.go @@ -132,7 +132,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := slashing.NewHandler(k) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized slashing message type")) diff --git a/sei-cosmos/x/slashing/keeper/infractions.go b/sei-cosmos/x/slashing/keeper/infractions.go index 979f509a95..416d94791f 100644 --- a/sei-cosmos/x/slashing/keeper/infractions.go +++ b/sei-cosmos/x/slashing/keeper/infractions.go @@ -20,7 +20,7 @@ type SlashInfo struct { // This performs similar logic to the above HandleValidatorSignature, but only performs READs such that it can be performed in parallel for all validators. // Instead of updating appropriate validator bit arrays / signing infos, this will return the pending values to be written in a consistent order func (k Keeper) HandleValidatorSignatureConcurrent(ctx sdk.Context, addr cryptotypes.Address, power int64, signed bool) (consAddr sdk.ConsAddress, missedInfo types.ValidatorMissedBlockArray, signInfo types.ValidatorSigningInfo, shouldSlash bool, slashInfo SlashInfo) { - logger := k.Logger(ctx) + height := ctx.BlockHeight() // fetch the validator public key @@ -124,7 +124,7 @@ func (k Keeper) HandleValidatorSignatureConcurrent(ctx sdk.Context, addr cryptot } func (k Keeper) SlashJailAndUpdateSigningInfo(ctx sdk.Context, consAddr sdk.ConsAddress, slashInfo SlashInfo, signInfo types.ValidatorSigningInfo) types.ValidatorSigningInfo { - logger := k.Logger(ctx) + ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeSlash, diff --git a/sei-cosmos/x/slashing/keeper/keeper.go b/sei-cosmos/x/slashing/keeper/keeper.go index ce274b3bb8..53b99cf49d 100644 --- a/sei-cosmos/x/slashing/keeper/keeper.go +++ b/sei-cosmos/x/slashing/keeper/keeper.go @@ -3,8 +3,6 @@ package keeper import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" cryptotypes "github.com/sei-protocol/sei-chain/sei-cosmos/crypto/types" "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" @@ -35,11 +33,6 @@ func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, sk types.StakingKeeper, } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // AddPubkey sets a address-pubkey relation func (k Keeper) AddPubkey(ctx sdk.Context, pubkey cryptotypes.PubKey) error { bz, err := k.cdc.MarshalInterface(pubkey) diff --git a/sei-cosmos/x/slashing/keeper/migrations.go b/sei-cosmos/x/slashing/keeper/migrations.go index c2ebccf350..84ec24be3b 100644 --- a/sei-cosmos/x/slashing/keeper/migrations.go +++ b/sei-cosmos/x/slashing/keeper/migrations.go @@ -6,12 +6,15 @@ import ( "sort" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-cosmos/x/slashing/types" gogotypes "github.com/gogo/protobuf/types" ) +var logger = seilog.NewLogger("cosmos", "x", "slashing", "keeper") + // Migrator is a struct for handling in-place store migrations. type Migrator struct { keeper Keeper @@ -32,13 +35,13 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { store := ctx.KVStore(m.keeper.storeKey) valMissedMap := make(map[string]types.ValidatorMissedBlockArrayLegacyMissedHeights) - ctx.Logger().Info("Migrating Signing Info") + logger.Info("Migrating Signing Info") signInfoIter := sdk.KVStorePrefixIterator(store, types.ValidatorSigningInfoKeyPrefix) var newSignInfoKeys [][]byte var newSignInfoVals []types.ValidatorSigningInfoLegacyMissedHeights for ; signInfoIter.Valid(); signInfoIter.Next() { - ctx.Logger().Info(fmt.Sprintf("Migrating Signing Info for key: %v\n", signInfoIter.Key())) + logger.Info("Migrating Signing Info for key", "key", signInfoIter.Key()) var oldInfo types.ValidatorSigningInfo m.keeper.cdc.MustUnmarshal(signInfoIter.Value(), &oldInfo) @@ -59,13 +62,13 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { if len(newSignInfoKeys) != len(newSignInfoVals) { return fmt.Errorf("new sign info data length doesn't match up") } - ctx.Logger().Info("Writing New Signing Info") + logger.Info("Writing New Signing Info") for i := range newSignInfoKeys { bz := m.keeper.cdc.MustMarshal(&newSignInfoVals[i]) store.Set(newSignInfoKeys[i], bz) } - ctx.Logger().Info("Migrating Missed Block Bit Array") + logger.Info("Migrating Missed Block Bit Array") keysToDelete := [][]byte{} iter := sdk.KVStorePrefixIterator(store, types.ValidatorMissedBlockBitArrayKeyPrefix) // Note that we close the iterator twice. 2 iterators cannot be open at the same time due to mutex on the storage @@ -95,7 +98,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { m.keeper.cdc.MustUnmarshal(bz, &signInfo) arr, ok := valMissedMap[consAddr.String()] if !ok { - ctx.Logger().Info(fmt.Sprintf("Migrating for next validator with consAddr: %s\n", consAddr.String())) + logger.Info("Migrating for next validator with consAddr", "consAddr", consAddr) arr = types.ValidatorMissedBlockArrayLegacyMissedHeights{ Address: consAddr.String(), MissedHeights: make([]int64, 0), @@ -115,7 +118,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { return err } - ctx.Logger().Info(fmt.Sprintf("Starting deletion of missed bit array keys (total %d)", len(keysToDelete))) + logger.Info("Starting deletion of missed bit array keys", "count", len(keysToDelete)) interval := len(keysToDelete) / 50 if interval == 0 { interval = 1 @@ -123,11 +126,11 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { for i, key := range keysToDelete { store.Delete(key) if i%interval == 0 { - ctx.Logger().Info(fmt.Sprintf("Processing index %d", i)) + logger.Info("Processing index", "index", i) } } - ctx.Logger().Info("Writing new validator missed heights") + logger.Info("Writing new validator missed heights") var valKeys []string for key := range valMissedMap { valKeys = append(valKeys, key) @@ -139,20 +142,20 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { if err != nil { return err } - ctx.Logger().Info(fmt.Sprintf("Writing missed heights for validator: %s\n", consAddrKey.String())) + logger.Info("Writing missed heights for validator", "validator", consAddrKey) bz := m.keeper.cdc.MustMarshal(&missedBlockArray) store.Set(types.ValidatorMissedBlockBitArrayKey(consAddrKey), bz) } - ctx.Logger().Info("Done migrating") + logger.Info("Done migrating") return nil } // Migrate3to4 migrates from version 3 to 4. func (m Migrator) Migrate3to4(ctx sdk.Context) error { - ctx.Logger().Info("Migrating 3 -> 4") + logger.Info("Migrating 3 -> 4") store := ctx.KVStore(m.keeper.storeKey) valMissedMap := make(map[string]types.ValidatorMissedBlockArray) - ctx.Logger().Info("Migrating Signing Info") + logger.Info("Migrating Signing Info") signInfoIter := sdk.KVStorePrefixIterator(store, types.ValidatorSigningInfoKeyPrefix) var newSignInfoKeys [][]byte var newSignInfoVals []types.ValidatorSigningInfo @@ -161,7 +164,7 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { index := window - 1 for ; signInfoIter.Valid(); signInfoIter.Next() { - ctx.Logger().Info(fmt.Sprintf("Migrating Signing Info for key: %v\n", signInfoIter.Key())) + logger.Info("Migrating Signing Info for key", "key", signInfoIter.Key()) var oldInfo types.ValidatorSigningInfoLegacyMissedHeights m.keeper.cdc.MustUnmarshal(signInfoIter.Value(), &oldInfo) @@ -183,14 +186,14 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { if len(newSignInfoKeys) != len(newSignInfoVals) { return fmt.Errorf("new sign info data length doesn't match up") } - ctx.Logger().Info("Writing New Signing Info") + logger.Info("Writing New Signing Info") for i := range newSignInfoKeys { bz := m.keeper.cdc.MustMarshal(&newSignInfoVals[i]) store.Set(newSignInfoKeys[i], bz) } // need to turn this into a bool array - ctx.Logger().Info("Migrating Missed Block Bit Array") + logger.Info("Migrating Missed Block Bit Array") startWindowHeight := ctx.BlockHeight() - window iter := sdk.KVStorePrefixIterator(store, types.ValidatorMissedBlockBitArrayKeyPrefix) defer func() { _ = iter.Close() }() @@ -203,7 +206,7 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { consAddrBytes := key[2:] consAddr := sdk.ConsAddress(consAddrBytes) - ctx.Logger().Info(fmt.Sprintf("Migrating for next validator with consAddr: %s\n", consAddr.String())) + logger.Info("Migrating for next validator with consAddr", "consAddr", consAddr) if window <= 0 { return fmt.Errorf("invalid signed blocks window: %d", window) @@ -229,7 +232,7 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { } } - ctx.Logger().Info("Writing new validator missed blocks infos") + logger.Info("Writing new validator missed blocks infos") var valKeys []string for key := range valMissedMap { valKeys = append(valKeys, key) @@ -241,9 +244,9 @@ func (m Migrator) Migrate3to4(ctx sdk.Context) error { if err != nil { return err } - ctx.Logger().Info(fmt.Sprintf("Writing missed heights for validator: %s\n", consAddr.String())) + logger.Info("Writing missed heights for validator", "validator", consAddr) m.keeper.SetValidatorMissedBlocks(ctx, consAddr, missedBlockArray) } - ctx.Logger().Info("Done migrating") + logger.Info("Done migrating") return nil } diff --git a/sei-cosmos/x/staking/handler_test.go b/sei-cosmos/x/staking/handler_test.go index f14a4fc0ac..878fd4e8c9 100644 --- a/sei-cosmos/x/staking/handler_test.go +++ b/sei-cosmos/x/staking/handler_test.go @@ -1146,7 +1146,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := staking.NewHandler(k) - res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized staking message type")) diff --git a/sei-cosmos/x/staking/keeper/delegation.go b/sei-cosmos/x/staking/keeper/delegation.go index 425926af6e..51de4ad5ed 100644 --- a/sei-cosmos/x/staking/keeper/delegation.go +++ b/sei-cosmos/x/staking/keeper/delegation.go @@ -8,8 +8,11 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "staking", "keeper") + // GetDelegation returns a specific delegation. func (k Keeper) GetDelegation(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, @@ -656,9 +659,7 @@ func (k Keeper) Delegate( newVotingPowerRatio := validatorNewTotalPower.ToDec().Quo(newTotalPower.ToDec()) maxVotingPowerRatio := k.MaxVotingPowerRatio(ctx) if newVotingPowerRatio.GT(maxVotingPowerRatio) { - k.Logger(ctx).Error( - fmt.Sprintf("validator's voting power ratio exceeds the max allowed ratio: %s > %s\n", newVotingPowerRatio.String(), maxVotingPowerRatio.String()), - ) + logger.Error("validator's voting power ratio exceeds the max allowed ratio", "current", newVotingPowerRatio, "max", maxVotingPowerRatio) return sdk.ZeroDec(), types.ErrExceedMaxVotingPowerRatio } } diff --git a/sei-cosmos/x/staking/keeper/keeper.go b/sei-cosmos/x/staking/keeper/keeper.go index 806b8e3da3..f17ddd0377 100644 --- a/sei-cosmos/x/staking/keeper/keeper.go +++ b/sei-cosmos/x/staking/keeper/keeper.go @@ -3,8 +3,6 @@ package keeper import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" @@ -60,11 +58,6 @@ func (k Keeper) GetStoreKey() sdk.StoreKey { return k.storeKey } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // Set the validator hooks func (k *Keeper) SetHooks(sh types.StakingHooks) *Keeper { if k.hooks != nil { diff --git a/sei-cosmos/x/staking/keeper/slash.go b/sei-cosmos/x/staking/keeper/slash.go index 5d0e4c604d..49b04c4890 100644 --- a/sei-cosmos/x/staking/keeper/slash.go +++ b/sei-cosmos/x/staking/keeper/slash.go @@ -29,7 +29,6 @@ import ( // Infraction was committed at the current height or at a past height, // not at a height in the future func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeight int64, power int64, slashFactor sdk.Dec) { - logger := k.Logger(ctx) if slashFactor.IsNegative() { panic(fmt.Errorf("attempted to slash with a negative slash factor: %v", slashFactor)) @@ -50,7 +49,7 @@ func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeigh // Log the slash attempt for future reference (maybe we should tag it too) logger.Error( "WARNING: ignored attempt to slash a nonexistent validator; we recommend you investigate immediately", - "validator", consAddr.String(), + "validator", consAddr, ) return } @@ -153,7 +152,6 @@ func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeigh func (k Keeper) Jail(ctx sdk.Context, consAddr sdk.ConsAddress) { validator := k.mustGetValidatorByConsAddr(ctx, consAddr) k.jailValidator(ctx, validator) - logger := k.Logger(ctx) logger.Info("validator jailed", "validator", consAddr) } @@ -161,7 +159,6 @@ func (k Keeper) Jail(ctx sdk.Context, consAddr sdk.ConsAddress) { func (k Keeper) Unjail(ctx sdk.Context, consAddr sdk.ConsAddress) { validator := k.mustGetValidatorByConsAddr(ctx, consAddr) k.unjailValidator(ctx, validator) - logger := k.Logger(ctx) logger.Info("validator un-jailed", "validator", consAddr) } diff --git a/sei-cosmos/x/upgrade/abci.go b/sei-cosmos/x/upgrade/abci.go index 3b6d58ee0a..695e4a102c 100644 --- a/sei-cosmos/x/upgrade/abci.go +++ b/sei-cosmos/x/upgrade/abci.go @@ -2,6 +2,7 @@ package upgrade import ( "fmt" + "os" "time" "github.com/armon/go-metrics" @@ -9,8 +10,11 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/keeper" "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("cosmos", "x", "upgrade") + // BeginBlock will check if there is a scheduled plan and if it is ready to be executed. // If the current height is in the provided set of heights to skip, it will skip and clear the upgrade plan. // If it is ready, it will execute it if the handler is installed, and panic/abort otherwise. @@ -73,7 +77,7 @@ func BeginBlocker(k keeper.Keeper, ctx sdk.Context) { details, err := plan.UpgradeDetails() if err != nil { - ctx.Logger().Error("failed to parse upgrade details", "err", err) + logger.Error("failed to parse upgrade details", "err", err) } // If running a pending minor release, apply the upgrade if handler is present @@ -82,7 +86,7 @@ func BeginBlocker(k keeper.Keeper, ctx sdk.Context) { // if not yet present, then emit a scheduled log (every 100 blocks, to reduce logs) if !k.HasHandler(plan.Name) && !k.IsSkipHeight(plan.Height) { if ctx.BlockHeight()%100 == 0 { - ctx.Logger().Info(BuildUpgradeScheduledMsg(plan)) + logger.Info(BuildUpgradeScheduledMsg(plan)) } } return @@ -91,7 +95,7 @@ func BeginBlocker(k keeper.Keeper, ctx sdk.Context) { // if we have a handler for a non-minor upgrade, that means it updated too early and must stop if k.HasHandler(plan.Name) { downgradeMsg := fmt.Sprintf("BINARY UPDATED BEFORE TRIGGER! UPGRADE \"%s\" - in binary but not executed on chain", plan.Name) - ctx.Logger().Error(downgradeMsg) + logger.Error(downgradeMsg) panic(downgradeMsg) } } @@ -106,20 +110,24 @@ func panicUpgradeNeeded(k keeper.Keeper, ctx sdk.Context, plan types.Plan) { } upgradeMsg := BuildUpgradeNeededMsg(plan) - ctx.Logger().Error(upgradeMsg) + logger.Error(upgradeMsg) + // Emit the raw upgrade message to stderr so that cosmovisor's log scanner + // can match it. Structured log handlers (JSON, text) escape the inner + // double-quotes, which breaks the cosmovisor upgrade regex. + fmt.Fprintln(os.Stderr, upgradeMsg) panic(upgradeMsg) } func applyUpgrade(k keeper.Keeper, ctx sdk.Context, plan types.Plan) { - ctx.Logger().Info(fmt.Sprintf("applying upgrade \"%s\" at %s", plan.Name, plan.DueAt())) + logger.Info("applying upgrade", "name", plan.Name, "at", plan.DueAt()) k.ApplyUpgrade(ctx, plan) } // skipUpgrade logs a message that the upgrade has been skipped and clears the upgrade plan. func skipUpgrade(k keeper.Keeper, ctx sdk.Context, plan types.Plan) { skipUpgradeMsg := fmt.Sprintf("UPGRADE \"%s\" SKIPPED at %d: %s", plan.Name, plan.Height, plan.Info) - ctx.Logger().Info(skipUpgradeMsg) + logger.Info(skipUpgradeMsg) k.ClearUpgradePlan(ctx) } diff --git a/sei-cosmos/x/upgrade/keeper/keeper.go b/sei-cosmos/x/upgrade/keeper/keeper.go index eee3d36a8b..c5623f738f 100644 --- a/sei-cosmos/x/upgrade/keeper/keeper.go +++ b/sei-cosmos/x/upgrade/keeper/keeper.go @@ -10,7 +10,6 @@ import ( "sort" "github.com/armon/go-metrics" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" "github.com/sei-protocol/sei-chain/sei-cosmos/codec" @@ -328,11 +327,6 @@ func (k Keeper) ClearUpgradePlan(ctx sdk.Context) { store.Delete(types.PlanKey()) } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // GetUpgradePlan returns the currently scheduled Plan if any, setting havePlan to true if there is a scheduled // upgrade or false if there is none func (k Keeper) GetUpgradePlan(ctx sdk.Context) (plan types.Plan, havePlan bool) { diff --git a/sei-cosmos/x/upgrade/types/plan_test.go b/sei-cosmos/x/upgrade/types/plan_test.go index 4e64f0a4a8..9174c98900 100644 --- a/sei-cosmos/x/upgrade/types/plan_test.go +++ b/sei-cosmos/x/upgrade/types/plan_test.go @@ -4,7 +4,6 @@ import ( "testing" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -148,7 +147,7 @@ func TestShouldExecute(t *testing.T) { for name, tc := range cases { tc := tc // copy to local variable for scopelint t.Run(name, func(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false) should := tc.p.ShouldExecute(ctx) assert.Equal(t, tc.expected, should) }) diff --git a/sei-cosmos/x/upgrade/types/storeloader_test.go b/sei-cosmos/x/upgrade/types/storeloader_test.go index 89ed99b415..65e7457f6e 100644 --- a/sei-cosmos/x/upgrade/types/storeloader_test.go +++ b/sei-cosmos/x/upgrade/types/storeloader_test.go @@ -8,7 +8,6 @@ import ( "testing" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" @@ -25,12 +24,8 @@ func useUpgradeLoader(height int64, upgrades *store.StoreUpgrades) func(*baseapp } } -func defaultLogger() log.Logger { - return log.NewNopLogger() -} - func initStore(t *testing.T, db dbm.DB, storeKey string, k, v []byte) { - rs := rootmulti.NewStore(db, log.NewNopLogger()) + rs := rootmulti.NewStore(db) rs.SetPruning(store.PruneNothing) key := sdk.NewKVStoreKey(storeKey) rs.MountStoreWithDB(key, store.StoreTypeIAVL, nil) @@ -47,7 +42,7 @@ func initStore(t *testing.T, db dbm.DB, storeKey string, k, v []byte) { } func checkStore(t *testing.T, db dbm.DB, ver int64, storeKey string, k, v []byte) { - rs := rootmulti.NewStore(db, log.NewNopLogger()) + rs := rootmulti.NewStore(db) rs.SetPruning(store.PruneNothing) key := sdk.NewKVStoreKey(storeKey) rs.MountStoreWithDB(key, store.StoreTypeIAVL, nil) @@ -119,7 +114,7 @@ func TestSetLoader(t *testing.T) { // load the app with the existing db opts := []func(*baseapp.BaseApp){baseapp.SetPruning(store.PruneNothing)} - origapp := baseapp.NewBaseApp(t.Name(), defaultLogger(), db, nil, nil, &testutil.TestAppOpts{}, opts...) + origapp := baseapp.NewBaseApp(t.Name(), db, nil, nil, &testutil.TestAppOpts{}, opts...) origapp.MountStores(sdk.NewKVStoreKey(tc.origStoreKey)) err := origapp.LoadLatestVersion() require.Nil(t, err) @@ -135,7 +130,7 @@ func TestSetLoader(t *testing.T) { } // load the new app with the original app db - app := baseapp.NewBaseApp(t.Name(), defaultLogger(), db, nil, nil, &testutil.TestAppOpts{}, opts...) + app := baseapp.NewBaseApp(t.Name(), db, nil, nil, &testutil.TestAppOpts{}, opts...) app.MountStores(sdk.NewKVStoreKey(tc.loadStoreKey)) err = app.LoadLatestVersion() require.Nil(t, err) diff --git a/sei-db/common/logger/logger.go b/sei-db/common/logger/logger.go deleted file mode 100644 index 0e433a7af8..0000000000 --- a/sei-db/common/logger/logger.go +++ /dev/null @@ -1,20 +0,0 @@ -package logger - -// Logger is what any CometBFT library should take. -type Logger interface { - Debug(msg string, keyvals ...interface{}) - Info(msg string, keyvals ...interface{}) - Error(msg string, keyvals ...interface{}) -} - -type nopLogger struct{} - -// Interface assertions -var _ Logger = (*nopLogger)(nil) - -// NewNopLogger returns a logger that doesn't do anything. -func NewNopLogger() Logger { return &nopLogger{} } - -func (nopLogger) Info(string, ...interface{}) {} -func (nopLogger) Debug(string, ...interface{}) {} -func (nopLogger) Error(string, ...interface{}) {} diff --git a/sei-db/db_engine/pebbledb/mvcc/db.go b/sei-db/db_engine/pebbledb/mvcc/db.go index 6faca88e99..60581eb3c2 100644 --- a/sei-db/db_engine/pebbledb/mvcc/db.go +++ b/sei-db/db_engine/pebbledb/mvcc/db.go @@ -20,7 +20,6 @@ import ( "golang.org/x/exp/slices" errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" @@ -171,7 +170,7 @@ func OpenDB(dataDir string, config config.StateStoreConfig) (types.StateStore, e return nil, errors.New("KeepRecent must be non-negative") } walKeepRecent := math.Max(MinWALEntriesToKeep, float64(config.AsyncWriteBuffer+1)) - streamHandler, err := wal.NewChangelogWAL(logger.NewNopLogger(), utils.GetChangelogPath(dataDir), wal.Config{ + streamHandler, err := wal.NewChangelogWAL(utils.GetChangelogPath(dataDir), wal.Config{ KeepRecent: uint64(walKeepRecent), PruneInterval: time.Duration(config.PruneIntervalSeconds) * time.Second, }) diff --git a/sei-db/db_engine/rocksdb/mvcc/db.go b/sei-db/db_engine/rocksdb/mvcc/db.go index 28725351d2..44d9683398 100644 --- a/sei-db/db_engine/rocksdb/mvcc/db.go +++ b/sei-db/db_engine/rocksdb/mvcc/db.go @@ -16,7 +16,6 @@ import ( "golang.org/x/exp/slices" "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" @@ -114,7 +113,7 @@ func OpenDB(dataDir string, config config.StateStoreConfig) (*Database, error) { } database.latestVersion.Store(latestVersion) walKeepRecent := math.Max(MinWALEntriesToKeep, float64(config.AsyncWriteBuffer+1)) - streamHandler, err := wal.NewChangelogWAL(logger.NewNopLogger(), utils.GetChangelogPath(dataDir), wal.Config{ + streamHandler, err := wal.NewChangelogWAL(utils.GetChangelogPath(dataDir), wal.Config{ KeepRecent: uint64(walKeepRecent), PruneInterval: time.Duration(config.PruneIntervalSeconds) * time.Second, }) diff --git a/sei-db/ledger_db/parquet/store.go b/sei-db/ledger_db/parquet/store.go index 28b1941947..59c4cfd26a 100644 --- a/sei-db/ledger_db/parquet/store.go +++ b/sei-db/ledger_db/parquet/store.go @@ -13,10 +13,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/parquet-go/parquet-go" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbwal "github.com/sei-protocol/sei-chain/sei-db/wal" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("db", "ledger-db", "parquet") + const ( maxInt64 = int64(^uint64(0) >> 1) maxUint32 = ^uint32(0) @@ -87,7 +89,6 @@ type Store struct { earliestVersion atomic.Int64 closeOnce sync.Once - log dbLogger.Logger pruneStop chan struct{} // WarmupRecords holds receipts recovered from WAL for cache warming. @@ -99,7 +100,7 @@ type Store struct { } // NewStore creates a new parquet store. -func NewStore(log dbLogger.Logger, cfg StoreConfig) (*Store, error) { +func NewStore(cfg StoreConfig) (*Store, error) { storeCfg := resolveStoreConfig(cfg) if err := os.MkdirAll(cfg.DBDirectory, 0o750); err != nil { @@ -112,7 +113,7 @@ func NewStore(log dbLogger.Logger, cfg StoreConfig) (*Store, error) { } walDir := filepath.Join(cfg.DBDirectory, "parquet-wal") - receiptWAL, err := NewWAL(log, walDir) + receiptWAL, err := NewWAL(walDir) if err != nil { return nil, err } @@ -124,7 +125,6 @@ func NewStore(log dbLogger.Logger, cfg StoreConfig) (*Store, error) { config: storeCfg, Reader: reader, wal: receiptWAL, - log: log, pruneStop: make(chan struct{}), } @@ -375,8 +375,8 @@ func (s *Store) startPruning(pruneIntervalSeconds int64) { pruneBeforeBlock := latestVersion - s.config.KeepRecent if pruneBeforeBlock > 0 { pruned := s.pruneOldFiles(uint64(pruneBeforeBlock)) - if pruned > 0 && s.log != nil { - s.log.Info(fmt.Sprintf("Pruned %d parquet file pairs older than block %d", pruned, pruneBeforeBlock)) + if pruned > 0 { + logger.Info("Pruned parquet file pairs older than block", "pruned-count", pruned, "block", pruneBeforeBlock) } } @@ -408,9 +408,7 @@ func (s *Store) pruneOldFiles(pruneBeforeBlock uint64) int { s.Reader.RemoveTrackedReceiptFile(filePair.StartBlock) if err := removeFile(filePair.ReceiptFile); err != nil && !os.IsNotExist(err) { s.Reader.AddTrackedReceiptFile(filePair.StartBlock) - if s.log != nil { - s.log.Error("failed to prune receipt file", "file", filePair.ReceiptFile, "err", err) - } + logger.Error("failed to prune receipt file", "file", filePair.ReceiptFile, "err", err) } else { receiptRemoved = true } @@ -421,9 +419,7 @@ func (s *Store) pruneOldFiles(pruneBeforeBlock uint64) int { s.Reader.RemoveTrackedLogFile(filePair.StartBlock) if err := removeFile(filePair.LogFile); err != nil && !os.IsNotExist(err) { s.Reader.AddTrackedLogFile(filePair.StartBlock) - if s.log != nil { - s.log.Error("failed to prune log file", "file", filePair.LogFile, "err", err) - } + logger.Error("failed to prune log file", "file", filePair.LogFile, "err", err) } else { logRemoved = true } diff --git a/sei-db/ledger_db/parquet/store_config_test.go b/sei-db/ledger_db/parquet/store_config_test.go index 2fba4afb66..98e1f888ff 100644 --- a/sei-db/ledger_db/parquet/store_config_test.go +++ b/sei-db/ledger_db/parquet/store_config_test.go @@ -8,7 +8,6 @@ import ( "testing" pqgo "github.com/parquet-go/parquet-go" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/stretchr/testify/require" ) @@ -37,7 +36,7 @@ func (m *mockParquetWAL) Replay(_, _ uint64, _ func(index uint64, entry WALEntry func (m *mockParquetWAL) Close() error { return nil } func TestNewStoreAppliesConfiguredIntervals(t *testing.T) { - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: t.TempDir(), BlockFlushInterval: 7, MaxBlocksPerFile: 11, @@ -54,7 +53,7 @@ func TestNewStoreAppliesConfiguredIntervals(t *testing.T) { } func TestNewStoreUsesDefaultIntervalsWhenUnset(t *testing.T) { - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: t.TempDir(), }) require.NoError(t, err) @@ -66,7 +65,7 @@ func TestNewStoreUsesDefaultIntervalsWhenUnset(t *testing.T) { } func TestPruneOldFilesKeepsTrackingOnDeleteFailure(t *testing.T) { - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: t.TempDir(), }) require.NoError(t, err) @@ -120,7 +119,7 @@ func TestCorruptLastFileDeletedOnStartup(t *testing.T) { corruptLog := filepath.Join(dir, "logs_1100.parquet") require.NoError(t, os.WriteFile(corruptLog, []byte("not a parquet file"), 0o644)) - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: dir, }) require.NoError(t, err) @@ -152,7 +151,7 @@ func TestCorruptLogFileUntracksReceiptCounterpart(t *testing.T) { corruptLog := filepath.Join(dir, "logs_600.parquet") require.NoError(t, os.WriteFile(corruptLog, []byte("not a parquet file"), 0o644)) - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: dir, }) require.NoError(t, err) @@ -171,7 +170,7 @@ func TestCorruptLogFileUntracksReceiptCounterpart(t *testing.T) { func TestLazyInitCreatesFileOnFirstWrite(t *testing.T) { dir := t.TempDir() - store, err := NewStore(dbLogger.NewNopLogger(), StoreConfig{ + store, err := NewStore(StoreConfig{ DBDirectory: dir, }) require.NoError(t, err) diff --git a/sei-db/ledger_db/parquet/wal.go b/sei-db/ledger_db/parquet/wal.go index 6c7fb299e8..24a4729332 100644 --- a/sei-db/ledger_db/parquet/wal.go +++ b/sei-db/ledger_db/parquet/wal.go @@ -6,7 +6,6 @@ import ( "fmt" "os" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbwal "github.com/sei-protocol/sei-chain/sei-db/wal" ) @@ -105,7 +104,7 @@ func putUint32FromInt(dst []byte, value int) { } // NewWAL creates a new WAL for parquet receipts. -func NewWAL(logger dbLogger.Logger, dir string) (dbwal.GenericWAL[WALEntry], error) { +func NewWAL(dir string) (dbwal.GenericWAL[WALEntry], error) { if err := os.MkdirAll(dir, 0o750); err != nil { return nil, err } @@ -113,7 +112,6 @@ func NewWAL(logger dbLogger.Logger, dir string) (dbwal.GenericWAL[WALEntry], err context.Background(), encodeWALEntry, decodeWALEntry, - logger, dir, dbwal.Config{}, ) diff --git a/sei-db/ledger_db/receipt/export_test.go b/sei-db/ledger_db/receipt/export_test.go index b20de15eac..e2d2aaf09b 100644 --- a/sei-db/ledger_db/receipt/export_test.go +++ b/sei-db/ledger_db/receipt/export_test.go @@ -2,14 +2,13 @@ package receipt import ( ethtypes "github.com/ethereum/go-ethereum/core/types" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" types2 "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/x/evm/types" ) // RecoverReceiptStore exposes recoverReceiptStore for testing. -func RecoverReceiptStore(log dbLogger.Logger, changelogPath string, db types2.StateStore) error { - return recoverReceiptStore(log, changelogPath, db) +func RecoverReceiptStore(changelogPath string, db types2.StateStore) error { + return recoverReceiptStore(changelogPath, db) } // GetLogsForTx exposes getLogsForTx for testing. diff --git a/sei-db/ledger_db/receipt/parquet_crash_test.go b/sei-db/ledger_db/receipt/parquet_crash_test.go index 2ddbc59a47..9c9e44597e 100644 --- a/sei-db/ledger_db/receipt/parquet_crash_test.go +++ b/sei-db/ledger_db/receipt/parquet_crash_test.go @@ -12,7 +12,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/eth/filters" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/ledger_db/parquet" "github.com/stretchr/testify/assert" @@ -85,7 +84,7 @@ func TestCrashRecoveryAtEachHookPoint(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) pqStore := extractParquetStore(t, store) @@ -137,7 +136,7 @@ func TestCrashRecoveryAtEachHookPoint(t *testing.T) { // --- Reopen and verify recovery --- - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -218,7 +217,7 @@ func TestCrashRecoveryStress(t *testing.T) { nextBlock := uint64(1) for crash := 0; crash < numCrashes; crash++ { - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) pqStore := extractParquetStore(t, store) @@ -261,7 +260,7 @@ func TestCrashRecoveryStress(t *testing.T) { // Final reopen: every block (including crash blocks) should be // recoverable because the WAL entry is always written first. - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -300,7 +299,7 @@ func TestSlowFlushWithConcurrentReads(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) diff --git a/sei-db/ledger_db/receipt/parquet_store.go b/sei-db/ledger_db/receipt/parquet_store.go index 4d17f74f1c..db24aff47e 100644 --- a/sei-db/ledger_db/receipt/parquet_store.go +++ b/sei-db/ledger_db/receipt/parquet_store.go @@ -8,7 +8,6 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/filters" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/ledger_db/parquet" "github.com/sei-protocol/sei-chain/x/evm/types" @@ -20,14 +19,14 @@ type parquetReceiptStore struct { storeKey sdk.StoreKey } -func newParquetReceiptStore(log dbLogger.Logger, cfg dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { +func newParquetReceiptStore(cfg dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { storeCfg := parquet.StoreConfig{ DBDirectory: cfg.DBDirectory, KeepRecent: int64(cfg.KeepRecent), PruneIntervalSeconds: int64(cfg.PruneIntervalSeconds), } - store, err := parquet.NewStore(log, storeCfg) + store, err := parquet.NewStore(storeCfg) if err != nil { return nil, err } diff --git a/sei-db/ledger_db/receipt/parquet_store_test.go b/sei-db/ledger_db/receipt/parquet_store_test.go index 78e3f8a669..45cfc47e00 100644 --- a/sei-db/ledger_db/receipt/parquet_store_test.go +++ b/sei-db/ledger_db/receipt/parquet_store_test.go @@ -10,7 +10,6 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/filters" pqgo "github.com/parquet-go/parquet-go" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/ledger_db/parquet" "github.com/sei-protocol/sei-chain/x/evm/types" @@ -83,7 +82,7 @@ func TestParquetReceiptStoreCacheLogs(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -112,7 +111,7 @@ func TestParquetReceiptStoreReopenQueries(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) txHash := common.HexToHash("0x20") @@ -125,7 +124,7 @@ func TestParquetReceiptStoreReopenQueries(t *testing.T) { })) require.NoError(t, store.Close()) - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -149,7 +148,7 @@ func TestParquetReceiptStoreWALReplay(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) txHash := common.HexToHash("0x30") @@ -174,7 +173,7 @@ func TestParquetReceiptStoreWALReplay(t *testing.T) { require.NoError(t, os.Remove(file)) } - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -190,7 +189,7 @@ func TestParquetFilePruning(t *testing.T) { cfg.DBDirectory = t.TempDir() cfg.KeepRecent = 600 // Keep 600 blocks, so files with blocks < (latest - 600) get pruned - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) // Write receipts across multiple files (500 blocks per file) @@ -219,7 +218,7 @@ func TestParquetFilePruning(t *testing.T) { require.GreaterOrEqual(t, len(logFiles), 2, "should have at least 2 log files") // Reopen store - pruning will run in background - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -269,7 +268,7 @@ func TestParquetPruneOldFiles(t *testing.T) { cfg.DBDirectory = t.TempDir() cfg.KeepRecent = 0 // Disable auto-pruning - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) // Write enough data to create multiple files @@ -288,7 +287,7 @@ func TestParquetPruneOldFiles(t *testing.T) { require.GreaterOrEqual(t, len(receiptFilesBefore), 2, "should have at least 2 receipt files") // Reopen store - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -334,7 +333,7 @@ func TestParquetCorruptFileRecoveryFromWAL(t *testing.T) { cfg.Backend = "parquet" cfg.DBDirectory = t.TempDir() - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) require.NoError(t, err) txHash := common.HexToHash("0x40") @@ -358,7 +357,7 @@ func TestParquetCorruptFileRecoveryFromWAL(t *testing.T) { // Reopen — should delete the corrupt file and recover from WAL. // The file with the same name may be re-created by WAL replay (the // receipt is at the same block number), which is expected. - store, err = NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err = NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) diff --git a/sei-db/ledger_db/receipt/receipt_bench_parquet_test.go b/sei-db/ledger_db/receipt/receipt_bench_parquet_test.go index 313201015d..1d2871a019 100644 --- a/sei-db/ledger_db/receipt/receipt_bench_parquet_test.go +++ b/sei-db/ledger_db/receipt/receipt_bench_parquet_test.go @@ -4,7 +4,6 @@ import ( "fmt" "testing" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" ) @@ -19,7 +18,7 @@ func benchmarkParquetWriteAsync(b *testing.B, receiptsPerBlock int, blocks int) cfg.PruneIntervalSeconds = 10 cfg.Backend = receiptBackendParquet - store, err := newReceiptBackend(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := newReceiptBackend(cfg, storeKey) if err != nil { b.Fatalf("failed to create receipt store: %v", err) } diff --git a/sei-db/ledger_db/receipt/receipt_bench_read_test.go b/sei-db/ledger_db/receipt/receipt_bench_read_test.go index 419e9f933c..7682dc30e5 100644 --- a/sei-db/ledger_db/receipt/receipt_bench_read_test.go +++ b/sei-db/ledger_db/receipt/receipt_bench_read_test.go @@ -12,7 +12,6 @@ import ( "github.com/ethereum/go-ethereum/eth/filters" "github.com/sei-protocol/sei-chain/evmrpc/ethbloom" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb/mvcc" "github.com/sei-protocol/sei-chain/x/evm/types" @@ -248,7 +247,7 @@ func setupReadBenchmark(b *testing.B, backend string, blocks, receiptsPerBlock, cfg.PruneIntervalSeconds = 0 cfg.Backend = backend - store, err := NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := NewReceiptStore(cfg, storeKey) if err != nil { b.Fatalf("failed to create %s receipt store: %v", backend, err) } diff --git a/sei-db/ledger_db/receipt/receipt_bench_test.go b/sei-db/ledger_db/receipt/receipt_bench_test.go index e2d65943d8..6aea0bc376 100644 --- a/sei-db/ledger_db/receipt/receipt_bench_test.go +++ b/sei-db/ledger_db/receipt/receipt_bench_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb/mvcc" "github.com/sei-protocol/sei-chain/sei-db/proto" @@ -40,7 +39,7 @@ func benchmarkPebbleWriteAsync(b *testing.B, receiptsPerBlock int, blocks int) { cfg.PruneIntervalSeconds = 10 cfg.Backend = receiptBackendPebble - store, err := newReceiptBackend(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := newReceiptBackend(cfg, storeKey) if err != nil { b.Fatalf("failed to create receipt store: %v", err) } diff --git a/sei-db/ledger_db/receipt/receipt_store.go b/sei-db/ledger_db/receipt/receipt_store.go index 8776a21a92..9d08f2ec8c 100644 --- a/sei-db/ledger_db/receipt/receipt_store.go +++ b/sei-db/ledger_db/receipt/receipt_store.go @@ -12,7 +12,6 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/filters" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbutils "github.com/sei-protocol/sei-chain/sei-db/common/utils" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb/mvcc" @@ -22,8 +21,11 @@ import ( iavl "github.com/sei-protocol/sei-chain/sei-iavl" "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("db", "ledger-db", "receipt") + // Sentinel errors for consistent error checking. var ( ErrNotFound = errors.New("receipt not found") @@ -75,18 +77,15 @@ func normalizeReceiptBackend(backend string) string { } } -func NewReceiptStore(log dbLogger.Logger, config dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { - backend, err := newReceiptBackend(log, config, storeKey) +func NewReceiptStore(config dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { + backend, err := newReceiptBackend(config, storeKey) if err != nil { return nil, err } return newCachedReceiptStore(backend), nil } -func newReceiptBackend(log dbLogger.Logger, config dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { - if log == nil { - log = dbLogger.NewNopLogger() - } +func newReceiptBackend(config dbconfig.ReceiptStoreConfig, storeKey sdk.StoreKey) (ReceiptStore, error) { if config.DBDirectory == "" { return nil, errors.New("receipt store db directory not configured") } @@ -94,7 +93,7 @@ func newReceiptBackend(log dbLogger.Logger, config dbconfig.ReceiptStoreConfig, backend := normalizeReceiptBackend(config.Backend) switch backend { case receiptBackendParquet: - return newParquetReceiptStore(log, config, storeKey) + return newParquetReceiptStore(config, storeKey) case receiptBackendPebble: ssConfig := dbconfig.DefaultStateStoreConfig() ssConfig.DBDirectory = config.DBDirectory @@ -109,7 +108,7 @@ func newReceiptBackend(log dbLogger.Logger, config dbconfig.ReceiptStoreConfig, if err != nil { return nil, err } - if err := recoverReceiptStore(log, dbutils.GetChangelogPath(ssConfig.DBDirectory), db); err != nil { + if err := recoverReceiptStore(dbutils.GetChangelogPath(ssConfig.DBDirectory), db); err != nil { _ = db.Close() return nil, err } @@ -118,7 +117,7 @@ func newReceiptBackend(log dbLogger.Logger, config dbconfig.ReceiptStoreConfig, storeKey: storeKey, stopPruning: make(chan struct{}), } - startReceiptPruning(log, db, int64(ssConfig.KeepRecent), int64(ssConfig.PruneIntervalSeconds), rs.stopPruning, &rs.pruneWg) + startReceiptPruning(db, int64(ssConfig.KeepRecent), int64(ssConfig.PruneIntervalSeconds), rs.stopPruning, &rs.pruneWg) return rs, nil default: return nil, fmt.Errorf("unsupported receipt store backend: %s", config.Backend) @@ -247,10 +246,10 @@ func (s *receiptStore) Close() error { return err } -func recoverReceiptStore(log dbLogger.Logger, changelogPath string, db seidbtypes.StateStore) error { +func recoverReceiptStore(changelogPath string, db seidbtypes.StateStore) error { ssLatestVersion := db.GetLatestVersion() - log.Info(fmt.Sprintf("Recovering from changelog %s with latest receipt version %d", changelogPath, ssLatestVersion)) - streamHandler, err := wal.NewChangelogWAL(log, changelogPath, wal.Config{}) + logger.Info("Recovering from changelog with latest receipt version", "changelog-path", changelogPath, "version", ssLatestVersion) + streamHandler, err := wal.NewChangelogWAL(changelogPath, wal.Config{}) if err != nil { return err } @@ -284,7 +283,7 @@ func recoverReceiptStore(log dbLogger.Logger, changelogPath string, db seidbtype } // Replay from the offset where the version is larger than SS store latest version targetStartOffset := curOffset - log.Info(fmt.Sprintf("Start replaying changelog to recover ReceiptStore from offset %d to %d", targetStartOffset, lastOffset)) + logger.Info("Start replaying changelog to recover ReceiptStore", "from-offset", targetStartOffset, "to-offset", lastOffset) if targetStartOffset < lastOffset { return streamHandler.Replay(targetStartOffset, lastOffset, func(index uint64, entry proto.ChangelogEntry) error { // commit to state store @@ -300,7 +299,7 @@ func recoverReceiptStore(log dbLogger.Logger, changelogPath string, db seidbtype return nil } -func startReceiptPruning(log dbLogger.Logger, db seidbtypes.StateStore, keepRecent int64, pruneInterval int64, stopCh <-chan struct{}, wg *sync.WaitGroup) { +func startReceiptPruning(db seidbtypes.StateStore, keepRecent int64, pruneInterval int64, stopCh <-chan struct{}, wg *sync.WaitGroup) { if keepRecent <= 0 || pruneInterval <= 0 { return } @@ -310,7 +309,7 @@ func startReceiptPruning(log dbLogger.Logger, db seidbtypes.StateStore, keepRece for { select { case <-stopCh: - log.Info("Receipt store pruning goroutine stopped") + logger.Info("Receipt store pruning goroutine stopped") return default: } @@ -321,9 +320,9 @@ func startReceiptPruning(log dbLogger.Logger, db seidbtypes.StateStore, keepRece if pruneVersion > 0 { // prune all versions up to and including the pruneVersion if err := db.Prune(pruneVersion); err != nil { - log.Error("failed to prune receipt store till", "version", pruneVersion, "err", err) + logger.Error("failed to prune receipt store till", "version", pruneVersion, "err", err) } - log.Info(fmt.Sprintf("Pruned receipt store till version %d took %s\n", pruneVersion, time.Since(pruneStartTime))) + logger.Info("Pruned receipt store till version", "version", pruneVersion, "took", time.Since(pruneStartTime)) } // Generate a random percentage (between 0% and 100%) of the fixed interval as a delay @@ -333,7 +332,7 @@ func startReceiptPruning(log dbLogger.Logger, db seidbtypes.StateStore, keepRece select { case <-stopCh: - log.Info("Receipt store pruning goroutine stopped") + logger.Info("Receipt store pruning goroutine stopped") return case <-time.After(sleepDuration): // Continue to next iteration diff --git a/sei-db/ledger_db/receipt/receipt_store_test.go b/sei-db/ledger_db/receipt/receipt_store_test.go index a6a368b047..7ce696e350 100644 --- a/sei-db/ledger_db/receipt/receipt_store_test.go +++ b/sei-db/ledger_db/receipt/receipt_store_test.go @@ -10,7 +10,6 @@ import ( storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" "github.com/sei-protocol/sei-chain/sei-cosmos/testutil" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - dbLogger "github.com/sei-protocol/sei-chain/sei-db/common/logger" dbutils "github.com/sei-protocol/sei-chain/sei-db/common/utils" dbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb/mvcc" @@ -30,7 +29,7 @@ func setupReceiptStore(t *testing.T) (receipt.ReceiptStore, sdk.Context, storety cfg := dbconfig.DefaultReceiptStoreConfig() cfg.DBDirectory = t.TempDir() cfg.KeepRecent = 0 - store, err := receipt.NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := receipt.NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) return store, ctx, storeKey @@ -60,24 +59,24 @@ func TestNewReceiptStoreConfigErrors(t *testing.T) { storeKey := storetypes.NewKVStoreKey("evm") cfg := dbconfig.DefaultReceiptStoreConfig() cfg.DBDirectory = "" - store, err := receipt.NewReceiptStore(nil, cfg, storeKey) + store, err := receipt.NewReceiptStore(cfg, storeKey) require.Error(t, err) require.Nil(t, store) cfg.DBDirectory = t.TempDir() cfg.Backend = "rocksdb" - store, err = receipt.NewReceiptStore(nil, cfg, storeKey) + store, err = receipt.NewReceiptStore(cfg, storeKey) require.Error(t, err) require.Nil(t, store) cfg.Backend = "pebble" - store, err = receipt.NewReceiptStore(nil, cfg, storeKey) + store, err = receipt.NewReceiptStore(cfg, storeKey) require.NoError(t, err) require.NotNil(t, store) require.NoError(t, store.Close()) cfg.Backend = "parquet" - store, err = receipt.NewReceiptStore(nil, cfg, storeKey) + store, err = receipt.NewReceiptStore(cfg, storeKey) require.NoError(t, err) require.NotNil(t, store) require.NoError(t, store.Close()) @@ -151,7 +150,7 @@ func TestReceiptStorePebbleBackendBasic(t *testing.T) { cfg.KeepRecent = 0 cfg.Backend = "pebble" - store, err := receipt.NewReceiptStore(dbLogger.NewNopLogger(), cfg, storeKey) + store, err := receipt.NewReceiptStore(cfg, storeKey) require.NoError(t, err) t.Cleanup(func() { _ = store.Close() }) @@ -186,7 +185,7 @@ func TestRecoverReceiptStoreReplaysChangelog(t *testing.T) { changelogPath := dbutils.GetChangelogPath(dir) require.NoError(t, os.MkdirAll(changelogPath, 0o750)) - stream, err := wal.NewChangelogWAL(dbLogger.NewNopLogger(), changelogPath, wal.Config{}) + stream, err := wal.NewChangelogWAL(changelogPath, wal.Config{}) require.NoError(t, err) txHash1 := common.HexToHash("0x20") @@ -219,7 +218,7 @@ func TestRecoverReceiptStoreReplaysChangelog(t *testing.T) { t.Cleanup(func() { _ = db.Close() }) require.NoError(t, db.SetLatestVersion(1)) - require.NoError(t, receipt.RecoverReceiptStore(dbLogger.NewNopLogger(), changelogPath, db)) + require.NoError(t, receipt.RecoverReceiptStore(changelogPath, db)) require.Equal(t, int64(2), db.GetLatestVersion()) bz, err := db.Get(types.ReceiptStoreKey, db.GetLatestVersion(), types.ReceiptKey(txHash2)) diff --git a/sei-db/state_db/bench/wrappers/db_implementations.go b/sei-db/state_db/bench/wrappers/db_implementations.go index bd99044b46..2712c1ae35 100644 --- a/sei-db/state_db/bench/wrappers/db_implementations.go +++ b/sei-db/state_db/bench/wrappers/db_implementations.go @@ -5,7 +5,6 @@ import ( "fmt" "path/filepath" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/composite" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/flatkv" @@ -33,7 +32,7 @@ func newMemIAVLCommitStore(dbDir string) (DBWrapper, error) { cfg.AsyncCommitBuffer = 10 cfg.SnapshotInterval = 100 fmt.Printf("Opening memIAVL from directory %s\n", dbDir) - cs := memiavl.NewCommitStore(dbDir, logger.NewNopLogger(), cfg) + cs := memiavl.NewCommitStore(dbDir, cfg) cs.Initialize([]string{EVMStoreName}) _, err := cs.LoadVersion(0, false) if err != nil { @@ -49,7 +48,7 @@ func newFlatKVCommitStore(ctx context.Context, dbDir string) (DBWrapper, error) cfg := flatkv.DefaultConfig() cfg.Fsync = false fmt.Printf("Opening flatKV from directory %s\n", dbDir) - cs := flatkv.NewCommitStore(ctx, dbDir, logger.NewNopLogger(), cfg) + cs := flatkv.NewCommitStore(ctx, dbDir, cfg) _, err := cs.LoadVersion(0, false) if err != nil { if closeErr := cs.Close(); closeErr != nil { @@ -66,7 +65,7 @@ func newCompositeCommitStore(ctx context.Context, dbDir string, writeMode config cfg.MemIAVLConfig.AsyncCommitBuffer = 10 cfg.MemIAVLConfig.SnapshotInterval = 100 - cs := composite.NewCompositeCommitStore(ctx, dbDir, logger.NewNopLogger(), cfg) + cs := composite.NewCompositeCommitStore(ctx, dbDir, cfg) if err := cs.CleanupCrashArtifacts(); err != nil { return nil, fmt.Errorf("failed to cleanup crash artifacts: %w", err) } @@ -91,7 +90,7 @@ func openSSComposite(dir string) (*ssComposite.CompositeStateStore, error) { cfg.AsyncWriteBuffer = 0 cfg.WriteMode = config.DualWrite cfg.ReadMode = config.EVMFirstRead - return ssComposite.NewCompositeStateStore(cfg, dir, logger.NewNopLogger()) + return ssComposite.NewCompositeStateStore(cfg, dir) } func newSSCompositeStateStore(dbDir string) (DBWrapper, error) { diff --git a/sei-db/state_db/sc/composite/store.go b/sei-db/state_db/sc/composite/store.go index aee2c29991..a2dca7a431 100644 --- a/sei-db/state_db/sc/composite/store.go +++ b/sei-db/state_db/sc/composite/store.go @@ -6,18 +6,19 @@ import ( "context" "fmt" "math" - "path/filepath" commonerrors "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/flatkv" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/memiavl" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("db", "state-db", "sc", "composite") + // EVMStoreName is the module name for the EVM store const EVMStoreName = "evm" @@ -27,7 +28,6 @@ var _ types.Committer = (*CompositeCommitStore)(nil) // CompositeCommitStore manages multiple commit store backends (Cosmos/memiavl and FlatKV) // and routes operations based on the configured migration strategy. type CompositeCommitStore struct { - logger logger.Logger // cosmosCommitter is the Cosmos (memiavl) backend - always initialized cosmosCommitter *memiavl.CommitStore @@ -48,14 +48,12 @@ type CompositeCommitStore struct { func NewCompositeCommitStore( ctx context.Context, homeDir string, - logger logger.Logger, cfg config.StateCommitConfig, ) *CompositeCommitStore { // Always initialize the Cosmos backend (creates struct only, not opened) - cosmosCommitter := memiavl.NewCommitStore(homeDir, logger, cfg.MemIAVLConfig) + cosmosCommitter := memiavl.NewCommitStore(homeDir, cfg.MemIAVLConfig) store := &CompositeCommitStore{ - logger: logger, cosmosCommitter: cosmosCommitter, homeDir: homeDir, config: cfg, @@ -65,7 +63,7 @@ func NewCompositeCommitStore( // Note: DB is NOT opened here, will be opened in LoadVersion if cfg.WriteMode == config.DualWrite || cfg.WriteMode == config.SplitWrite { flatkvPath := filepath.Join(homeDir, "data", "flatkv") - store.evmCommitter = flatkv.NewCommitStore(ctx, flatkvPath, logger, cfg.FlatKVConfig) + store.evmCommitter = flatkv.NewCommitStore(ctx, flatkvPath, cfg.FlatKVConfig) } return store @@ -110,7 +108,6 @@ func (cs *CompositeCommitStore) LoadVersion(targetVersion int64, readOnly bool) if readOnly { newStore := &CompositeCommitStore{ - logger: cs.logger, cosmosCommitter: cosmosCommitter, homeDir: cs.homeDir, config: cs.config, @@ -118,7 +115,7 @@ func (cs *CompositeCommitStore) LoadVersion(targetVersion int64, readOnly bool) if cs.evmCommitter != nil { evmStore, err := cs.evmCommitter.LoadVersion(targetVersion, true) if err != nil { - cs.logger.Info("FlatKV unavailable for readonly load, EVM data will not be served", + logger.Info("FlatKV unavailable for readonly load, EVM data will not be served", "version", targetVersion, "err", err) } else { newStore.evmCommitter = evmStore diff --git a/sei-db/state_db/sc/composite/store_test.go b/sei-db/state_db/sc/composite/store_test.go index 395290a708..43d77d5c94 100644 --- a/sei-db/state_db/sc/composite/store_test.go +++ b/sei-db/state_db/sc/composite/store_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/metrics" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/proto" @@ -42,7 +41,7 @@ func TestCompositeStoreBasicOperations(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test", EVMStoreName}) _, err := cs.LoadVersion(0, false) @@ -91,7 +90,7 @@ func TestEmptyChangesets(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -112,7 +111,7 @@ func TestLoadVersionCopyExisting(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -149,7 +148,7 @@ func TestWorkingAndLastCommitInfo(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -184,7 +183,7 @@ func TestRollback(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -220,7 +219,7 @@ func TestGetVersions(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -243,7 +242,7 @@ func TestGetVersions(t *testing.T) { } require.NoError(t, cs.Close()) - cs2 := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs2 := NewCompositeCommitStore(t.Context(), dir, cfg) cs2.Initialize([]string{"test"}) latestVersion, err := cs2.GetLatestVersion() @@ -255,7 +254,7 @@ func TestReadOnlyLoadVersionSoftFailsWhenFlatKVUnavailable(t *testing.T) { dir := t.TempDir() cfg := config.DefaultStateCommitConfig() - cs := NewCompositeCommitStore(t.Context(), dir, logger.NewNopLogger(), cfg) + cs := NewCompositeCommitStore(t.Context(), dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) diff --git a/sei-db/state_db/sc/flatkv/importer.go b/sei-db/state_db/sc/flatkv/importer.go index 6d5f1f601c..6dfb7eea3c 100644 --- a/sei-db/state_db/sc/flatkv/importer.go +++ b/sei-db/state_db/sc/flatkv/importer.go @@ -53,12 +53,12 @@ func (imp *KVImporter) flush() { }} if err := imp.store.ApplyChangeSets(cs); err != nil { imp.err = fmt.Errorf("import apply changesets: %w", err) - imp.store.log.Error("import flush failed when apply changesets", "err", err) + logger.Error("import flush failed when apply changesets", "err", err) return } if err := imp.store.commitBatches(imp.version); err != nil { imp.err = fmt.Errorf("import commit batches: %w", err) - imp.store.log.Error("import flush failed when commit batches", "err", err) + logger.Error("import flush failed when commit batches", "err", err) return } imp.store.clearPendingWrites() diff --git a/sei-db/state_db/sc/flatkv/lthash_correctness_test.go b/sei-db/state_db/sc/flatkv/lthash_correctness_test.go index 7c3c9f96fe..f4dcf1f82a 100644 --- a/sei-db/state_db/sc/flatkv/lthash_correctness_test.go +++ b/sei-db/state_db/sc/flatkv/lthash_correctness_test.go @@ -640,7 +640,7 @@ func TestLtHashPersistenceAfterReopen(t *testing.T) { dir := t.TempDir() // Phase 1: create state and close - s1 := NewCommitStore(t.Context(), dir, nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), dir, DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -658,7 +658,7 @@ func TestLtHashPersistenceAfterReopen(t *testing.T) { require.NoError(t, s1.Close()) // Phase 2: reopen and verify - s2 := NewCommitStore(t.Context(), dir, nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), dir, DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() diff --git a/sei-db/state_db/sc/flatkv/snapshot.go b/sei-db/state_db/sc/flatkv/snapshot.go index 9c9ce87c51..93f0a328e3 100644 --- a/sei-db/state_db/sc/flatkv/snapshot.go +++ b/sei-db/state_db/sc/flatkv/snapshot.go @@ -348,7 +348,7 @@ func (s *CommitStore) resolveSnapshotDir(flatkvDir string) (string, error) { if err := updateCurrentSymlink(flatkvDir, snapName); err != nil { return "", fmt.Errorf("recover orphaned snapshot symlink: %w", err) } - s.log.Info("FlatKV: recovered orphaned snapshot", "snapshot", snapName) + logger.Info("FlatKV: recovered orphaned snapshot", "snapshot", snapName) return filepath.Join(flatkvDir, snapName), nil } @@ -373,7 +373,7 @@ func (s *CommitStore) resolveSnapshotDir(flatkvDir string) (string, error) { // previous partial attempt are skipped, so recovery from a mid-migration // crash completes the remaining moves. func (s *CommitStore) migrateFlatLayout(flatkvDir string) (string, error) { - s.log.Info("FlatKV: migrating from flat layout to snapshot layout") + logger.Info("FlatKV: migrating from flat layout to snapshot layout") // Determine version for the snapshot name. The metadata DB might still // be at the flat location or might have been moved in a prior attempt. @@ -414,7 +414,7 @@ func (s *CommitStore) migrateFlatLayout(flatkvDir string) (string, error) { return "", fmt.Errorf("migration: update current symlink: %w", err) } - s.log.Info("FlatKV: migration complete", "snapshot", snapName) + logger.Info("FlatKV: migration complete", "snapshot", snapName) return snapDir, nil } @@ -485,14 +485,14 @@ func (s *CommitStore) WriteSnapshot(_ string) error { // instead of re-cloning from the snapshot and replaying the full WAL gap. workDir := filepath.Join(dir, workingDirName) if err := writeSnapshotBase(workDir, snapDir); err != nil { - s.log.Error("failed to update SNAPSHOT_BASE", "err", err) + logger.Error("failed to update SNAPSHOT_BASE", "err", err) } s.pruneSnapshots(dir, version) success = true s.lastSnapshotTime = time.Now() - s.log.Info("FlatKV snapshot created", "version", version, "dir", finalPath) + logger.Info("FlatKV snapshot created", "version", version, "dir", finalPath) return nil } @@ -517,9 +517,9 @@ func (s *CommitStore) pruneSnapshots(dir string, currentVersion int64) { for _, v := range older[keep:] { snapPath := filepath.Join(dir, snapshotName(v)) if err := atomicRemoveDir(snapPath); err != nil { - s.log.Error("prune snapshot failed", "version", v, "err", err) + logger.Error("prune snapshot failed", "version", v, "err", err) } else { - s.log.Info("pruned old snapshot", "version", v) + logger.Info("pruned old snapshot", "version", v) } } } @@ -536,7 +536,7 @@ func (s *CommitStore) Rollback(targetVersion int64) error { if s.readOnly { return errReadOnly } - s.log.Info("FlatKV Rollback", "targetVersion", targetVersion) + logger.Info("FlatKV Rollback", "targetVersion", targetVersion) dir := s.flatkvDir() @@ -601,13 +601,13 @@ func (s *CommitStore) Rollback(targetVersion int64) error { _ = traverseSnapshots(dir, true, func(v int64) (bool, error) { if v > targetVersion { if err := atomicRemoveDir(filepath.Join(dir, snapshotName(v))); err != nil { - s.log.Error("failed to remove snapshot", "version", v, "err", err) + logger.Error("failed to remove snapshot", "version", v, "err", err) } } return false, nil }) - s.log.Info("FlatKV Rollback complete", "version", s.committedVersion) + logger.Info("FlatKV Rollback complete", "version", s.committedVersion) return nil } @@ -662,6 +662,6 @@ func (s *CommitStore) tryTruncateWAL() { } if err := s.changelog.TruncateBefore(off); err != nil { - s.log.Error("failed to truncate WAL", "err", err, "truncateOffset", off) + logger.Error("failed to truncate WAL", "err", err, "truncateOffset", off) } } diff --git a/sei-db/state_db/sc/flatkv/snapshot_test.go b/sei-db/state_db/sc/flatkv/snapshot_test.go index 321dee24ac..1628388dab 100644 --- a/sei-db/state_db/sc/flatkv/snapshot_test.go +++ b/sei-db/state_db/sc/flatkv/snapshot_test.go @@ -32,7 +32,7 @@ func commitStorageEntry(t *testing.T, s *CommitStore, addr Address, slot Slot, v func TestSnapshotCreatesDir(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -59,7 +59,7 @@ func TestSnapshotCreatesDir(t *testing.T) { func TestSnapshotIdempotent(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -79,7 +79,7 @@ func TestOpenFromSnapshot(t *testing.T) { dir := t.TempDir() // Phase 1: create store, commit v1 and v2, snapshot at v2, commit v3 - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -96,7 +96,7 @@ func TestOpenFromSnapshot(t *testing.T) { require.NoError(t, s1.Close()) // Phase 2: reopen - should catchup from v2 snapshot + WAL entry for v3 - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -118,7 +118,7 @@ func TestOpenFromSnapshot(t *testing.T) { func TestCatchupUpdatesLtHash(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -136,7 +136,7 @@ func TestCatchupUpdatesLtHash(t *testing.T) { require.NoError(t, s1.Close()) // Reopen: catchup from v2 snapshot through v3,v4,v5 via WAL - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -150,7 +150,7 @@ func TestCatchupUpdatesLtHash(t *testing.T) { func TestRollbackRewindsState(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -187,7 +187,7 @@ func TestRollbackRewindsState(t *testing.T) { func TestRollbackToSnapshotExact(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -208,7 +208,7 @@ func TestRollbackToSnapshotExact(t *testing.T) { func TestPartialSnapshotCleanup(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -265,7 +265,7 @@ func TestMigrationFromFlatLayout(t *testing.T) { require.True(t, os.IsNotExist(err)) // Open the store - should trigger migration - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -296,7 +296,7 @@ func TestOpenVersionValidation(t *testing.T) { dir := t.TempDir() // Phase 1: create store, commit some data - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -319,7 +319,7 @@ func TestOpenVersionValidation(t *testing.T) { require.NoError(t, db.Close()) // Phase 3: reopen - should detect skew and catchup - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -388,7 +388,7 @@ func TestSeekSnapshot(t *testing.T) { func TestLoadVersionWithTarget(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -401,7 +401,7 @@ func TestLoadVersionWithTarget(t *testing.T) { require.NoError(t, s1.Close()) // Reopen at specific version 3 - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(3, false) require.NoError(t, err) defer s2.Close() @@ -420,7 +420,7 @@ func TestSnapshotThenCatchupThenVerifyCorrectness(t *testing.T) { key := evm.BuildMemIAVLEVMKey(evm.EVMKeyStorage, StorageKey(addr, slot)) // Phase 1: build baseline at v2 and snapshot it. - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -441,7 +441,7 @@ func TestSnapshotThenCatchupThenVerifyCorrectness(t *testing.T) { // Phase 3: reopen exactly at v2. If later commits had mutated the snapshot // baseline in place, we'd incorrectly read 0x04 here. - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(2, false) require.NoError(t, err) gotV2, ok := s2.Get(key) @@ -450,7 +450,7 @@ func TestSnapshotThenCatchupThenVerifyCorrectness(t *testing.T) { require.NoError(t, s2.Close()) // Phase 4: reopen latest again to ensure catchup/replay still reaches v4. - s3 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s3 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s3.LoadVersion(0, false) require.NoError(t, err) defer s3.Close() @@ -470,7 +470,7 @@ func TestLoadVersionMixedSequence(t *testing.T) { slot := Slot{0x81} key := evm.BuildMemIAVLEVMKey(evm.EVMKeyStorage, StorageKey(addr, slot)) - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -485,7 +485,7 @@ func TestLoadVersionMixedSequence(t *testing.T) { require.NoError(t, s.Close()) // Round 1: load exactly v2 - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s1.LoadVersion(2, false) require.NoError(t, err) require.Equal(t, int64(2), s1.Version()) @@ -496,7 +496,7 @@ func TestLoadVersionMixedSequence(t *testing.T) { require.NoError(t, s1.Close()) // Round 2: load latest (catches up through v3, v4) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) require.Equal(t, int64(4), s2.Version()) @@ -507,7 +507,7 @@ func TestLoadVersionMixedSequence(t *testing.T) { require.NoError(t, s2.Close()) // Round 3: load v2 AGAIN — snapshot must still be clean. - s3 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s3 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s3.LoadVersion(2, false) require.NoError(t, err, "LoadVersion(2) must succeed after LoadVersion(0) dirtied working dir") require.Equal(t, int64(2), s3.Version()) @@ -523,7 +523,7 @@ func TestLoadVersionMixedSequence(t *testing.T) { func TestRollbackTargetBeforeWALStart(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -557,7 +557,7 @@ func TestRollbackTargetBeforeWALStart(t *testing.T) { // Simulate restart: should stay at v2. require.NoError(t, s.Close()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -755,7 +755,7 @@ func TestCreateWorkingDirReclones(t *testing.T) { func TestPruneSnapshotsKeepsRecent(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotKeepRecent: 1}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotKeepRecent: 1}) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -779,7 +779,7 @@ func TestPruneSnapshotsKeepsRecent(t *testing.T) { func TestPruneSnapshotsKeepAll(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotKeepRecent: 100}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotKeepRecent: 100}) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -815,7 +815,7 @@ func TestOrphanSnapshotRecovery(t *testing.T) { _, err := os.Lstat(currentPath(flatkvDir)) require.True(t, os.IsNotExist(err), "no current symlink should exist") - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -877,7 +877,7 @@ func TestTraverseSnapshotsEarlyStop(t *testing.T) { func TestVerifyWALTailSuccess(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -891,7 +891,7 @@ func TestVerifyWALTailSuccess(t *testing.T) { func TestVerifyWALTailMismatch(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -913,7 +913,7 @@ func TestTryTruncateWAL(t *testing.T) { // SnapshotKeepRecent=0 so pruneSnapshots removes snapshot-0 once // the manual snapshot at v5 is created; this makes v5 the earliest // snapshot and gives tryTruncateWAL a positive truncation offset. - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotKeepRecent: 0}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotKeepRecent: 0}) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -938,7 +938,7 @@ func TestTryTruncateWAL(t *testing.T) { func TestTryTruncateWALNoSnapshot(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -959,7 +959,7 @@ func TestTryTruncateWALNoSnapshot(t *testing.T) { func TestRollbackRemovesPostTargetSnapshots(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -1057,7 +1057,7 @@ func TestSeekSnapshotExact(t *testing.T) { func TestMultipleSnapshotsAndReopen(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotKeepRecent: 10}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotKeepRecent: 10}) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -1071,7 +1071,7 @@ func TestMultipleSnapshotsAndReopen(t *testing.T) { for i, expectedHash := range hashes { ver := int64(i + 1) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotKeepRecent: 10}) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotKeepRecent: 10}) _, err := s2.LoadVersion(ver, false) require.NoError(t, err) require.Equal(t, ver, s2.Version()) @@ -1086,7 +1086,7 @@ func TestMultipleSnapshotsAndReopen(t *testing.T) { func TestWriteSnapshotUpdatesSnapshotBase(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(context.Background(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(context.Background(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -1112,7 +1112,7 @@ func TestWriteSnapshotUpdatesSnapshotBase(t *testing.T) { // Reopen: working dir should be reused (SNAPSHOT_BASE matches current), // so committedVersion should be 5 (from working dir metadata), not 2 // (from the snapshot). Catchup should replay 0 entries. - s2 := NewCommitStore(context.Background(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(context.Background(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -1123,7 +1123,7 @@ func TestWriteSnapshotUpdatesSnapshotBase(t *testing.T) { func TestSnapshotPreservesAllKeyTypes(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -1144,7 +1144,7 @@ func TestSnapshotPreservesAllKeyTypes(t *testing.T) { require.NoError(t, s.WriteSnapshot("")) require.NoError(t, s.Close()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() diff --git a/sei-db/state_db/sc/flatkv/store.go b/sei-db/state_db/sc/flatkv/store.go index 6410a44efa..f48c1f0a6d 100644 --- a/sei-db/state_db/sc/flatkv/store.go +++ b/sei-db/state_db/sc/flatkv/store.go @@ -9,7 +9,6 @@ import ( "path/filepath" "time" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/metrics" "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb" seidbtypes "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" @@ -17,10 +16,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/flatkv/lthash" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" "github.com/sei-protocol/sei-chain/sei-db/wal" + "github.com/sei-protocol/seilog" "github.com/zbiljic/go-filelock" "go.opentelemetry.io/otel" ) +var logger = seilog.NewLogger("db", "state-db", "sc", "flatkv") + const ( // Top-level directory names flatkvRootDir = "flatkv" @@ -66,7 +68,6 @@ type pendingAccountWrite struct { // NOT thread-safe; callers must serialize all operations. type CommitStore struct { ctx context.Context - log logger.Logger config Config dbDir string @@ -114,17 +115,12 @@ var _ Store = (*CommitStore)(nil) func NewCommitStore( ctx context.Context, dbDir string, - log logger.Logger, cfg Config, ) *CommitStore { - if log == nil { - log = logger.NewNopLogger() - } meter := otel.Meter(flatkvMeterName) return &CommitStore{ ctx: ctx, - log: log, config: cfg, dbDir: dbDir, localMeta: make(map[string]*LocalMeta), @@ -149,7 +145,7 @@ var errReadOnly = errors.New("flatkv: store is read-only") // When readOnly is true an isolated, read-only CommitStore is returned; // the caller must Close it when done. func (s *CommitStore) LoadVersion(targetVersion int64, readOnly bool) (_ Store, retErr error) { - s.log.Info("FlatKV LoadVersion", "targetVersion", targetVersion, "readOnly", readOnly) + logger.Info("FlatKV LoadVersion", "targetVersion", targetVersion) if readOnly { if s.readOnly { @@ -188,7 +184,7 @@ func (s *CommitStore) LoadVersion(targetVersion int64, readOnly bool) (_ Store, return nil, fmt.Errorf("update current symlink for target version %d: %w", targetVersion, err) } } else { - s.log.Debug("no snapshot found, will open current", "target", targetVersion, "err", err) + logger.Debug("no snapshot found, will open current", "target", targetVersion, "err", err) } // Force a fresh working dir clone: the working dir may contain data // beyond targetVersion from a previous open-to-latest. @@ -211,7 +207,7 @@ func (s *CommitStore) LoadVersion(targetVersion int64, readOnly bool) (_ Store, // loadVersionReadOnly creates an isolated, read-only CommitStore at the // requested version. func (s *CommitStore) loadVersionReadOnly(targetVersion int64) (_ Store, retErr error) { - ro := NewCommitStore(s.ctx, s.dbDir, s.log, s.config) + ro := NewCommitStore(s.ctx, s.dbDir, s.config) workDir, err := os.MkdirTemp(ro.flatkvDir(), readOnlyDirPrefix) if err != nil { @@ -222,7 +218,7 @@ func (s *CommitStore) loadVersionReadOnly(targetVersion int64) (_ Store, retErr defer func() { if retErr != nil { if closeErr := ro.Close(); closeErr != nil { - s.log.Error("failed to close readonly store during error cleanup", "err", closeErr) + logger.Error("failed to close readonly store during error cleanup", "err", closeErr) } } }() @@ -288,7 +284,7 @@ func (s *CommitStore) openReadOnly(targetVersion int64) error { s.readOnly = true - s.log.Info("FlatKV readonly store opened", "version", s.committedVersion, + logger.Info("FlatKV readonly store opened", "version", s.committedVersion, "dir", s.readOnlyWorkDir) return nil } @@ -363,7 +359,7 @@ func (s *CommitStore) open() (retErr error) { return err } - s.log.Info("FlatKV store opened", "dir", dir, "version", s.committedVersion) + logger.Info("FlatKV store opened", "dir", dir, "version", s.committedVersion) return nil } @@ -452,7 +448,7 @@ func (s *CommitStore) openDBs(dbDir, changelogRoot string) (retErr error) { if changelogRoot != "" { changelogPath := filepath.Join(changelogRoot, changelogDir) - s.changelog, err = wal.NewChangelogWAL(s.log, changelogPath, wal.Config{ + s.changelog, err = wal.NewChangelogWAL(changelogPath, wal.Config{ WriteBufferSize: 0, KeepRecent: 0, PruneInterval: 0, @@ -517,7 +513,7 @@ func (s *CommitStore) clearChangelog() error { return fmt.Errorf("remove changelog dir: %w", err) } var err error - s.changelog, err = wal.NewChangelogWAL(s.log, dir, wal.Config{}) + s.changelog, err = wal.NewChangelogWAL(dir, wal.Config{}) if err != nil { return fmt.Errorf("reopen changelog: %w", err) } diff --git a/sei-db/state_db/sc/flatkv/store_catchup.go b/sei-db/state_db/sc/flatkv/store_catchup.go index 826de95bdd..e0cee41ab5 100644 --- a/sei-db/state_db/sc/flatkv/store_catchup.go +++ b/sei-db/state_db/sc/flatkv/store_catchup.go @@ -150,7 +150,7 @@ func (s *CommitStore) catchup(targetVersion int64) error { replayed++ if replayed%1000 == 0 { - s.log.Info("FlatKV catchup progress", "replayed", replayed, "version", entry.Version) + logger.Info("FlatKV catchup progress", "replayed", replayed, "version", entry.Version) } return nil }) @@ -170,7 +170,7 @@ func (s *CommitStore) catchup(targetVersion int64) error { if err := s.commitGlobalMetadata(s.committedVersion, s.committedLtHash); err != nil { return fmt.Errorf("catchup global meta: %w", err) } - s.log.Info("FlatKV catchup complete", "replayed", replayed, "version", s.committedVersion) + logger.Info("FlatKV catchup complete", "replayed", replayed, "version", s.committedVersion) } return nil diff --git a/sei-db/state_db/sc/flatkv/store_lifecycle.go b/sei-db/state_db/sc/flatkv/store_lifecycle.go index 95e93196bd..0d14386d62 100644 --- a/sei-db/state_db/sc/flatkv/store_lifecycle.go +++ b/sei-db/state_db/sc/flatkv/store_lifecycle.go @@ -88,7 +88,7 @@ func (s *CommitStore) Close() error { return err } - s.log.Info("FlatKV store closed") + logger.Info("FlatKV store closed") return nil } @@ -114,7 +114,7 @@ func (s *CommitStore) CleanupOrphanedReadOnlyDirs() error { } for _, e := range entries { if e.IsDir() && strings.HasPrefix(e.Name(), readOnlyDirPrefix) { - s.log.Info("removing orphaned readonly dir", "dir", e.Name()) + logger.Info("removing orphaned readonly dir", "dir", e.Name()) _ = os.RemoveAll(filepath.Join(dir, e.Name())) } } diff --git a/sei-db/state_db/sc/flatkv/store_test.go b/sei-db/state_db/sc/flatkv/store_test.go index 3b51ceb15c..e39dc61336 100644 --- a/sei-db/state_db/sc/flatkv/store_test.go +++ b/sei-db/state_db/sc/flatkv/store_test.go @@ -67,7 +67,7 @@ func setupTestDB(t *testing.T) types.KeyValueDB { func setupTestStore(t *testing.T) *CommitStore { t.Helper() dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) return s @@ -77,7 +77,7 @@ func setupTestStore(t *testing.T) *CommitStore { func setupTestStoreWithConfig(t *testing.T, cfg Config) *CommitStore { t.Helper() dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, cfg) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), cfg) _, err := s.LoadVersion(0, false) require.NoError(t, err) return s @@ -97,7 +97,7 @@ func commitAndCheck(t *testing.T, s *CommitStore) int64 { func TestStoreOpenClose(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -106,7 +106,7 @@ func TestStoreOpenClose(t *testing.T) { func TestStoreClose(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -301,7 +301,7 @@ func TestStorePersistence(t *testing.T) { key := memiavlStorageKey(addr, slot) // Write and close - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -311,7 +311,7 @@ func TestStorePersistence(t *testing.T) { require.NoError(t, s1.Close()) // Reopen and verify - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -428,11 +428,11 @@ func TestStoreRollbackNoSnapshot(t *testing.T) { func TestFileLockPreventsDoubleOpen(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.Error(t, err, "second open on same dir should fail due to file lock") require.Contains(t, err.Error(), "file lock") @@ -450,7 +450,7 @@ func TestFileLockPreventsDoubleOpen(t *testing.T) { func TestClearChangelog(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -475,7 +475,7 @@ func TestClearChangelog(t *testing.T) { func TestCloseDBsOnlyIdempotent(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -493,7 +493,7 @@ func TestCloseDBsOnlyIdempotent(t *testing.T) { func TestLoadVersionTargetBeyondWALFails(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -502,7 +502,7 @@ func TestLoadVersionTargetBeyondWALFails(t *testing.T) { require.NoError(t, s1.WriteSnapshot("")) require.NoError(t, s1.Close()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(100, false) require.Error(t, err, "loading version beyond WAL should fail") } @@ -514,7 +514,7 @@ func TestLoadVersionTargetBeyondWALFails(t *testing.T) { func TestReopenReusesWorkingDir(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -527,7 +527,7 @@ func TestReopenReusesWorkingDir(t *testing.T) { _, err = os.Stat(basePath) require.NoError(t, err, "SNAPSHOT_BASE should exist after close") - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -541,7 +541,7 @@ func TestReopenReusesWorkingDir(t *testing.T) { func TestWalOffsetForVersionFastPath(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -563,7 +563,7 @@ func TestWalOffsetForVersionFastPath(t *testing.T) { func TestWalOffsetForVersionBeforeWAL(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -579,7 +579,7 @@ func TestWalOffsetForVersionBeforeWAL(t *testing.T) { func TestWalOffsetForVersionNotFound(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -597,7 +597,7 @@ func TestWalOffsetForVersionNotFound(t *testing.T) { func TestCatchupFromSpecificVersion(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -609,7 +609,7 @@ func TestCatchupFromSpecificVersion(t *testing.T) { require.NoError(t, s1.WriteSnapshot("")) require.NoError(t, s1.Close()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -658,7 +658,7 @@ func TestPersistenceAllKeyTypes(t *testing.T) { addr := Address{0xAA} slot := Slot{0xBB} - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s1.LoadVersion(0, false) require.NoError(t, err) @@ -677,7 +677,7 @@ func TestPersistenceAllKeyTypes(t *testing.T) { hash := s1.RootHash() require.NoError(t, s1.Close()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err = s2.LoadVersion(0, false) require.NoError(t, err) defer s2.Close() @@ -704,7 +704,7 @@ func TestPersistenceAllKeyTypes(t *testing.T) { func TestReadOnlyBasicLoadAndRead(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -730,7 +730,7 @@ func TestReadOnlyBasicLoadAndRead(t *testing.T) { func TestReadOnlyLoadFromUnopenedStore(t *testing.T) { dir := t.TempDir() - writer := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + writer := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := writer.LoadVersion(0, false) require.NoError(t, err) @@ -743,7 +743,7 @@ func TestReadOnlyLoadFromUnopenedStore(t *testing.T) { commitAndCheck(t, writer) require.NoError(t, writer.Close()) - fresh := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + fresh := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) ro, err := fresh.LoadVersion(0, true) require.NoError(t, err) defer ro.Close() @@ -756,7 +756,7 @@ func TestReadOnlyLoadFromUnopenedStore(t *testing.T) { func TestReadOnlyAtSpecificVersion(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotInterval: 2, SnapshotKeepRecent: 10}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotInterval: 2, SnapshotKeepRecent: 10}) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -783,7 +783,7 @@ func TestReadOnlyAtSpecificVersion(t *testing.T) { func TestReadOnlyWriteGuards(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -811,7 +811,7 @@ func TestReadOnlyWriteGuards(t *testing.T) { func TestReadOnlyParentWritesDuringReadOnly(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -840,7 +840,7 @@ func TestReadOnlyParentWritesDuringReadOnly(t *testing.T) { func TestReadOnlyConcurrentInstances(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{SnapshotInterval: 2, SnapshotKeepRecent: 10}) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{SnapshotInterval: 2, SnapshotKeepRecent: 10}) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -876,7 +876,7 @@ func TestReadOnlyConcurrentInstances(t *testing.T) { func TestReadOnlyFailureDoesNotAffectParent(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -901,7 +901,7 @@ func TestReadOnlyFailureDoesNotAffectParent(t *testing.T) { func TestReadOnlyCloseRemovesTempDir(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -924,7 +924,7 @@ func TestReadOnlyCloseRemovesTempDir(t *testing.T) { func TestCleanupOrphanedReadOnlyDirs(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) defer func() { require.NoError(t, s.Close()) }() fkvDir := s.flatkvDir() @@ -947,11 +947,11 @@ func TestCleanupOrphanedReadOnlyDirs(t *testing.T) { func TestCleanupOrphanedReadOnlyDirsHoldsWriterLock(t *testing.T) { dir := t.TempDir() - s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s1 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) defer func() { require.NoError(t, s1.Close()) }() require.NoError(t, s1.CleanupOrphanedReadOnlyDirs()) - s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s2 := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) defer func() { require.NoError(t, s2.Close()) }() err := s2.CleanupOrphanedReadOnlyDirs() diff --git a/sei-db/state_db/sc/flatkv/store_write.go b/sei-db/state_db/sc/flatkv/store_write.go index 7bf6a2d93b..669580f4ac 100644 --- a/sei-db/state_db/sc/flatkv/store_write.go +++ b/sei-db/state_db/sc/flatkv/store_write.go @@ -273,7 +273,7 @@ func (s *CommitStore) Commit() (int64, error) { if s.config.SnapshotInterval > 0 && version%int64(s.config.SnapshotInterval) == 0 { s.phaseTimer.SetPhase("commit_write_snapshot") if err := s.WriteSnapshot(""); err != nil { - s.log.Error("auto snapshot failed", "version", version, "err", err) + logger.Error("auto snapshot failed", "version", version, "err", err) } } @@ -283,7 +283,7 @@ func (s *CommitStore) Commit() (int64, error) { } s.phaseTimer.SetPhase("commit_done") - s.log.Info("Committed version", "version", version) + logger.Info("Committed version", "version", version) return version, nil } diff --git a/sei-db/state_db/sc/flatkv/store_write_test.go b/sei-db/state_db/sc/flatkv/store_write_test.go index de8192dabb..10cfa5ce1e 100644 --- a/sei-db/state_db/sc/flatkv/store_write_test.go +++ b/sei-db/state_db/sc/flatkv/store_write_test.go @@ -523,7 +523,7 @@ func TestStoreLegacyEmptyCommitLocalMeta(t *testing.T) { func TestStoreFsyncConfig(t *testing.T) { t.Run("DefaultConfig", func(t *testing.T) { dir := t.TempDir() - store := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + store := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := store.LoadVersion(0, false) require.NoError(t, err) defer store.Close() @@ -535,7 +535,7 @@ func TestStoreFsyncConfig(t *testing.T) { t.Run("FsyncDisabled", func(t *testing.T) { dir := t.TempDir() - store := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, Config{ + store := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), Config{ Fsync: false, }) _, err := store.LoadVersion(0, false) @@ -571,7 +571,7 @@ func TestAutoSnapshotTriggeredByInterval(t *testing.T) { SnapshotInterval: 5, SnapshotKeepRecent: 2, } - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, cfg) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), cfg) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -595,7 +595,7 @@ func TestAutoSnapshotNotTriggeredBeforeInterval(t *testing.T) { SnapshotInterval: 10, SnapshotKeepRecent: 2, } - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, cfg) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), cfg) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -622,7 +622,7 @@ func TestAutoSnapshotNotTriggeredBeforeInterval(t *testing.T) { func TestAutoSnapshotDisabledWhenIntervalZero(t *testing.T) { dir := t.TempDir() cfg := Config{SnapshotInterval: 0} - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, cfg) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), cfg) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -714,7 +714,7 @@ func TestMultipleApplyAccountFieldsPreservesOther(t *testing.T) { func TestLtHashDeterministicAcrossReopen(t *testing.T) { writeAndGetHash := func() []byte { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) @@ -838,7 +838,7 @@ func TestEmptyCommitAdvancesVersion(t *testing.T) { func TestStoreFsyncEnabled(t *testing.T) { dir := t.TempDir() cfg := Config{Fsync: true} - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, cfg) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), cfg) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -859,7 +859,7 @@ func TestStoreFsyncEnabled(t *testing.T) { func TestLastSnapshotTimeUpdated(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) defer s.Close() @@ -879,7 +879,7 @@ func TestLastSnapshotTimeUpdated(t *testing.T) { func TestWALRecordsChangesets(t *testing.T) { dir := t.TempDir() - s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), nil, DefaultConfig()) + s := NewCommitStore(t.Context(), filepath.Join(dir, flatkvRootDir), DefaultConfig()) _, err := s.LoadVersion(0, false) require.NoError(t, err) diff --git a/sei-db/state_db/sc/memiavl/db.go b/sei-db/state_db/sc/memiavl/db.go index e616e1cedd..823e63ca1f 100644 --- a/sei-db/state_db/sc/memiavl/db.go +++ b/sei-db/state_db/sc/memiavl/db.go @@ -18,7 +18,6 @@ import ( "go.opentelemetry.io/otel/metric" errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/wal" @@ -48,7 +47,6 @@ var errReadOnly = errors.New("db is read-only") type DB struct { *MultiTree dir string - logger logger.Logger fileLock FileLock readOnly bool opts Options @@ -109,7 +107,7 @@ const ( // // NOTE: Relies on filesystem ModTime which may be inaccurate after backup/restore operations. // TODO: Consider storing timestamp in MultiTreeMetadata for reliability. -func getSnapshotModTime(logger logger.Logger, dir string) time.Time { +func getSnapshotModTime(dir string) time.Time { // Read the "current" symlink to get the actual snapshot directory currentLink := filepath.Clean(currentPath(dir)) snapshotName, err := os.Readlink(currentLink) @@ -149,7 +147,7 @@ func getSnapshotModTime(logger logger.Logger, dir string) time.Time { return info.ModTime() } -func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database *DB, _err error) { +func OpenDB(targetVersion int64, opts Options) (database *DB, _err error) { startTime := time.Now() defer func() { otelMetrics.RestartLatency.Record( @@ -166,7 +164,6 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * return nil, fmt.Errorf("invalid commit store options: %w", err) } opts.FillDefaults() - opts.Logger = logger if opts.CreateIfMissing { if err := createDBIfNotExist(opts.Dir, opts.InitialVersion); err != nil { return nil, fmt.Errorf("fail to load db: %w", err) @@ -205,7 +202,7 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * // MemIAVL owns changelog lifecycle: always open the WAL here. // Even in read-only mode we may need WAL replay to reconstruct non-snapshot versions. - streamHandler, err := wal.NewChangelogWAL(logger, utils.GetChangelogPath(opts.Dir), wal.Config{ + streamHandler, err := wal.NewChangelogWAL(utils.GetChangelogPath(opts.Dir), wal.Config{ WriteBufferSize: opts.AsyncCommitBuffer, }) if err != nil { @@ -230,7 +227,7 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * if err := mtree.Catchup(context.Background(), streamHandler, walIndexDelta, targetVersion); err != nil { return nil, err } - logger.Info(fmt.Sprintf("Finished the replay and caught up to version %d", targetVersion)) + logger.Info("finished replay and caught up to target version", "version", targetVersion) } if opts.LoadForOverwriting && targetVersion > 0 { @@ -241,7 +238,7 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * if snapshot != currentSnapshot { // downgrade `"current"` link first - logger.Info("downgrade current link to %s", snapshot) + logger.Info("downgrade current link", "link", snapshot) if err := updateCurrentSymlink(opts.Dir, snapshot); err != nil { return nil, fmt.Errorf("fail to update current snapshot link: %w", err) } @@ -249,7 +246,7 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * // truncate the rlog file (if WAL is provided and has entries) if walHasEntries { - logger.Info("truncate rlog after version: %d", targetVersion) + logger.Info("truncate rlog after version", "version", targetVersion) // Use O(1) conversion: walIndex = version - delta truncateIndex := targetVersion - walIndexDelta if truncateIndex > 0 { @@ -266,9 +263,9 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * } if err := atomicRemoveDir(filepath.Join(opts.Dir, snapshotName(version))); err != nil { - logger.Error("fail to prune snapshot, version: %d", version) + logger.Error("fail to prune snapshot", "version", version) } else { - logger.Info("prune snapshot, version: %d", version) + logger.Info("pruned snapshot", "version", version) } return false, nil }); err != nil { @@ -282,11 +279,10 @@ func OpenDB(logger logger.Logger, targetVersion int64, opts Options) (database * // Initialize lastSnapshotTime from the current snapshot directory's modification time // This ensures accurate time tracking even after restarts // Read the "current" symlink to get the actual snapshot directory's ModTime - lastSnapshotTime := getSnapshotModTime(logger, opts.Dir) + lastSnapshotTime := getSnapshotModTime(opts.Dir) db := &DB{ MultiTree: mtree, - logger: logger, dir: opts.Dir, fileLock: fileLock, readOnly: opts.ReadOnly, @@ -500,7 +496,7 @@ func (db *DB) checkBackgroundSnapshotRewrite() error { } replayElapsedTime := time.Since(startTime).Seconds() otelMetrics.CatchupBeforeReloadLatency.Record(context.Background(), replayElapsedTime) - db.logger.Info("successfully replayed and caught up before switching to new memiavl snapshot", "version", db.MultiTree.Version(), "latency_sec", replayElapsedTime) + logger.Info("successfully replayed and caught up before switching to new memiavl snapshot", "version", db.MultiTree.Version(), "latency_sec", replayElapsedTime) // do the switch if err := db.reloadMultiTree(result.mtree); err != nil { @@ -509,7 +505,7 @@ func (db *DB) checkBackgroundSnapshotRewrite() error { // reset memnode counter TotalMemNodeSize.Store(0) TotalNumOfMemNode.Store(0) - db.logger.Info("switched to new memiavl snapshot", "version", db.MultiTree.Version()) + logger.Info("switched to new memiavl snapshot", "version", db.MultiTree.Version()) go db.pruneSnapshots() default: @@ -522,22 +518,22 @@ func (db *DB) checkBackgroundSnapshotRewrite() error { // Note: WAL truncation is now handled by CommitStore after each commit. func (db *DB) pruneSnapshots() { if !db.pruneSnapshotLock.TryLock() { - db.logger.Info("pruneSnapshots skipped, previous prune still in progress") + logger.Info("pruneSnapshots skipped, previous prune still in progress") return } defer db.pruneSnapshotLock.Unlock() - db.logger.Info("pruneSnapshots started") + logger.Info("pruneSnapshots started") startTime := time.Now() defer func() { pruneLatency := time.Since(startTime).Seconds() otelMetrics.SnapshotPruneLatency.Record(context.Background(), pruneLatency) - db.logger.Info("pruneSnapshots completed", "duration_sec", fmt.Sprintf("%.2fs", pruneLatency)) + logger.Info("pruneSnapshots completed", "duration-sec", pruneLatency) }() currentVersion, err := currentVersion(db.dir) if err != nil { - db.logger.Error("failed to read current snapshot version", "err", err) + logger.Error("failed to read current snapshot version", "err", err) return } @@ -556,16 +552,16 @@ func (db *DB) pruneSnapshots() { name := snapshotName(version) if err := atomicRemoveDir(filepath.Join(db.dir, name)); err != nil { - db.logger.Error("failed to prune snapshot", "err", err) + logger.Error("failed to prune snapshot", "err", err) otelMetrics.NumSnapshotPruneAttempts.Add(context.Background(), 1, metric.WithAttributes(attribute.String("success", "false"))) } else { - db.logger.Info("successfully pruned snapshot", "name", name) + logger.Info("successfully pruned snapshot", "name", name) otelMetrics.NumSnapshotPruneAttempts.Add(context.Background(), 1, metric.WithAttributes(attribute.String("success", "true"))) } return false, nil }); err != nil { - db.logger.Error("fail to prune snapshots", "err", err) + logger.Error("fail to prune snapshots", "err", err) otelMetrics.NumSnapshotPruneAttempts.Add(context.Background(), 1, metric.WithAttributes(attribute.String("success", "false"))) return } @@ -687,7 +683,7 @@ func (db *DB) tryTruncateWAL() { return } if firstWALIndex > uint64(math.MaxInt64) { - db.logger.Error("WAL first offset overflows int64; skipping truncation", "firstWALIndex", firstWALIndex) + logger.Error("WAL first offset overflows int64; skipping truncation", "firstWALIndex", firstWALIndex) return } walEarliestVersion := db.walIndexToVersion(firstWALIndex) @@ -699,7 +695,7 @@ func (db *DB) tryTruncateWAL() { return } if err := db.streamHandler.TruncateBefore(truncateIndex); err != nil { - db.logger.Error("failed to truncate changelog WAL", "err", err, "truncateIndex", truncateIndex) + logger.Error("failed to truncate changelog WAL", "err", err, "truncateIndex", truncateIndex) } } @@ -715,7 +711,6 @@ func (db *DB) copy() *DB { return &DB{ MultiTree: mtree, - logger: db.logger, dir: db.dir, snapshotWriterPool: db.snapshotWriterPool, opts: db.opts, @@ -737,13 +732,13 @@ func (db *DB) RewriteSnapshot(ctx context.Context) error { // Check if snapshot already exists if info, err := os.Stat(targetPath); err == nil { if info.IsDir() { - db.logger.Info("snapshot already exists, skipping", + logger.Info("snapshot already exists, skipping", "snapshot_dir", snapshotDir, "version", db.lastCommitInfo.Version) return nil } else { // targetPath exists but is not a directory - this is unexpected - db.logger.Error("snapshot path exists but is not a directory", + logger.Error("snapshot path exists but is not a directory", "path", targetPath) return fmt.Errorf("snapshot path exists but is not a directory: %s", targetPath) } @@ -757,42 +752,42 @@ func (db *DB) RewriteSnapshot(ctx context.Context) error { writeElapsed := time.Since(writeStart).Seconds() if err != nil { - db.logger.Error("snapshot write failed, cleaning up temporary directory", + logger.Error("snapshot write failed, cleaning up temporary directory", "tmpDir", tmpDir, "error", err, ) cleanupErr := os.RemoveAll(path) if cleanupErr != nil { - db.logger.Error("failed to clean up temporary snapshot directory", + logger.Error("failed to clean up temporary snapshot directory", "tmpDir", tmpDir, "cleanup_error", cleanupErr, ) } else { - db.logger.Debug("temporary snapshot directory cleaned up successfully", + logger.Debug("temporary snapshot directory cleaned up successfully", "tmpDir", tmpDir, ) } return errorutils.Join(err, cleanupErr) } - db.logger.Info("snapshot rewrite completed", "duration_sec", writeElapsed) + logger.Info("snapshot rewrite completed", "duration_sec", writeElapsed) // Rename temporary directory to final location if err := os.Rename(path, targetPath); err != nil { - db.logger.Error("failed to rename snapshot directory, cleaning up", + logger.Error("failed to rename snapshot directory, cleaning up", "tmpDir", tmpDir, "targetDir", snapshotDir, "error", err, ) // Clean up temporary directory on rename failure if cleanupErr := os.RemoveAll(path); cleanupErr != nil { - db.logger.Error("failed to clean up temporary snapshot directory after rename failure", + logger.Error("failed to clean up temporary snapshot directory after rename failure", "tmpDir", tmpDir, "cleanup_error", cleanupErr, ) return errorutils.Join(err, cleanupErr) } - db.logger.Info("temporary snapshot directory cleaned up after rename failure", + logger.Info("temporary snapshot directory cleaned up after rename failure", "tmpDir", tmpDir, ) return err @@ -843,7 +838,7 @@ func (db *DB) rewriteIfApplicable(height int64) { timeSinceLastSnapshot := time.Since(db.lastSnapshotTime) if timeSinceLastSnapshot < db.snapshotMinTimeInterval { - db.logger.Debug("skipping snapshot (minimum time interval not reached)", + logger.Debug("skipping snapshot (minimum time interval not reached)", "blocks_since_last", blocksSinceLastSnapshot, "time_since_last", timeSinceLastSnapshot, "min_time_interval", db.snapshotMinTimeInterval, @@ -851,13 +846,13 @@ func (db *DB) rewriteIfApplicable(height int64) { return } - db.logger.Info("creating snapshot", + logger.Info("creating snapshot", "blocks_since_last", blocksSinceLastSnapshot, "time_since_last", timeSinceLastSnapshot, ) if err := db.rewriteSnapshotBackground(); err != nil { - db.logger.Error("failed to rewrite snapshot in background", "err", err) + logger.Error("failed to rewrite snapshot in background", "err", err) otelMetrics.NumSnapshotRewriteAttempts.Add(context.Background(), 1, metric.WithAttributes(attribute.String("success", "false"))) } } @@ -899,14 +894,14 @@ func (db *DB) rewriteSnapshotBackground() error { go func() { defer close(ch) startTime := time.Now() - cloned.logger.Info("start rewriting snapshot", "version", cloned.Version()) + logger.Info("start rewriting snapshot", "version", cloned.Version()) rewriteStart := time.Now() if err := cloned.RewriteSnapshot(ctx); err != nil { - cloned.logger.Error("failed to rewrite snapshot", "error", err, "elapsed", time.Since(rewriteStart).Seconds()) + logger.Error("failed to rewrite snapshot", "error", err, "elapsed", time.Since(rewriteStart).Seconds()) ch <- snapshotResult{err: err} return } - cloned.logger.Info("finished rewriting snapshot", "version", cloned.Version(), "elapsed", time.Since(rewriteStart).Seconds()) + logger.Info("finished rewriting snapshot", "version", cloned.Version(), "elapsed", time.Since(rewriteStart).Seconds()) loadStart := time.Now() @@ -922,31 +917,31 @@ func (db *DB) rewriteSnapshotBackground() error { mtree, err := LoadMultiTree(ctx, currentPath(cloned.dir), loadOpts) if err != nil { - cloned.logger.Error("failed to load multitree after snapshot", "error", err) + logger.Error("failed to load multitree after snapshot", "error", err) ch <- snapshotResult{err: err} return } // Snapshot mmap files are loaded with MADV_RANDOM in OpenSnapshot(). - cloned.logger.Info("loaded multitree after snapshot", "elapsed", time.Since(loadStart).Seconds()) + logger.Info("loaded multitree after snapshot", "elapsed", time.Since(loadStart).Seconds()) // do a best effort catch-up, will do another final catch-up in main thread. if wal := db.GetWAL(); wal != nil { catchupStart := time.Now() if err := mtree.Catchup(ctx, wal, db.walIndexDelta, 0); err != nil { - cloned.logger.Error("failed to catchup after snapshot", "error", err) + logger.Error("failed to catchup after snapshot", "error", err) ch <- snapshotResult{err: err} return } catchupElapsed := time.Since(catchupStart).Seconds() otelMetrics.CatchupAfterRewriteLatency.Record(context.Background(), catchupElapsed) - cloned.logger.Info("finished best-effort catchup after snapshot rewrite", "version", cloned.Version(), "latest", mtree.Version(), "elapsed", catchupElapsed) + logger.Info("finished best-effort catchup after snapshot rewrite", "version", cloned.Version(), "latest", mtree.Version(), "elapsed", catchupElapsed) } ch <- snapshotResult{mtree: mtree} totalRewriteElapsed := time.Since(startTime).Seconds() - cloned.logger.Info("snapshot rewrite process completed", "duration_sec", totalRewriteElapsed, "duration_min", totalRewriteElapsed/60) + logger.Info("snapshot rewrite process completed", "duration_sec", totalRewriteElapsed, "duration_min", totalRewriteElapsed/60) otelMetrics.SnapshotRewriteLatency.Record( context.Background(), totalRewriteElapsed, @@ -957,7 +952,7 @@ func (db *DB) rewriteSnapshotBackground() error { } func (db *DB) Close() error { - db.logger.Info("Closing memiavl db...") + logger.Info("Closing memiavl db...") db.mtx.Lock() defer db.mtx.Unlock() if db.closed { @@ -970,18 +965,18 @@ func (db *DB) Close() error { errs := []error{} // Close rewrite channel first - must wait for background goroutine before closing WAL - db.logger.Info("Closing rewrite channel...") + logger.Info("Closing rewrite channel...") if db.snapshotRewriteChan != nil { db.snapshotRewriteCancelFunc() // Wait for goroutine to finish and send result if result, ok := <-db.snapshotRewriteChan; ok { if result.err != nil { - db.logger.Error("snapshot rewrite failed during close", "error", result.err) + logger.Error("snapshot rewrite failed during close", "error", result.err) } // Close the returned mtree to avoid resource leak if result.mtree != nil { if err := result.mtree.Close(); err != nil { - db.logger.Error("failed to close mtree from snapshot rewrite", "error", err) + logger.Error("failed to close mtree from snapshot rewrite", "error", err) errs = append(errs, err) } } @@ -1005,13 +1000,13 @@ func (db *DB) Close() error { } // Close file lock - db.logger.Info("Closing file lock...") + logger.Info("Closing file lock...") if db.fileLock != nil { errs = append(errs, db.fileLock.Unlock()) errs = append(errs, db.fileLock.Destroy()) db.fileLock = nil } - db.logger.Info("Closed memiavl db.") + logger.Info("Closed memiavl db.") return errorutils.Join(errs...) } diff --git a/sei-db/state_db/sc/memiavl/db_rewrite_test.go b/sei-db/state_db/sc/memiavl/db_rewrite_test.go index 3e56d8ee80..7cc75446d9 100644 --- a/sei-db/state_db/sc/memiavl/db_rewrite_test.go +++ b/sei-db/state_db/sc/memiavl/db_rewrite_test.go @@ -6,7 +6,6 @@ import ( "path/filepath" "testing" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/stretchr/testify/require" ) @@ -15,7 +14,7 @@ import ( func TestMultiTreeWriteSnapshotPriorityEVM(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: []string{"evm", "bank", "acc"}, @@ -53,7 +52,7 @@ func TestLoadMultiTreeWithPrefetchDisabled(t *testing.T) { dir := t.TempDir() // Create a DB with data - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: []string{"test"}, @@ -79,7 +78,7 @@ func TestLoadMultiTreeWithPrefetchDisabled(t *testing.T) { Dir: dir, } - db2, err := OpenDB(logger.NewNopLogger(), 0, opts) + db2, err := OpenDB(0, opts) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, db2.Close()) }) diff --git a/sei-db/state_db/sc/memiavl/db_test.go b/sei-db/state_db/sc/memiavl/db_test.go index 41231852b9..5232efe0fc 100644 --- a/sei-db/state_db/sc/memiavl/db_test.go +++ b/sei-db/state_db/sc/memiavl/db_test.go @@ -14,14 +14,13 @@ import ( "github.com/stretchr/testify/require" "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" ) func TestRewriteSnapshot(t *testing.T) { - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: t.TempDir(), CreateIfMissing: true, InitialStores: []string{"test"}, @@ -57,7 +56,7 @@ func TestRemoveSnapshotDir(t *testing.T) { if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil { t.Fatalf("Failed to create dummy snapshot directory: %v", err) } - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{SnapshotKeepRecent: 0}, Dir: dbDir, CreateIfMissing: true, @@ -72,7 +71,7 @@ func TestRemoveSnapshotDir(t *testing.T) { err = os.MkdirAll(tmpDir, os.ModePerm) require.NoError(t, err) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{ + _, err = OpenDB(0, Options{ Dir: dbDir, ReadOnly: true, }) @@ -81,7 +80,7 @@ func TestRemoveSnapshotDir(t *testing.T) { _, err = os.Stat(tmpDir) require.False(t, os.IsNotExist(err)) - db, err = OpenDB(logger.NewNopLogger(), 0, Options{ + db, err = OpenDB(0, Options{ Dir: dbDir, }) require.NoError(t, err) @@ -93,7 +92,7 @@ func TestRemoveSnapshotDir(t *testing.T) { } func TestRewriteSnapshotBackground(t *testing.T) { - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{SnapshotKeepRecent: 0}, // only a single snapshot is kept Dir: t.TempDir(), CreateIfMissing: true, @@ -179,7 +178,7 @@ func RequireCommitWithNoError(t *testing.T, db *DB, key, val string) int64 { // exceeds the configured snapshot interval (strictly greater). func TestSnapshotTriggerOnIntervalDiff(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 5, SnapshotKeepRecent: 0, @@ -232,7 +231,7 @@ func TestRlog(t *testing.T) { dir := t.TempDir() initialStores := []string{"test", "delete"} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -270,7 +269,7 @@ func TestRlog(t *testing.T) { require.NoError(t, db.Close()) // Reopen (MemIAVL will open the changelog from disk) - db, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, InitialStores: initialStores}) + db, err = OpenDB(0, Options{Dir: dir, InitialStores: initialStores}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, db.Close()) }) // Close the reopened DB @@ -303,7 +302,7 @@ func TestInitialVersion(t *testing.T) { dir := t.TempDir() initialStores := []string{name} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -336,7 +335,7 @@ func TestInitialVersion(t *testing.T) { require.NoError(t, db.Close()) // Reopen (MemIAVL will open the changelog from disk) - db, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, InitialStores: initialStores}) + db, err = OpenDB(0, Options{Dir: dir, InitialStores: initialStores}) require.NoError(t, err) require.Equal(t, uint32(initialVersion), db.initialVersion.Load()) require.Equal(t, v, db.Version()) @@ -389,7 +388,7 @@ func TestLoadVersion(t *testing.T) { dir := t.TempDir() initialStores := []string{"test"} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -419,7 +418,7 @@ func TestLoadVersion(t *testing.T) { continue } // Read-only loads use the same WAL to replay - tmp, err := OpenDB(logger.NewNopLogger(), int64(v), Options{ + tmp, err := OpenDB(int64(v), Options{ Dir: dir, ReadOnly: true, InitialStores: initialStores, @@ -432,7 +431,7 @@ func TestLoadVersion(t *testing.T) { } func TestZeroCopy(t *testing.T) { - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: t.TempDir(), InitialStores: []string{"test", "test2"}, CreateIfMissing: true, @@ -539,7 +538,7 @@ func TestWALIndexDeltaComputation(t *testing.T) { initialStores := []string{"test"} // Open DB with initial version - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -575,7 +574,7 @@ func TestWALIndexDeltaComputation(t *testing.T) { require.NoError(t, db.Close()) // Reopen to verify delta is computed correctly from WAL entries - dbReopen, err := OpenDB(logger.NewNopLogger(), 0, Options{ + dbReopen, err := OpenDB(0, Options{ Dir: dir, InitialStores: initialStores, }) @@ -607,7 +606,7 @@ func TestWALIndexDeltaComputation(t *testing.T) { require.NoError(t, dbReopen.Close()) // Now test rollback with LoadForOverwriting - db2, err := OpenDB(logger.NewNopLogger(), tc.rollbackTo, Options{ + db2, err := OpenDB(tc.rollbackTo, Options{ Dir: dir, InitialStores: initialStores, LoadForOverwriting: true, @@ -626,7 +625,7 @@ func TestWALIndexDeltaComputation(t *testing.T) { require.NoError(t, db2.Close()) // Reopen without LoadForOverwriting to verify persistence - db3, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db3, err := OpenDB(0, Options{ Dir: dir, InitialStores: initialStores, }) @@ -646,7 +645,7 @@ func TestWALIndexDeltaWithZeroDelta(t *testing.T) { initialStores := []string{"test"} // Create DB with default initial version (0, so versions start at 1) - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -677,7 +676,7 @@ func TestWALIndexDeltaWithZeroDelta(t *testing.T) { require.NoError(t, db.Close()) // Rollback to version 3 - db2, err := OpenDB(logger.NewNopLogger(), 3, Options{ + db2, err := OpenDB(3, Options{ Dir: dir, InitialStores: initialStores, LoadForOverwriting: true, @@ -695,7 +694,7 @@ func TestWALIndexDeltaWithZeroDelta(t *testing.T) { require.NoError(t, db2.Close()) // Verify rollback persisted after reopen - db3, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db3, err := OpenDB(0, Options{ Dir: dir, InitialStores: initialStores, }) @@ -709,7 +708,7 @@ func TestEmptyValue(t *testing.T) { dir := t.TempDir() initialStores := []string{"test"} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, InitialStores: initialStores, CreateIfMissing: true, @@ -742,7 +741,7 @@ func TestEmptyValue(t *testing.T) { require.NoError(t, db.Close()) // Reopen (MemIAVL will open the changelog from disk) - db, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, ZeroCopy: true, InitialStores: initialStores}) + db, err = OpenDB(0, Options{Dir: dir, ZeroCopy: true, InitialStores: initialStores}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, db.Close()) }) // Close the reopened DB require.Equal(t, version, db.Version()) @@ -751,45 +750,45 @@ func TestEmptyValue(t *testing.T) { func TestInvalidOptions(t *testing.T) { dir := t.TempDir() - _, err := OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, ReadOnly: true}) + _, err := OpenDB(0, Options{Dir: dir, ReadOnly: true}) require.Error(t, err) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, ReadOnly: true, CreateIfMissing: true}) + _, err = OpenDB(0, Options{Dir: dir, ReadOnly: true, CreateIfMissing: true}) require.Error(t, err) - db, err := OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, CreateIfMissing: true}) + db, err := OpenDB(0, Options{Dir: dir, CreateIfMissing: true}) require.NoError(t, err) require.NoError(t, db.Close()) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, LoadForOverwriting: true, ReadOnly: true}) + _, err = OpenDB(0, Options{Dir: dir, LoadForOverwriting: true, ReadOnly: true}) require.Error(t, err) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, ReadOnly: true}) + _, err = OpenDB(0, Options{Dir: dir, ReadOnly: true}) require.NoError(t, err) } func TestExclusiveLock(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, CreateIfMissing: true}) + db, err := OpenDB(0, Options{Dir: dir, CreateIfMissing: true}) require.NoError(t, err) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir}) + _, err = OpenDB(0, Options{Dir: dir}) require.Error(t, err) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir, ReadOnly: true}) + _, err = OpenDB(0, Options{Dir: dir, ReadOnly: true}) require.NoError(t, err) require.NoError(t, db.Close()) - _, err = OpenDB(logger.NewNopLogger(), 0, Options{Dir: dir}) + _, err = OpenDB(0, Options{Dir: dir}) require.NoError(t, err) } func TestFastCommit(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 3, AsyncCommitBuffer: 10, @@ -831,7 +830,7 @@ func TestFastCommit(t *testing.T) { } func TestRepeatedApplyChangeSet(t *testing.T) { - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 3, AsyncCommitBuffer: 10, @@ -902,7 +901,7 @@ func TestRepeatedApplyChangeSet(t *testing.T) { func TestLoadMultiTreeWithCancelledContext(t *testing.T) { // Create a DB with some data first dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: []string{"test"}, @@ -927,7 +926,6 @@ func TestLoadMultiTreeWithCancelledContext(t *testing.T) { _, err = LoadMultiTree(ctx, filepath.Join(dir, "current"), Options{ Dir: dir, ZeroCopy: true, - Logger: logger.NewNopLogger(), }) require.Error(t, err) require.Equal(t, context.Canceled, err) @@ -938,7 +936,7 @@ func TestCatchupWithCancelledContext(t *testing.T) { dir := t.TempDir() initialStores := []string{"test"} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: initialStores, @@ -968,7 +966,6 @@ func TestCatchupWithCancelledContext(t *testing.T) { mtree, err := LoadMultiTree(context.Background(), filepath.Join(dir, "current"), Options{ Dir: dir, ZeroCopy: true, - Logger: logger.NewNopLogger(), }) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, mtree.Close()) }) @@ -986,7 +983,7 @@ func TestCatchupWithCancelledContext(t *testing.T) { func TestCloseWaitsForBackgroundSnapshot(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{SnapshotInterval: 1}, // Trigger snapshot on every commit Dir: dir, CreateIfMissing: true, @@ -1010,7 +1007,7 @@ func TestCloseWaitsForBackgroundSnapshot(t *testing.T) { func TestCloseWithSuccessfulBackgroundSnapshot(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 0, // Disable auto snapshot SnapshotMinTimeInterval: 0, diff --git a/sei-db/state_db/sc/memiavl/export.go b/sei-db/state_db/sc/memiavl/export.go index 88771fff4d..592327ff7f 100644 --- a/sei-db/state_db/sc/memiavl/export.go +++ b/sei-db/state_db/sc/memiavl/export.go @@ -8,7 +8,6 @@ import ( "runtime" errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" ) @@ -33,7 +32,7 @@ func NewMultiTreeExporter(dir string, version uint32, onlyAllowExportOnSnapshotV ) opts := Options{ZeroCopy: true} if !onlyAllowExportOnSnapshotVersion { - db, err = OpenDB(logger.NewNopLogger(), int64(version), Options{ + db, err = OpenDB(int64(version), Options{ Config: Config{SnapshotWriterLimit: runtime.NumCPU()}, Dir: dir, ZeroCopy: true, diff --git a/sei-db/state_db/sc/memiavl/multitree.go b/sei-db/state_db/sc/memiavl/multitree.go index 6435c81e98..72cb50023e 100644 --- a/sei-db/state_db/sc/memiavl/multitree.go +++ b/sei-db/state_db/sc/memiavl/multitree.go @@ -16,7 +16,6 @@ import ( "golang.org/x/time/rate" "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/wal" @@ -57,7 +56,6 @@ type MultiTree struct { initialVersion atomic.Uint32 zeroCopy bool - logger logger.Logger trees []NamedTree // always ordered by tree name treesByName map[string]int // index of the trees by name @@ -71,7 +69,6 @@ func NewEmptyMultiTree(initialVersion uint32) *MultiTree { mt := &MultiTree{ treesByName: make(map[string]int), zeroCopy: true, - logger: logger.NewNopLogger(), } mt.initialVersion.Store(initialVersion) return mt @@ -79,10 +76,6 @@ func NewEmptyMultiTree(initialVersion uint32) *MultiTree { func LoadMultiTree(ctx context.Context, dir string, opts Options) (*MultiTree, error) { startTime := time.Now() - log := opts.Logger - if log == nil { - log = logger.NewNopLogger() - } metadata, err := readMetadata(dir) if err != nil { return nil, err @@ -114,10 +107,10 @@ func LoadMultiTree(ctx context.Context, dir string, opts Options) (*MultiTree, e treeMap[name] = NewFromSnapshot(snapshot, opts) } elapsed := time.Since(startTime) - log.Info(fmt.Sprintf("All %d memIAVL trees loaded in %.1fs", len(treeNames), elapsed.Seconds())) + logger.Info("all memIAVL trees loaded", "count", len(treeNames), "elapsed-sec", elapsed.Seconds()) if elapsed > slowLoadThreshold { - log.Info("Loading MemIAVL tree from disk is too slow! Consider increasing the disk bandwidth to speed up the tree loading time within 300 seconds.") + logger.Info("Loading MemIAVL tree from disk is too slow! Consider increasing the disk bandwidth to speed up the tree loading time within 300 seconds.") } slices.Sort(treeNames) @@ -135,7 +128,6 @@ func LoadMultiTree(ctx context.Context, dir string, opts Options) (*MultiTree, e lastCommitInfo: *metadata.CommitInfo, metadata: *metadata, zeroCopy: opts.ZeroCopy, - logger: opts.Logger, } // initial version is necessary for rlog index conversion mtree.setInitialVersion(metadata.InitialVersion) @@ -203,7 +195,6 @@ func (t *MultiTree) Copy() *MultiTree { } clone := MultiTree{ - logger: t.logger, zeroCopy: t.zeroCopy, lastCommitInfo: t.lastCommitInfo, metadata: t.metadata, @@ -440,7 +431,7 @@ func (t *MultiTree) Catchup(ctx context.Context, stream wal.ChangelogWAL, delta replayCount++ otelMetrics.CatchupReplayNumBlocks.Add(context.Background(), 1) if replayCount%1000 == 0 { - t.logger.Info(fmt.Sprintf("Replayed %d changelog entries", replayCount)) + logger.Info("Replayed changelog entries", "entries-count", replayCount) } return nil }) @@ -456,8 +447,7 @@ func (t *MultiTree) Catchup(ctx context.Context, stream wal.ChangelogWAL, delta if replayCount > 0 { t.UpdateCommitInfo() replayElapsed := time.Since(startTime).Seconds() - t.logger.Info(fmt.Sprintf("Total replayed %d entries in %.1fs (%.1f entries/sec).", - replayCount, replayElapsed, float64(replayCount)/replayElapsed)) + logger.Info("changelog replay complete", "entries", replayCount, "elapsed-sec", replayElapsed, "entries-per-sec", float64(replayCount)/replayElapsed) } return nil @@ -472,7 +462,7 @@ func (t *MultiTree) WriteSnapshot(ctx context.Context, dir string, wp *pond.Work // A single global limiter is shared across ALL trees and files to ensure // the total write rate is capped at the configured value. func (t *MultiTree) WriteSnapshotWithRateLimit(ctx context.Context, dir string, wp *pond.WorkerPool, rateMBps int) error { - t.logger.Info("starting snapshot write", "trees", len(t.trees), "rate_limit_mbps", rateMBps) + logger.Info("starting snapshot write", "trees", len(t.trees), "rate_limit_mbps", rateMBps) if err := os.MkdirAll(dir, os.ModePerm); err != nil { //nolint:gosec return err @@ -482,7 +472,7 @@ func (t *MultiTree) WriteSnapshotWithRateLimit(ctx context.Context, dir string, // This ensures total write rate is capped regardless of parallelism limiter := NewGlobalRateLimiter(rateMBps) if limiter != nil { - t.logger.Info("global rate limiting enabled", "rate_mbps", rateMBps) + logger.Info("global rate limiting enabled", "rate_mbps", rateMBps) } // Write EVM first to avoid disk I/O contention, then parallel @@ -510,18 +500,18 @@ func (t *MultiTree) writeSnapshotPriorityEVM(ctx context.Context, dir string, wp } if evmTree != nil { - t.logger.Info("writing evm tree", "phase", "1/2") + logger.Info("writing evm tree", "phase", "1/2") evmStart := time.Now() if err := evmTree.WriteSnapshotWithRateLimit(ctx, filepath.Join(dir, evmName), limiter); err != nil { return err } evmElapsed := time.Since(evmStart).Seconds() - t.logger.Info("evm tree completed", "duration_sec", evmElapsed) + logger.Info("evm tree completed", "duration_sec", evmElapsed) } // Phase 2: Write all other trees in parallel if len(otherTrees) > 0 { - t.logger.Info("writing remaining trees", "phase", "2/2", "count", len(otherTrees)) + logger.Info("writing remaining trees", "phase", "2/2", "count", len(otherTrees)) phase2Start := time.Now() // NOTE: We use explicit WaitGroup instead of pond.GroupContext because @@ -553,11 +543,11 @@ func (t *MultiTree) writeSnapshotPriorityEVM(ctx context.Context, dir string, wp } phase2Elapsed := time.Since(phase2Start).Seconds() - t.logger.Info("remaining trees completed", "duration_sec", phase2Elapsed, "count", len(otherTrees)) + logger.Info("remaining trees completed", "duration_sec", phase2Elapsed, "count", len(otherTrees)) } elapsed := time.Since(startTime).Seconds() - t.logger.Info("all trees completed", "duration_sec", elapsed, "trees", len(t.trees)) + logger.Info("all trees completed", "duration_sec", elapsed, "trees", len(t.trees)) // write commit info metadata := proto.MultiTreeMetadata{ diff --git a/sei-db/state_db/sc/memiavl/opts.go b/sei-db/state_db/sc/memiavl/opts.go index 413c57f488..a78e57f58a 100644 --- a/sei-db/state_db/sc/memiavl/opts.go +++ b/sei-db/state_db/sc/memiavl/opts.go @@ -3,8 +3,6 @@ package memiavl import ( "errors" "time" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" ) // Options contains all settings for opening a memiavl database. @@ -24,8 +22,6 @@ type Options struct { InitialStores []string // ZeroCopy if true, get and iterator methods return slices pointing to mmaped blob files ZeroCopy bool - // Logger is the memiavl logger - Logger logger.Logger // LoadForOverwriting if true, rollbacks the state by truncating versions after TargetVersion LoadForOverwriting bool // OnlyAllowExportOnSnapshotVersion restricts export to snapshot versions only @@ -78,8 +74,4 @@ func (opts *Options) FillDefaults() { if opts.SnapshotPrefetchThreshold <= 0 || opts.SnapshotPrefetchThreshold > 1 { opts.SnapshotPrefetchThreshold = DefaultSnapshotPrefetchThreshold } - - if opts.Logger == nil { - opts.Logger = logger.NewNopLogger() - } } diff --git a/sei-db/state_db/sc/memiavl/snapshot.go b/sei-db/state_db/sc/memiavl/snapshot.go index 284c861607..871c3f9632 100644 --- a/sei-db/state_db/sc/memiavl/snapshot.go +++ b/sei-db/state_db/sc/memiavl/snapshot.go @@ -16,12 +16,14 @@ import ( "unsafe" "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" + "github.com/sei-protocol/seilog" "golang.org/x/sys/unix" "golang.org/x/time/rate" ) +var logger = seilog.NewLogger("db", "state-db", "sc", "memiavl") + const ( // SnapshotFileMagic is little endian encoded b"IAVL" SnapshotFileMagic = 1280721225 @@ -133,8 +135,7 @@ type Snapshot struct { leavesLayout Leaves // nil means empty snapshot - root *PersistedNode - logger logger.Logger + root *PersistedNode } func NewEmptySnapshot(version uint32) *Snapshot { @@ -227,7 +228,6 @@ func OpenSnapshot(snapshotDir string, opts Options) (*Snapshot, error) { } snapshot := &Snapshot{ - logger: opts.Logger, nodesMap: nodesMap, leavesMap: leavesMap, @@ -468,7 +468,7 @@ func (t *Tree) WriteSnapshotWithRateLimit(ctx context.Context, snapshotDir strin // Use 128MB buffer for all trees (large buffer for better performance) bufSize := bufIOSize - err := writeSnapshotWithBuffer(ctx, snapshotDir, t.version, bufSize, treeSize, limiter, t.logger, func(w *snapshotWriter) (uint32, error) { + err := writeSnapshotWithBuffer(ctx, snapshotDir, t.version, bufSize, treeSize, limiter, func(w *snapshotWriter) (uint32, error) { if t.root == nil { return 0, nil } @@ -494,7 +494,6 @@ func writeSnapshotWithBuffer( bufSize int, totalNodes int64, limiter *rate.Limiter, - log logger.Logger, doWrite func(*snapshotWriter) (uint32, error), ) (returnErr error) { if err := os.MkdirAll(dir, os.ModePerm); err != nil { //nolint:gosec @@ -552,7 +551,7 @@ func writeSnapshotWithBuffer( leavesWriter := bufio.NewWriterSize(leavesRateLimited, bufSize) kvsWriter := bufio.NewWriterSize(kvsRateLimited, bufSize) - w := newSnapshotWriter(ctx, nodesWriter, leavesWriter, kvsWriter, log) + w := newSnapshotWriter(ctx, nodesWriter, leavesWriter, kvsWriter) w.treeName = filepath.Base(dir) // Set tree name for progress reporting w.totalNodes = totalNodes // Set total nodes for progress percentage w.traversalStartTime = time.Now() @@ -625,7 +624,7 @@ func writeSnapshot( doWrite func(*snapshotWriter) (uint32, error), ) error { // Use nop logger and no rate limit for backward compatibility - return writeSnapshotWithBuffer(ctx, dir, version, bufIOSize, 0, nil, logger.NewNopLogger(), doWrite) + return writeSnapshotWithBuffer(ctx, dir, version, bufIOSize, 0, nil, doWrite) } // kvWriteOp represents a key-value write operation @@ -671,7 +670,6 @@ type snapshotWriter struct { traversalStartTime time.Time lastProgressReport time.Time progressReportInterval time.Duration - logger logger.Logger // Pipeline for async writes - separate channels for each file kvChan chan kvWriteOp @@ -694,7 +692,7 @@ func SetPipelineBufferSize(size int) { nodeChanSize = max(100, min(size, 100000)) } -func newSnapshotWriter(ctx context.Context, nodesWriter, leavesWriter, kvsWriter io.Writer, log logger.Logger) *snapshotWriter { +func newSnapshotWriter(ctx context.Context, nodesWriter, leavesWriter, kvsWriter io.Writer) *snapshotWriter { // Create a cancelable context so we can stop producers on error ctx, cancel := context.WithCancel(ctx) now := time.Now() @@ -715,7 +713,6 @@ func newSnapshotWriter(ctx context.Context, nodesWriter, leavesWriter, kvsWriter kvWriter: kvsWriter, lastProgressReport: now, progressReportInterval: 30 * time.Second, - logger: log, kvChan: kvChan, leafChan: leafChan, branchChan: branchChan, @@ -771,14 +768,12 @@ func (w *snapshotWriter) branchWriterLoop() { // fail records an error and cancels the context to stop producers func (w *snapshotWriter) fail(err error) { // Log the error immediately for debugging - if w.logger != nil { - w.logger.Error("snapshot writer failed, canceling operation", - "tree", w.treeName, - "error", err.Error(), - "branches_written", w.branchCounter, - "leaves_written", w.leafCounter, - ) - } + logger.Error("snapshot writer failed, canceling operation", + "tree", w.treeName, + "error", err.Error(), + "branches_written", w.branchCounter, + "leaves_written", w.leafCounter, + ) select { case w.writeErrors <- err: @@ -795,13 +790,11 @@ func (w *snapshotWriter) waitForWrites() error { close(w.leafChan) close(w.branchChan) - if w.logger != nil { - w.logger.Info("waiting for async writers to complete", - "tree", w.treeName, - "branches_queued", w.branchCounter, - "leaves_queued", w.leafCounter, - ) - } + logger.Info("waiting for async writers to complete", + "tree", w.treeName, + "branches_queued", w.branchCounter, + "leaves_queued", w.leafCounter, + ) // Wait for all writer goroutines to finish w.wg.Wait() @@ -809,21 +802,17 @@ func (w *snapshotWriter) waitForWrites() error { // Check for any errors select { case err := <-w.writeErrors: - if w.logger != nil { - w.logger.Error("async writer reported error after completion", - "tree", w.treeName, - "error", err.Error(), - ) - } + logger.Error("async writer reported error after completion", + "tree", w.treeName, + "error", err.Error(), + ) return err default: - if w.logger != nil { - w.logger.Info("all async writers completed successfully", - "tree", w.treeName, - "total_branches", w.branchCounter, - "total_leaves", w.leafCounter, - ) - } + logger.Info("all async writers completed successfully", + "tree", w.treeName, + "total_branches", w.branchCounter, + "total_leaves", w.leafCounter, + ) return nil } } @@ -1018,30 +1007,30 @@ func (snapshot *Snapshot) prefetchSnapshot(snapshotDir string, prefetchThreshold if !needsPreload { return } - log := snapshot.logger // If most pages are already in page cache, skip prefetch residentNodes, errNodes := residentRatio(snapshot.nodes) residentLeaves, errLeaves := residentRatio(snapshot.leaves) if errNodes == nil && errLeaves == nil { if residentNodes >= prefetchThreshold && residentLeaves >= prefetchThreshold { - log.Info(fmt.Sprintf("Skipped prefetching for tree %s (nodes: %.2f%%, leaves: %.2f%%, threshold: %.2f%%)", - treeName, residentNodes*100, residentLeaves*100, prefetchThreshold*100)) + logger.Info("skipped prefetching for tree", + "tree", treeName, "nodes-pct", residentNodes*100, "leaves-pct", residentLeaves*100, "threshold-pct", prefetchThreshold*100) return } } if residentNodes < prefetchThreshold { - log.Info(fmt.Sprintf("Tree %s nodes page cache residency ratio is %f, below threshold %f", treeName, residentNodes, prefetchThreshold)) - _ = SequentialReadAndFillPageCache(log, filepath.Join(snapshotDir, FileNameNodes)) + logger.Info("tree nodes page cache residency below threshold", "tree", treeName, "resident-ratio", residentNodes, "threshold", prefetchThreshold) + _ = SequentialReadAndFillPageCache(filepath.Join(snapshotDir, FileNameNodes)) } if residentLeaves < prefetchThreshold { - log.Info(fmt.Sprintf("Tree %s leaves page cache residency ratio is %f, below threshold %f", treeName, residentLeaves, prefetchThreshold)) - _ = SequentialReadAndFillPageCache(log, filepath.Join(snapshotDir, FileNameLeaves)) + logger.Info("tree leaves page cache residency below threshold", "tree", treeName, "resident-ratio", residentLeaves, "threshold", prefetchThreshold) + _ = SequentialReadAndFillPageCache(filepath.Join(snapshotDir, FileNameLeaves)) } - log.Info(fmt.Sprintf("Prefetch snapshot for %s completed in %fs. Consider adding more RAM for page cache to avoid preloading during restart.", treeName, time.Since(startTime).Seconds())) + logger.Info("prefetch snapshot completed; consider adding more RAM for page cache to avoid preloading during restart", + "tree", treeName, "elapsed-sec", time.Since(startTime).Seconds()) } // shouldPreloadTree determines if a tree should be preloaded based on size and name @@ -1060,7 +1049,7 @@ func shouldPreloadTree(treeName string) bool { return activeTrees[treeName] } -func SequentialReadAndFillPageCache(log logger.Logger, filePath string) error { +func SequentialReadAndFillPageCache(filePath string) error { filePath = filepath.Clean(filePath) startTime := time.Now() f, err := os.Open(filePath) @@ -1078,18 +1067,18 @@ func SequentialReadAndFillPageCache(log logger.Logger, filePath string) error { totalSize := fileInfo.Size() if totalSize == 0 { - log.Debug("skipping empty file for prefetch", "path", filePath) + logger.Debug("skipping empty file for prefetch", "path", filePath) return nil } sizeMiB := float64(totalSize) / (1024 * 1024) - log.Debug("starting to prefetch file", "path", filePath, "size_mib", sizeMiB) + logger.Debug("starting to prefetch file", "path", filePath, "size_mib", sizeMiB) reportDone := make(chan struct{}) var totalRead int64 defer close(reportDone) // Stop progress reporter before returning - startPrefetchProgressReporter(log, filePath, totalSize, &totalRead, startTime, reportDone) + startPrefetchProgressReporter(filePath, totalSize, &totalRead, startTime, reportDone) concurrency := runtime.NumCPU() var wg sync.WaitGroup @@ -1120,7 +1109,7 @@ func SequentialReadAndFillPageCache(log logger.Logger, filePath string) error { elapsed := time.Since(startTime).Seconds() completedSizeMiB := float64(totalSize) / (1024 * 1024) avgSpeedMiBps := float64(totalSize) / elapsed / (1024 * 1024) - log.Debug("completed prefetching file", + logger.Debug("completed prefetching file", "path", filePath, "size_mib", completedSizeMiB, "elapsed_sec", elapsed, @@ -1129,7 +1118,7 @@ func SequentialReadAndFillPageCache(log logger.Logger, filePath string) error { } // startPrefetchProgressReporter periodically logs progress until done is closed. -func startPrefetchProgressReporter(log logger.Logger, filePath string, totalSize int64, totalRead *int64, startTime time.Time, done <-chan struct{}) { +func startPrefetchProgressReporter(filePath string, totalSize int64, totalRead *int64, startTime time.Time, done <-chan struct{}) { go func() { ticker := time.NewTicker(10 * time.Second) defer ticker.Stop() @@ -1148,7 +1137,7 @@ func startPrefetchProgressReporter(log logger.Logger, filePath string, totalSize speedMiBps := float64(tr) / elapsed / (1024 * 1024) progressPct := float64(tr) * 100 / float64(totalSize) remaining := float64(totalSize-tr) / (speedMiBps * 1024 * 1024) - log.Debug("prefetching file progress", + logger.Debug("prefetching file progress", "path", filePath, "read_mib", readMiB, "total_mib", totalMiB, diff --git a/sei-db/state_db/sc/memiavl/snapshot_catchup_test.go b/sei-db/state_db/sc/memiavl/snapshot_catchup_test.go index 995da12015..d4abe0a990 100644 --- a/sei-db/state_db/sc/memiavl/snapshot_catchup_test.go +++ b/sei-db/state_db/sc/memiavl/snapshot_catchup_test.go @@ -4,7 +4,6 @@ import ( "testing" "time" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" "github.com/stretchr/testify/require" @@ -14,7 +13,7 @@ import ( func TestSnapshotTimeThrottling(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 100, // Small interval for testing SnapshotMinTimeInterval: 60 * 60, // 1 hour minimum time interval (in seconds) @@ -70,7 +69,7 @@ func TestSnapshotTimeThrottling(t *testing.T) { func TestSnapshotCreationAfterTimeThreshold(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{SnapshotInterval: 100}, Dir: dir, CreateIfMissing: true, @@ -156,7 +155,7 @@ func TestSnapshotCreationAfterTimeThreshold(t *testing.T) { func TestSnapshotWithShortTimeInterval(t *testing.T) { dir := t.TempDir() - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{ SnapshotInterval: 100, SnapshotMinTimeInterval: 1, // 1 second minimum time interval for testing diff --git a/sei-db/state_db/sc/memiavl/snapshot_pipeline_test.go b/sei-db/state_db/sc/memiavl/snapshot_pipeline_test.go index 4abc10c853..e1b24adb6e 100644 --- a/sei-db/state_db/sc/memiavl/snapshot_pipeline_test.go +++ b/sei-db/state_db/sc/memiavl/snapshot_pipeline_test.go @@ -7,7 +7,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" iavl "github.com/sei-protocol/sei-chain/sei-iavl" ) @@ -142,7 +141,6 @@ func TestWriteSnapshotWithBuffer(t *testing.T) { 1024*1024, // 1MB buffer int64(tree.root.Size()), nil, // no rate limiting - logger.NewNopLogger(), func(w *snapshotWriter) (uint32, error) { if tree.root == nil { return 0, nil diff --git a/sei-db/state_db/sc/memiavl/snapshot_test.go b/sei-db/state_db/sc/memiavl/snapshot_test.go index eb1852f59b..eae19e17ab 100644 --- a/sei-db/state_db/sc/memiavl/snapshot_test.go +++ b/sei-db/state_db/sc/memiavl/snapshot_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" ) @@ -145,7 +144,7 @@ func TestDBSnapshotRestore(t *testing.T) { dir := t.TempDir() initialStores := []string{"test", "test2"} - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Config: Config{AsyncCommitBuffer: -1}, Dir: dir, CreateIfMissing: true, @@ -199,7 +198,7 @@ func testSnapshotRoundTrip(t *testing.T, db *DB) { require.NoError(t, importer.Close()) require.NoError(t, exporter.Close()) - db2, err := OpenDB(logger.NewNopLogger(), 0, Options{Dir: restoreDir}) + db2, err := OpenDB(0, Options{Dir: restoreDir}) require.NoError(t, err) require.Equal(t, db.LastCommitInfo(), db2.LastCommitInfo()) diff --git a/sei-db/state_db/sc/memiavl/snapshot_write_test.go b/sei-db/state_db/sc/memiavl/snapshot_write_test.go index 1a11fba240..9b01a3dd73 100644 --- a/sei-db/state_db/sc/memiavl/snapshot_write_test.go +++ b/sei-db/state_db/sc/memiavl/snapshot_write_test.go @@ -6,7 +6,6 @@ import ( "path/filepath" "testing" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" "github.com/stretchr/testify/require" @@ -17,7 +16,6 @@ func TestWriteSnapshotWithEmptyTree(t *testing.T) { dir := t.TempDir() tree := NewWithInitialVersion(0) - tree.logger = logger.NewNopLogger() snapshotDir := filepath.Join(dir, "empty-snapshot") err := tree.WriteSnapshot(context.Background(), snapshotDir) @@ -38,7 +36,6 @@ func TestWriteSnapshotWithData(t *testing.T) { dir := t.TempDir() tree := NewWithInitialVersion(0) - tree.logger = logger.NewNopLogger() // Add some data for i := range 100 { @@ -70,7 +67,7 @@ func TestMultiTreeWriteSnapshotSequential(t *testing.T) { dir := t.TempDir() // Create a DB with multiple stores - db, err := OpenDB(logger.NewNopLogger(), 0, Options{ + db, err := OpenDB(0, Options{ Dir: dir, CreateIfMissing: true, InitialStores: []string{"store1", "store2", "store3"}, @@ -136,7 +133,6 @@ func TestSnapshotWriteWithContextCancellation(t *testing.T) { dir := t.TempDir() tree := NewWithInitialVersion(0) - tree.logger = logger.NewNopLogger() // Add a moderate amount of data for i := range 100 { diff --git a/sei-db/state_db/sc/memiavl/store.go b/sei-db/state_db/sc/memiavl/store.go index c2ca87f73b..231d9b61c9 100644 --- a/sei-db/state_db/sc/memiavl/store.go +++ b/sei-db/state_db/sc/memiavl/store.go @@ -5,7 +5,6 @@ import ( "math" "github.com/sei-protocol/sei-chain/sei-db/common/errors" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" @@ -14,13 +13,12 @@ import ( var _ types.Committer = (*CommitStore)(nil) type CommitStore struct { - logger logger.Logger db *DB opts Options homeDir string } -func NewCommitStore(homeDir string, logger logger.Logger, config Config) *CommitStore { +func NewCommitStore(homeDir string, config Config) *CommitStore { commitDBPath := utils.GetCommitStorePath(homeDir) opts := Options{ Config: config, // Embed the config directly @@ -29,7 +27,6 @@ func NewCommitStore(homeDir string, logger logger.Logger, config Config) *Commit ZeroCopy: true, } commitStore := &CommitStore{ - logger: logger, opts: opts, homeDir: homeDir, } @@ -53,7 +50,7 @@ func (cs *CommitStore) Rollback(targetVersion int64) error { options := cs.opts options.LoadForOverwriting = true - db, err := OpenDB(cs.logger, targetVersion, options) + db, err := OpenDB(targetVersion, options) if err != nil { return err } @@ -64,16 +61,16 @@ func (cs *CommitStore) Rollback(targetVersion int64) error { // LoadVersion loads the specified version of the database. // If copyExisting is true, creates a read-only copy for querying. func (cs *CommitStore) LoadVersion(targetVersion int64, readOnly bool) (types.Committer, error) { - cs.logger.Info(fmt.Sprintf("SeiDB load target memIAVL version %d, readOnly = %v", targetVersion, readOnly)) + logger.Info("SeiDB loading target memIAVL version", "version", targetVersion, "read-only", readOnly) if readOnly { // Create a read-only copy via NewCommitStore. - newCS := NewCommitStore(cs.homeDir, cs.logger, cs.opts.Config) + newCS := NewCommitStore(cs.homeDir, cs.opts.Config) newCS.opts = cs.opts newCS.opts.ReadOnly = true newCS.opts.CreateIfMissing = false - db, err := OpenDB(cs.logger, targetVersion, newCS.opts) + db, err := OpenDB(targetVersion, newCS.opts) if err != nil { return nil, err } @@ -87,7 +84,7 @@ func (cs *CommitStore) LoadVersion(targetVersion int64, readOnly bool) (types.Co } opts := cs.opts - db, err := OpenDB(cs.logger, targetVersion, opts) + db, err := OpenDB(targetVersion, opts) if err != nil { return nil, err } diff --git a/sei-db/state_db/sc/memiavl/store_test.go b/sei-db/state_db/sc/memiavl/store_test.go index 7f58deb8c9..8f2a7d059b 100644 --- a/sei-db/state_db/sc/memiavl/store_test.go +++ b/sei-db/state_db/sc/memiavl/store_test.go @@ -4,11 +4,9 @@ import ( "math" "testing" - "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" + "github.com/stretchr/testify/require" ) func mustReadLastChangelogEntry(t *testing.T, cs *CommitStore) proto.ChangelogEntry { @@ -28,9 +26,8 @@ func TestNewCommitStore(t *testing.T) { dir := t.TempDir() cfg := DefaultConfig() cfg.SnapshotInterval = 10 - cs := NewCommitStore(dir, logger.NewNopLogger(), cfg) + cs := NewCommitStore(dir, cfg) require.NotNil(t, cs) - require.NotNil(t, cs.logger) require.True(t, cs.opts.ZeroCopy) require.Equal(t, uint32(10), cs.opts.SnapshotInterval) require.True(t, cs.opts.CreateIfMissing) @@ -39,14 +36,14 @@ func TestNewCommitStore(t *testing.T) { func TestNewCommitStoreWithCustomDirectory(t *testing.T) { customDir := t.TempDir() - cs := NewCommitStore(customDir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(customDir, Config{}) require.NotNil(t, cs) require.Contains(t, cs.opts.Dir, customDir) } func TestInitialize(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) stores := []string{"store1", "store2", "store3"} cs.Initialize(stores) @@ -56,7 +53,7 @@ func TestInitialize(t *testing.T) { func TestCommitStoreBasicOperations(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // Load version 0 to initialize the DB @@ -100,7 +97,7 @@ func TestCommitStoreBasicOperations(t *testing.T) { func TestApplyChangeSetsEmpty(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -120,7 +117,7 @@ func TestApplyChangeSetsEmpty(t *testing.T) { func TestApplyUpgrades(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -153,7 +150,7 @@ func TestApplyUpgrades(t *testing.T) { func TestApplyUpgradesEmpty(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -173,7 +170,7 @@ func TestApplyUpgradesEmpty(t *testing.T) { func TestLoadVersionCopyExisting(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // First load to create the DB @@ -211,7 +208,7 @@ func TestLoadVersionCopyExisting(t *testing.T) { func TestCommitInfo(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -248,7 +245,7 @@ func TestCommitInfo(t *testing.T) { func TestGetModuleByName(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test", "other"}) _, err := cs.LoadVersion(0, false) @@ -269,7 +266,7 @@ func TestGetModuleByName(t *testing.T) { func TestExporterVersionValidation(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -292,7 +289,7 @@ func TestExporterVersionValidation(t *testing.T) { func TestImporterVersionValidation(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) // Negative version should fail _, err := cs.Importer(-1) @@ -307,7 +304,7 @@ func TestImporterVersionValidation(t *testing.T) { func TestCommitStoreClose(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -327,7 +324,7 @@ func TestCommitStoreClose(t *testing.T) { func TestCommitStoreRollback(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -362,7 +359,7 @@ func TestCommitStoreRollback(t *testing.T) { func TestMultipleCommits(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -396,7 +393,7 @@ func TestMultipleCommits(t *testing.T) { func TestCommitWithUpgradesAndChangesets(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -437,7 +434,7 @@ func TestCommitWithUpgradesAndChangesets(t *testing.T) { func TestSetInitialVersion(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -454,7 +451,7 @@ func TestSetInitialVersion(t *testing.T) { func TestGetVersions(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -479,7 +476,7 @@ func TestGetVersions(t *testing.T) { require.NoError(t, cs.Close()) // Create new CommitStore to test GetLatestVersion - cs2 := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs2 := NewCommitStore(dir, Config{}) cs2.Initialize([]string{"test"}) latestVersion, err := cs2.GetLatestVersion() @@ -489,7 +486,7 @@ func TestGetVersions(t *testing.T) { func TestCreateWAL(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -505,7 +502,7 @@ func TestCreateWAL(t *testing.T) { func TestLoadVersionReadOnlyWithWALReplay(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // First load to create the DB @@ -562,7 +559,7 @@ func TestLoadVersionReadOnlyWithWALReplay(t *testing.T) { func TestLoadVersionReadOnlyCreatesOwnWAL(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // First load to create the DB @@ -609,7 +606,7 @@ func TestWALPersistenceAcrossRestart(t *testing.T) { dir := t.TempDir() // First session: write data - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -650,7 +647,7 @@ func TestWALPersistenceAcrossRestart(t *testing.T) { require.NoError(t, cs.Close()) // Second session: reload and verify WAL replay - cs2 := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs2 := NewCommitStore(dir, Config{}) cs2.Initialize([]string{"test"}) _, err = cs2.LoadVersion(0, false) @@ -668,7 +665,7 @@ func TestWALPersistenceAcrossRestart(t *testing.T) { func TestRollbackWithWAL(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -705,7 +702,7 @@ func TestRollbackWithWAL(t *testing.T) { require.NoError(t, cs.Close()) // Reopen and verify rollback persisted - cs2 := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs2 := NewCommitStore(dir, Config{}) cs2.Initialize([]string{"test"}) _, err = cs2.LoadVersion(0, false) @@ -719,7 +716,7 @@ func TestRollbackWithWAL(t *testing.T) { func TestRollbackCreatesWALIfNeeded(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // Load and commit @@ -744,7 +741,7 @@ func TestRollbackCreatesWALIfNeeded(t *testing.T) { require.NoError(t, cs.Close()) // After Close(), create a new CommitStore (WAL creation happens in NewCommitStore) - cs2 := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs2 := NewCommitStore(dir, Config{}) cs2.Initialize([]string{"test"}) // Rollback should work @@ -754,7 +751,7 @@ func TestRollbackCreatesWALIfNeeded(t *testing.T) { func TestCloseReleasesWAL(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -772,7 +769,7 @@ func TestCloseReleasesWAL(t *testing.T) { func TestLoadVersionReusesExistingWAL(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // First load @@ -810,7 +807,7 @@ func TestLoadVersionReusesExistingWAL(t *testing.T) { func TestReadOnlyCopyCannotCommit(t *testing.T) { dir := t.TempDir() - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) // First load @@ -859,7 +856,7 @@ func TestWALTruncationOnCommit(t *testing.T) { cfg := DefaultConfig() cfg.SnapshotInterval = 2 cfg.SnapshotKeepRecent = 1 - cs := NewCommitStore(dir, logger.NewNopLogger(), cfg) + cs := NewCommitStore(dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -919,7 +916,7 @@ func TestWALTruncationWithNoSnapshots(t *testing.T) { dir := t.TempDir() // No snapshot interval configured, so no snapshots will be created - cs := NewCommitStore(dir, logger.NewNopLogger(), Config{}) + cs := NewCommitStore(dir, Config{}) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -959,7 +956,7 @@ func TestWALTruncationDelta(t *testing.T) { cfg := DefaultConfig() cfg.SnapshotInterval = 2 cfg.SnapshotKeepRecent = 1 - cs := NewCommitStore(dir, logger.NewNopLogger(), cfg) + cs := NewCommitStore(dir, cfg) cs.Initialize([]string{"test"}) _, err := cs.LoadVersion(0, false) @@ -993,7 +990,7 @@ func TestWALTruncationDelta(t *testing.T) { require.NoError(t, cs.Close()) // Reopen - cs2 := NewCommitStore(dir, logger.NewNopLogger(), cfg) + cs2 := NewCommitStore(dir, cfg) cs2.Initialize([]string{"test"}) _, err = cs2.LoadVersion(0, false) require.NoError(t, err) diff --git a/sei-db/state_db/sc/memiavl/tree.go b/sei-db/state_db/sc/memiavl/tree.go index 58f98cdb77..cae0fb017b 100644 --- a/sei-db/state_db/sc/memiavl/tree.go +++ b/sei-db/state_db/sc/memiavl/tree.go @@ -9,7 +9,6 @@ import ( ics23 "github.com/confio/ics23/go" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/types" iavl "github.com/sei-protocol/sei-chain/sei-iavl" @@ -31,8 +30,6 @@ type Tree struct { // when true, the get and iterator methods could return a slice pointing to mmaped blob files. zeroCopy bool - logger logger.Logger - // sync.RWMutex is used to protect the tree for thread safety during snapshot reload mtx *sync.RWMutex @@ -73,7 +70,6 @@ func NewFromSnapshot(snapshot *Snapshot, opts Options) *Tree { version: snapshot.Version(), snapshot: snapshot, zeroCopy: opts.ZeroCopy, - logger: opts.Logger, mtx: &sync.RWMutex{}, pendingWg: &sync.WaitGroup{}, } diff --git a/sei-db/state_db/ss/composite/recovery_test.go b/sei-db/state_db/ss/composite/recovery_test.go index 83297e23fa..e38342d123 100644 --- a/sei-db/state_db/ss/composite/recovery_test.go +++ b/sei-db/state_db/ss/composite/recovery_test.go @@ -5,9 +5,6 @@ import ( "path/filepath" "testing" - "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" @@ -18,19 +15,18 @@ import ( "github.com/sei-protocol/sei-chain/sei-db/wal" iavl "github.com/sei-protocol/sei-chain/sei-iavl" evmtypes "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/stretchr/testify/require" ) func newCompositeStateStoreWithStores( cosmosStore types.StateStore, evmStore types.StateStore, ssConfig config.StateStoreConfig, - log logger.Logger, ) *CompositeStateStore { return &CompositeStateStore{ cosmosStore: cosmosStore, evmStore: evmStore, config: ssConfig, - logger: log, } } @@ -39,8 +35,6 @@ func TestRecoverCompositeStateStore(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(dir) - log := logger.NewNopLogger() - ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = "pebbledb" dbHome := utils.GetStateStorePath(dir, ssConfig.Backend) @@ -53,15 +47,15 @@ func TestRecoverCompositeStateStore(t *testing.T) { ssConfig.ReadMode = config.EVMFirstRead ssConfig.EVMDBDirectory = filepath.Join(dir, "evm_ss") - evmStore, err := evm.NewEVMStateStore(ssConfig.EVMDBDirectory, ssConfig, log) + evmStore, err := evm.NewEVMStateStore(ssConfig.EVMDBDirectory, ssConfig) require.NoError(t, err) defer evmStore.Close() - compositeStore := newCompositeStateStoreWithStores(cosmosStore, evmStore, ssConfig, log) + compositeStore := newCompositeStateStoreWithStores(cosmosStore, evmStore, ssConfig) defer compositeStore.Close() changelogDir := filepath.Join(dir, "changelog") - walLog, err := wal.NewChangelogWAL(log, changelogDir, wal.Config{}) + walLog, err := wal.NewChangelogWAL(changelogDir, wal.Config{}) require.NoError(t, err) addr := make([]byte, 20) @@ -94,7 +88,7 @@ func TestRecoverCompositeStateStore(t *testing.T) { } walLog.Close() - err = RecoverCompositeStateStore(log, changelogDir, compositeStore) + err = RecoverCompositeStateStore(changelogDir, compositeStore) require.NoError(t, err) cosmosVal, err := compositeStore.cosmosStore.Get(evm.EVMStoreKey, 5, evmKey) @@ -113,8 +107,6 @@ func TestSyncEVMStoreBehind(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(dir) - log := logger.NewNopLogger() - ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = "pebbledb" dbHome := utils.GetStateStorePath(dir, ssConfig.Backend) @@ -144,7 +136,7 @@ func TestSyncEVMStoreBehind(t *testing.T) { } changelogDir := filepath.Join(dir, "changelog") - walLog, err := wal.NewChangelogWAL(log, changelogDir, wal.Config{}) + walLog, err := wal.NewChangelogWAL(changelogDir, wal.Config{}) require.NoError(t, err) for version := int64(1); version <= 10; version++ { @@ -170,16 +162,16 @@ func TestSyncEVMStoreBehind(t *testing.T) { ssConfig.ReadMode = config.EVMFirstRead ssConfig.EVMDBDirectory = filepath.Join(dir, "evm_ss") - evmStore, err := evm.NewEVMStateStore(ssConfig.EVMDBDirectory, ssConfig, log) + evmStore, err := evm.NewEVMStateStore(ssConfig.EVMDBDirectory, ssConfig) require.NoError(t, err) - compositeStore := newCompositeStateStoreWithStores(cosmosStore, evmStore, ssConfig, log) + compositeStore := newCompositeStateStoreWithStores(cosmosStore, evmStore, ssConfig) defer compositeStore.Close() require.Equal(t, int64(0), compositeStore.evmStore.GetLatestVersion()) require.Equal(t, int64(10), compositeStore.cosmosStore.GetLatestVersion()) - err = RecoverCompositeStateStore(log, changelogDir, compositeStore) + err = RecoverCompositeStateStore(changelogDir, compositeStore) require.NoError(t, err) require.Equal(t, int64(10), compositeStore.evmStore.GetLatestVersion()) @@ -227,8 +219,6 @@ func TestConstructorRecoversStalEVM(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(dir) - log := logger.NewNopLogger() - ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = "pebbledb" dbHome := utils.GetStateStorePath(dir, ssConfig.Backend) @@ -262,7 +252,7 @@ func TestConstructorRecoversStalEVM(t *testing.T) { mvccDB.Close() changelogPath := utils.GetChangelogPath(dbHome) - walLog, err := wal.NewChangelogWAL(log, changelogPath, wal.Config{}) + walLog, err := wal.NewChangelogWAL(changelogPath, wal.Config{}) require.NoError(t, err) for v := int64(1); v <= 5; v++ { require.NoError(t, walLog.Write(proto.ChangelogEntry{ @@ -281,7 +271,7 @@ func TestConstructorRecoversStalEVM(t *testing.T) { } walLog.Close() - compositeStore, err := NewCompositeStateStore(ssConfig, dir, log) + compositeStore, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer compositeStore.Close() diff --git a/sei-db/state_db/ss/composite/store.go b/sei-db/state_db/ss/composite/store.go index 25ab0d7b3d..1254fd7b9c 100644 --- a/sei-db/state_db/ss/composite/store.go +++ b/sei-db/state_db/ss/composite/store.go @@ -5,7 +5,6 @@ import ( "path/filepath" "sync" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/common/utils" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" @@ -15,8 +14,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-db/state_db/ss/evm" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss/pruning" "github.com/sei-protocol/sei-chain/sei-db/wal" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("db", "state-db", "ss", "composite") + // Compile-time check. var _ types.StateStore = (*CompositeStateStore)(nil) @@ -27,7 +29,6 @@ type CompositeStateStore struct { evmStore types.StateStore // EVMStateStore wrapping sub MVCC DBs (nil if disabled) pruningManager *pruning.Manager config config.StateStoreConfig - logger logger.Logger closeOnce sync.Once closeErr error } @@ -37,7 +38,6 @@ type CompositeStateStore struct { func NewCompositeStateStore( ssConfig config.StateStoreConfig, homeDir string, - log logger.Logger, ) (*CompositeStateStore, error) { dbHome := utils.GetStateStorePath(homeDir, ssConfig.Backend) if ssConfig.DBDirectory != "" { @@ -53,7 +53,6 @@ func NewCompositeStateStore( cs := &CompositeStateStore{ cosmosStore: cosmosStore, config: ssConfig, - logger: log, } if ssConfig.EVMEnabled() { @@ -62,17 +61,17 @@ func NewCompositeStateStore( evmDir = filepath.Join(homeDir, "data", "evm_ss") } - evmStore, err := evm.NewEVMStateStore(evmDir, ssConfig, log) + evmStore, err := evm.NewEVMStateStore(evmDir, ssConfig) if err != nil { _ = cs.cosmosStore.Close() return nil, fmt.Errorf("failed to create EVM store: %w", err) } cs.evmStore = evmStore - log.Info("EVM state store enabled", "dir", evmDir, "writeMode", ssConfig.WriteMode, "readMode", ssConfig.ReadMode) + logger.Info("EVM state store enabled", "dir", evmDir, "writeMode", ssConfig.WriteMode, "readMode", ssConfig.ReadMode) } changelogPath := utils.GetChangelogPath(dbHome) - if err := RecoverCompositeStateStore(log, changelogPath, cs); err != nil { + if err := RecoverCompositeStateStore(changelogPath, cs); err != nil { _ = cs.Close() return nil, fmt.Errorf("failed to recover state store: %w", err) } @@ -83,7 +82,7 @@ func NewCompositeStateStore( } func (s *CompositeStateStore) StartPruning() { - pm := pruning.NewPruningManager(s.logger, s, int64(s.config.KeepRecent), int64(s.config.PruneIntervalSeconds)) + pm := pruning.NewPruningManager(s, int64(s.config.KeepRecent), int64(s.config.PruneIntervalSeconds)) pm.Start() s.pruningManager = pm } @@ -148,12 +147,12 @@ func (s *CompositeStateStore) Close() error { var lastErr error if s.evmStore != nil { if err := s.evmStore.Close(); err != nil { - s.logger.Error("failed to close EVM store", "error", err) + logger.Error("failed to close EVM store", "error", err) lastErr = err } } if err := s.cosmosStore.Close(); err != nil { - s.logger.Error("failed to close Cosmos store", "error", err) + logger.Error("failed to close Cosmos store", "error", err) lastErr = err } s.closeErr = lastErr @@ -171,7 +170,7 @@ func (s *CompositeStateStore) SetLatestVersion(version int64) error { } if s.evmStore != nil && s.config.WriteMode != config.CosmosOnlyWrite { if err := s.evmStore.SetLatestVersion(version); err != nil { - s.logger.Error("failed to set EVM store latest version", "error", err) + logger.Error("failed to set EVM store latest version", "error", err) } } return nil @@ -183,7 +182,7 @@ func (s *CompositeStateStore) SetEarliestVersion(version int64, ignoreVersion bo } if s.evmStore != nil { if err := s.evmStore.SetEarliestVersion(version, ignoreVersion); err != nil { - s.logger.Error("failed to set EVM store earliest version", "error", err) + logger.Error("failed to set EVM store earliest version", "error", err) } } return nil @@ -300,7 +299,7 @@ func (s *CompositeStateStore) Import(version int64, ch <-chan types.SnapshotNode func (s *CompositeStateStore) Prune(version int64) error { if s.evmStore != nil { if err := s.evmStore.Prune(version); err != nil { - s.logger.Error("failed to prune EVM store", "error", err) + logger.Error("failed to prune EVM store", "error", err) } } return s.cosmosStore.Prune(version) @@ -311,7 +310,6 @@ func (s *CompositeStateStore) Prune(version int64) error { // ============================================================================= func RecoverCompositeStateStore( - logger logger.Logger, changelogPath string, compositeStore *CompositeStateStore, ) error { @@ -339,7 +337,7 @@ func RecoverCompositeStateStore( "changelogPath", changelogPath, ) - return ReplayWAL(logger, changelogPath, startVersion, -1, func(entry proto.ChangelogEntry) error { + return ReplayWAL(changelogPath, startVersion, -1, func(entry proto.ChangelogEntry) error { if compositeStore.cosmosStore != nil && entry.Version > cosmosVersion { changesets := entry.Changesets if splitWrite { @@ -372,13 +370,12 @@ func RecoverCompositeStateStore( type WALEntryHandler func(entry proto.ChangelogEntry) error func ReplayWAL( - logger logger.Logger, changelogPath string, fromVersion int64, toVersion int64, handler WALEntryHandler, ) error { - streamHandler, err := wal.NewChangelogWAL(logger, changelogPath, wal.Config{}) + streamHandler, err := wal.NewChangelogWAL(changelogPath, wal.Config{}) if err != nil { return fmt.Errorf("failed to open WAL at %s: %w", changelogPath, err) } diff --git a/sei-db/state_db/ss/composite/store_test.go b/sei-db/state_db/ss/composite/store_test.go index f81450dcd4..b05d605b73 100644 --- a/sei-db/state_db/ss/composite/store_test.go +++ b/sei-db/state_db/ss/composite/store_test.go @@ -7,7 +7,6 @@ import ( "testing" "time" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" @@ -27,7 +26,7 @@ func setupTestStores(t *testing.T) (*CompositeStateStore, string, func()) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - compositeStore, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + compositeStore, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) cleanup := func() { @@ -170,7 +169,7 @@ func TestCompositeStateStoreWithoutEVM(t *testing.T) { KeepRecent: 100000, } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -399,7 +398,7 @@ func TestBug1Fix_WriteModeControlsEVMWrites(t *testing.T) { ReadMode: config.CosmosOnlyRead, } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -437,7 +436,7 @@ func TestBug1Fix_WriteModeControlsEVMWrites(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -485,7 +484,7 @@ func TestBug1Fix_ReadModeControlsEVMReads(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -521,7 +520,7 @@ func TestBug1Fix_ReadModeControlsEVMReads(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -692,7 +691,7 @@ func TestCompositeStateStorePrunesBothStores(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -745,7 +744,7 @@ func TestE2E_AllEVMDBsReadableViaComposite(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -816,7 +815,7 @@ func TestE2E_MVCCConsistencyAcrossBothStores(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -884,7 +883,7 @@ func TestE2E_NonEVMModulesUnaffectedByDualWrite(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -973,7 +972,7 @@ func TestE2E_VersionConsistencyAfterSetLatestVersion(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1013,7 +1012,7 @@ func TestE2E_DeleteTombstonePropagatedToBothStores(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1106,7 +1105,7 @@ func TestE2E_FactoryMethodCreatesCorrectStoreType(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1125,7 +1124,7 @@ func TestE2E_FactoryMethodCreatesCorrectStoreType(t *testing.T) { KeepRecent: 100000, } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1148,7 +1147,7 @@ func TestFix1_SplitWriteStripsEVMFromCosmos(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1206,7 +1205,7 @@ func TestFix1_SplitWriteAsyncAlsoStrips(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1253,7 +1252,7 @@ func TestFix2_SplitReadNoCosmFallback(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1332,7 +1331,7 @@ func TestFix3_SetLatestVersionRespectsWriteMode(t *testing.T) { ReadMode: config.CosmosOnlyRead, } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1371,7 +1370,7 @@ func TestFix3_SetLatestVersionRespectsWriteMode(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() @@ -1410,7 +1409,7 @@ func TestE2E_LargeChangesetParallelWrite(t *testing.T) { EVMDBDirectory: filepath.Join(dir, "evm_ss"), } - store, err := NewCompositeStateStore(ssConfig, dir, logger.NewNopLogger()) + store, err := NewCompositeStateStore(ssConfig, dir) require.NoError(t, err) defer store.Close() diff --git a/sei-db/state_db/ss/evm/db_test.go b/sei-db/state_db/ss/evm/db_test.go index 8ee48bb9ae..1a31a4b05f 100644 --- a/sei-db/state_db/ss/evm/db_test.go +++ b/sei-db/state_db/ss/evm/db_test.go @@ -6,7 +6,6 @@ import ( "github.com/stretchr/testify/require" commonevm "github.com/sei-protocol/sei-chain/sei-db/common/evm" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" @@ -24,7 +23,7 @@ func testConfig() config.StateStoreConfig { func openTestStore(t *testing.T) types.StateStore { t.Helper() dir := t.TempDir() - store, err := NewEVMStateStore(dir, testConfig(), logger.NewNopLogger()) + store, err := NewEVMStateStore(dir, testConfig()) require.NoError(t, err) t.Cleanup(func() { store.Close() }) return store diff --git a/sei-db/state_db/ss/evm/store.go b/sei-db/state_db/ss/evm/store.go index d83b4286b1..a084a8a548 100644 --- a/sei-db/state_db/ss/evm/store.go +++ b/sei-db/state_db/ss/evm/store.go @@ -6,7 +6,6 @@ import ( "sync" commonevm "github.com/sei-protocol/sei-chain/sei-db/common/evm" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" @@ -26,18 +25,16 @@ var _ types.StateStore = (*EVMStateStore)(nil) type EVMStateStore struct { subDBs map[EVMStoreType]types.StateStore dir string - logger logger.Logger } // NewEVMStateStore opens 5 StateStore instances (one per EVM sub-type) using the // backend resolved from ssConfig.Backend (PebbleDB by default, RocksDB with build tag). -func NewEVMStateStore(dir string, ssConfig config.StateStoreConfig, log logger.Logger) (*EVMStateStore, error) { +func NewEVMStateStore(dir string, ssConfig config.StateStoreConfig) (*EVMStateStore, error) { opener := backend.ResolveBackend(ssConfig.Backend) store := &EVMStateStore{ subDBs: make(map[EVMStoreType]types.StateStore, NumEVMStoreTypes), dir: dir, - logger: log, } for _, storeType := range AllEVMStoreTypes() { diff --git a/sei-db/state_db/ss/pruning/manager.go b/sei-db/state_db/ss/pruning/manager.go index 1309bfc5b3..492eb4ccbb 100644 --- a/sei-db/state_db/ss/pruning/manager.go +++ b/sei-db/state_db/ss/pruning/manager.go @@ -1,17 +1,17 @@ package pruning import ( - "fmt" "math/rand" "sync" "time" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("db", "state-db", "ss", "pruning") + type Manager struct { - logger logger.Logger stateStore types.StateStore keepRecent int64 pruneInterval int64 @@ -26,13 +26,11 @@ type Manager struct { // NewPruningManager creates a new pruning manager for state store // Pruning Manager will periodically prune state store based on keep-recent and prune-interval configs. func NewPruningManager( - logger logger.Logger, stateStore types.StateStore, keepRecent int64, pruneInterval int64, ) *Manager { return &Manager{ - logger: logger, stateStore: stateStore, keepRecent: keepRecent, pruneInterval: pruneInterval, @@ -66,7 +64,7 @@ func (m *Manager) pruneLoop() { // Check for stop signal before pruning select { case <-m.stopCh: - m.logger.Info("Pruning manager stopped") + logger.Info("Pruning manager stopped") return default: } @@ -77,9 +75,9 @@ func (m *Manager) pruneLoop() { if pruneVersion > 0 { // prune all versions up to and including the pruneVersion if err := m.stateStore.Prune(pruneVersion); err != nil { - m.logger.Error("failed to prune versions till", "version", pruneVersion, "err", err) + logger.Error("failed to prune versions till", "version", pruneVersion, "err", err) } else { - m.logger.Info(fmt.Sprintf("Pruned state store till version %d took %s\n", pruneVersion, time.Since(pruneStartTime))) + logger.Info("Pruned state store till version", "version", pruneVersion, "took", time.Since(pruneStartTime)) } } @@ -91,7 +89,7 @@ func (m *Manager) pruneLoop() { // Wait with stop signal check select { case <-m.stopCh: - m.logger.Info("Pruning manager stopped") + logger.Info("Pruning manager stopped") return case <-time.After(sleepDuration): // Continue to next iteration diff --git a/sei-db/state_db/ss/pruning/manager_test.go b/sei-db/state_db/ss/pruning/manager_test.go index f54391aac5..e46f873f6a 100644 --- a/sei-db/state_db/ss/pruning/manager_test.go +++ b/sei-db/state_db/ss/pruning/manager_test.go @@ -6,11 +6,9 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" + "github.com/stretchr/testify/require" ) // mockStateStore is a minimal StateStore implementation for testing @@ -71,7 +69,7 @@ func (m *mockStateStore) Import(version int64, ch <-chan types.SnapshotNode) err func TestManagerStartStop(t *testing.T) { store := &mockStateStore{latestVersion: 100} - manager := NewPruningManager(logger.NewNopLogger(), store, 10, 1) + manager := NewPruningManager(store, 10, 1) // Start should launch the goroutine manager.Start() @@ -88,7 +86,7 @@ func TestManagerStartStop(t *testing.T) { func TestManagerStopIdempotent(t *testing.T) { store := &mockStateStore{latestVersion: 100} - manager := NewPruningManager(logger.NewNopLogger(), store, 10, 1) + manager := NewPruningManager(store, 10, 1) manager.Start() time.Sleep(50 * time.Millisecond) @@ -101,7 +99,7 @@ func TestManagerStopIdempotent(t *testing.T) { func TestManagerStartIdempotent(t *testing.T) { store := &mockStateStore{latestVersion: 100} - manager := NewPruningManager(logger.NewNopLogger(), store, 10, 1) + manager := NewPruningManager(store, 10, 1) // Start multiple times should only launch one goroutine manager.Start() @@ -114,7 +112,7 @@ func TestManagerStartIdempotent(t *testing.T) { func TestManagerStopConcurrent(t *testing.T) { store := &mockStateStore{latestVersion: 100} - manager := NewPruningManager(logger.NewNopLogger(), store, 10, 1) + manager := NewPruningManager(store, 10, 1) manager.Start() time.Sleep(50 * time.Millisecond) @@ -135,7 +133,7 @@ func TestManagerDisabledPruning(t *testing.T) { store := &mockStateStore{latestVersion: 100} // keepRecent <= 0 should disable pruning - manager := NewPruningManager(logger.NewNopLogger(), store, 0, 1) + manager := NewPruningManager(store, 0, 1) manager.Start() time.Sleep(50 * time.Millisecond) manager.Stop() @@ -143,7 +141,7 @@ func TestManagerDisabledPruning(t *testing.T) { require.Equal(t, int32(0), store.pruneCount.Load()) // pruneInterval <= 0 should also disable pruning - manager2 := NewPruningManager(logger.NewNopLogger(), store, 10, 0) + manager2 := NewPruningManager(store, 10, 0) manager2.Start() time.Sleep(50 * time.Millisecond) manager2.Stop() diff --git a/sei-db/state_db/ss/store.go b/sei-db/state_db/ss/store.go index 233359f47c..0fb4b5184e 100644 --- a/sei-db/state_db/ss/store.go +++ b/sei-db/state_db/ss/store.go @@ -1,7 +1,6 @@ package ss import ( - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss/composite" @@ -11,6 +10,6 @@ import ( // The backend (pebbledb or rocksdb) is resolved at compile time via build-tag-gated // files in the backend package. When WriteMode/ReadMode are both cosmos_only (the default), // the EVM stores are not opened and the composite store behaves identically to a plain cosmos state store. -func NewStateStore(logger logger.Logger, homeDir string, ssConfig config.StateStoreConfig) (types.StateStore, error) { - return composite.NewCompositeStateStore(ssConfig, homeDir, logger) +func NewStateStore(homeDir string, ssConfig config.StateStoreConfig) (types.StateStore, error) { + return composite.NewCompositeStateStore(ssConfig, homeDir) } diff --git a/sei-db/state_db/ss/store_test.go b/sei-db/state_db/ss/store_test.go index 001f45e972..174287069e 100644 --- a/sei-db/state_db/ss/store_test.go +++ b/sei-db/state_db/ss/store_test.go @@ -5,7 +5,6 @@ import ( "path/filepath" "testing" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" @@ -20,7 +19,7 @@ func TestNewStateStore(t *testing.T) { AsyncWriteBuffer: 100, KeepRecent: 500, } - stateStore, err := NewStateStore(logger.NewNopLogger(), homeDir, ssConfig) + stateStore, err := NewStateStore(homeDir, ssConfig) require.NoError(t, err) for i := 1; i < 50; i++ { var changesets []*proto.NamedChangeSet @@ -43,7 +42,7 @@ func TestNewStateStore(t *testing.T) { err = stateStore.Close() require.NoError(t, err) - stateStore, err = NewStateStore(logger.NewNopLogger(), homeDir, ssConfig) + stateStore, err = NewStateStore(homeDir, ssConfig) require.NoError(t, err) for i := 1; i < 50; i++ { diff --git a/sei-db/tools/cmd/seidb/benchmark/iteration.go b/sei-db/tools/cmd/seidb/benchmark/iteration.go index ef81d2e056..256931a933 100644 --- a/sei-db/tools/cmd/seidb/benchmark/iteration.go +++ b/sei-db/tools/cmd/seidb/benchmark/iteration.go @@ -3,7 +3,6 @@ package benchmark import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/bench" @@ -63,7 +62,7 @@ func DBIteration(inputKVDir string, numVersions int, outputDir string, dbBackend fmt.Printf("Iterating Over DB at %s\n", outputDir) ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), outputDir, ssConfig) + backend, err := ss.NewStateStore(outputDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/benchmark/random_read.go b/sei-db/tools/cmd/seidb/benchmark/random_read.go index 7769b900b0..c4526ae9fb 100644 --- a/sei-db/tools/cmd/seidb/benchmark/random_read.go +++ b/sei-db/tools/cmd/seidb/benchmark/random_read.go @@ -5,7 +5,6 @@ import ( "io/fs" "os" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/bench" @@ -68,7 +67,7 @@ func DBRandomRead(inputKVDir string, numVersions int, outputDir string, dbBacken fmt.Printf("Reading Raw Keys and Values from %s\n", inputKVDir) ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), outputDir, ssConfig) + backend, err := ss.NewStateStore(outputDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/benchmark/reverse_iteration.go b/sei-db/tools/cmd/seidb/benchmark/reverse_iteration.go index b4a73ccbdc..fc1079a87e 100644 --- a/sei-db/tools/cmd/seidb/benchmark/reverse_iteration.go +++ b/sei-db/tools/cmd/seidb/benchmark/reverse_iteration.go @@ -3,7 +3,6 @@ package benchmark import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/bench" @@ -63,7 +62,7 @@ func DBReverseIteration(inputKVDir string, numVersions int, outputDir string, db fmt.Printf("Iterating Over DB at %s\n", outputDir) ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), outputDir, ssConfig) + backend, err := ss.NewStateStore(outputDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/benchmark/write.go b/sei-db/tools/cmd/seidb/benchmark/write.go index f54c7c79ad..6dd82629c4 100644 --- a/sei-db/tools/cmd/seidb/benchmark/write.go +++ b/sei-db/tools/cmd/seidb/benchmark/write.go @@ -5,7 +5,6 @@ import ( "io/fs" "os" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/bench" @@ -68,7 +67,7 @@ func DBWrite(inputKVDir string, numVersions int, outputDir string, dbBackend str fmt.Printf("Reading Raw Keys and Values from %s\n", inputKVDir) ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), outputDir, ssConfig) + backend, err := ss.NewStateStore(outputDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/operations/dump_db.go b/sei-db/tools/cmd/seidb/operations/dump_db.go index e760e695d5..f3dd3fe37d 100644 --- a/sei-db/tools/cmd/seidb/operations/dump_db.go +++ b/sei-db/tools/cmd/seidb/operations/dump_db.go @@ -5,7 +5,6 @@ import ( "io/fs" "os" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/cmd/seidb/benchmark" @@ -75,7 +74,7 @@ func DumpDbData(dbBackend string, module string, outputDir string, dbDir string) // TODO: Defer Close Db ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), outputDir, ssConfig) + backend, err := ss.NewStateStore(outputDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/operations/dump_iavl.go b/sei-db/tools/cmd/seidb/operations/dump_iavl.go index a8b3e4f779..5c6705a706 100644 --- a/sei-db/tools/cmd/seidb/operations/dump_iavl.go +++ b/sei-db/tools/cmd/seidb/operations/dump_iavl.go @@ -3,7 +3,6 @@ package operations import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/memiavl" "github.com/sei-protocol/sei-chain/sei-db/tools/utils" "github.com/spf13/cobra" @@ -42,7 +41,7 @@ func executeDumpIAVL(cmd *cobra.Command, _ []string) { ZeroCopy: true, CreateIfMissing: false, } - db, err := memiavl.OpenDB(logger.NewNopLogger(), height, opts) + db, err := memiavl.OpenDB(height, opts) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/operations/prune.go b/sei-db/tools/cmd/seidb/operations/prune.go index ee92e0d367..aff0767a9c 100644 --- a/sei-db/tools/cmd/seidb/operations/prune.go +++ b/sei-db/tools/cmd/seidb/operations/prune.go @@ -3,8 +3,6 @@ package operations import ( "fmt" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" - "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" "github.com/sei-protocol/sei-chain/sei-db/tools/cmd/seidb/benchmark" @@ -55,7 +53,7 @@ func PruneDB(dbBackend string, dbDir string, version int64) { // TODO: Defer Close Db ssConfig := config.DefaultStateStoreConfig() ssConfig.Backend = dbBackend - backend, err := ss.NewStateStore(logger.NewNopLogger(), dbDir, ssConfig) + backend, err := ss.NewStateStore(dbDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/operations/replay_changelog.go b/sei-db/tools/cmd/seidb/operations/replay_changelog.go index 25b10f2258..29ebb5f744 100644 --- a/sei-db/tools/cmd/seidb/operations/replay_changelog.go +++ b/sei-db/tools/cmd/seidb/operations/replay_changelog.go @@ -6,7 +6,6 @@ import ( "github.com/spf13/cobra" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" @@ -42,7 +41,7 @@ func executeReplayChangelog(cmd *cobra.Command, _ []string) { } logDir := filepath.Join(dbDir, "changelog") - stream, err := wal.NewChangelogWAL(logger.NewNopLogger(), logDir, wal.Config{}) + stream, err := wal.NewChangelogWAL(logDir, wal.Config{}) if err != nil { panic(err) } @@ -71,7 +70,7 @@ func executeReplayChangelog(cmd *cobra.Command, _ []string) { ssConfig := config.DefaultStateStoreConfig() ssConfig.KeepRecent = 0 ssConfig.DBDirectory = dbDir - ssStore, err = ss.NewStateStore(logger.NewNopLogger(), dbDir, ssConfig) + ssStore, err = ss.NewStateStore(dbDir, ssConfig) if err != nil { panic(err) } diff --git a/sei-db/tools/cmd/seidb/operations/state_size.go b/sei-db/tools/cmd/seidb/operations/state_size.go index 2dc9ad2cc1..7ea7cb9b04 100644 --- a/sei-db/tools/cmd/seidb/operations/state_size.go +++ b/sei-db/tools/cmd/seidb/operations/state_size.go @@ -6,7 +6,6 @@ import ( "sort" "strings" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/state_db/sc/memiavl" "github.com/sei-protocol/sei-chain/sei-db/tools/utils" "github.com/spf13/cobra" @@ -48,7 +47,7 @@ func executeStateSize(cmd *cobra.Command, _ []string) { ZeroCopy: true, CreateIfMissing: false, } - db, err := memiavl.OpenDB(logger.NewNopLogger(), height, opts) + db, err := memiavl.OpenDB(height, opts) if err != nil { panic(err) } diff --git a/sei-db/wal/changelog.go b/sei-db/wal/changelog.go index b3ea68a3e9..07ded92c22 100644 --- a/sei-db/wal/changelog.go +++ b/sei-db/wal/changelog.go @@ -3,7 +3,6 @@ package wal import ( "context" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" ) @@ -12,7 +11,7 @@ type ChangelogWAL = GenericWAL[proto.ChangelogEntry] // NewChangelogWAL creates a new WAL for ChangelogEntry. // This is a convenience wrapper that handles serialization automatically. -func NewChangelogWAL(logger logger.Logger, dir string, config Config) (ChangelogWAL, error) { +func NewChangelogWAL(dir string, config Config) (ChangelogWAL, error) { return NewWAL( context.Background(), func(e proto.ChangelogEntry) ([]byte, error) { return e.Marshal() }, @@ -21,7 +20,6 @@ func NewChangelogWAL(logger logger.Logger, dir string, config Config) (Changelog err := e.Unmarshal(data) return e, err }, - logger, dir, config, ) diff --git a/sei-db/wal/wal.go b/sei-db/wal/wal.go index 6b8fc6bf11..c91a2ac8f4 100644 --- a/sei-db/wal/wal.go +++ b/sei-db/wal/wal.go @@ -11,8 +11,6 @@ import ( "time" "github.com/tidwall/wal" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" ) // The size of internal channel buffers if the provided buffer size is less than 1. @@ -29,7 +27,6 @@ type WAL[T any] struct { dir string log *wal.Log config Config - logger logger.Logger marshal MarshalFn[T] unmarshal UnmarshalFn[T] @@ -114,7 +111,6 @@ func NewWAL[T any]( ctx context.Context, marshal MarshalFn[T], unmarshal UnmarshalFn[T], - logger logger.Logger, dir string, config Config, ) (*WAL[T], error) { @@ -147,7 +143,6 @@ func NewWAL[T any]( dir: dir, log: log, config: config, - logger: logger, marshal: marshal, unmarshal: unmarshal, writeBatchSize: writeBatchSize, diff --git a/sei-db/wal/wal_bench_test.go b/sei-db/wal/wal_bench_test.go index f4e27ed263..f38fee0992 100644 --- a/sei-db/wal/wal_bench_test.go +++ b/sei-db/wal/wal_bench_test.go @@ -7,8 +7,6 @@ import ( "time" "github.com/tidwall/wal" - - "github.com/sei-protocol/sei-chain/sei-db/common/logger" ) func makePayload(size int) []byte { @@ -86,7 +84,7 @@ func BenchmarkWALWrapperWrite(b *testing.B) { b.Run(name, func(b *testing.B) { dir := b.TempDir() - w, err := NewWAL(b.Context(), marshal, unmarshal, logger.NewNopLogger(), dir, Config{ + w, err := NewWAL(b.Context(), marshal, unmarshal, dir, Config{ WriteBufferSize: bufSize, }) if err != nil { diff --git a/sei-db/wal/wal_test.go b/sei-db/wal/wal_test.go index 26a7784f1e..24ccdb1610 100644 --- a/sei-db/wal/wal_test.go +++ b/sei-db/wal/wal_test.go @@ -12,7 +12,6 @@ import ( "github.com/stretchr/testify/require" "github.com/tidwall/wal" - "github.com/sei-protocol/sei-chain/sei-db/common/logger" "github.com/sei-protocol/sei-chain/sei-db/proto" iavl "github.com/sei-protocol/sei-chain/sei-iavl" ) @@ -115,7 +114,7 @@ func TestRandomRead(t *testing.T) { func prepareTestData(t *testing.T) *WAL[proto.ChangelogEntry] { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) writeTestData(t, changelog) return changelog @@ -144,7 +143,7 @@ func TestSynchronousWrite(t *testing.T) { func TestAsyncWrite(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 10}) require.NoError(t, err) for _, changes := range ChangeSets { @@ -161,7 +160,7 @@ func TestAsyncWrite(t *testing.T) { } err = changelog.Close() require.NoError(t, err) - changelog, err = NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err = NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 10}) require.NoError(t, err) lastIndex, err := changelog.LastOffset() @@ -255,7 +254,7 @@ func TestTruncateBefore(t *testing.T) { func TestCloseSyncMode(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) // Write some data in sync mode @@ -266,7 +265,7 @@ func TestCloseSyncMode(t *testing.T) { require.NoError(t, err) // Reopen and verify data persisted - changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog2.Close()) }) @@ -304,14 +303,14 @@ func TestReopenAndContinueWrite(t *testing.T) { dir := t.TempDir() // Create and write initial data - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) writeTestData(t, changelog) err = changelog.Close() require.NoError(t, err) // Reopen and continue writing - changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) // Verify nextOffset is correctly set after reopen @@ -342,7 +341,7 @@ func TestReopenAndContinueWrite(t *testing.T) { func TestEmptyLog(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog.Close()) }) @@ -358,7 +357,7 @@ func TestEmptyLog(t *testing.T) { func TestCheckErrorNoError(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 10}) require.NoError(t, err) @@ -389,7 +388,7 @@ func TestAsyncWriteReopenAndContinue(t *testing.T) { dir := t.TempDir() // Create with async write and write data - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 10}) require.NoError(t, err) @@ -404,7 +403,7 @@ func TestAsyncWriteReopenAndContinue(t *testing.T) { require.NoError(t, err) // Reopen with async write and continue - changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 10}) require.NoError(t, err) @@ -420,7 +419,7 @@ func TestAsyncWriteReopenAndContinue(t *testing.T) { require.NoError(t, err) // Reopen and verify all 6 entries - changelog3, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog3, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog3.Close()) }) @@ -451,7 +450,7 @@ func TestBatchWrite(t *testing.T) { numWrites = 32 ) dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{ WriteBatchSize: batchSize, WriteBufferSize: 64, @@ -471,7 +470,7 @@ func TestBatchWrite(t *testing.T) { require.NoError(t, changelog.Close()) // Reopen and verify all entries - changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog2.Close()) }) @@ -498,7 +497,7 @@ func TestBatchWrite(t *testing.T) { func TestWriteMultipleChangesets(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog.Close()) }) @@ -524,7 +523,7 @@ func TestWriteMultipleChangesets(t *testing.T) { func TestConcurrentCloseWithInFlightAsyncWrites(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{WriteBufferSize: 8}) require.NoError(t, err) @@ -591,7 +590,7 @@ func TestConcurrentCloseWithInFlightAsyncWrites(t *testing.T) { func TestConcurrentTruncateBeforeWithAsyncWrites(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{ + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{ WriteBufferSize: 10, KeepRecent: 10, PruneInterval: 1 * time.Millisecond, @@ -662,7 +661,7 @@ func TestConcurrentTruncateBeforeWithAsyncWrites(t *testing.T) { func TestTruncateAll(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{AllowEmpty: true}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{AllowEmpty: true}) require.NoError(t, err) writeTestData(t, changelog) @@ -694,7 +693,7 @@ func TestTruncateAll(t *testing.T) { require.NoError(t, changelog.Close()) // Reopen and verify. - changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{AllowEmpty: true}) + changelog2, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{AllowEmpty: true}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog2.Close()) }) @@ -712,7 +711,7 @@ func TestTruncateAll(t *testing.T) { func TestTruncateAllWithoutAllowEmpty(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog.Close()) }) @@ -725,7 +724,7 @@ func TestTruncateAllWithoutAllowEmpty(t *testing.T) { func TestTruncateAllOnEmptyLog(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{AllowEmpty: true}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{AllowEmpty: true}) require.NoError(t, err) t.Cleanup(func() { require.NoError(t, changelog.Close()) }) @@ -735,7 +734,7 @@ func TestTruncateAllOnEmptyLog(t *testing.T) { func TestGetLastIndex(t *testing.T) { dir := t.TempDir() - changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, logger.NewNopLogger(), dir, Config{}) + changelog, err := NewWAL(t.Context(), marshalEntry, unmarshalEntry, dir, Config{}) require.NoError(t, err) writeTestData(t, changelog) err = changelog.Close() @@ -779,7 +778,7 @@ func TestBatchWriteWithMarshalFailure(t *testing.T) { WriteBatchSize: 4, // batch up to 4 } - w, err := NewWAL(t.Context(), marshalBatchTest, unmarshalBatchTest, logger.NewNopLogger(), dir, config) + w, err := NewWAL(t.Context(), marshalBatchTest, unmarshalBatchTest, dir, config) require.NoError(t, err) t.Cleanup(func() { _ = w.Close() }) diff --git a/sei-iavl/internal/logger/logger.go b/sei-iavl/internal/logger/logger.go deleted file mode 100644 index 093576bd1a..0000000000 --- a/sei-iavl/internal/logger/logger.go +++ /dev/null @@ -1,15 +0,0 @@ -package logger - -import ( - "fmt" -) - -var ( - debugging = false -) - -func Debug(format string, args ...interface{}) { - if debugging { - fmt.Printf(format, args...) - } -} diff --git a/sei-iavl/mutable_tree.go b/sei-iavl/mutable_tree.go index 8cbfc04719..d5c956afaf 100644 --- a/sei-iavl/mutable_tree.go +++ b/sei-iavl/mutable_tree.go @@ -9,11 +9,12 @@ import ( "sync" "github.com/pkg/errors" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" - - "github.com/sei-protocol/sei-chain/sei-iavl/internal/logger" ) +var logger = seilog.NewLogger("iavl") + // commitGap after upgrade/delete commitGap FastNodes when commit the batch var commitGap uint64 = 5000000 @@ -1084,7 +1085,7 @@ func (tree *MutableTree) commitVersion(version int64, silentSaveRootError bool) if tree.ITree.root == nil { // There can still be orphans, for example if the root is the node being // removed. - logger.Debug("SAVE EMPTY TREE %v\n", version) + logger.Debug("SAVE EMPTY TREE", "version", version) if err := tree.handleOrphans(version); err != nil { return 0, err } @@ -1092,7 +1093,7 @@ func (tree *MutableTree) commitVersion(version int64, silentSaveRootError bool) return 0, err } } else { - logger.Debug("SAVE TREE %v\n", version) + logger.Debug("SAVE TREE", "version", version) if _, err := tree.ndb.SaveBranch(tree.ITree.root); err != nil { return 0, err } @@ -1200,7 +1201,7 @@ func (tree *MutableTree) SetInitialVersion(version uint64) { // DeleteVersions deletes a series of versions from the MutableTree. // Deprecated: please use DeleteVersionsRange instead. func (tree *MutableTree) DeleteVersions(versions ...int64) error { - logger.Debug("DELETING VERSIONS: %v\n", versions) + logger.Debug("DELETING VERSIONS", "versions", versions) if tree.separateOrphanStorage { // no need to delete versions if we are keeping orphans separately @@ -1256,7 +1257,7 @@ func (tree *MutableTree) DeleteVersionsRange(fromVersion, toVersion int64) error // DeleteVersion deletes a tree version from disk. The version can then no // longer be accessed. func (tree *MutableTree) DeleteVersion(version int64) error { - logger.Debug("DELETE VERSION: %d\n", version) + logger.Debug("DELETE VERSION", "version", version) if err := tree.deleteVersion(version); err != nil { return err diff --git a/sei-iavl/nodedb.go b/sei-iavl/nodedb.go index fa4a927b50..b47fca9b46 100644 --- a/sei-iavl/nodedb.go +++ b/sei-iavl/nodedb.go @@ -13,7 +13,6 @@ import ( "github.com/pkg/errors" "github.com/sei-protocol/sei-chain/sei-iavl/cache" ibytes "github.com/sei-protocol/sei-chain/sei-iavl/internal/bytes" - "github.com/sei-protocol/sei-chain/sei-iavl/internal/logger" dbm "github.com/tendermint/tm-db" ) @@ -206,7 +205,7 @@ func (ndb *nodeDB) SaveNode(node *Node) error { if err := ndb.batch.Set(ndb.nodeKey(node.GetHash()), buf.Bytes()); err != nil { return err } - logger.Debug("BATCH SAVE %X %p\n", node.GetHash(), node) + logger.Debug("BATCH SAVE", "node", node) node.SetPersisted(true) ndb.nodeCache.Add(node) return nil @@ -655,7 +654,7 @@ func (ndb *nodeDB) SaveOrphans(version int64, orphans map[string]int64) error { } for hash, fromVersion := range orphans { - logger.Debug("SAVEORPHAN %v-%v %X\n", fromVersion, toVersion, hash) + logger.Debug("SAVEORPHAN", "from", fromVersion, "to", toVersion, "hash", hash) err := ndb.saveOrphan([]byte(hash), fromVersion, toVersion) if err != nil { return err @@ -713,13 +712,13 @@ func (ndb *nodeDB) deleteOrphans(version int64) error { // can delete the orphan. Otherwise, we shorten its lifetime, by // moving its endpoint to the previous version. if predecessor < fromVersion || fromVersion == toVersion { - logger.Debug("DELETE predecessor:%v fromVersion:%v toVersion:%v %X\n", predecessor, fromVersion, toVersion, hash) + logger.Debug("DELETE", "predecessor", predecessor, "fromVersion", fromVersion, "toVersion", toVersion, "hash", hash) if err := ndb.batch.Delete(ndb.nodeKey(hash)); err != nil { return err } ndb.nodeCache.Remove(hash) } else { - logger.Debug("MOVE predecessor:%v fromVersion:%v toVersion:%v %X\n", predecessor, fromVersion, toVersion, hash) + logger.Debug("MOVE", "predecessor", predecessor, "fromVersion", fromVersion, "toVersion", toVersion, "hash", hash) if err := ndb.saveOrphan(hash, fromVersion, predecessor); err != nil { return err } diff --git a/sei-ibc-go/modules/apps/27-interchain-accounts/controller/keeper/keeper.go b/sei-ibc-go/modules/apps/27-interchain-accounts/controller/keeper/keeper.go index bc8c1e4fb6..b36277d6b2 100644 --- a/sei-ibc-go/modules/apps/27-interchain-accounts/controller/keeper/keeper.go +++ b/sei-ibc-go/modules/apps/27-interchain-accounts/controller/keeper/keeper.go @@ -1,7 +1,6 @@ package keeper import ( - "fmt" "strings" baseapp "github.com/sei-protocol/sei-chain/sei-cosmos/baseapp" @@ -10,8 +9,6 @@ import ( capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/27-interchain-accounts/controller/types" icatypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/27-interchain-accounts/types" channeltypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/04-channel/types" @@ -56,11 +53,6 @@ func NewKeeper( } } -// Logger returns the application logger, scoped to the associated module -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s-%s", host.ModuleName, icatypes.ModuleName)) -} - // GetAllPorts returns all ports to which the interchain accounts controller module is bound. Used in ExportGenesis func (k Keeper) GetAllPorts(ctx sdk.Context) []string { store := ctx.KVStore(k.storeKey) diff --git a/sei-ibc-go/modules/apps/27-interchain-accounts/host/keeper/keeper.go b/sei-ibc-go/modules/apps/27-interchain-accounts/host/keeper/keeper.go index 6a384687ac..d9bbf2e9e7 100644 --- a/sei-ibc-go/modules/apps/27-interchain-accounts/host/keeper/keeper.go +++ b/sei-ibc-go/modules/apps/27-interchain-accounts/host/keeper/keeper.go @@ -1,7 +1,6 @@ package keeper import ( - "fmt" "strings" baseapp "github.com/sei-protocol/sei-chain/sei-cosmos/baseapp" @@ -10,8 +9,6 @@ import ( capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/27-interchain-accounts/types" channeltypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/04-channel/types" @@ -61,11 +58,6 @@ func NewKeeper( } } -// Logger returns the application logger, scoped to the associated module -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s-%s", host.ModuleName, icatypes.ModuleName)) -} - // BindPort stores the provided portID and binds to it, returning the associated capability func (k Keeper) BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability { store := ctx.KVStore(k.storeKey) diff --git a/sei-ibc-go/modules/apps/27-interchain-accounts/module_test.go b/sei-ibc-go/modules/apps/27-interchain-accounts/module_test.go index bc4f9bad6d..d428e0f860 100644 --- a/sei-ibc-go/modules/apps/27-interchain-accounts/module_test.go +++ b/sei-ibc-go/modules/apps/27-interchain-accounts/module_test.go @@ -3,7 +3,6 @@ package ica_test import ( "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" @@ -32,7 +31,7 @@ func (suite *InterchainAccountsTestSuite) SetupTest() { func (suite *InterchainAccountsTestSuite) TestInitModule() { // setup and basic testing - app := simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, simapp.MakeTestEncodingConfig(), simapp.EmptyAppOptions{}) + app := simapp.NewSimApp(dbm.NewMemDB(), nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, simapp.MakeTestEncodingConfig(), simapp.EmptyAppOptions{}) appModule, ok := app.GetModuleManager().Modules[types.ModuleName].(ica.AppModule) suite.Require().True(ok) @@ -98,7 +97,7 @@ func (suite *InterchainAccountsTestSuite) TestInitModule() { suite.SetupTest() // reset // reset app state - app = simapp.NewSimApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, simapp.MakeTestEncodingConfig(), simapp.EmptyAppOptions{}) + app = simapp.NewSimApp(dbm.NewMemDB(), nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, simapp.MakeTestEncodingConfig(), simapp.EmptyAppOptions{}) header := tmproto.Header{ ChainID: "testchain", Height: 1, diff --git a/sei-ibc-go/modules/apps/transfer/keeper/keeper.go b/sei-ibc-go/modules/apps/transfer/keeper/keeper.go index fc1737d29a..5180692668 100644 --- a/sei-ibc-go/modules/apps/transfer/keeper/keeper.go +++ b/sei-ibc-go/modules/apps/transfer/keeper/keeper.go @@ -8,11 +8,9 @@ import ( capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/transfer/types" host "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/24-host" + tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" ) // Keeper defines the IBC fungible transfer keeper @@ -75,11 +73,6 @@ func NewKeeperWithAddressHandler( return keeper } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"-"+types.ModuleName) -} - // GetTransferAccount returns the ICS20 - transfers ModuleAccount func (k Keeper) GetTransferAccount(ctx sdk.Context) authtypes.ModuleAccountI { return k.authKeeper.GetModuleAccount(ctx, types.ModuleName) diff --git a/sei-ibc-go/modules/apps/transfer/keeper/msg_server.go b/sei-ibc-go/modules/apps/transfer/keeper/msg_server.go index 2f2b222688..be0da16973 100644 --- a/sei-ibc-go/modules/apps/transfer/keeper/msg_server.go +++ b/sei-ibc-go/modules/apps/transfer/keeper/msg_server.go @@ -4,10 +4,13 @@ import ( "context" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/apps/transfer/types" ) +var logger = seilog.NewLogger("ibc-go", "modules", "apps", "transfer", "keeper") + var _ types.MsgServer = Keeper{} // Transfer defines a rpc handler method for MsgTransfer. @@ -26,7 +29,7 @@ func (k Keeper) Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types. return nil, err } - k.Logger(ctx).Info("IBC fungible token transfer", "token", msg.Token.Denom, "amount", msg.Token.Amount.String(), "sender", msg.Sender, "receiver", msg.Receiver) + logger.Info("IBC fungible token transfer", "token", msg.Token.Denom, "amount", msg.Token.Amount, "sender", msg.Sender, "receiver", msg.Receiver) ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( diff --git a/sei-ibc-go/modules/core/02-client/keeper/client.go b/sei-ibc-go/modules/core/02-client/keeper/client.go index 6ce25572bb..736e76cdc9 100644 --- a/sei-ibc-go/modules/core/02-client/keeper/client.go +++ b/sei-ibc-go/modules/core/02-client/keeper/client.go @@ -7,11 +7,14 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/02-client/types" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/exported" ) +var logger = seilog.NewLogger("ibc-go", "modules", "core", "02-client", "keeper") + // ErrInboundDisabled is the error for when inbound is disabled var ErrInboundDisabled = sdkerrors.Register("ibc-client", 101, "ibc inbound disabled") @@ -36,7 +39,7 @@ func (k Keeper) CreateClient( clientID := k.GenerateClientIdentifier(ctx, clientState.ClientType()) k.SetClientState(ctx, clientID, clientState) - k.Logger(ctx).Info("client created at height", "client-id", clientID, "height", clientState.GetLatestHeight().String()) + logger.Info("client created at height", "client-id", clientID, "height", clientState.GetLatestHeight().String()) // verifies initial consensus state against client state and initializes client store with any client-specific metadata // e.g. set ProcessedTime in Tendermint clients @@ -49,7 +52,7 @@ func (k Keeper) CreateClient( k.SetClientConsensusState(ctx, clientID, clientState.GetLatestHeight(), consensusState) } - k.Logger(ctx).Info("client created at height", "client-id", clientID, "height", clientState.GetLatestHeight().String()) + logger.Info("client created at height", "client-id", clientID, "height", clientState.GetLatestHeight().String()) defer func() { telemetry.IncrCounterWithLabels( @@ -113,7 +116,7 @@ func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.H consensusHeight = types.GetSelfHeight(ctx) } - k.Logger(ctx).Info("client state updated", "client-id", clientID, "height", consensusHeight.String()) + logger.Info("client state updated", "client-id", clientID, "height", consensusHeight.String()) defer func() { telemetry.IncrCounterWithLabels( @@ -131,7 +134,7 @@ func (k Keeper) UpdateClient(ctx sdk.Context, clientID string, header exported.H EmitUpdateClientEvent(ctx, clientID, newClientState, consensusHeight, headerStr) } else { - k.Logger(ctx).Info("client frozen due to misbehaviour", "client-id", clientID) + logger.Info("client frozen due to misbehaviour", "client-id", clientID) defer func() { telemetry.IncrCounterWithLabels( @@ -176,7 +179,7 @@ func (k Keeper) UpgradeClient(ctx sdk.Context, clientID string, upgradedClient e k.SetClientState(ctx, clientID, updatedClientState) k.SetClientConsensusState(ctx, clientID, updatedClientState.GetLatestHeight(), updatedConsState) - k.Logger(ctx).Info("client state upgraded", "client-id", clientID, "height", updatedClientState.GetLatestHeight().String()) + logger.Info("client state upgraded", "client-id", clientID, "height", updatedClientState.GetLatestHeight().String()) defer func() { telemetry.IncrCounterWithLabels( @@ -219,7 +222,7 @@ func (k Keeper) CheckMisbehaviourAndUpdateState(ctx sdk.Context, misbehaviour ex } k.SetClientState(ctx, misbehaviour.GetClientID(), clientState) - k.Logger(ctx).Info("client frozen due to misbehaviour", "client-id", misbehaviour.GetClientID()) + logger.Info("client frozen due to misbehaviour", "client-id", misbehaviour.GetClientID()) defer func() { telemetry.IncrCounterWithLabels( diff --git a/sei-ibc-go/modules/core/02-client/keeper/keeper.go b/sei-ibc-go/modules/core/02-client/keeper/keeper.go index aabf19162e..f9cd80ad41 100644 --- a/sei-ibc-go/modules/core/02-client/keeper/keeper.go +++ b/sei-ibc-go/modules/core/02-client/keeper/keeper.go @@ -12,7 +12,6 @@ import ( sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" upgradetypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/02-client/types" @@ -51,11 +50,6 @@ func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, paramSpace paramtypes.Su } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"/"+types.SubModuleName) -} - // IsInboundEnabled returns true if inbound IBC is enabled. func (k Keeper) IsInboundEnabled(ctx sdk.Context) bool { var inbound bool diff --git a/sei-ibc-go/modules/core/02-client/keeper/proposal.go b/sei-ibc-go/modules/core/02-client/keeper/proposal.go index 22aacb6d6d..3020e4f545 100644 --- a/sei-ibc-go/modules/core/02-client/keeper/proposal.go +++ b/sei-ibc-go/modules/core/02-client/keeper/proposal.go @@ -55,7 +55,7 @@ func (k Keeper) ClientUpdateProposal(ctx sdk.Context, p *types.ClientUpdatePropo } k.SetClientState(ctx, p.SubjectClientId, clientState) - k.Logger(ctx).Info("client updated after governance proposal passed", "client-id", p.SubjectClientId, "height", clientState.GetLatestHeight().String()) + logger.Info("client updated after governance proposal passed", "client-id", p.SubjectClientId, "height", clientState.GetLatestHeight().String()) defer func() { telemetry.IncrCounterWithLabels( diff --git a/sei-ibc-go/modules/core/03-connection/keeper/handshake.go b/sei-ibc-go/modules/core/03-connection/keeper/handshake.go index 240922abb5..a2282a410a 100644 --- a/sei-ibc-go/modules/core/03-connection/keeper/handshake.go +++ b/sei-ibc-go/modules/core/03-connection/keeper/handshake.go @@ -7,6 +7,7 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" + "github.com/sei-protocol/seilog" clienttypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/02-client/types" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/03-connection/types" @@ -14,6 +15,8 @@ import ( "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/exported" ) +var logger = seilog.NewLogger("ibc-go", "modules", "core", "03-connection", "keeper") + // ConnOpenInit initialises a connection attempt on chain A. The generated connection identifier // is returned. // @@ -49,7 +52,7 @@ func (k Keeper) ConnOpenInit( return "", err } - k.Logger(ctx).Info("connection state updated", "connection-id", connectionID, "previous-state", "NONE", "new-state", "INIT") + logger.Info("connection state updated", "connection-id", connectionID, "previous-state", "NONE", "new-state", "INIT") defer func() { telemetry.IncrCounter(1, "ibc", "connection", "open-init") @@ -191,7 +194,7 @@ func (k Keeper) ConnOpenTry( } k.SetConnection(ctx, connectionID, connection) - k.Logger(ctx).Info("connection state updated", "connection-id", connectionID, "previous-state", previousConnection.State.String(), "new-state", "TRYOPEN") + logger.Info("connection state updated", "connection-id", connectionID, "previous-state", previousConnection.State.String(), "new-state", "TRYOPEN") defer func() { telemetry.IncrCounter(1, "ibc", "connection", "open-try") @@ -293,7 +296,7 @@ func (k Keeper) ConnOpenAck( return err } - k.Logger(ctx).Info("connection state updated", "connection-id", connectionID, "previous-state", connection.State.String(), "new-state", "OPEN") + logger.Info("connection state updated", "connection-id", connectionID, "previous-state", connection.State.String(), "new-state", "OPEN") defer func() { telemetry.IncrCounter(1, "ibc", "connection", "open-ack") @@ -349,7 +352,7 @@ func (k Keeper) ConnOpenConfirm( // Update ChainB's connection to Open connection.State = types.OPEN k.SetConnection(ctx, connectionID, connection) - k.Logger(ctx).Info("connection state updated", "connection-id", connectionID, "previous-state", "TRYOPEN", "new-state", "OPEN") + logger.Info("connection state updated", "connection-id", connectionID, "previous-state", "TRYOPEN", "new-state", "OPEN") defer func() { telemetry.IncrCounter(1, "ibc", "connection", "open-confirm") diff --git a/sei-ibc-go/modules/core/03-connection/keeper/keeper.go b/sei-ibc-go/modules/core/03-connection/keeper/keeper.go index 9c50d84aaf..af6e408fe6 100644 --- a/sei-ibc-go/modules/core/03-connection/keeper/keeper.go +++ b/sei-ibc-go/modules/core/03-connection/keeper/keeper.go @@ -1,8 +1,6 @@ package keeper import ( - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" @@ -53,11 +51,6 @@ func NewKeeper(cdc codec.BinaryCodec, key sdk.StoreKey, paramSpace paramtypes.Su } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"/"+types.SubModuleName) -} - // IsInboundEnabled returns true if inbound IBC is enabled. func (k Keeper) IsInboundEnabled(ctx sdk.Context) bool { var inbound bool diff --git a/sei-ibc-go/modules/core/03-connection/types/msgs_test.go b/sei-ibc-go/modules/core/03-connection/types/msgs_test.go index 122cfea2ce..43038fbfc2 100644 --- a/sei-ibc-go/modules/core/03-connection/types/msgs_test.go +++ b/sei-ibc-go/modules/core/03-connection/types/msgs_test.go @@ -9,7 +9,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store/rootmulti" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" @@ -47,7 +46,7 @@ func (suite *MsgTestSuite) SetupTest() { app := simapp.Setup(false) db := dbm.NewMemDB() - store := rootmulti.NewStore(db, log.NewNopLogger()) + store := rootmulti.NewStore(db) storeKey := storetypes.NewKVStoreKey("iavlStoreKey") store.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, nil) diff --git a/sei-ibc-go/modules/core/04-channel/keeper/handshake.go b/sei-ibc-go/modules/core/04-channel/keeper/handshake.go index ccfecbb37b..ef6a0487ad 100644 --- a/sei-ibc-go/modules/core/04-channel/keeper/handshake.go +++ b/sei-ibc-go/modules/core/04-channel/keeper/handshake.go @@ -7,6 +7,7 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" + "github.com/sei-protocol/seilog" connectiontypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/03-connection/types" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/04-channel/types" @@ -15,6 +16,8 @@ import ( "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/exported" ) +var logger = seilog.NewLogger("ibc-go", "modules", "core", "04-channel", "keeper") + // ErrInboundDisabledHandshake is the error for when inbound is disabled during channel handshake var ErrInboundDisabledHandshake = sdkerrors.Register("ibc-channel-handshake", 101, "ibc inbound disabled") @@ -94,7 +97,7 @@ func (k Keeper) WriteOpenInitChannel( k.SetNextSequenceRecv(ctx, portID, channelID, 1) k.SetNextSequenceAck(ctx, portID, channelID, 1) - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", "NONE", "new-state", "INIT") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", "NONE", "new-state", "INIT") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "open-init") @@ -257,7 +260,7 @@ func (k Keeper) WriteOpenTryChannel( k.SetChannel(ctx, portID, channelID, channel) - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", previousChannel.State.String(), "new-state", "TRYOPEN") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", previousChannel.State.String(), "new-state", "TRYOPEN") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "open-try") @@ -345,7 +348,7 @@ func (k Keeper) WriteOpenAckChannel( channel.Counterparty.ChannelId = counterpartyChannelID k.SetChannel(ctx, portID, channelID, channel) - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "OPEN") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "OPEN") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "open-ack") @@ -425,7 +428,7 @@ func (k Keeper) WriteOpenConfirmChannel( channel.State = types.OPEN k.SetChannel(ctx, portID, channelID, channel) - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", "TRYOPEN", "new-state", "OPEN") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", "TRYOPEN", "new-state", "OPEN") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "open-confirm") @@ -472,7 +475,7 @@ func (k Keeper) ChanCloseInit( ) } - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "CLOSED") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "CLOSED") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "close-init") @@ -537,7 +540,7 @@ func (k Keeper) ChanCloseConfirm( return err } - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "CLOSED") + logger.Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", channel.State.String(), "new-state", "CLOSED") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "close-confirm") diff --git a/sei-ibc-go/modules/core/04-channel/keeper/keeper.go b/sei-ibc-go/modules/core/04-channel/keeper/keeper.go index dc96d6bfa4..cdc980916d 100644 --- a/sei-ibc-go/modules/core/04-channel/keeper/keeper.go +++ b/sei-ibc-go/modules/core/04-channel/keeper/keeper.go @@ -10,7 +10,6 @@ import ( capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" db "github.com/tendermint/tm-db" clienttypes "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/02-client/types" @@ -74,11 +73,6 @@ func (k Keeper) IsInboundEnabled(ctx sdk.Context) bool { return inbound } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"/"+types.SubModuleName) -} - // GenerateChannelIdentifier returns the next channel identifier. func (k Keeper) GenerateChannelIdentifier(ctx sdk.Context) string { nextChannelSeq := k.GetNextChannelSequence(ctx) diff --git a/sei-ibc-go/modules/core/04-channel/keeper/packet.go b/sei-ibc-go/modules/core/04-channel/keeper/packet.go index 9535ac4c9e..86bc4c6b50 100644 --- a/sei-ibc-go/modules/core/04-channel/keeper/packet.go +++ b/sei-ibc-go/modules/core/04-channel/keeper/packet.go @@ -138,7 +138,7 @@ func (k Keeper) SendPacket( EmitSendPacketEvent(ctx, packet, channel, timeoutHeight) - k.Logger(ctx).Info( + logger.Info( "packet sent", "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), @@ -312,7 +312,7 @@ func (k Keeper) RecvPacket( } // log that a packet has been received & executed - k.Logger(ctx).Info( + logger.Info( "packet received", "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), @@ -388,7 +388,7 @@ func (k Keeper) WriteAcknowledgement( ) // log that a packet acknowledgement has been written - k.Logger(ctx).Info( + logger.Info( "acknowledgement written", "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), @@ -531,7 +531,7 @@ func (k Keeper) AcknowledgePacket( k.deletePacketCommitment(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) // log that a packet has been acknowledged - k.Logger(ctx).Info( + logger.Info( "packet acknowledged", "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), diff --git a/sei-ibc-go/modules/core/04-channel/keeper/timeout.go b/sei-ibc-go/modules/core/04-channel/keeper/timeout.go index b4a1e205c7..4e2d094c09 100644 --- a/sei-ibc-go/modules/core/04-channel/keeper/timeout.go +++ b/sei-ibc-go/modules/core/04-channel/keeper/timeout.go @@ -158,7 +158,7 @@ func (k Keeper) TimeoutExecuted( k.SetChannel(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), channel) } - k.Logger(ctx).Info( + logger.Info( "packet timed-out", "sequence", strconv.FormatUint(packet.GetSequence(), 10), "src_port", packet.GetSourcePort(), diff --git a/sei-ibc-go/modules/core/04-channel/types/msgs_test.go b/sei-ibc-go/modules/core/04-channel/types/msgs_test.go index e10b1ebe0f..632da2435b 100644 --- a/sei-ibc-go/modules/core/04-channel/types/msgs_test.go +++ b/sei-ibc-go/modules/core/04-channel/types/msgs_test.go @@ -9,7 +9,6 @@ import ( storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" @@ -78,7 +77,7 @@ type TypesTestSuite struct { func (suite *TypesTestSuite) SetupTest() { app := simapp.Setup(false) db := dbm.NewMemDB() - store := rootmulti.NewStore(db, log.NewNopLogger()) + store := rootmulti.NewStore(db) storeKey := storetypes.NewKVStoreKey("iavlStoreKey") store.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, nil) diff --git a/sei-ibc-go/modules/core/05-port/keeper/keeper.go b/sei-ibc-go/modules/core/05-port/keeper/keeper.go index b129945b5d..116992825d 100644 --- a/sei-ibc-go/modules/core/05-port/keeper/keeper.go +++ b/sei-ibc-go/modules/core/05-port/keeper/keeper.go @@ -6,12 +6,14 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" capabilitytypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/05-port/types" host "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/24-host" ) +var logger = seilog.NewLogger("ibc-go", "modules", "core", "05-port", "keeper") + // Keeper defines the IBC connection keeper type Keeper struct { Router *types.Router @@ -26,11 +28,6 @@ func NewKeeper(sck capabilitykeeper.ScopedKeeper) Keeper { } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"/"+types.SubModuleName) -} - // IsBound checks a given port ID is already bounded. func (k Keeper) IsBound(ctx sdk.Context, portID string) bool { _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) @@ -55,7 +52,7 @@ func (k *Keeper) BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capab panic(err.Error()) } - k.Logger(ctx).Info("port binded", "port", portID) + logger.Info("port binded", "port", portID) return key } diff --git a/sei-ibc-go/modules/core/23-commitment/types/commitment_test.go b/sei-ibc-go/modules/core/23-commitment/types/commitment_test.go index 05dd87e214..1a2ff92816 100644 --- a/sei-ibc-go/modules/core/23-commitment/types/commitment_test.go +++ b/sei-ibc-go/modules/core/23-commitment/types/commitment_test.go @@ -6,7 +6,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store/iavl" "github.com/sei-protocol/sei-chain/sei-cosmos/store/rootmulti" storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/suite" dbm "github.com/tendermint/tm-db" ) @@ -21,7 +20,7 @@ type MerkleTestSuite struct { func (suite *MerkleTestSuite) SetupTest() { db := dbm.NewMemDB() - suite.store = rootmulti.NewStore(db, log.NewNopLogger()) + suite.store = rootmulti.NewStore(db) suite.storeKey = storetypes.NewKVStoreKey("iavlStoreKey") diff --git a/sei-ibc-go/testing/README.md b/sei-ibc-go/testing/README.md index 144f780c90..b20a6b2061 100644 --- a/sei-ibc-go/testing/README.md +++ b/sei-ibc-go/testing/README.md @@ -117,7 +117,7 @@ The testing package requires that you provide a function to initialize your Test func SetupTestingApp() (TestingApp, map[string]json.RawMessage) { db := dbm.NewMemDB() encCdc := simapp.MakeTestEncodingConfig() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, encCdc, simapp.EmptyAppOptions{}) + app := simapp.NewSimApp( db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, encCdc, simapp.EmptyAppOptions{}) return app, simapp.NewDefaultGenesisState(encCdc.Marshaler) } ``` @@ -262,7 +262,7 @@ import ( func SetupTransferTestingApp() (ibctesting.TestingApp, map[string]json.RawMessage) { db := dbm.NewMemDB() encCdc := simapp.MakeTestEncodingConfig() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, encCdc, simapp.EmptyAppOptions{}) + app := simapp.NewSimApp( db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, encCdc, simapp.EmptyAppOptions{}) return app, simapp.NewDefaultGenesisState(encCdc.Marshaler) } diff --git a/sei-ibc-go/testing/app.go b/sei-ibc-go/testing/app.go index 0de423d23e..76670aacb3 100644 --- a/sei-ibc-go/testing/app.go +++ b/sei-ibc-go/testing/app.go @@ -10,7 +10,6 @@ import ( capabilitykeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/capability/keeper" stakingkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/keeper" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/keeper" @@ -40,6 +39,6 @@ type TestingApp interface { func SetupTestingApp() (TestingApp, map[string]json.RawMessage) { db := dbm.NewMemDB() encCdc := simapp.MakeTestEncodingConfig() - app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, encCdc, simapp.EmptyAppOptions{}) + app := simapp.NewSimApp(db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 5, nil, encCdc, simapp.EmptyAppOptions{}) return app, simapp.NewDefaultGenesisState(encCdc.Marshaler) } diff --git a/sei-ibc-go/testing/sdk_test.go b/sei-ibc-go/testing/sdk_test.go index 4b532af77f..2bdd875d59 100644 --- a/sei-ibc-go/testing/sdk_test.go +++ b/sei-ibc-go/testing/sdk_test.go @@ -84,7 +84,7 @@ func TestIntegrationTestSuite(t *testing.T) { func NewAppConstructor(encodingCfg params.EncodingConfig) network.AppConstructor { return func(val network.Validator) servertypes.Application { return simapp.NewSimApp( - val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, + dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, nil, encodingCfg, simapp.EmptyAppOptions{}, baseapp.SetPruning(storetypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), diff --git a/sei-ibc-go/testing/simapp/app.go b/sei-ibc-go/testing/simapp/app.go index 28d6557aae..059527e511 100644 --- a/sei-ibc-go/testing/simapp/app.go +++ b/sei-ibc-go/testing/simapp/app.go @@ -12,7 +12,6 @@ import ( "github.com/rakyll/statik/fs" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/spf13/cast" @@ -230,7 +229,7 @@ func init() { // NewSimApp returns a reference to an initialized SimApp. func NewSimApp( - logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, skipUpgradeHeights map[int64]bool, + db dbm.DB, traceStore io.Writer, loadLatest bool, skipUpgradeHeights map[int64]bool, homePath string, invCheckPeriod uint, tmConfig *tmcfg.Config, encodingConfig simappparams.EncodingConfig, appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), ) *SimApp { @@ -238,7 +237,7 @@ func NewSimApp( legacyAmino := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry - bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, baseAppOptions...) + bApp := baseapp.NewBaseApp(appName, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) diff --git a/sei-ibc-go/testing/simapp/simd/cmd/genaccounts_test.go b/sei-ibc-go/testing/simapp/simd/cmd/genaccounts_test.go index cc5250ebab..bbc733404e 100644 --- a/sei-ibc-go/testing/simapp/simd/cmd/genaccounts_test.go +++ b/sei-ibc-go/testing/simapp/simd/cmd/genaccounts_test.go @@ -12,7 +12,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/types/module" "github.com/sei-protocol/sei-chain/sei-cosmos/x/genutil" genutiltest "github.com/sei-protocol/sei-chain/sei-cosmos/x/genutil/client/testutil" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -54,7 +53,7 @@ func TestAddGenesisAccountCmd(t *testing.T) { tc := tc t.Run(tc.name, func(t *testing.T) { home := t.TempDir() - logger := log.NewNopLogger() + cfg, err := genutiltest.CreateDefaultTendermintConfig(home) require.NoError(t, err) @@ -62,7 +61,7 @@ func TestAddGenesisAccountCmd(t *testing.T) { err = genutiltest.ExecInitCmd(testMbm, home, appCodec) require.NoError(t, err) - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) clientCtx := client.Context{}.WithJSONCodec(appCodec).WithHomeDir(home) ctx := t.Context() diff --git a/sei-ibc-go/testing/simapp/simd/cmd/root.go b/sei-ibc-go/testing/simapp/simd/cmd/root.go index 73ac3b0609..65e84e18e0 100644 --- a/sei-ibc-go/testing/simapp/simd/cmd/root.go +++ b/sei-ibc-go/testing/simapp/simd/cmd/root.go @@ -26,7 +26,6 @@ import ( genutilcli "github.com/sei-protocol/sei-chain/sei-cosmos/x/genutil/client/cli" tmcfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" tmcli "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/spf13/cast" "github.com/spf13/cobra" dbm "github.com/tendermint/tm-db" @@ -230,7 +229,7 @@ type appCreator struct { } // newApp is an appCreator -func (a appCreator) newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, tmConfig *tmcfg.Config, appOpts servertypes.AppOptions) servertypes.Application { +func (a appCreator) newApp(db dbm.DB, traceStore io.Writer, tmConfig *tmcfg.Config, appOpts servertypes.AppOptions) servertypes.Application { var cache sdk.MultiStorePersistentCache if cast.ToBool(appOpts.Get(server.FlagInterBlockCache)) { @@ -258,7 +257,7 @@ func (a appCreator) newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, t } return simapp.NewSimApp( - logger, db, traceStore, true, skipUpgradeHeights, + db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), tmConfig, @@ -280,8 +279,7 @@ func (a appCreator) newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, t // appExport creates a new simapp (optionally at a given height) // and exports state. -func (a appCreator) appExport( - logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, jailAllowedAddrs []string, +func (a appCreator) appExport(db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, jailAllowedAddrs []string, appOpts servertypes.AppOptions, _ *os.File, ) (servertypes.ExportedApp, error) { @@ -292,13 +290,13 @@ func (a appCreator) appExport( } if height != -1 { - simApp = simapp.NewSimApp(logger, db, traceStore, false, map[int64]bool{}, homePath, uint(1), nil, a.encCfg, appOpts) + simApp = simapp.NewSimApp(db, traceStore, false, map[int64]bool{}, homePath, uint(1), nil, a.encCfg, appOpts) if err := simApp.LoadHeight(height); err != nil { return servertypes.ExportedApp{}, err } } else { - simApp = simapp.NewSimApp(logger, db, traceStore, true, map[int64]bool{}, homePath, uint(1), nil, a.encCfg, appOpts) + simApp = simapp.NewSimApp(db, traceStore, true, map[int64]bool{}, homePath, uint(1), nil, a.encCfg, appOpts) } return simApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs) diff --git a/sei-ibc-go/testing/simapp/test_helpers.go b/sei-ibc-go/testing/simapp/test_helpers.go index 6b2e75fd34..5b31f1bc5b 100644 --- a/sei-ibc-go/testing/simapp/test_helpers.go +++ b/sei-ibc-go/testing/simapp/test_helpers.go @@ -32,7 +32,6 @@ import ( stakingkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/keeper" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/stretchr/testify/require" @@ -65,7 +64,7 @@ var DefaultConsensusParams = &tmproto.ConsensusParams{ func setup(withGenesis bool, invCheckPeriod uint) (*SimApp, GenesisState) { db := dbm.NewMemDB() encCdc := MakeTestEncodingConfig() - app := NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, nil, encCdc, EmptyAppOptions{}) + app := NewSimApp(db, nil, true, map[int64]bool{}, DefaultNodeHome, invCheckPeriod, nil, encCdc, EmptyAppOptions{}) if withGenesis { return app, NewDefaultGenesisState(encCdc.Marshaler) } diff --git a/sei-ibc-go/testing/simapp/utils.go b/sei-ibc-go/testing/simapp/utils.go index 336ee5860a..75e3ed1c0b 100644 --- a/sei-ibc-go/testing/simapp/utils.go +++ b/sei-ibc-go/testing/simapp/utils.go @@ -8,7 +8,6 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/sei-cosmos/types/kv" simtypes "github.com/sei-protocol/sei-chain/sei-cosmos/types/simulation" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-ibc-go/testing/simapp/helpers" @@ -16,33 +15,26 @@ import ( // SetupSimulation creates the config, db (levelDB), temporary directory and logger for // the simulation tests. If `FlagEnabledValue` is false it skips the current test. -// Returns error on an invalid db intantiation or temp dir creation. -func SetupSimulation(dirPrefix, dbName string) (simtypes.Config, dbm.DB, string, log.Logger, bool, error) { +// Returns error on an invalid db instantiation or temp dir creation. +func SetupSimulation(dirPrefix, dbName string) (simtypes.Config, dbm.DB, string, bool, error) { if !FlagEnabledValue { - return simtypes.Config{}, nil, "", nil, true, nil + return simtypes.Config{}, nil, "", true, nil } config := NewConfigFromFlags() config.ChainID = helpers.SimAppChainID - var logger log.Logger - if FlagVerboseValue { - logger = log.TestingLogger() - } else { - logger = log.NewNopLogger() - } - dir, err := os.MkdirTemp("", dirPrefix) if err != nil { - return simtypes.Config{}, nil, "", nil, false, err + return simtypes.Config{}, nil, "", false, err } db, err := sdk.NewLevelDB(dbName, dir) if err != nil { - return simtypes.Config{}, nil, "", nil, false, err + return simtypes.Config{}, nil, "", false, err } - return config, db, dir, logger, false, nil + return config, db, dir, false, nil } // CheckExportSimulation exports the app state and simulation parameters to JSON diff --git a/sei-tendermint/abci/example/kvstore/kvstore.go b/sei-tendermint/abci/example/kvstore/kvstore.go index 0e3b19a651..90a6d0a775 100644 --- a/sei-tendermint/abci/example/kvstore/kvstore.go +++ b/sei-tendermint/abci/example/kvstore/kvstore.go @@ -11,6 +11,7 @@ import ( "strings" "sync" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" "github.com/gogo/protobuf/proto" @@ -19,12 +20,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" cryptoproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/version" ) var ( + logger = seilog.NewLogger("tendermint", "abci", "example", "kvstore") + stateKey = []byte("stateKey") kvPairPrefixKey = []byte("kvPairKey:") @@ -79,7 +81,6 @@ type Application struct { mu sync.Mutex state State RetainBlocks int64 // blocks to retain after commit (via ResponseCommit.RetainHeight) - logger log.Logger // validator set ValUpdates []types.ValidatorUpdate @@ -88,7 +89,6 @@ type Application struct { func NewApplication() *Application { return &Application{ - logger: log.NewNopLogger(), state: loadState(dbm.NewMemDB()), valAddrToPubKeyMap: make(map[string]cryptoproto.PublicKey), } @@ -101,7 +101,7 @@ func (app *Application) InitChain(_ context.Context, req *types.RequestInitChain for _, v := range req.Validators { r := app.updateValidator(v) if r.IsErr() { - app.logger.Error("error updating validators", "r", r) + logger.Error("error updating validators", "err", r) panic("problem updating validators") } } @@ -186,7 +186,7 @@ func (app *Application) FinalizeBlock(_ context.Context, req *types.RequestFinal PubKey: pubKey, Power: ev.Validator.Power - 1, }) - app.logger.Info("Decreased val power by 1 because of the equivocation", + logger.Info("Decreased val power by 1 because of the equivocation", "val", addr) } else { panic(fmt.Errorf("wanted to punish val %q but can't find it", addr)) diff --git a/sei-tendermint/abci/example/kvstore/kvstore_test.go b/sei-tendermint/abci/example/kvstore/kvstore_test.go index 54aae289b3..aa1a9c582d 100644 --- a/sei-tendermint/abci/example/kvstore/kvstore_test.go +++ b/sei-tendermint/abci/example/kvstore/kvstore_test.go @@ -9,7 +9,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/code" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) const ( @@ -78,9 +77,8 @@ func TestPersistentKVStoreKV(t *testing.T) { ctx := t.Context() dir := t.TempDir() - logger := log.NewNopLogger() - kvstore := NewPersistentKVStoreApplication(logger, dir) + kvstore := NewPersistentKVStoreApplication(dir) key := testKey value := key tx := []byte(key) @@ -94,9 +92,8 @@ func TestPersistentKVStoreKV(t *testing.T) { func TestPersistentKVStoreInfo(t *testing.T) { ctx := t.Context() dir := t.TempDir() - logger := log.NewNopLogger() - kvstore := NewPersistentKVStoreApplication(logger, dir) + kvstore := NewPersistentKVStoreApplication(dir) if err := InitKVStore(ctx, kvstore); err != nil { t.Fatal(err) } diff --git a/sei-tendermint/abci/example/kvstore/persistent_kvstore.go b/sei-tendermint/abci/example/kvstore/persistent_kvstore.go index effffd3632..737351d37d 100644 --- a/sei-tendermint/abci/example/kvstore/persistent_kvstore.go +++ b/sei-tendermint/abci/example/kvstore/persistent_kvstore.go @@ -6,7 +6,6 @@ import ( dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" cryptoproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" ) @@ -22,7 +21,7 @@ type PersistentKVStoreApplication struct { *Application } -func NewPersistentKVStoreApplication(logger log.Logger, dbDir string) *PersistentKVStoreApplication { +func NewPersistentKVStoreApplication(dbDir string) *PersistentKVStoreApplication { db, err := dbm.NewGoLevelDB("kvstore", dbDir) if err != nil { panic(err) @@ -32,7 +31,6 @@ func NewPersistentKVStoreApplication(logger log.Logger, dbDir string) *Persisten Application: &Application{ valAddrToPubKeyMap: make(map[string]cryptoproto.PublicKey), state: loadState(db), - logger: logger, }, } } diff --git a/sei-tendermint/cmd/priv_val_server/main.go b/sei-tendermint/cmd/priv_val_server/main.go index 339dac9ce3..0700bc8620 100644 --- a/sei-tendermint/cmd/priv_val_server/main.go +++ b/sei-tendermint/cmd/priv_val_server/main.go @@ -16,10 +16,10 @@ import ( grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" + "github.com/sei-protocol/seilog" "google.golang.org/grpc" "google.golang.org/grpc/credentials" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" grpcprivval "github.com/sei-protocol/sei-chain/sei-tendermint/privval/grpc" @@ -27,6 +27,8 @@ import ( ) var ( + logger = seilog.NewLogger("tendermint", "cmd", "priv-val-server") + // Create a metrics registry. reg = prometheus.NewRegistry() @@ -48,13 +50,6 @@ func main() { ) flag.Parse() - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to construct logger: %v", err) - os.Exit(1) - } - logger = logger.With("module", "priv_val") - ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -113,7 +108,7 @@ func main() { // add prometheus metrics for unary RPC calls opts = append(opts, grpc.UnaryInterceptor(grpc_prometheus.UnaryServerInterceptor)) - ss := grpcprivval.NewSignerServer(logger, *chainID, pv) + ss := grpcprivval.NewSignerServer(*chainID, pv) protocol, address := tmnet.ProtocolAndAddress(*addr) diff --git a/sei-tendermint/cmd/tendermint/commands/debug/debug.go b/sei-tendermint/cmd/tendermint/commands/debug/debug.go index a2089dfe08..31b52be183 100644 --- a/sei-tendermint/cmd/tendermint/commands/debug/debug.go +++ b/sei-tendermint/cmd/tendermint/commands/debug/debug.go @@ -2,8 +2,6 @@ package debug import ( "github.com/spf13/cobra" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) const ( @@ -12,7 +10,7 @@ const ( flagFrequency = "frequency" ) -func GetDebugCommand(logger log.Logger) *cobra.Command { +func GetDebugCommand() *cobra.Command { cmd := &cobra.Command{ Use: "debug", Short: "A utility to kill or watch a Tendermint process while aggregating debugging data", @@ -24,8 +22,8 @@ func GetDebugCommand(logger log.Logger) *cobra.Command { "the Tendermint node's RPC address :)", ) - cmd.AddCommand(getKillCmd(logger)) - cmd.AddCommand(getDumpCmd(logger)) + cmd.AddCommand(getKillCmd()) + cmd.AddCommand(getDumpCmd()) return cmd } diff --git a/sei-tendermint/cmd/tendermint/commands/debug/dump.go b/sei-tendermint/cmd/tendermint/commands/debug/dump.go index f1616f2533..e195bcfe43 100644 --- a/sei-tendermint/cmd/tendermint/commands/debug/dump.go +++ b/sei-tendermint/cmd/tendermint/commands/debug/dump.go @@ -8,16 +8,18 @@ import ( "path/filepath" "time" + "github.com/sei-protocol/seilog" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpchttp "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" ) -func getDumpCmd(logger log.Logger) *cobra.Command { +var logger = seilog.NewLogger("tendermint", "cmd", "tendermint", "commands", "debug") + +func getDumpCmd() *cobra.Command { cmd := &cobra.Command{ Use: "dump [output-directory]", Short: "Continuously poll a Tendermint process and dump debugging data into a single location", @@ -73,7 +75,7 @@ if enabled.`, outDir: outDir, profAddr: profAddr, } - dumpDebugData(ctx, logger, rpc, dumpArgs) + dumpDebugData(ctx, rpc, dumpArgs) ticker := time.NewTicker(time.Duration(frequency) * time.Second) //nolint: gosec defer ticker.Stop() @@ -81,7 +83,7 @@ if enabled.`, for ctx.Err() == nil { select { case <-ticker.C: - dumpDebugData(ctx, logger, rpc, dumpArgs) + dumpDebugData(ctx, rpc, dumpArgs) case <-ctx.Done(): return ctx.Err() } @@ -110,7 +112,7 @@ type dumpDebugDataArgs struct { profAddr string } -func dumpDebugData(ctx context.Context, logger log.Logger, rpc *rpchttp.HTTP, args dumpDebugDataArgs) { +func dumpDebugData(ctx context.Context, rpc *rpchttp.HTTP, args dumpDebugDataArgs) { start := time.Now().UTC() tmpDir, err := os.MkdirTemp(args.outDir, "tendermint_debug_tmp") diff --git a/sei-tendermint/cmd/tendermint/commands/debug/kill.go b/sei-tendermint/cmd/tendermint/commands/debug/kill.go index 2344a599f0..5983940d17 100644 --- a/sei-tendermint/cmd/tendermint/commands/debug/kill.go +++ b/sei-tendermint/cmd/tendermint/commands/debug/kill.go @@ -15,11 +15,10 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpchttp "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" ) -func getKillCmd(logger log.Logger) *cobra.Command { +func getKillCmd() *cobra.Command { cmd := &cobra.Command{ Use: "kill [pid] [compressed-output-file]", Short: "Kill a Tendermint process while aggregating and packaging debugging data", diff --git a/sei-tendermint/cmd/tendermint/commands/inspect.go b/sei-tendermint/cmd/tendermint/commands/inspect.go index 20343070cc..f33049f5b6 100644 --- a/sei-tendermint/cmd/tendermint/commands/inspect.go +++ b/sei-tendermint/cmd/tendermint/commands/inspect.go @@ -4,15 +4,17 @@ import ( "os/signal" "syscall" + "github.com/sei-protocol/seilog" "github.com/spf13/cobra" "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/inspect" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) +var logger = seilog.NewLogger("tendermint", "cmd", "tendermint", "commands") + // InspectCmd constructs the command to start an inspect server. -func MakeInspectCommand(conf *config.Config, logger log.Logger) *cobra.Command { +func MakeInspectCommand(conf *config.Config) *cobra.Command { cmd := &cobra.Command{ Use: "inspect", Short: "Run an inspect server for investigating Tendermint state", @@ -29,7 +31,7 @@ func MakeInspectCommand(conf *config.Config, logger log.Logger) *cobra.Command { ctx, cancel := signal.NotifyContext(cmd.Context(), syscall.SIGTERM, syscall.SIGINT) defer cancel() - ins, err := inspect.NewFromConfig(logger, conf) + ins, err := inspect.NewFromConfig(conf) if err != nil { return err } diff --git a/sei-tendermint/cmd/tendermint/commands/key_migrate.go b/sei-tendermint/cmd/tendermint/commands/key_migrate.go index 5617b95e3e..2595d9c7cb 100644 --- a/sei-tendermint/cmd/tendermint/commands/key_migrate.go +++ b/sei-tendermint/cmd/tendermint/commands/key_migrate.go @@ -7,17 +7,16 @@ import ( "github.com/spf13/cobra" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/scripts/keymigrate" "github.com/sei-protocol/sei-chain/sei-tendermint/scripts/scmigrate" ) -func MakeKeyMigrateCommand(conf *config.Config, logger log.Logger) *cobra.Command { +func MakeKeyMigrateCommand(conf *config.Config) *cobra.Command { cmd := &cobra.Command{ Use: "key-migrate", Short: "Run Database key migration", RunE: func(cmd *cobra.Command, args []string) error { - return RunDatabaseMigration(cmd.Context(), logger, conf) + return RunDatabaseMigration(cmd.Context(), conf) }, } @@ -27,7 +26,7 @@ func MakeKeyMigrateCommand(conf *config.Config, logger log.Logger) *cobra.Comman return cmd } -func RunDatabaseMigration(ctx context.Context, logger log.Logger, conf *config.Config) error { +func RunDatabaseMigration(ctx context.Context, conf *config.Config) error { contexts := []string{ // this is ordered to put // the more ephemeral tables first to diff --git a/sei-tendermint/cmd/tendermint/commands/light.go b/sei-tendermint/cmd/tendermint/commands/light.go index 5c6e35d8d1..57cc6e793e 100644 --- a/sei-tendermint/cmd/tendermint/commands/light.go +++ b/sei-tendermint/cmd/tendermint/commands/light.go @@ -3,6 +3,7 @@ package commands import ( "errors" "fmt" + "log/slog" "net/http" "os" "os/signal" @@ -15,7 +16,6 @@ import ( dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmmath "github.com/sei-protocol/sei-chain/sei-tendermint/libs/math" "github.com/sei-protocol/sei-chain/sei-tendermint/light" lproxy "github.com/sei-protocol/sei-chain/sei-tendermint/light/proxy" @@ -25,7 +25,7 @@ import ( ) // LightCmd constructs the base command called when invoked without any subcommands. -func MakeLightCommand(conf *config.Config, logger log.Logger) *cobra.Command { +func MakeLightCommand(conf *config.Config) *cobra.Command { var ( listenAddr string primaryAddr string @@ -138,7 +138,7 @@ for applications built w/ Cosmos SDK). return fmt.Errorf("can't parse trust level: %w", err) } - options := []light.Option{light.Logger(logger)} //nolint:prealloc + var options []light.Option //nolint:prealloc vo := light.SkippingVerification(trustLevel) if sequential { @@ -178,7 +178,7 @@ for applications built w/ Cosmos SDK). cfg.WriteTimeout = conf.RPC.TimeoutBroadcastTxCommit + 1*time.Second } - p, err := lproxy.NewProxy(c, listenAddr, primaryAddr, cfg, logger, lrpc.KeyPathFn(lrpc.DefaultMerkleKeyPathFn())) + p, err := lproxy.NewProxy(c, listenAddr, primaryAddr, cfg, lrpc.KeyPathFn(lrpc.DefaultMerkleKeyPathFn())) if err != nil { return err } @@ -221,8 +221,8 @@ for applications built w/ Cosmos SDK). "trusting period that headers can be verified within. Should be significantly less than the unbonding period") cmd.Flags().Int64Var(&trustedHeight, "height", 1, "Trusted header's height") cmd.Flags().BytesHexVar(&trustedHash, "hash", []byte{}, "Trusted header's hash") - cmd.Flags().StringVar(&logLevel, "log-level", log.LogLevelInfo, "The logging level (debug|info|warn|error|fatal)") - cmd.Flags().StringVar(&logFormat, "log-format", log.LogFormatPlain, "The logging format (text|json)") + cmd.Flags().StringVar(&logLevel, "log-level", slog.LevelInfo.String(), "The logging level (debug|info|warn|error|fatal)") + cmd.Flags().StringVar(&logFormat, "log-format", "json", "The logging format (text|json)") cmd.Flags().StringVar(&trustLevelStr, "trust-level", "1/3", "trust level. Must be between 1/3 and 3/3", ) diff --git a/sei-tendermint/cmd/tendermint/commands/reindex_event.go b/sei-tendermint/cmd/tendermint/commands/reindex_event.go index 0b76b03109..e3b33f3d81 100644 --- a/sei-tendermint/cmd/tendermint/commands/reindex_event.go +++ b/sei-tendermint/cmd/tendermint/commands/reindex_event.go @@ -18,7 +18,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink/psql" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -29,7 +28,7 @@ const ( ) // MakeReindexEventCommand constructs a command to re-index events in a block height interval. -func MakeReindexEventCommand(conf *tmcfg.Config, logger log.Logger) *cobra.Command { +func MakeReindexEventCommand(conf *tmcfg.Config) *cobra.Command { var ( startHeight int64 endHeight int64 diff --git a/sei-tendermint/cmd/tendermint/commands/reindex_event_test.go b/sei-tendermint/cmd/tendermint/commands/reindex_event_test.go index c0d444418d..0d1c6b4f43 100644 --- a/sei-tendermint/cmd/tendermint/commands/reindex_event_test.go +++ b/sei-tendermint/cmd/tendermint/commands/reindex_event_test.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/mocks" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" _ "github.com/lib/pq" // for the psql sink @@ -26,8 +25,8 @@ const ( base int64 = 2 ) -func setupReIndexEventCmd(ctx context.Context, conf *config.Config, logger log.Logger) *cobra.Command { - cmd := MakeReindexEventCommand(conf, logger) +func setupReIndexEventCmd(ctx context.Context, conf *config.Config) *cobra.Command { + cmd := MakeReindexEventCommand(conf) reIndexEventCmd := &cobra.Command{ Use: cmd.Use, @@ -176,12 +175,11 @@ func TestReIndexEvent(t *testing.T) { } ctx := t.Context() - logger := log.NewNopLogger() conf := config.DefaultConfig() for _, tc := range testCases { err := eventReIndex( - setupReIndexEventCmd(ctx, conf, logger), + setupReIndexEventCmd(ctx, conf), eventReIndexArgs{ sinks: []indexer.EventSink{mockEventSink}, blockStore: mockBlockStore, diff --git a/sei-tendermint/cmd/tendermint/commands/reset.go b/sei-tendermint/cmd/tendermint/commands/reset.go index 813c6e9b30..7e994b9ee7 100644 --- a/sei-tendermint/cmd/tendermint/commands/reset.go +++ b/sei-tendermint/cmd/tendermint/commands/reset.go @@ -4,22 +4,19 @@ import ( "os" "path/filepath" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" - - "github.com/spf13/cobra" - "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" + "github.com/sei-protocol/sei-chain/sei-tendermint/libs/cli" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/spf13/cobra" ) const wasmDirName = "wasm" // MakeResetCommand constructs a command that removes the database of // the specified Tendermint core instance. -func MakeResetCommand(conf *config.Config, logger log.Logger) *cobra.Command { +func MakeResetCommand(conf *config.Config) *cobra.Command { var keyType string resetCmd := &cobra.Command{ @@ -31,7 +28,7 @@ func MakeResetCommand(conf *config.Config, logger log.Logger) *cobra.Command { Use: "blockchain", Short: "Removes all blocks, state, transactions and evidence stored by the tendermint node", RunE: func(cmd *cobra.Command, args []string) error { - return ResetState(conf.DBDir(), logger) + return ResetState(conf.DBDir()) }, } @@ -49,7 +46,7 @@ func MakeResetCommand(conf *config.Config, logger log.Logger) *cobra.Command { Long: `Resets private validator signer state. Only use in testing. This can cause the node to double sign`, RunE: func(cmd *cobra.Command, args []string) error { - return ResetFilePV(conf.PrivValidator.KeyFile(), conf.PrivValidator.StateFile(), logger, keyType) + return ResetFilePV(conf.PrivValidator.KeyFile(), conf.PrivValidator.StateFile(), keyType) }, } @@ -68,7 +65,7 @@ Only use in testing. This can cause the node to double sign`, home = conf.RootDir } return ResetAll(conf.DBDir(), conf.PrivValidator.KeyFile(), - conf.PrivValidator.StateFile(), logger, keyType, home) + conf.PrivValidator.StateFile(), keyType, home) }, } @@ -89,7 +86,7 @@ Only use in testing. This can cause the node to double sign`, // ResetAll removes address book files plus all data, and resets the privValdiator data. // Exported for extenal CLI usage // XXX: this is unsafe and should only suitable for testnets. -func ResetAll(dbDir, privValKeyFile, privValStateFile string, logger log.Logger, keyType string, homeDir string) error { +func ResetAll(dbDir, privValKeyFile, privValStateFile string, keyType string, homeDir string) error { if err := os.RemoveAll(filepath.Join(homeDir, dbDir)); err == nil { logger.Info("Removed all blockchain history", "dir", dbDir) } else { @@ -110,11 +107,11 @@ func ResetAll(dbDir, privValKeyFile, privValStateFile string, logger log.Logger, } // recreate the dbDir since the privVal state needs to live there - return ResetFilePV(filepath.Join(homeDir, privValKeyFile), filepath.Join(homeDir, privValStateFile), logger, keyType) + return ResetFilePV(filepath.Join(homeDir, privValKeyFile), filepath.Join(homeDir, privValStateFile), keyType) } // ResetState removes all blocks, tendermint state, indexed transactions and evidence. -func ResetState(dbDir string, logger log.Logger) error { +func ResetState(dbDir string) error { blockdb := filepath.Join(dbDir, "blockstore.db") state := filepath.Join(dbDir, "state.db") wal := filepath.Join(dbDir, "cs.wal") @@ -167,7 +164,7 @@ func ResetState(dbDir string, logger log.Logger) error { // ResetFilePV loads the file private validator and resets the watermark to 0. If used on an existing network, // this can cause the node to double sign. // XXX: this is unsafe and should only suitable for testnets. -func ResetFilePV(privValKeyFile, privValStateFile string, logger log.Logger, keyType string) error { +func ResetFilePV(privValKeyFile, privValStateFile string, keyType string) error { if _, err := os.Stat(privValKeyFile); err == nil { pv, err := privval.LoadFilePVEmptyState(privValKeyFile, privValStateFile) if err != nil { @@ -202,7 +199,7 @@ func ResetPeerStore(dbDir string) error { return nil } -func MakeUnsafeResetAllCommand(conf *config.Config, logger log.Logger) *cobra.Command { +func MakeUnsafeResetAllCommand(conf *config.Config) *cobra.Command { var keyType string resetAllCmd := &cobra.Command{ @@ -223,7 +220,7 @@ Only use in testing. This can cause the node to double sign`, } return ResetAll(conf.DBDir(), conf.PrivValidator.KeyFile(), - conf.PrivValidator.StateFile(), logger, keyType, home) + conf.PrivValidator.StateFile(), keyType, home) }, } diff --git a/sei-tendermint/cmd/tendermint/commands/reset_test.go b/sei-tendermint/cmd/tendermint/commands/reset_test.go index 59abac698d..95587f5163 100644 --- a/sei-tendermint/cmd/tendermint/commands/reset_test.go +++ b/sei-tendermint/cmd/tendermint/commands/reset_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" cfg "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -17,7 +16,7 @@ func Test_ResetAll(t *testing.T) { config := cfg.TestConfig() dir := t.TempDir() config.SetRoot(dir) - logger := log.NewNopLogger() + cfg.EnsureRoot(dir) initTestFiles(t, config) pv, err := privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) @@ -25,7 +24,7 @@ func Test_ResetAll(t *testing.T) { pv.LastSignState.Height = 10 require.NoError(t, pv.Save()) require.NoError(t, ResetAll(config.DBDir(), config.PrivValidator.KeyFile(), - config.PrivValidator.StateFile(), logger, types.ABCIPubKeyTypeEd25519, "")) + config.PrivValidator.StateFile(), types.ABCIPubKeyTypeEd25519, "")) require.DirExists(t, config.DBDir()) require.NoFileExists(t, filepath.Join(config.DBDir(), "block.db")) require.NoFileExists(t, filepath.Join(config.DBDir(), "state.db")) @@ -41,14 +40,14 @@ func Test_ResetState(t *testing.T) { config := cfg.TestConfig() dir := t.TempDir() config.SetRoot(dir) - logger := log.NewNopLogger() + cfg.EnsureRoot(dir) initTestFiles(t, config) pv, err := privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) require.NoError(t, err) pv.LastSignState.Height = 10 require.NoError(t, pv.Save()) - require.NoError(t, ResetState(config.DBDir(), logger)) + require.NoError(t, ResetState(config.DBDir())) require.DirExists(t, config.DBDir()) require.NoFileExists(t, filepath.Join(config.DBDir(), "block.db")) require.NoFileExists(t, filepath.Join(config.DBDir(), "state.db")) @@ -65,7 +64,7 @@ func Test_UnsafeResetAll(t *testing.T) { config := cfg.TestConfig() dir := t.TempDir() config.SetRoot(dir) - logger := log.NewNopLogger() + cfg.EnsureRoot(dir) initTestFiles(t, config) pv, err := privval.LoadFilePV(config.PrivValidator.KeyFile(), config.PrivValidator.StateFile()) @@ -73,7 +72,7 @@ func Test_UnsafeResetAll(t *testing.T) { pv.LastSignState.Height = 10 require.NoError(t, pv.Save()) require.NoError(t, ResetAll(config.DBDir(), config.PrivValidator.KeyFile(), - config.PrivValidator.StateFile(), logger, types.ABCIPubKeyTypeEd25519, "")) + config.PrivValidator.StateFile(), types.ABCIPubKeyTypeEd25519, "")) require.DirExists(t, config.DBDir()) require.NoFileExists(t, filepath.Join(config.DBDir(), "block.db")) require.NoFileExists(t, filepath.Join(config.DBDir(), "state.db")) diff --git a/sei-tendermint/config/config.go b/sei-tendermint/config/config.go index 7251f22d0d..18736cb333 100644 --- a/sei-tendermint/config/config.go +++ b/sei-tendermint/config/config.go @@ -12,7 +12,6 @@ import ( "time" tmjson "github.com/sei-protocol/sei-chain/sei-tendermint/libs/json" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -245,7 +244,7 @@ func DefaultBaseConfig() BaseConfig { ProxyApp: "tcp://127.0.0.1:26658", ABCI: "socket", LogLevel: DefaultLogLevel, - LogFormat: log.LogFormatPlain, + LogFormat: "text", FilterPeers: false, DBBackend: "goleveldb", DBPath: "data", @@ -320,7 +319,7 @@ func (cfg BaseConfig) DBDir() string { // returns an error if any check fails. func (cfg BaseConfig) ValidateBasic() error { switch cfg.LogFormat { - case log.LogFormatJSON, log.LogFormatText, log.LogFormatPlain: + case "json", "text", "plain": default: return errors.New("unknown log format (must be 'plain', 'text' or 'json')") } diff --git a/sei-tendermint/internal/blocksync/pool.go b/sei-tendermint/internal/blocksync/pool.go index 05aca681cb..5784a5de2f 100644 --- a/sei-tendermint/internal/blocksync/pool.go +++ b/sei-tendermint/internal/blocksync/pool.go @@ -11,9 +11,9 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/flowrate" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) /* @@ -28,6 +28,8 @@ eg, L = latency = 0.1s 12.8 * 0.1 = 1.28 blocks on conn */ +var logger = seilog.NewLogger("tendermint", "internal", "blocksync") + const ( requestInterval = 100 * time.Millisecond maxTotalRequesters = 50 @@ -81,7 +83,6 @@ type BlockRequest struct { // BlockPool keeps track of the block sync peers, block requests and block responses. type BlockPool struct { service.BaseService - logger log.Logger lastAdvance time.Time @@ -109,14 +110,12 @@ type BlockPool struct { // NewBlockPool returns a new BlockPool with the height equal to start. Block // requests and errors will be sent to requestsCh and errorsCh accordingly. func NewBlockPool( - logger log.Logger, start int64, requestsCh chan<- BlockRequest, errorsCh chan<- peerError, router router, ) *BlockPool { bp := &BlockPool{ - logger: logger, peers: make(map[types.NodeID]*bpPeer), requesters: make(map[int64]*bpRequester), height: start, @@ -127,7 +126,7 @@ func NewBlockPool( lastSyncRate: 0, router: router, } - bp.BaseService = *service.NewBaseService(logger, "BlockPool", bp) + bp.BaseService = *service.NewBaseService("BlockPool", bp) return bp } @@ -186,10 +185,10 @@ func (pool *BlockPool) removeTimedoutPeers() { if curRate != 0 && curRate < minRecvRate { err := errors.New("peer is not sending us data fast enough") pool.sendError(err, peer.id) - pool.logger.Error("SendTimeout", "peer", peer.id, + logger.Error("SendTimeout", "peer", peer.id, "reason", err, - "curRate", fmt.Sprintf("%d KB/s", curRate/1024), - "minRate", fmt.Sprintf("%d KB/s", minRecvRate/1024)) + "curRate-kbps", curRate/1024, + "minRate-kbps", minRecvRate/1024) peer.didTimeout = true } } @@ -379,10 +378,9 @@ func (pool *BlockPool) SetPeerRange(peerID types.NodeID, base int64, height int6 base: base, height: height, numPending: 0, - logger: pool.logger.With("peer", peerID), startAt: time.Now(), } - pool.logger.Info(fmt.Sprintf("Adding peer %s to blocksync pool", peerID)) + logger.Info("Adding peer to blocksync pool", "peer", peerID) pool.peers[peerID] = peer } @@ -485,7 +483,7 @@ func (pool *BlockPool) makeNextRequester(ctx context.Context) { return } - request := newBPRequester(pool.logger, pool, nextHeight) + request := newBPRequester(pool, nextHeight) pool.requesters[nextHeight] = request atomic.AddInt32(&pool.numPending, 1) @@ -494,7 +492,7 @@ func (pool *BlockPool) makeNextRequester(ctx context.Context) { pool.cancels = append(pool.cancels, cancel) err := request.Start(ctx) if err != nil { - request.logger.Error("error starting request", "err", err) + logger.Error("error starting request", "err", err) } } @@ -543,8 +541,6 @@ type bpPeer struct { timeout *time.Timer startAt time.Time - - logger log.Logger } func (peer *bpPeer) resetMonitor() { @@ -586,7 +582,7 @@ func (peer *bpPeer) onTimeout() { err := errors.New("peer did not send us anything") peer.pool.sendError(err, peer.id) - peer.logger.Error("SendTimeout", "reason", err, "timeout", peerTimeout) + logger.Error("SendTimeout", "id", peer.id, "reason", err, "timeout", peerTimeout) peer.didTimeout = true } @@ -594,7 +590,6 @@ func (peer *bpPeer) onTimeout() { type bpRequester struct { service.BaseService - logger log.Logger pool *BlockPool height int64 gotBlockCh chan struct{} @@ -612,9 +607,8 @@ type RedoOp struct { Reason RetryReason } -func newBPRequester(logger log.Logger, pool *BlockPool, height int64) *bpRequester { +func newBPRequester(pool *BlockPool, height int64) *bpRequester { bpr := &bpRequester{ - logger: pool.logger, pool: pool, height: height, gotBlockCh: make(chan struct{}, 1), @@ -623,7 +617,7 @@ func newBPRequester(logger log.Logger, pool *BlockPool, height int64) *bpRequest peerID: "", block: nil, } - bpr.BaseService = *service.NewBaseService(logger, "bpRequester", bpr) + bpr.BaseService = *service.NewBaseService("bpRequester", bpr) return bpr } diff --git a/sei-tendermint/internal/blocksync/pool_test.go b/sei-tendermint/internal/blocksync/pool_test.go index cde9452884..cbecf8071e 100644 --- a/sei-tendermint/internal/blocksync/pool_test.go +++ b/sei-tendermint/internal/blocksync/pool_test.go @@ -11,7 +11,6 @@ import ( "github.com/stretchr/testify/require" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/stretchr/testify/assert" ) @@ -110,7 +109,7 @@ func TestBlockPoolBasic(t *testing.T) { peers := makePeers(10, start, 1000) errorsCh := make(chan peerError, 1000) requestsCh := make(chan BlockRequest, 1000) - pool := NewBlockPool(log.NewNopLogger(), start, requestsCh, errorsCh, makeRouter(peers)) + pool := NewBlockPool(start, requestsCh, errorsCh, makeRouter(peers)) if err := pool.Start(ctx); err != nil { t.Error(err) @@ -165,7 +164,7 @@ func TestBlockPoolTimeout(t *testing.T) { peers := makePeers(10, start, 1000) errorsCh := make(chan peerError, 1000) requestsCh := make(chan BlockRequest, 1000) - pool := NewBlockPool(log.NewNopLogger(), start, requestsCh, errorsCh, makeRouter(peers)) + pool := NewBlockPool(start, requestsCh, errorsCh, makeRouter(peers)) err := pool.Start(ctx) if err != nil { t.Error(err) @@ -214,7 +213,7 @@ func TestBlockPoolRemovePeer(t *testing.T) { requestsCh := make(chan BlockRequest) errorsCh := make(chan peerError) - pool := NewBlockPool(log.NewNopLogger(), 1, requestsCh, errorsCh, makeRouter(peers)) + pool := NewBlockPool(1, requestsCh, errorsCh, makeRouter(peers)) err := pool.Start(ctx) require.NoError(t, err) t.Cleanup(func() { pool.Wait() }) @@ -251,7 +250,7 @@ func TestBlockPoolMaliciousNodeMaxInt64(t *testing.T) { errorsCh := make(chan peerError, 3) requestsCh := make(chan BlockRequest) - pool := NewBlockPool(log.NewNopLogger(), 1, requestsCh, errorsCh, makeRouter(peers)) + pool := NewBlockPool(1, requestsCh, errorsCh, makeRouter(peers)) // add peers for peerID, peer := range peers { pool.SetPeerRange(peerID, peer.base, peer.height) diff --git a/sei-tendermint/internal/blocksync/reactor.go b/sei-tendermint/internal/blocksync/reactor.go index 7ddf39a514..7847ac5c1c 100644 --- a/sei-tendermint/internal/blocksync/reactor.go +++ b/sei-tendermint/internal/blocksync/reactor.go @@ -14,7 +14,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" pb "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/blocksync" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -86,7 +85,6 @@ func (e peerError) Error() string { // Reactor handles long-term catchup syncing. type Reactor struct { service.BaseService - logger log.Logger // immutable initialState sm.State @@ -120,7 +118,6 @@ type Reactor struct { // NewReactor returns new reactor instance. func NewReactor( - logger log.Logger, stateStore sm.Store, blockExec *sm.BlockExecutor, store *store.BlockStore, @@ -137,7 +134,6 @@ func NewReactor( return nil, fmt.Errorf("router.AddChannel(): %w", err) } r := &Reactor{ - logger: logger, stateStore: stateStore, blockExec: blockExec, store: store, @@ -154,7 +150,7 @@ func NewReactor( restartCooldownSeconds: selfRemediationConfig.RestartCooldownSeconds, } - r.BaseService = *service.NewBaseService(logger, "BlockSync", r) + r.BaseService = *service.NewBaseService("BlockSync", r) return r, nil } @@ -184,7 +180,7 @@ func (r *Reactor) OnStart(ctx context.Context) error { requestsCh := make(chan BlockRequest, maxTotalRequesters) errorsCh := make(chan peerError, maxPeerErrBuffer) // NOTE: The capacity should be larger than the peer count. - r.pool = NewBlockPool(r.logger, startHeight, requestsCh, errorsCh, r.router) + r.pool = NewBlockPool(startHeight, requestsCh, errorsCh, r.router) r.requestsCh = requestsCh r.errorsCh = errorsCh @@ -216,7 +212,7 @@ func (r *Reactor) OnStop() { func (r *Reactor) respondToPeer(msg *pb.BlockRequest, peerID types.NodeID) error { block := r.store.LoadBlock(msg.GetHeight()) if block == nil { - r.logger.Info("peer requesting a block we do not have", "peer", peerID, "height", msg.GetHeight()) + logger.Info("peer requesting a block we do not have", "peer", peerID, "height", msg.GetHeight()) r.channel.Send(wrap(&pb.NoBlockResponse{Height: msg.GetHeight()}), peerID) return nil } @@ -237,7 +233,7 @@ func (r *Reactor) handleMessage(m p2p.RecvMsg[*pb.Message]) (err error) { defer func() { if e := recover(); e != nil { err = fmt.Errorf("panic in processing message: %v", e) - r.logger.Error( + logger.Error( "recovering from processing message panic", "err", err, "stack", string(debug.Stack()), @@ -245,7 +241,7 @@ func (r *Reactor) handleMessage(m p2p.RecvMsg[*pb.Message]) (err error) { } }() - r.logger.Debug("received message", "message", m.Message, "peer", m.From) + logger.Debug("received message", "message", m.Message, "peer", m.From) switch msg := m.Message.Sum.(type) { case *pb.Message_BlockRequest: @@ -255,9 +251,9 @@ func (r *Reactor) handleMessage(m p2p.RecvMsg[*pb.Message]) (err error) { if err != nil { return fmt.Errorf("types.BlockFromProto(): %w", err) } - r.logger.Info("received block response from peer", "peer", m.From, "height", block.Height) + logger.Info("received block response from peer", "peer", m.From, "height", block.Height) if err := r.pool.AddBlock(m.From, block, block.Size()); err != nil { - r.logger.Error("failed to add block", "err", err) + logger.Error("failed to add block", "err", err) } return nil case *pb.Message_StatusRequest: @@ -270,7 +266,7 @@ func (r *Reactor) handleMessage(m p2p.RecvMsg[*pb.Message]) (err error) { r.pool.SetPeerRange(m.From, msg.StatusResponse.GetBase(), msg.StatusResponse.GetHeight()) return nil case *pb.Message_NoBlockResponse: - r.logger.Debug("peer does not have the requested block", + logger.Debug("peer does not have the requested block", "peer", m.From, "height", msg.NoBlockResponse.GetHeight()) return nil @@ -301,11 +297,11 @@ func (r *Reactor) processBlockSyncCh(ctx context.Context) { // TODO(gprusak): this should be a sub task of the consensus reactor instead. func (r *Reactor) autoRestartIfBehind(ctx context.Context) { if r.blocksBehindThreshold == 0 || r.blocksBehindCheckInterval <= 0 { - r.logger.Info("Auto remediation is disabled") + logger.Info("Auto remediation is disabled") return } - r.logger.Info("checking if node is behind threshold, auto restarting if its behind", "threshold", r.blocksBehindThreshold, "interval", r.blocksBehindCheckInterval) + logger.Info("checking if node is behind threshold, auto restarting if its behind", "threshold", r.blocksBehindThreshold, "interval", r.blocksBehindCheckInterval) for { select { case <-time.After(r.blocksBehindCheckInterval): @@ -320,15 +316,15 @@ func (r *Reactor) autoRestartIfBehind(ctx context.Context) { // We do not restart if we are not lagging behind, or we are already in block sync mode if maxPeerHeight == 0 || behindHeight < threshold || blockSyncIsSet { - r.logger.Debug("does not exceed threshold or is already in block sync mode", "threshold", threshold, "behindHeight", behindHeight, "maxPeerHeight", maxPeerHeight, "selfHeight", selfHeight, "blockSyncIsSet", blockSyncIsSet) + logger.Debug("does not exceed threshold or is already in block sync mode", "threshold", threshold, "behindHeight", behindHeight, "maxPeerHeight", maxPeerHeight, "selfHeight", selfHeight, "blockSyncIsSet", blockSyncIsSet) continue } // Check if we have met cooldown time if time.Since(r.lastRestartTime).Seconds() < float64(r.restartCooldownSeconds) { - r.logger.Debug("we are lagging behind, going to trigger a restart after cooldown time passes") + logger.Debug("we are lagging behind, going to trigger a restart after cooldown time passes") continue } - r.logger.Info("Blocks behind threshold, restarting node", "threshold", threshold, "behindHeight", behindHeight, "maxPeerHeight", maxPeerHeight, "selfHeight", selfHeight) + logger.Info("Blocks behind threshold, restarting node", "threshold", threshold, "behindHeight", behindHeight, "maxPeerHeight", maxPeerHeight, "selfHeight", selfHeight) // Send signal to restart the node r.blockSync.Set() @@ -342,7 +338,7 @@ func (r *Reactor) autoRestartIfBehind(ctx context.Context) { // processPeerUpdate processes a PeerUpdate. func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { - r.logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) + logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) switch peerUpdate.Status { case p2p.PeerStatusUp: @@ -446,7 +442,7 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { lastAdvance = r.pool.LastAdvance() ) - r.logger.Debug( + logger.Debug( "consensus ticker", "num_pending", numPending, "total", lenRequesters, @@ -455,14 +451,14 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { switch { case r.pool.IsCaughtUp() && r.previousMaxPeerHeight <= r.pool.MaxPeerHeight(): - r.logger.Info("switching to consensus reactor after caught up", "height", height) + logger.Info("switching to consensus reactor after caught up", "height", height) case time.Since(lastAdvance) > syncTimeout: - r.logger.Error("no progress since last advance", "last_advance", lastAdvance) + logger.Error("no progress since last advance", "last_advance", lastAdvance) continue default: - r.logger.Info( + logger.Info( "not caught up yet", "height", height, "max_peer_height", r.pool.MaxPeerHeight(), @@ -476,7 +472,7 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { r.blockSync.UnSet() if r.consReactor != nil { - r.logger.Info("switching to consensus reactor", "height", height, "blocks_synced", blocksSynced, "state_synced", stateSynced, "max_peer_height", r.pool.MaxPeerHeight()) + logger.Info("switching to consensus reactor", "height", height, "blocks_synced", blocksSynced, "state_synced", stateSynced, "max_peer_height", r.pool.MaxPeerHeight()) r.consReactor.SwitchToConsensus(ctx, state, blocksSynced > 0 || stateSynced) // Auto restart should only be checked after switching to consensus mode @@ -512,9 +508,9 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { firstParts, err := first.MakePartSet(types.BlockPartSizeBytes) if err != nil { - r.logger.Error("failed to make ", + logger.Error("failed to make ", "height", first.Height, - "err", err.Error()) + "err", err) return } @@ -538,11 +534,12 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { // If either of the checks failed we log the error and request for a new block // at that height if err != nil { - r.logger.Error( - err.Error(), + logger.Error( + "Failed to validate block or verify commit", "last_commit", second.LastCommit, "block_id", firstID, "height", first.Height, + "err", err, ) // NOTE: We've already removed the peer's request, but we still need @@ -567,10 +564,10 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { // TODO: Same thing for app - but we would need a way to get the hash // without persisting the state. - r.logger.Info(fmt.Sprintf("Requesting block %d from peer took %s", first.Height, time.Since(lastApplyBlockTime))) + logger.Info("Requesting block from peer", "block", first.Height, "took", time.Since(lastApplyBlockTime)) startTime := time.Now() state, err = r.blockExec.ApplyBlock(ctx, state, firstID, first, nil) - r.logger.Info(fmt.Sprintf("ApplyBlock %d took %s", first.Height, time.Since(startTime))) + logger.Info("ApplyBlock", "block", first.Height, "took", time.Since(startTime)) lastApplyBlockTime = time.Now() if err != nil { panic(fmt.Sprintf("failed to process committed block (%d:%X): %v", first.Height, first.Hash(), err)) @@ -582,7 +579,7 @@ func (r *Reactor) poolRoutine(ctx context.Context, stateSynced bool) { if blocksSynced%100 == 0 { lastRate = 0.9*lastRate + 0.1*(100/time.Since(lastHundred).Seconds()) - r.logger.Info( + logger.Info( "block sync rate", "height", r.pool.height, "max_peer_height", r.pool.MaxPeerHeight(), diff --git a/sei-tendermint/internal/blocksync/reactor_test.go b/sei-tendermint/internal/blocksync/reactor_test.go index 59f91978a6..7dff5fd6f1 100644 --- a/sei-tendermint/internal/blocksync/reactor_test.go +++ b/sei-tendermint/internal/blocksync/reactor_test.go @@ -2,7 +2,6 @@ package blocksync import ( "context" - "os" "testing" "time" @@ -24,14 +23,12 @@ import ( sf "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/test/factory" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) type reactorTestSuite struct { network *p2p.TestNetwork - logger log.Logger nodes []types.NodeID reactors map[types.NodeID]*Reactor @@ -53,9 +50,7 @@ func setup( require.True(t, numNodes >= 1, "must specify at least one block height (nodes)") - logger, _ := log.NewDefaultLogger("plain", "info") rts := &reactorTestSuite{ - logger: logger.With("module", "block_sync", "testCase", t.Name()), network: p2p.MakeTestNetwork(t, p2p.TestNetworkOptions{NumNodes: numNodes}), nodes: make([]types.NodeID, 0, numNodes), reactors: make(map[types.NodeID]*Reactor, numNodes), @@ -89,8 +84,6 @@ func makeReactor( selfRemediationConfig *config.SelfRemediationConfig, ) *Reactor { - logger := log.NewNopLogger() - app := abci.NewBaseApplication() blockDB := dbm.NewMemDB() @@ -114,12 +107,11 @@ func makeReactor( mock.Anything).Return(nil) mp.On("TxStore").Return(&mempool.TxStore{}) - eventbus := eventbus.NewDefault(logger) + eventbus := eventbus.NewDefault() require.NoError(t, eventbus.Start(ctx)) blockExec := sm.NewBlockExecutor( stateStore, - log.NewNopLogger(), app, mp, sm.EmptyEvidencePool{}, @@ -129,7 +121,6 @@ func makeReactor( ) r, err := NewReactor( - logger, stateStore, blockExec, blockStore, @@ -232,7 +223,6 @@ func TestReactor_AbruptDisconnect(t *testing.T) { cfg, err := config.ResetTestRoot(t.TempDir(), "block_sync_reactor_test") require.NoError(t, err) - defer os.RemoveAll(cfg.RootDir) valSet, privVals := factory.ValidatorSet(ctx, 1, 30) genDoc := factory.GenesisDoc(cfg, time.Now(), valSet.Validators, factory.ConsensusParams()) @@ -267,7 +257,6 @@ func TestReactor_SyncTime(t *testing.T) { cfg, err := config.ResetTestRoot(t.TempDir(), "block_sync_reactor_test") require.NoError(t, err) - defer os.RemoveAll(cfg.RootDir) valSet, privVals := factory.ValidatorSet(ctx, 1, 30) genDoc := factory.GenesisDoc(cfg, time.Now(), valSet.Validators, factory.ConsensusParams()) @@ -355,14 +344,12 @@ func TestAutoRestartIfBehind(t *testing.T) { mockBlockStore.On("Height").Return(tt.selfHeight) blockPool := &BlockPool{ - logger: log.TestingLogger(), height: tt.selfHeight, maxPeerHeight: tt.maxPeerHeight, } restart := utils.NewAtomicSend(false) r := &Reactor{ - logger: log.TestingLogger(), store: mockBlockStore, pool: blockPool, blocksBehindThreshold: tt.blocksBehindThreshold, diff --git a/sei-tendermint/internal/consensus/byzantine_test.go b/sei-tendermint/internal/consensus/byzantine_test.go index cf338d2c3f..8c97a6fd63 100644 --- a/sei-tendermint/internal/consensus/byzantine_test.go +++ b/sei-tendermint/internal/consensus/byzantine_test.go @@ -26,7 +26,6 @@ package consensus // sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" // "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" // "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" -// "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" // tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" // tmcons "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/consensus" // tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" @@ -78,12 +77,12 @@ package consensus // blockStore := store.NewBlockStore(blockDB) // // // one for mempool, one for consensus -// proxyAppConnMem := abciclient.NewLocalClient(logger, app) -// proxyAppConnCon := abciclient.NewLocalClient(logger, app) +// proxyAppConnMem := abciclient.NewLocalClient( app) +// proxyAppConnCon := abciclient.NewLocalClient( app) // // // Make Mempool // mempool := mempool.NewTxMempool( -// log.NewNopLogger().With("module", "mempool"), +// log. logger().With("module", "mempool"), // thisConfig.Mempool, // proxyAppConnMem, // ) @@ -91,16 +90,16 @@ package consensus // mempool.EnableTxsAvailable() // } // -// eventBus := eventbus.NewDefault(log.NewNopLogger().With("module", "events")) +// eventBus := eventbus.NewDefault() // require.NoError(t, eventBus.Start(ctx)) // // // Make a full instance of the evidence pool // evidenceDB := dbm.NewMemDB() -// evpool := evidence.NewPool(logger.With("module", "evidence"), evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) +// evpool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) // // // Make State -// blockExec := sm.NewBlockExecutor(stateStore, log.NewNopLogger(), proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) -// cs, err := NewState(logger, thisConfig.Consensus, stateStore, blockExec, blockStore, mempool, evpool, eventBus, []trace.TracerProviderOption{}) +// blockExec := sm.NewBlockExecutor(stateStore, proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) +// cs, err := NewState( thisConfig.Consensus, stateStore, blockExec, blockStore, mempool, evpool, eventBus, []trace.TracerProviderOption{}) // require.NoError(t, err) // // set private validator // pv := privVals[i] diff --git a/sei-tendermint/internal/consensus/common_test.go b/sei-tendermint/internal/consensus/common_test.go index df4f257782..9eb7067610 100644 --- a/sei-tendermint/internal/consensus/common_test.go +++ b/sei-tendermint/internal/consensus/common_test.go @@ -29,7 +29,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -429,7 +428,6 @@ func subscribeToVoterBuffered(ctx context.Context, t *testing.T, cs *State, addr func newState( ctx context.Context, t *testing.T, - logger log.Logger, state sm.State, pv types.PrivValidator, app abci.Application, @@ -439,23 +437,21 @@ func newState( cfg, err := config.ResetTestRoot(t.TempDir(), "consensus_state_test") require.NoError(t, err) - return newStateWithConfig(ctx, logger, cfg, state, pv, app) + return newStateWithConfig(ctx, cfg, state, pv, app) } func newStateWithConfig( ctx context.Context, - logger log.Logger, thisConfig *config.Config, state sm.State, pv types.PrivValidator, app abci.Application, ) *State { - return newStateWithConfigAndBlockStore(ctx, logger, thisConfig, state, pv, app, store.NewBlockStore(dbm.NewMemDB())) + return newStateWithConfigAndBlockStore(ctx, thisConfig, state, pv, app, store.NewBlockStore(dbm.NewMemDB())) } func newStateWithConfigAndBlockStore( ctx context.Context, - logger log.Logger, thisConfig *config.Config, state sm.State, pv types.PrivValidator, @@ -469,7 +465,6 @@ func newStateWithConfigAndBlockStore( // Make Mempool mempool := mempool.NewTxMempool( - logger.With("module", "mempool"), thisConfig.Mempool, proxyAppConnMem, nil, @@ -488,13 +483,13 @@ func newStateWithConfigAndBlockStore( panic(fmt.Errorf("stateStore.Save(): %w", err)) } - eventBus := eventbus.NewDefault(logger.With("module", "events")) + eventBus := eventbus.NewDefault() if err := eventBus.Start(ctx); err != nil { panic(fmt.Errorf("eventBus.Start(): %w", err)) } - blockExec := sm.NewBlockExecutor(stateStore, logger, proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) - cs, err := NewState(logger.With("module", "consensus"), + blockExec := sm.NewBlockExecutor(stateStore, proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) + cs, err := NewState( thisConfig.Consensus, stateStore, blockExec, @@ -530,7 +525,6 @@ func loadPrivValidator(cfg *config.Config) *privval.FilePV { type makeStateArgs struct { config *config.Config consensusParams *types.ConsensusParams - logger log.Logger validators int application abci.Application } @@ -550,9 +544,6 @@ func makeState(ctx context.Context, t *testing.T, args makeStateArgs) (*State, [ if args.config == nil { args.config = configSetup(t) } - if args.logger == nil { - args.logger = log.NewNopLogger() - } c := factory.ConsensusParams() if args.consensusParams != nil { c = args.consensusParams @@ -565,7 +556,7 @@ func makeState(ctx context.Context, t *testing.T, args makeStateArgs) (*State, [ vss := make([]*validatorStub, validators) - cs := newState(ctx, t, args.logger, state, privVals[0], app) + cs := newState(ctx, t, state, privVals[0], app) for i := 0; i < validators; i++ { vss[i] = newValidatorStub(privVals[i], int32(i)) @@ -781,15 +772,6 @@ func ensureMessageBeforeTimeout(t *testing.T, ch <-chan tmpubsub.Message, to tim panic("unreachable") } -//------------------------------------------------------------------------------- -// consensus nets - -// consensusLogger is a TestingLogger which uses a different -// color for each validator ("validator" key must exist). -func consensusLogger() log.Logger { - return log.NewNopLogger().With("module", "consensus") -} - func makeConsensusState( ctx context.Context, t *testing.T, @@ -805,7 +787,6 @@ func makeConsensusState( valSet, privVals := factory.ValidatorSet(ctx, nValidators, 30) genDoc := factory.GenesisDoc(cfg, time.Now(), valSet.Validators, factory.ConsensusParams()) css := make([]*State, nValidators) - logger := consensusLogger() closeFuncs := make([]func() error, 0, nValidators) @@ -834,8 +815,7 @@ func makeConsensusState( _, err = app.InitChain(ctx, &abci.RequestInitChain{Validators: vals}) require.NoError(t, err) - l := logger.With("validator", i, "module", "consensus") - css[i] = newStateWithConfigAndBlockStore(ctx, l, thisConfig, state, privVals[i], app, blockStore) + css[i] = newStateWithConfigAndBlockStore(ctx, thisConfig, state, privVals[i], app, blockStore) css[i].SetTimeoutTicker(tickerFunc()) } @@ -857,14 +837,13 @@ func randConsensusNetWithPeers( nValidators int, nPeers int, tickerFunc func() TimeoutTicker, - appFunc func(log.Logger, string) abci.Application, + appFunc func(string) abci.Application, ) ([]*State, *types.GenesisDoc, *config.Config, cleanupFunc) { t.Helper() valSet, privVals := factory.ValidatorSet(ctx, nValidators, testMinPower) genDoc := factory.GenesisDoc(cfg, time.Now(), valSet.Validators, factory.ConsensusParams()) css := make([]*State, nPeers) - logger := consensusLogger() var peer0Config *config.Config configRootDirs := make([]string, 0, nPeers) @@ -892,7 +871,7 @@ func randConsensusNetWithPeers( require.NoError(t, err) } - app := appFunc(logger, filepath.Join(cfg.DBDir(), fmt.Sprintf("%s_%d", t.Name(), i))) + app := appFunc(filepath.Join(cfg.DBDir(), fmt.Sprintf("%s_%d", t.Name(), i))) vals := types.TM2PB.ValidatorUpdates(state.Validators) switch app.(type) { // simulate handshake, receive app version. If don't do this, replay test will fail @@ -903,7 +882,7 @@ func randConsensusNetWithPeers( require.NoError(t, err) // sm.SaveState(stateDB,state) //height 1's validatorsInfo already saved in LoadStateFromDBOrGenesisDoc above - css[i] = newStateWithConfig(ctx, logger.With("validator", i, "module", "consensus"), thisConfig, state, privVal, app) + css[i] = newStateWithConfig(ctx, thisConfig, state, privVal, app) css[i].SetTimeoutTicker(tickerFunc()) } return css, genDoc, peer0Config, func() { @@ -978,7 +957,7 @@ func (m *mockTicker) Chan() <-chan timeoutInfo { return m.c } -func newEpehemeralKVStore(_ log.Logger, _ string) abci.Application { +func newEpehemeralKVStore(_ string) abci.Application { return kvstore.NewApplication() } diff --git a/sei-tendermint/internal/consensus/invalid_test.go b/sei-tendermint/internal/consensus/invalid_test.go index cd25d1ef63..2fb4b4605a 100644 --- a/sei-tendermint/internal/consensus/invalid_test.go +++ b/sei-tendermint/internal/consensus/invalid_test.go @@ -36,7 +36,7 @@ func TestReactorInvalidPrecommit(t *testing.T) { t.Cleanup(cleanup) for i := range n { - ticker := NewTimeoutTicker(states[i].logger) + ticker := NewTimeoutTicker() states[i].SetTimeoutTicker(ticker) } diff --git a/sei-tendermint/internal/consensus/memory_limit_test.go b/sei-tendermint/internal/consensus/memory_limit_test.go index 4b69912614..7d65ac616c 100644 --- a/sei-tendermint/internal/consensus/memory_limit_test.go +++ b/sei-tendermint/internal/consensus/memory_limit_test.go @@ -6,7 +6,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/stretchr/testify/require" @@ -19,7 +18,7 @@ func makeSig(data string) crypto.Sig { } func TestPeerStateMemoryLimits(t *testing.T) { - logger := log.NewTestingLogger(t) + peerID := types.NodeID("test-peer") testCases := []struct { @@ -37,7 +36,7 @@ func TestPeerStateMemoryLimits(t *testing.T) { t.Run("SetHasProposal", func(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) ps.PRS.Height = 1 ps.PRS.Round = 0 blockID := types.BlockID{ @@ -71,7 +70,7 @@ func TestPeerStateMemoryLimits(t *testing.T) { t.Run("InitProposalBlockParts", func(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) header := types.PartSetHeader{ Total: tc.total, Hash: make([]byte, 32), diff --git a/sei-tendermint/internal/consensus/mempool_test.go b/sei-tendermint/internal/consensus/mempool_test.go index 719e249e9e..c8cc7bb680 100644 --- a/sei-tendermint/internal/consensus/mempool_test.go +++ b/sei-tendermint/internal/consensus/mempool_test.go @@ -20,7 +20,6 @@ import ( sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -70,7 +69,7 @@ func TestMempoolNoProgressUntilTxsAvailable(t *testing.T) { Validators: 1, Power: 10, Params: factory.ConsensusParams()}) - cs := newStateWithConfig(ctx, log.NewNopLogger(), config, state, privVals[0], NewCounterApplication()) + cs := newStateWithConfig(ctx, config, state, privVals[0], NewCounterApplication()) assertMempool(t, cs.txNotifier).EnableTxsAvailable() height, round := cs.roundState.Height(), cs.roundState.Round() newBlockCh := subscribe(ctx, t, cs.eventBus, types.EventQueryNewBlock) @@ -97,7 +96,7 @@ func TestMempoolProgressAfterCreateEmptyBlocksInterval(t *testing.T) { Validators: 1, Power: 10, Params: factory.ConsensusParams()}) - cs := newStateWithConfig(ctx, log.NewNopLogger(), config, state, privVals[0], NewCounterApplication()) + cs := newStateWithConfig(ctx, config, state, privVals[0], NewCounterApplication()) assertMempool(t, cs.txNotifier).EnableTxsAvailable() @@ -122,7 +121,7 @@ func TestMempoolProgressInHigherRound(t *testing.T) { Validators: 1, Power: 10, Params: factory.ConsensusParams()}) - cs := newStateWithConfig(ctx, log.NewNopLogger(), config, state, privVals[0], NewCounterApplication()) + cs := newStateWithConfig(ctx, config, state, privVals[0], NewCounterApplication()) assertMempool(t, cs.txNotifier).EnableTxsAvailable() height, round := cs.roundState.Height(), cs.roundState.Round() newBlockCh := subscribe(ctx, t, cs.eventBus, types.EventQueryNewBlock) @@ -169,7 +168,7 @@ func TestMempoolTxConcurrentWithCommit(t *testing.T) { ctx := t.Context() config := configSetup(t) - logger := log.NewNopLogger() + state, privVals := makeGenesisState(ctx, t, config, genesisStateArgs{ Validators: 1, Power: 10, @@ -179,7 +178,7 @@ func TestMempoolTxConcurrentWithCommit(t *testing.T) { blockStore := store.NewBlockStore(dbm.NewMemDB()) cs := newStateWithConfigAndBlockStore( - ctx, logger, config, state, privVals[0], NewCounterApplication(), blockStore) + ctx, config, state, privVals[0], NewCounterApplication(), blockStore) err := stateStore.Save(state) require.NoError(t, err) @@ -223,7 +222,7 @@ func TestMempoolRmBadTx(t *testing.T) { app := NewCounterApplication() stateStore := sm.NewStore(dbm.NewMemDB()) blockStore := store.NewBlockStore(dbm.NewMemDB()) - cs := newStateWithConfigAndBlockStore(ctx, log.NewNopLogger(), config, state, privVals[0], app, blockStore) + cs := newStateWithConfigAndBlockStore(ctx, config, state, privVals[0], app, blockStore) err := stateStore.Save(state) require.NoError(t, err) diff --git a/sei-tendermint/internal/consensus/pbts_test.go b/sei-tendermint/internal/consensus/pbts_test.go index 2ea0fe79a4..d02f6a72ec 100644 --- a/sei-tendermint/internal/consensus/pbts_test.go +++ b/sei-tendermint/internal/consensus/pbts_test.go @@ -14,7 +14,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" tmpubsub "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtimemocks "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time/mocks" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" @@ -117,7 +116,7 @@ func newPBTSTestHarness(ctx context.Context, t *testing.T, tc pbtsTestConfigurat Time: tc.genesisTime, Validators: validators, }) - cs := newState(ctx, t, log.NewNopLogger(), state, privVals[0], kvstore.NewApplication()) + cs := newState(ctx, t, state, privVals[0], kvstore.NewApplication()) vss := make([]*validatorStub, validators) for i := 0; i < validators; i++ { vss[i] = newValidatorStub(privVals[i], int32(i)) diff --git a/sei-tendermint/internal/consensus/peer_state.go b/sei-tendermint/internal/consensus/peer_state.go index b12f3cc8cb..5511b8b230 100644 --- a/sei-tendermint/internal/consensus/peer_state.go +++ b/sei-tendermint/internal/consensus/peer_state.go @@ -10,7 +10,6 @@ import ( cstypes "github.com/sei-protocol/sei-chain/sei-tendermint/internal/consensus/types" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bits" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -39,7 +38,6 @@ func (pss peerStateStats) String() string { // Be mindful of what you Expose. type PeerState struct { peerID types.NodeID - logger log.Logger // NOTE: Modify below using setters, never directly. mtx sync.RWMutex @@ -49,10 +47,9 @@ type PeerState struct { } // NewPeerState returns a new PeerState for the given node ID. -func NewPeerState(logger log.Logger, peerID types.NodeID) *PeerState { +func NewPeerState(peerID types.NodeID) *PeerState { return &PeerState{ peerID: peerID, - logger: logger, PRS: cstypes.PeerRoundState{ HRS: cstypes.HRS{Round: -1}, ProposalPOLRound: -1, @@ -98,7 +95,7 @@ func (ps *PeerState) SetHasProposal(proposal *types.Proposal) { // Check memory limits before acquiring lock or setting any state if proposal.BlockID.PartSetHeader.Total > types.MaxBlockPartsCount { - ps.logger.Debug("PartSetHeader.Total exceeds maximum", "total", proposal.BlockID.PartSetHeader.Total, "max", types.MaxBlockPartsCount) + logger.Debug("PartSetHeader.Total exceeds maximum", "total", proposal.BlockID.PartSetHeader.Total, "max", types.MaxBlockPartsCount) return } @@ -138,7 +135,7 @@ func (ps *PeerState) InitProposalBlockParts(partSetHeader types.PartSetHeader) { // Apply the same memory exhaustion protection as in SetHasProposal if partSetHeader.Total > types.MaxBlockPartsCount { - ps.logger.Debug("InitProposalBlockParts: PartSetHeader.Total exceeds maximum", "total", partSetHeader.Total, "max", types.MaxBlockPartsCount) + logger.Debug("InitProposalBlockParts: PartSetHeader.Total exceeds maximum", "total", partSetHeader.Total, "max", types.MaxBlockPartsCount) return } @@ -371,12 +368,13 @@ func (ps *PeerState) SetHasVote(vote *types.Vote) error { // setHasVote will return an error when the index exceeds the bitArray length func (ps *PeerState) setHasVote(height int64, round int32, voteType tmproto.SignedMsgType, index int32) error { - logger := ps.logger.With( - "peerH/R", fmt.Sprintf("%d/%d", ps.PRS.Height, ps.PRS.Round), - "H/R", fmt.Sprintf("%d/%d", height, round), - ) - logger.Debug("setHasVote", "type", voteType, "index", index) + logger.Debug("setHasVote", "type", voteType, "index", index, + "peer-height", ps.PRS.Height, + "peer-round", ps.PRS.Round, + "height", height, + "round", round, + ) // NOTE: some may be nil BitArrays -> no side effects psVotes := ps.getVoteBitArray(height, round, voteType) diff --git a/sei-tendermint/internal/consensus/peer_state_test.go b/sei-tendermint/internal/consensus/peer_state_test.go index 640a45003b..6de04bad62 100644 --- a/sei-tendermint/internal/consensus/peer_state_test.go +++ b/sei-tendermint/internal/consensus/peer_state_test.go @@ -8,13 +8,12 @@ import ( "github.com/stretchr/testify/require" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) func peerStateSetup(h, r, v int) *PeerState { - ps := NewPeerState(log.NewNopLogger(), "testPeerState") + ps := NewPeerState("testPeerState") ps.PRS.Height = int64(h) ps.PRS.Round = int32(r) ps.ensureVoteBitArrays(int64(h), v) @@ -185,9 +184,9 @@ func TestSetHasProposal(t *testing.T) { } func TestSetHasProposalMemoryLimit(t *testing.T) { - logger := log.NewTestingLogger(t) + peerID := types.NodeID("aa") - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) // Create a valid block hash hash := crypto.CRandBytes(crypto.HashSize) @@ -228,7 +227,7 @@ func TestSetHasProposalMemoryLimit(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { // Reset peer state and set height/round to match proposal - ps = NewPeerState(logger, peerID) + ps = NewPeerState(peerID) ps.PRS.Height = proposal.Height ps.PRS.Round = proposal.Round @@ -254,9 +253,9 @@ func TestSetHasProposalMemoryLimit(t *testing.T) { } func TestInitProposalBlockPartsMemoryLimit(t *testing.T) { - logger := log.NewTestingLogger(t) + peerID := types.NodeID("test-peer") - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) testCases := []struct { name string @@ -272,7 +271,7 @@ func TestInitProposalBlockPartsMemoryLimit(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { // Reset peer state for each test - ps = NewPeerState(logger, peerID) + ps = NewPeerState(peerID) header := types.PartSetHeader{ Total: tc.total, @@ -293,9 +292,9 @@ func TestInitProposalBlockPartsMemoryLimit(t *testing.T) { } func TestInitProposalBlockPartsAlreadySet(t *testing.T) { - logger := log.NewTestingLogger(t) + peerID := types.NodeID("test-peer") - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) // Set up initial proposal block parts initialHeader := types.PartSetHeader{ @@ -320,7 +319,7 @@ func TestInitProposalBlockPartsAlreadySet(t *testing.T) { } func TestSetHasProposalEdgeCases(t *testing.T) { - logger := log.NewTestingLogger(t) + peerID := types.NodeID("test-peer") testCases := []struct { @@ -431,7 +430,7 @@ func TestSetHasProposalEdgeCases(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - ps := NewPeerState(logger, peerID) + ps := NewPeerState(peerID) tc.setupPeerState(ps) if tc.expectPanic { diff --git a/sei-tendermint/internal/consensus/reactor.go b/sei-tendermint/internal/consensus/reactor.go index 7d1a945b06..fed0876de8 100644 --- a/sei-tendermint/internal/consensus/reactor.go +++ b/sei-tendermint/internal/consensus/reactor.go @@ -3,6 +3,7 @@ package consensus import ( "context" "fmt" + "log/slog" "runtime/debug" "sync/atomic" "time" @@ -13,7 +14,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bits" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -92,8 +92,7 @@ const ( // Reactor defines a reactor for the consensus service. type Reactor struct { service.BaseService - logger log.Logger - cfg *config.Config + cfg *config.Config state *State router *p2p.Router @@ -111,7 +110,6 @@ type Reactor struct { // to relevant p2p Channels and a channel to listen for peer updates on. The // reactor will close all p2p Channels when stopping. func NewReactor( - logger log.Logger, cs *State, router *p2p.Router, eventBus *eventbus.EventBus, @@ -136,7 +134,6 @@ func NewReactor( return nil, err } r := &Reactor{ - logger: logger, state: cs, peers: utils.NewRWMutex(map[types.NodeID]*PeerState{}), eventBus: eventBus, @@ -155,7 +152,7 @@ func NewReactor( cs.eventNewRoundStep = r.broadcastNewRoundStepMessage cs.eventVote = r.broadcastHasVoteMessage cs.eventMsg = r.recordPeerMsg - r.BaseService = *service.NewBaseService(logger, "Consensus", r) + r.BaseService = *service.NewBaseService("Consensus", r) return r, nil } @@ -172,7 +169,7 @@ type channelBundle struct { // messages on that p2p channel accordingly. The caller must be sure to execute // OnStop to ensure the outbound p2p Channels are closed. func (r *Reactor) OnStart(ctx context.Context) error { - r.logger.Debug("consensus wait sync", "wait_sync", r.WaitSync()) + logger.Debug("consensus wait sync", "wait_sync", r.WaitSync()) if err := r.state.updateStateFromStore(); err != nil { return err @@ -208,11 +205,11 @@ func (r *Reactor) WaitSync() bool { // SwitchToConsensus switches from block-sync mode to consensus mode. It resets // the state, turns off block-sync, and starts the consensus state-machine. func (r *Reactor) SwitchToConsensus(ctx context.Context, state sm.State, skipWAL bool) { - r.logger.Info("switching to consensus") + logger.Info("switching to consensus") d := types.EventDataBlockSyncStatus{Complete: true, Height: state.LastBlockHeight} if err := r.eventBus.PublishEventBlockSyncStatus(d); err != nil { - r.logger.Error("failed to emit the blocksync complete event", "err", err) + logger.Error("failed to emit the blocksync complete event", "err", err) } r.Metrics.BlockSyncing.Set(0) r.Metrics.StateSyncing.Set(0) @@ -311,7 +308,7 @@ func (r *Reactor) updateRoundStateRoutine(ctx context.Context) error { } func (r *Reactor) gossipDataForCatchup(rs *cstypes.RoundState, prs *cstypes.PeerRoundState, ps *PeerState) { - logger := r.logger.With("height", prs.Height).With("peer", ps.peerID) + logger := logger.With("height", prs.Height).With("peer", ps.peerID) if index, ok := prs.ProposalBlockParts.Not().PickRandom(); ok { // ensure that the peer's PartSetHeader is correct @@ -364,7 +361,7 @@ func (r *Reactor) gossipDataForCatchup(rs *cstypes.RoundState, prs *cstypes.Peer func (r *Reactor) gossipDataRoutine(ctx context.Context, ps *PeerState) error { dataCh := r.channels.data - logger := r.logger.With("peer", ps.peerID) + logger := logger.With("peer", ps.peerID) timer := time.NewTimer(0) defer timer.Stop() @@ -397,15 +394,15 @@ OUTER_LOOP: // if the peer is on a previous height that we have, help catch up blockStoreBase := r.state.blockStore.Base() if blockStoreBase > 0 && 0 < prs.Height && prs.Height < rs.Height && prs.Height >= blockStoreBase { - heightLogger := logger.With("height", prs.Height) // If we never received the commit message from the peer, the block parts // will not be initialized. if prs.ProposalBlockParts == nil { blockMeta := r.state.blockStore.LoadBlockMeta(prs.Height) if blockMeta == nil { - heightLogger.Error( + logger.Error( "failed to load block meta", + "height", prs.Height, "blockstoreBase", blockStoreBase, "blockstoreHeight", r.state.blockStore.Height(), ) @@ -464,12 +461,12 @@ func (r *Reactor) pickSendVote(ps *PeerState, votes types.VoteSetReader) bool { return false } - if r.cfg.LogLevel == log.LogLevelDebug { + if logger.Enabled(context.Background(), slog.LevelDebug) { psJson, err := ps.ToJSON() // expensive, so we only want to call if debug is on if err != nil { panic(fmt.Errorf("ps.ToJSON(): %w", err)) } - r.logger.Debug("sending vote message", "ps", string(psJson), "vote", vote) + logger.Debug("sending vote message", "ps", string(psJson), "vote", vote) } r.channels.vote.Send(MsgToProto(&VoteMessage{Vote: vote}), ps.peerID) @@ -485,7 +482,7 @@ func (r *Reactor) gossipVotesForHeight( prs *cstypes.PeerRoundState, ps *PeerState, ) bool { - logger := r.logger.With("height", prs.Height).With("peer", ps.peerID) + logger := logger.With("height", prs.Height, "peer", ps.peerID) // if there are lastCommits to send... if prs.Step == cstypes.RoundStepNewHeight { @@ -543,7 +540,7 @@ func (r *Reactor) gossipVotesForHeight( } func (r *Reactor) gossipVotesRoutine(ctx context.Context, ps *PeerState) error { - logger := r.logger.With("peer", ps.peerID) + logger := logger.With("peer", ps.peerID) timer := time.NewTimer(0) defer timer.Stop() @@ -666,7 +663,7 @@ func (r *Reactor) handleStateMessage(m p2p.RecvMsg[*tmcons.Message]) (err error) defer r.recoverToErr(&err) ps, ok := r.GetPeerState(m.From) if !ok { - r.logger.Debug("failed to find peer state", "peer", m.From, "ch_id", "StateChannel") + logger.Debug("failed to find peer state", "peer", m.From, "ch_id", "StateChannel") return nil } @@ -738,11 +735,11 @@ func (r *Reactor) handleStateMessage(m p2p.RecvMsg[*tmcons.Message]) (err error) // removed. func (r *Reactor) handleDataMessage(ctx context.Context, m p2p.RecvMsg[*tmcons.Message]) (err error) { defer r.recoverToErr(&err) - logger := r.logger.With("peer", m.From, "ch_id", "DataChannel") + logger := logger.With("peer", m.From, "ch_id", "DataChannel") ps, ok := r.GetPeerState(m.From) if !ok || ps == nil { - r.logger.Debug("failed to find peer state") + logger.Debug("failed to find peer state") return nil } @@ -777,11 +774,11 @@ func (r *Reactor) handleDataMessage(ctx context.Context, m p2p.RecvMsg[*tmcons.M // removed. func (r *Reactor) handleVoteMessage(ctx context.Context, m p2p.RecvMsg[*tmcons.Message]) (err error) { defer r.recoverToErr(&err) - logger := r.logger.With("peer", m.From, "ch_id", "VoteChannel") + logger := logger.With("peer", m.From, "ch_id", "VoteChannel") ps, ok := r.GetPeerState(m.From) if !ok { - r.logger.Debug("failed to find peer state") + logger.Debug("failed to find peer state") return nil } @@ -820,11 +817,11 @@ func (r *Reactor) handleVoteMessage(ctx context.Context, m p2p.RecvMsg[*tmcons.M // after the peer is removed. func (r *Reactor) handleVoteSetBitsMessage(m p2p.RecvMsg[*tmcons.Message]) (err error) { defer r.recoverToErr(&err) - logger := r.logger.With("peer", m.From, "ch_id", "VoteSetBitsChannel") + logger := logger.With("peer", m.From, "ch_id", "VoteSetBitsChannel") ps, ok := r.GetPeerState(m.From) if !ok || ps == nil { - r.logger.Debug("failed to find peer state") + logger.Debug("failed to find peer state") return nil } @@ -869,7 +866,7 @@ func (r *Reactor) handleVoteSetBitsMessage(m p2p.RecvMsg[*tmcons.Message]) (err func (r *Reactor) recoverToErr(err *error) { if e := recover(); e != nil { *err = fmt.Errorf("panic in processing message: %v", e) - r.logger.Error( + logger.Error( "recovering from processing message panic", "err", *err, "stack", string(debug.Stack()), @@ -966,7 +963,7 @@ func (r *Reactor) processPeerUpdates(ctx context.Context) error { if _, ok := peers[update.NodeID]; ok { continue } - ps := NewPeerState(r.logger, update.NodeID) + ps := NewPeerState(update.NodeID) peerCtx, cancel := context.WithCancel(ctx) ps.cancel = cancel peers[update.NodeID] = ps diff --git a/sei-tendermint/internal/consensus/reactor_test.go b/sei-tendermint/internal/consensus/reactor_test.go index ff39c9e305..b48e8c682d 100644 --- a/sei-tendermint/internal/consensus/reactor_test.go +++ b/sei-tendermint/internal/consensus/reactor_test.go @@ -27,7 +27,6 @@ import ( statemocks "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/mocks" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" tmcons "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/consensus" @@ -74,7 +73,6 @@ func setup( state := states[i] reactor, err := NewReactor( - state.logger.With("node", nodeID), state, node.Router, state.eventBus, @@ -249,7 +247,6 @@ func TestReactorWithEvidence(t *testing.T) { valSet, privVals := factory.ValidatorSet(ctx, n, 30) genDoc := factory.GenesisDoc(cfg, time.Now(), valSet.Validators, factory.ConsensusParams()) states := make([]*State, n) - logger := consensusLogger() for i := range n { stateDB := dbm.NewMemDB() // each state needs its own db @@ -276,7 +273,6 @@ func TestReactorWithEvidence(t *testing.T) { proxyAppConnCon := app mempool := mempool.NewTxMempool( - log.NewNopLogger().With("module", "mempool"), thisConfig.Mempool, proxyAppConnMem, nil, @@ -299,12 +295,12 @@ func TestReactorWithEvidence(t *testing.T) { evpool.On("Update", mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("state.State"), mock.AnythingOfType("types.EvidenceList")).Return() evpool2 := sm.EmptyEvidencePool{} - eventBus := eventbus.NewDefault(log.NewNopLogger().With("module", "events")) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - blockExec := sm.NewBlockExecutor(stateStore, log.NewNopLogger(), proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(stateStore, proxyAppConnCon, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) - cs, err := NewState(logger.With("validator", i, "module", "consensus"), + cs, err := NewState( thisConfig.Consensus, stateStore, blockExec, blockStore, mempool, evpool2, eventBus, []trace.TracerProviderOption{}) require.NoError(t, err) cs.SetPrivValidator(ctx, utils.Some(pv)) @@ -477,7 +473,7 @@ func TestReactorValidatorSetChanges(t *testing.T) { cfg, nVals, nPeers, - func() TimeoutTicker { return NewTimeoutTicker(log.NewNopLogger()) }, + func() TimeoutTicker { return NewTimeoutTicker() }, newEpehemeralKVStore, ) t.Cleanup(cleanup) @@ -513,11 +509,10 @@ func TestReactorMemoryLimitCoverage(t *testing.T) { // This test covers the error handling paths in reactor when proposals exceed memory limits // It's designed to improve test coverage for the reactor's proposal validation - logger := log.NewTestingLogger(t) testPeerID := types.NodeID("test-peer-memory-limit") // Test that PeerState correctly rejects proposals with excessive parts - ps := NewPeerState(logger, testPeerID) + ps := NewPeerState(testPeerID) ps.PRS.Height = 1 ps.PRS.Round = 0 diff --git a/sei-tendermint/internal/consensus/replay.go b/sei-tendermint/internal/consensus/replay.go index c3cc621a81..e1fb1655a7 100644 --- a/sei-tendermint/internal/consensus/replay.go +++ b/sei-tendermint/internal/consensus/replay.go @@ -11,10 +11,12 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/proxy" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "internal", "consensus") + // Functionality to replay blocks and messages on recovery from a crash. // There are two general failure scenarios: // @@ -38,7 +40,7 @@ func (cs *State) readReplayMessage(ctx context.Context, msg WALMessage) error { // Skip meta messages which exist for demarcating boundaries. return nil case types.EventDataRoundState: - cs.logger.Info("Replay: New Step", "height", m.Height, "round", m.Round, "step", m.Step) + logger.Info("Replay: New Step", "height", m.Height, "round", m.Round, "step", m.Step) case msgInfo: peerID := m.PeerID if peerID == "" { @@ -47,19 +49,19 @@ func (cs *State) readReplayMessage(ctx context.Context, msg WALMessage) error { switch msg := m.Msg.(type) { case *ProposalMessage: p := msg.Proposal - cs.logger.Info("Replay: Proposal", "height", p.Height, "round", p.Round, "header", + logger.Info("Replay: Proposal", "height", p.Height, "round", p.Round, "header", p.BlockID.PartSetHeader, "pol", p.POLRound, "peer", peerID) case *BlockPartMessage: - cs.logger.Info("Replay: BlockPart", "height", msg.Height, "round", msg.Round, "peer", peerID) + logger.Info("Replay: BlockPart", "height", msg.Height, "round", msg.Round, "peer", peerID) case *VoteMessage: v := msg.Vote - cs.logger.Info("Replay: Vote", "height", v.Height, "round", v.Round, "type", v.Type, + logger.Info("Replay: Vote", "height", v.Height, "round", v.Round, "type", v.Type, "blockID", v.BlockID, "peer", peerID) } cs.handleMsg(ctx, m, false) case timeoutInfo: - cs.logger.Info("Replay: Timeout", "height", m.Height, "round", m.Round, "step", m.Step, "dur", m.Duration) + logger.Info("Replay: Timeout", "height", m.Height, "round", m.Round, "step", m.Step, "dur", m.Duration) roundState := cs.roundState.CopyInternal() cs.handleTimeout(ctx, m, *roundState) default: @@ -86,7 +88,7 @@ func (cs *State) catchupReplay(ctx context.Context, csHeight int64) error { if gotHeight != csHeight { return fmt.Errorf("last height in WAL is %v, want %v", gotHeight, csHeight) } - cs.logger.Info("Catchup by replaying consensus messages", "height", csHeight) + logger.Info("Catchup by replaying consensus messages", "height", csHeight) for _, msg := range msgs { // NOTE: since the priv key is set when the msgs are received // it will attempt to eg double sign but we can just ignore it @@ -95,7 +97,7 @@ func (cs *State) catchupReplay(ctx context.Context, csHeight int64) error { return err } } - cs.logger.Info("Replay: Done") + logger.Info("Replay: Done") return nil } @@ -137,13 +139,11 @@ type Handshaker struct { store sm.BlockStore eventBus *eventbus.EventBus genDoc *types.GenesisDoc - logger log.Logger nBlocks int // number of blocks applied to the state } func NewHandshaker( - logger log.Logger, stateStore sm.Store, state sm.State, store sm.BlockStore, @@ -156,7 +156,6 @@ func NewHandshaker( store: store, eventBus: eventBus, genDoc: genDoc, - logger: logger, } } @@ -181,7 +180,7 @@ func (h *Handshaker) Handshake(ctx context.Context, appClient abci.Application) appHash := res.LastBlockAppHash appHashString := fmt.Sprintf("%X", appHash) - h.logger.Info("ABCI Handshake App Info", + logger.Info("ABCI Handshake App Info", "height", blockHeight, "hash", appHashString, "software-version", res.Version, @@ -199,7 +198,7 @@ func (h *Handshaker) Handshake(ctx context.Context, appClient abci.Application) return fmt.Errorf("error on replay: %w", err) } - h.logger.Info("Completed ABCI Handshake - Tendermint and App are synced", + logger.Info("Completed ABCI Handshake - Tendermint and App are synced", "appHeight", blockHeight, "hash", appHashString) // TODO: (on restart) replay mempool @@ -220,7 +219,7 @@ func (h *Handshaker) ReplayBlocks( storeBlockBase := h.store.Base() storeBlockHeight := h.store.Height() stateBlockHeight := state.LastBlockHeight - h.logger.Info( + logger.Info( "ABCI Replay Blocks", "appHeight", appBlockHeight, @@ -350,7 +349,7 @@ func (h *Handshaker) ReplayBlocks( // so replayBlock with the real app. // NOTE: We could instead use the cs.WAL on cs.Start, // but we'd have to allow the WAL to replay a block that wrote it's #ENDHEIGHT - h.logger.Info("Replay last block using real app") + logger.Info("Replay last block using real app") state, err = h.replayBlock(ctx, state, storeBlockHeight, appClient) if err != nil { return nil, err @@ -366,7 +365,7 @@ func (h *Handshaker) ReplayBlocks( } mockApp := newMockProxyApp(appHash, finalizeBlockResponses) - h.logger.Info("Replay last block using mock app") + logger.Info("Replay last block using mock app") state, err = h.replayBlock(ctx, state, storeBlockHeight, mockApp) if err != nil { return nil, err @@ -410,7 +409,7 @@ func (h *Handshaker) replayBlocks( firstBlock = state.InitialHeight } for i := firstBlock; i <= finalBlock; i++ { - h.logger.Info("Applying block", "height", i) + logger.Info("Applying block", "height", i) block := h.store.LoadBlock(i) // Extra check to ensure the app was not changed in a way it shouldn't have. if len(appHash) > 0 { @@ -422,15 +421,15 @@ func (h *Handshaker) replayBlocks( if i == finalBlock && !mutateState { // We emit events for the index services at the final block due to the sync issue when // the node shutdown during the block committing status. - blockExec := sm.NewBlockExecutor(h.stateStore, h.logger, appClient, emptyMempool{}, sm.EmptyEvidencePool{}, h.store, h.eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(h.stateStore, appClient, emptyMempool{}, sm.EmptyEvidencePool{}, h.store, h.eventBus, sm.NopMetrics()) appHash, err = sm.ExecCommitBlock(ctx, - blockExec, appClient, block, h.logger, h.stateStore, h.genDoc.InitialHeight, state) + blockExec, appClient, block, h.stateStore, h.genDoc.InitialHeight, state) if err != nil { return nil, err } } else { appHash, err = sm.ExecCommitBlock(ctx, - nil, appClient, block, h.logger, h.stateStore, h.genDoc.InitialHeight, state) + nil, appClient, block, h.stateStore, h.genDoc.InitialHeight, state) if err != nil { return nil, err } @@ -465,7 +464,7 @@ func (h *Handshaker) replayBlock( // Use stubs for both mempool and evidence pool since no transactions nor // evidence are needed here - block already exists. - blockExec := sm.NewBlockExecutor(h.stateStore, h.logger, appClient, emptyMempool{}, sm.EmptyEvidencePool{}, h.store, h.eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(h.stateStore, appClient, emptyMempool{}, sm.EmptyEvidencePool{}, h.store, h.eventBus, sm.NopMetrics()) var err error state, err = blockExec.ApplyBlock(ctx, state, meta.BlockID, block, nil) @@ -490,7 +489,7 @@ func (h *Handshaker) replayEvents(height int64) error { if err != nil { return err } - sm.FireEvents(h.logger, h.eventBus, block, meta.BlockID, res, validatorUpdates) + sm.FireEvents(h.eventBus, block, meta.BlockID, res, validatorUpdates) return nil } diff --git a/sei-tendermint/internal/consensus/replay_test.go b/sei-tendermint/internal/consensus/replay_test.go index 37708439b8..f0f0887c92 100644 --- a/sei-tendermint/internal/consensus/replay_test.go +++ b/sei-tendermint/internal/consensus/replay_test.go @@ -27,7 +27,6 @@ import ( sf "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/test/factory" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" @@ -102,7 +101,6 @@ func runStateUntilBlock(t *testing.T, cfg *config.Config, lastBlock int64) { state.Version.Consensus.App = kvstore.ProtocolVersion // simulate handshake, receive app version cs := newStateWithConfigAndBlockStore( ctx, - log.NewNopLogger(), cfg, state, loadPrivValidator(cfg), @@ -228,7 +226,6 @@ func crashWALandCheckLiveness( state.Version.Consensus.App = kvstore.ProtocolVersion // simulate handshake, receive app version cs := newStateWithConfigAndBlockStore( ctx, - log.NewNopLogger(), cfg, state, loadPrivValidator(cfg), @@ -642,7 +639,6 @@ func testHandshakeReplay( cfg := sim.Config - logger := log.NewNopLogger() if testValidatorsChange { testConfig, err := ResetConfig(t.TempDir(), fmt.Sprintf("%s_%v_m", t.Name(), mode)) require.NoError(t, err) @@ -680,7 +676,6 @@ func testHandshakeReplay( state = buildTMStateFromChain( ctx, t, - logger, sim.Mempool, sim.Evpool, stateStore, @@ -691,7 +686,7 @@ func testHandshakeReplay( ) latestAppHash := state.AppHash - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) app := kvstore.NewApplication() @@ -717,7 +712,7 @@ func testHandshakeReplay( // now start the app using the handshake - it should sync genDoc, err := sm.MakeGenesisDocFromFile(cfg.GenesisFile()) require.NoError(t, err) - handshaker := NewHandshaker(logger, stateStore, state, store, eventBus, genDoc) + handshaker := NewHandshaker(stateStore, state, store, eventBus, genDoc) err = handshaker.Handshake(ctx, app) if expectError { require.Error(t, err) @@ -764,7 +759,7 @@ func applyBlock( eventBus *eventbus.EventBus, ) sm.State { testPartSize := types.BlockPartSizeBytes - blockExec := sm.NewBlockExecutor(stateStore, log.NewNopLogger(), appClient, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(stateStore, appClient, mempool, evpool, blockStore, eventBus, sm.NopMetrics()) bps, err := blk.MakePartSet(testPartSize) require.NoError(t, err) @@ -825,7 +820,6 @@ func buildAppStateFromChain( func buildTMStateFromChain( ctx context.Context, t *testing.T, - logger log.Logger, mempool mempool.Mempool, evpool sm.EvidencePool, stateStore sm.Store, @@ -848,7 +842,7 @@ func buildTMStateFromChain( require.NoError(t, stateStore.Save(state)) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) switch mode { @@ -885,7 +879,6 @@ func TestHandshakeErrorsIfAppReturnsWrongAppHash(t *testing.T) { cfg, err := ResetConfig(t.TempDir(), "handshake_test_") require.NoError(t, err) - t.Cleanup(func() { os.RemoveAll(cfg.RootDir) }) privVal, err := privval.LoadFilePV(cfg.PrivValidator.KeyFile(), cfg.PrivValidator.StateFile()) require.NoError(t, err) const appVersion = 0x0 @@ -901,9 +894,7 @@ func TestHandshakeErrorsIfAppReturnsWrongAppHash(t *testing.T) { store.chain = blocks - logger := log.NewNopLogger() - - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) // 2. Tendermint must panic if app returns wrong hash for the first block @@ -912,7 +903,7 @@ func TestHandshakeErrorsIfAppReturnsWrongAppHash(t *testing.T) { // - 0x03 { app := &badApp{numBlocks: 3, allHashesAreWrong: true} - h := NewHandshaker(logger, stateStore, state, store, eventBus, genDoc) + h := NewHandshaker(stateStore, state, store, eventBus, genDoc) assert.Error(t, h.Handshake(ctx, app)) } @@ -922,7 +913,7 @@ func TestHandshakeErrorsIfAppReturnsWrongAppHash(t *testing.T) { // - RANDOM HASH { app := &badApp{numBlocks: 3, onlyLastHashIsWrong: true} - h := NewHandshaker(logger, stateStore, state, store, eventBus, genDoc) + h := NewHandshaker(stateStore, state, store, eventBus, genDoc) require.Error(t, h.Handshake(ctx, app)) } } @@ -1118,14 +1109,13 @@ func (bs *mockBlockStore) DeleteLatestBlock() error { return nil } func TestHandshakeUpdatesValidators(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() votePower := 10 + int64(rand.Uint32()) val, _, err := factory.Validator(ctx, votePower) require.NoError(t, err) vals := types.NewValidatorSet([]*types.Validator{val}) app := &initChainApp{vals: types.TM2PB.ValidatorUpdates(vals)} - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) cfg, err := ResetConfig(t.TempDir(), "handshake_test_") @@ -1145,7 +1135,7 @@ func TestHandshakeUpdatesValidators(t *testing.T) { genDoc, err := sm.MakeGenesisDocFromFile(cfg.GenesisFile()) require.NoError(t, err) - handshaker := NewHandshaker(logger, stateStore, state, store, eventBus, genDoc) + handshaker := NewHandshaker(stateStore, state, store, eventBus, genDoc) require.NoError(t, handshaker.Handshake(ctx, app), "error on abci handshake") // reload the state, check the validator set was updated diff --git a/sei-tendermint/internal/consensus/state.go b/sei-tendermint/internal/consensus/state.go index 695631d985..81de3c9f2f 100644 --- a/sei-tendermint/internal/consensus/state.go +++ b/sei-tendermint/internal/consensus/state.go @@ -23,7 +23,6 @@ import ( cstypes "github.com/sei-protocol/sei-chain/sei-tendermint/internal/consensus/types" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmmath "github.com/sei-protocol/sei-chain/sei-tendermint/libs/math" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -95,8 +94,6 @@ type evidencePool interface { // commits blocks to the chain and executes them against the application. // The internal state machine receives input from peers, the internal validator, and from a timer. type State struct { - logger log.Logger - // config details config *config.ConsensusConfig privValidator utils.Option[types.PrivValidator] // for signing votes @@ -177,7 +174,6 @@ func SkipStateStoreBootstrap(sm *State) { // NewState returns a new State. func NewState( - logger log.Logger, cfg *config.ConsensusConfig, store sm.Store, blockExec *sm.BlockExecutor, @@ -199,7 +195,6 @@ func NewState( }() cs := &State{ eventBus: eventBus, - logger: logger, config: cfg, blockExec: blockExec, blockStore: blockStore, @@ -207,7 +202,7 @@ func NewState( txNotifier: txNotifier, peerMsgQueue: make(chan msgInfo, msgQueueSize), internalMsgQueue: make(chan msgInfo, msgQueueSize), - timeoutTicker: NewTimeoutTicker(logger), + timeoutTicker: NewTimeoutTicker(), doWALCatchup: true, evpool: evpool, metrics: NopMetrics(), @@ -328,7 +323,7 @@ func (cs *State) SetPrivValidator(ctx context.Context, priv utils.Option[types.P cs.privValidator = priv if err := cs.updatePrivValidatorPubKey(ctx); err != nil { - cs.logger.Error("failed to get private validator pubkey", "err", err) + logger.Error("failed to get private validator pubkey", "err", err) } } @@ -400,7 +395,7 @@ func (cs *State) Run(ctx context.Context) error { func (cs *State) startRoutines(ctx context.Context, maxSteps int) { go func() { if err := cs.timeoutTicker.Run(ctx); err != nil { - cs.logger.Error("cs.timeoutTicker.Run()", "err", err) + logger.Error("cs.timeoutTicker.Run()", "err", err) } }() go func() { _ = cs.receiveRoutine(ctx, maxSteps) }() @@ -543,7 +538,7 @@ func (cs *State) sendInternalMessage(ctx context.Context, mi msgInfo) { // be processed out of order. // TODO: use CList here for strict determinism and // attempt push to internalMsgQueue in receiveRoutine - cs.logger.Debug("internal msg queue is full; using a go-routine") + logger.Debug("internal msg queue is full; using a go-routine") go func() { select { case <-ctx.Done(): @@ -611,7 +606,7 @@ func (cs *State) updateToState(state sm.State) { // signal the new round step, because other services (eg. txNotifier) // depend on having an up-to-date peer state! if state.LastBlockHeight <= cs.state.LastBlockHeight { - cs.logger.Debug( + logger.Debug( "ignoring updateToState()", "new_height", state.LastBlockHeight+1, "old_height", cs.state.LastBlockHeight+1, @@ -704,7 +699,7 @@ func (cs *State) newStep() { // newStep is called by updateToState in NewState before the eventBus is set! if cs.eventBus != nil { if err := cs.eventBus.PublishEventNewRoundStep(rs); err != nil { - cs.logger.Error("failed publishing new round step", "err", err) + logger.Error("failed publishing new round step", "err", err) } roundState := cs.roundState.CopyInternal() @@ -733,7 +728,7 @@ func (cs *State) heartbeater(ctx context.Context) error { func (cs *State) receiveRoutine(ctx context.Context, maxSteps int) error { defer func() { if r := recover(); r != nil { - cs.logger.Error("CONSENSUS FAILURE!!!", "err", r, "stack", string(debug.Stack())) + logger.Error("CONSENSUS FAILURE!!!", "err", r, "stack", string(debug.Stack())) // There are a couple of cases where the we // panic with an error from deeper within the // state machine and in these cases, typically @@ -757,7 +752,7 @@ func (cs *State) receiveRoutine(ctx context.Context, maxSteps int) error { for { if maxSteps > 0 { if cs.nSteps >= maxSteps { - cs.logger.Debug("reached max steps; exiting receive routine") + logger.Debug("reached max steps; exiting receive routine") cs.nSteps = 0 return nil } @@ -769,7 +764,7 @@ func (cs *State) receiveRoutine(ctx context.Context, maxSteps int) error { case mi := <-cs.peerMsgQueue: if err := cs.wal.Append(NewWALMessage(mi)); err != nil { - cs.logger.Error("failed writing to WAL", "err", err) + logger.Error("failed writing to WAL", "err", err) } // handles proposals, block parts, votes // may generate internal events (votes, complete proposals, 2/3 majorities) @@ -805,7 +800,7 @@ func (cs *State) fsyncAndCompleteProposal(ctx context.Context, fsyncUponCompleti cs.metrics.ProposalBlockCreatedOnPropose.With("success", strconv.FormatBool(onPropose)).Add(1) if fsyncUponCompletion { if err := cs.wal.Sync(); err != nil { // fsync - cs.logger.Error("Error flushing wal after receiving all block parts", "error", err) + logger.Error("Error flushing wal after receiving all block parts", "error", err) } } cs.metrics.MarkCompleteProposalTime(time.Since(cs.roundState.ProposalReceiveTime())) @@ -877,7 +872,7 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo, fsyncUponCompletion } if err != nil && msg.Round != cs.roundState.Round() { - cs.logger.Debug( + logger.Debug( "received block part from wrong round", "height", cs.roundState.Height(), "cs_round", cs.roundState.Round(), @@ -885,7 +880,7 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo, fsyncUponCompletion ) err = nil } else if err != nil { - cs.logger.Debug("added block part but received error", "error", err, "height", cs.roundState.Height(), "cs_round", cs.roundState.Round(), "block_round", msg.Round) + logger.Debug("added block part but received error", "error", err, "height", cs.roundState.Height(), "cs_round", cs.roundState.Round(), "block_round", msg.Round) } case *VoteMessage: @@ -914,12 +909,12 @@ func (cs *State) handleMsg(ctx context.Context, mi msgInfo, fsyncUponCompletion // We could make note of this and help filter in broadcastHasVoteMessage(). default: - cs.logger.Error("unknown msg type", "type", fmt.Sprintf("%T", msg)) + logger.Error("unknown msg type", "type", fmt.Sprintf("%T", msg)) return } if err != nil { - cs.logger.Error( + logger.Error( "failed to process message", "height", cs.roundState.Height(), "round", cs.roundState.Round(), @@ -935,11 +930,11 @@ func (cs *State) handleTimeout( ti timeoutInfo, rs cstypes.RoundState, ) { - cs.logger.Debug("received tock", "timeout", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) + logger.Debug("received tock", "timeout", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) // timeouts must be for current height, round, step if ti.Height != rs.Height || ti.Round < rs.Round || (ti.Round == rs.Round && ti.Step < rs.Step) { - cs.logger.Debug("ignoring tock because we are ahead", "height", rs.Height, "round", rs.Round, "step", rs.Step) + logger.Debug("ignoring tock because we are ahead", "height", rs.Height, "round", rs.Round, "step", rs.Step) return } @@ -959,21 +954,21 @@ func (cs *State) handleTimeout( case cstypes.RoundStepPropose: if err := cs.eventBus.PublishEventTimeoutPropose(cs.roundState.RoundStateEvent()); err != nil { - cs.logger.Error("failed publishing timeout propose", "err", err) + logger.Error("failed publishing timeout propose", "err", err) } cs.enterPrevote(ctx, ti.Height, ti.Round, "timeout") case cstypes.RoundStepPrevoteWait: if err := cs.eventBus.PublishEventTimeoutWait(cs.roundState.RoundStateEvent()); err != nil { - cs.logger.Error("failed publishing timeout wait", "err", err) + logger.Error("failed publishing timeout wait", "err", err) } cs.enterPrecommit(ctx, ti.Height, ti.Round, "timeout") case cstypes.RoundStepPrecommitWait: if err := cs.eventBus.PublishEventTimeoutWait(cs.roundState.RoundStateEvent()); err != nil { - cs.logger.Error("failed publishing timeout wait", "err", err) + logger.Error("failed publishing timeout wait", "err", err) } cs.enterPrecommit(ctx, ti.Height, ti.Round, "precommit-wait-timeout") @@ -1044,7 +1039,7 @@ func (cs *State) enterNewRound(ctx context.Context, height int64, round int32, e // TODO: remove panics in this function and return an error - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cs.roundState.Step() != cstypes.RoundStepNewHeight) { logger.Debug( @@ -1097,7 +1092,7 @@ func (cs *State) enterNewRound(ctx context.Context, height int64, round int32, e cs.roundState.SetTriggeredTimeoutPrecommit(false) if err := cs.eventBus.PublishEventNewRound(cs.roundState.NewRoundEvent()); err != nil { - cs.logger.Error("failed publishing new round", "err", err) + logger.Error("failed publishing new round", "err", err) } // Wait for txs to be available in the mempool // before we enterPropose in round 0. If the last block changed the app hash, @@ -1142,7 +1137,7 @@ func (cs *State) enterPropose(ctx context.Context, height int64, round int32, en span.SetAttributes(attribute.String("entry", entryLabel)) defer span.End() - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cstypes.RoundStepPropose <= cs.roundState.Step()) { logger.Debug( @@ -1243,7 +1238,7 @@ func (cs *State) decideProposal(ctx context.Context, height int64, round int32, var err error block, err = cs.createProposalBlock(ctx) if err != nil { - cs.logger.Error("unable to create proposal block", "error", err) + logger.Error("unable to create proposal block", "error", err) return } else if block == nil { return @@ -1251,7 +1246,7 @@ func (cs *State) decideProposal(ctx context.Context, height int64, round int32, cs.metrics.ProposalCreateCount.Add(1) blockParts, err = block.MakePartSet(types.BlockPartSizeBytes) if err != nil { - cs.logger.Error("unable to create proposal block part set", "error", err) + logger.Error("unable to create proposal block part set", "error", err) return } } @@ -1259,7 +1254,7 @@ func (cs *State) decideProposal(ctx context.Context, height int64, round int32, // Flush the WAL. Otherwise, we may not recompute the same proposal to sign, // and the privValidator will refuse to sign anything. if err := cs.wal.Sync(); err != nil { - cs.logger.Error("failed flushing WAL to disk") + logger.Error("failed flushing WAL to disk") } // Make proposal @@ -1273,7 +1268,7 @@ func (cs *State) decideProposal(ctx context.Context, height int64, round int32, if err := privValidator.SignProposal(ctxto, cs.state.ChainID, p); err == nil { sig, err := crypto.SigFromBytes(p.Signature) if err != nil { - cs.logger.Error("propose step; failed signing proposal", "height", height, "round", round, "err", err) + logger.Error("propose step; failed signing proposal", "height", height, "round", round, "err", err) return } proposal.Signature = sig @@ -1286,9 +1281,9 @@ func (cs *State) decideProposal(ctx context.Context, height int64, round int32, cs.sendInternalMessage(ctx, msgInfo{&BlockPartMessage{cs.roundState.Height(), cs.roundState.Round(), part}, "", tmtime.Now()}) } - cs.logger.Debug("signed proposal", "height", height, "round", round, "proposal", proposal) + logger.Debug("signed proposal", "height", height, "round", round, "proposal", proposal) } else if !cs.replayMode { - cs.logger.Error("propose step; failed signing proposal", "height", height, "round", round, "err", err) + logger.Error("propose step; failed signing proposal", "height", height, "round", round, "err", err) } } @@ -1318,7 +1313,7 @@ func (cs *State) isProposalComplete() bool { func (cs *State) createProposalBlock(ctx context.Context) (block *types.Block, err error) { defer func() { if r := recover(); r != nil { - cs.logger.Error("panic recovered in createProposalBlock", "panic", r) + logger.Error("panic recovered in createProposalBlock", "panic", r) // Convert panic to error block = nil err = fmt.Errorf("createProposalBlock panic recovered: %v", r) @@ -1342,7 +1337,7 @@ func (cs *State) createProposalBlock(ctx context.Context) (block *types.Block, e lastCommit = cs.roundState.LastCommit().MakeCommit() default: // This shouldn't happen. - cs.logger.Error("propose step; cannot propose anything without commit for the previous block") + logger.Error("propose step; cannot propose anything without commit for the previous block") return nil, nil } @@ -1350,7 +1345,7 @@ func (cs *State) createProposalBlock(ctx context.Context) (block *types.Block, e if !ok { // If this node is a validator & proposer in the current round, it will // miss the opportunity to create a block. - cs.logger.Error("propose step; empty priv validator public key", "err", errPubKeyIsNotSet) + logger.Error("propose step; empty priv validator public key", "err", errPubKeyIsNotSet) return nil, nil } @@ -1377,7 +1372,7 @@ func (cs *State) enterPrevote(ctx context.Context, height int64, round int32, en span.SetAttributes(attribute.String("entry", entryLabel)) defer span.End() - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cstypes.RoundStepPrevote <= cs.roundState.Step()) { logger.Debug( @@ -1409,7 +1404,7 @@ func (cs *State) proposalIsTimely() bool { } func (cs *State) defaultDoPrevote(ctx context.Context, height int64, round int32) { - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) // Check that a proposed block was not received within this round (and thus executing this from a timeout). if !cs.config.GossipTransactionKeyOnly && cs.roundState.ProposalBlock() == nil { @@ -1566,7 +1561,7 @@ func (cs *State) defaultDoPrevote(ctx context.Context, height int64, round int32 // Enter: any +2/3 prevotes at next round. func (cs *State) enterPrevoteWait(height int64, round int32) { - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cstypes.RoundStepPrevoteWait <= cs.roundState.Step()) { logger.Debug( @@ -1607,7 +1602,7 @@ func (cs *State) enterPrecommit(ctx context.Context, height int64, round int32, span.SetAttributes(attribute.String("entry", entryLabel)) defer span.End() - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cstypes.RoundStepPrecommit <= cs.roundState.Step()) { logger.Debug( @@ -1727,7 +1722,7 @@ func (cs *State) enterPrecommit(ctx context.Context, height int64, round int32, // Enter: any +2/3 precommits for next round. func (cs *State) enterPrecommitWait(height int64, round int32) { - logger := cs.logger.With("height", height, "round", round) + logger := logger.With("height", height, "round", round) if cs.roundState.Height() != height || round < cs.roundState.Round() || (cs.roundState.Round() == round && cs.roundState.TriggeredTimeoutPrecommit()) { logger.Debug( @@ -1765,7 +1760,7 @@ func (cs *State) enterCommit(ctx context.Context, height int64, commitRound int3 span.SetAttributes(attribute.String("entry", entryLabel)) defer span.End() - logger := cs.logger.With("height", height, "commit_round", commitRound) + logger := logger.With("height", height, "commit_round", commitRound) if cs.roundState.Height() != height || cstypes.RoundStepCommit <= cs.roundState.Step() { logger.Debug( @@ -1828,7 +1823,7 @@ func (cs *State) enterCommit(ctx context.Context, height int64, commitRound int3 // If we have the block AND +2/3 commits for it, finalize. func (cs *State) tryFinalizeCommit(ctx context.Context, height int64) { - logger := cs.logger.With("height", height) + logger := logger.With("height", height) if cs.roundState.Height() != height { panic(fmt.Sprintf("tryFinalizeCommit() cs.Height: %v vs height: %v", cs.roundState.Height(), height)) @@ -1859,7 +1854,7 @@ func (cs *State) tryFinalizeCommit(ctx context.Context, height int64) { func (cs *State) finalizeCommit(ctx context.Context, height int64) { spanCtx, span := cs.tracer.Start(ctx, "cs.state.finalizeCommit") defer span.End() - logger := cs.logger.With("height", height) + logger := logger.With("height", height) if cs.roundState.Height() != height || cs.roundState.Step() != cstypes.RoundStepCommit { logger.Debug( @@ -1896,7 +1891,7 @@ func (cs *State) finalizeCommit(ctx context.Context, height int64) { "num_txs", len(block.Txs), "time", time.Now().UnixMilli(), ) - logger.Debug(fmt.Sprintf("%v", block)) + logger.Debug("finalizing commit of block", "block", block) // Save to blockStore. if cs.blockStore.Height() < block.Height { @@ -2002,15 +1997,16 @@ func (cs *State) RecordMetrics(height int64, block *types.Block) { address types.Address ) if commitSize != valSetLen { - cs.logger.Error(fmt.Sprintf("commit size (%d) doesn't match valset length (%d) at height %d\n\n%v\n\n%v", - commitSize, valSetLen, block.Height, block.LastCommit.Signatures, cs.roundState.LastValidators().Validators)) + logger.Error("commit size doesn't match valset length", + "commit-size", commitSize, "valset-len", valSetLen, "height", block.Height, + "signatures", block.LastCommit.Signatures, "validators", cs.roundState.LastValidators().Validators) return } if cs.privValidator.IsPresent() { if key, ok := cs.privValidatorPubKey.Get(); !ok { // Metrics won't be updated, but it's not critical. - cs.logger.Error("recordMetrics", "err", errPubKeyIsNotSet) + logger.Error("recordMetrics", "err", errPubKeyIsNotSet) } else { address = key.Address() } @@ -2079,7 +2075,7 @@ func (cs *State) RecordMetrics(height int64, block *types.Block) { preVotes := roundState.Votes.Prevotes(roundID) pl := preVotes.List() if len(pl) == 0 { - cs.logger.Info("no prevotes to emit latency metrics for", "height", height, "round", roundID) + logger.Info("no prevotes to emit latency metrics for", "height", height, "round", roundID) continue } sort.Slice(pl, func(i, j int) bool { @@ -2117,7 +2113,7 @@ func (cs *State) defaultSetProposal(proposal *types.Proposal, recvTime time.Time if commitRound := cs.roundState.CommitRound(); commitRound >= 0 && cs.roundState.Step() == cstypes.RoundStepCommit { blockID, ok := cs.roundState.Votes().Precommits(commitRound).TwoThirdsMajority() if ok && !blockID.IsNil() && !proposal.BlockID.Equals(blockID) { - cs.logger.Debug( + logger.Debug( "ignoring proposal that mismatches commit certificate", "height", proposal.Height, "round", proposal.Round, @@ -2151,7 +2147,7 @@ func (cs *State) defaultSetProposal(proposal *types.Proposal, recvTime time.Time if cs.roundState.ProposalBlockParts() == nil { // apply the same check as in SetHasProposal if proposal.BlockID.PartSetHeader.Total > types.MaxBlockPartsCount { - cs.logger.Debug("rejecting proposal with too many parts", "total", proposal.BlockID.PartSetHeader.Total, "max", types.MaxBlockPartsCount) + logger.Debug("rejecting proposal with too many parts", "total", proposal.BlockID.PartSetHeader.Total, "max", types.MaxBlockPartsCount) return ErrInvalidProposalPartSetHeader } cs.metrics.MarkBlockGossipStarted() @@ -2159,7 +2155,7 @@ func (cs *State) defaultSetProposal(proposal *types.Proposal, recvTime time.Time cs.roundState.SetProposalBlock(nil) } - cs.logger.Debug("received proposal", "proposal", proposal) + logger.Debug("received proposal", "proposal", proposal) return nil } @@ -2174,7 +2170,7 @@ func (cs *State) addProposalBlockPart( // Blocks might be reused, so round mismatch is OK if cs.roundState.Height() != height { - cs.logger.Debug("received block part from wrong height", "height", height, "round", round) + logger.Debug("received block part from wrong height", "height", height, "round", round) cs.metrics.BlockGossipPartsReceived.With("matches_current", "false").Add(1) return false, nil } @@ -2184,7 +2180,7 @@ func (cs *State) addProposalBlockPart( cs.metrics.BlockGossipPartsReceived.With("matches_current", "false").Add(1) // NOTE: this can happen when we've gone to a higher round and // then receive parts from the previous round - not necessarily a bad peer. - cs.logger.Debug( + logger.Debug( "received a block part when we are not expecting any", "height", height, "round", round, @@ -2213,16 +2209,16 @@ func (cs *State) addProposalBlockPart( cs.metrics.MarkBlockGossipComplete() block, err := cs.getBlockFromBlockParts() if err != nil { - cs.logger.Error("Encountered error building block from parts", "block parts", cs.roundState.ProposalBlockParts()) + logger.Error("Encountered error building block from parts", "block parts", cs.roundState.ProposalBlockParts()) return false, err } cs.roundState.SetProposalBlock(block) // NOTE: it's possible to receive complete proposal blocks for future rounds without having the proposal - cs.logger.Info("received complete proposal block", "height", cs.roundState.ProposalBlock().Height, "hash", cs.roundState.ProposalBlock().Hash(), "time", time.Now().UnixMilli()) + logger.Info("received complete proposal block", "height", cs.roundState.ProposalBlock().Height, "hash", cs.roundState.ProposalBlock().Hash(), "time", time.Now().UnixMilli()) if err := cs.eventBus.PublishEventCompleteProposal(cs.roundState.CompleteProposalEvent()); err != nil { - cs.logger.Error("failed publishing event complete proposal", "err", err) + logger.Error("failed publishing event complete proposal", "err", err) } } @@ -2269,7 +2265,7 @@ func (cs *State) tryCreateProposalBlock(ctx context.Context) bool { block, err := cs.getBlockFromBlockParts() if err != nil { // This can happen if the BlockParts header is broken. - cs.logger.Error("Encountered error building block from parts", "block parts", cs.roundState.ProposalBlockParts()) + logger.Error("Encountered error building block from parts", "block parts", cs.roundState.ProposalBlockParts()) return false } cs.roundState.SetProposalBlock(block) @@ -2295,7 +2291,7 @@ func (cs *State) tryCreateProposalBlock(ctx context.Context) bool { // Constructed block needs to match the expected parts. // This check is optimistic, because proposer may provide mismatching PartSetHeader. if !parts.Header().Equals(proposal.BlockID.PartSetHeader) { - cs.logger.Error( + logger.Error( "skipping tx-key reconstruction; current part set header differs from proposal", "height", proposal.Height, "round", proposal.Round, @@ -2331,7 +2327,7 @@ func (cs *State) buildProposalBlock(proposal *types.Proposal) *types.Block { txs, missingTxs := cs.blockExec.SafeGetTxsByKeys(proposal.TxKeys) if len(missingTxs) > 0 { cs.metrics.ProposalMissingTxs.Set(float64(len(missingTxs))) - cs.logger.Debug("Missing txs when trying to build block", "missing_txs", cs.blockExec.GetMissingTxs(proposal.TxKeys)) + logger.Debug("Missing txs when trying to build block", "missing_txs", cs.blockExec.GetMissingTxs(proposal.TxKeys)) return nil } block := cs.state.MakeBlock(proposal.Height, txs, proposal.LastCommit, proposal.Evidence, proposal.ProposerAddress) @@ -2349,7 +2345,7 @@ func (cs *State) handleCompleteProposal(ctx context.Context, height int64, handl blockID, hasTwoThirds := prevotes.TwoThirdsMajority() if hasTwoThirds && !blockID.IsNil() && (cs.roundState.ValidRound() < cs.roundState.Round()) { if cs.roundState.ProposalBlock().HashesTo(blockID.Hash) { - cs.logger.Debug( + logger.Debug( "updating valid block to new proposal block", "valid_round", cs.roundState.Round(), "valid_block_hash", cs.roundState.ProposalBlock().Hash(), @@ -2396,7 +2392,7 @@ func (cs *State) tryAddVote(ctx context.Context, vote *types.Vote, peerID types. } if bytes.Equal(vote.ValidatorAddress, privValidatorPubKey.Address()) { - cs.logger.Error( + logger.Error( "found conflicting vote from ourselves; did you unsafe_reset a validator?", "height", vote.Height, "round", vote.Round, @@ -2408,7 +2404,7 @@ func (cs *State) tryAddVote(ctx context.Context, vote *types.Vote, peerID types. // report conflicting votes to the evidence pool cs.evpool.ReportConflictingVotes(voteErr.VoteA, voteErr.VoteB) - cs.logger.Debug( + logger.Debug( "found and sent conflicting votes to the evidence pool", "vote_a", voteErr.VoteA, "vote_b", voteErr.VoteB, @@ -2416,14 +2412,14 @@ func (cs *State) tryAddVote(ctx context.Context, vote *types.Vote, peerID types. return added, err } else if errors.Is(err, types.ErrVoteNonDeterministicSignature) { - cs.logger.Debug("vote has non-deterministic signature", "err", err) + logger.Debug("vote has non-deterministic signature", "err", err) } else { // Either // 1) bad peer OR // 2) not a bad peer? this can also err sometimes with "Unexpected step" OR // 3) tmkms use with multiple validators connecting to a single tmkms instance // (https://github.com/tendermint/tendermint/issues/3839). - cs.logger.Info("failed attempting to add vote", "err", err) + logger.Info("failed attempting to add vote", "err", err) return added, ErrAddingVote } } @@ -2437,7 +2433,7 @@ func (cs *State) addVote( peerID types.NodeID, handleVoteMsgSpan otrace.Span, ) (added bool, err error) { - cs.logger.Debug( + logger.Debug( "adding vote", "vote_height", vote.Height, "vote_type", vote.Type, @@ -2453,7 +2449,7 @@ func (cs *State) addVote( if vote.Height+1 == cs.roundState.Height() && vote.Type == tmproto.PrecommitType { if cs.roundState.Step() != cstypes.RoundStepNewHeight { // Late precommit at prior height is ignored - cs.logger.Debug("precommit vote came in after commit timeout and has been ignored", "vote", vote) + logger.Debug("precommit vote came in after commit timeout and has been ignored", "vote", vote) return } @@ -2462,7 +2458,7 @@ func (cs *State) addVote( return } - cs.logger.Debug("added vote to last precommits", "last_commit", cs.roundState.LastCommit().StringShort()) + logger.Debug("added vote to last precommits", "last_commit", cs.roundState.LastCommit().StringShort()) if err := cs.eventBus.PublishEventVote(types.EventDataVote{Vote: vote}); err != nil { return added, err } @@ -2483,7 +2479,7 @@ func (cs *State) addVote( // Height mismatch is ignored. // Not necessarily a bad peer, but not favorable behavior. if vote.Height != cs.roundState.Height() { - cs.logger.Debug("vote ignored and not added", "vote_height", vote.Height, "cs_height", cs.roundState.Height(), "peer", peerID) + logger.Debug("vote ignored and not added", "vote_height", vote.Height, "cs_height", cs.roundState.Height(), "peer", peerID) return } @@ -2507,7 +2503,7 @@ func (cs *State) addVote( switch vote.Type { case tmproto.PrevoteType: prevotes := cs.roundState.Votes().Prevotes(vote.Round) - cs.logger.Debug("added vote to prevote", "vote", vote, "prevotes", prevotes.StringShort()) + logger.Debug("added vote to prevote", "vote", vote, "prevotes", prevotes.StringShort()) // Check to see if >2/3 of the voting power on the network voted for any non-nil block. if blockID, ok := prevotes.TwoThirdsMajority(); ok && !blockID.IsNil() { @@ -2517,12 +2513,12 @@ func (cs *State) addVote( // Update Valid* if we can. if cs.roundState.ValidRound() < vote.Round && vote.Round == cs.roundState.Round() { if cs.roundState.ProposalBlock().HashesTo(blockID.Hash) { - cs.logger.Debug("updating valid block because of POL", "valid_round", cs.roundState.ValidRound(), "pol_round", vote.Round) + logger.Debug("updating valid block because of POL", "valid_round", cs.roundState.ValidRound(), "pol_round", vote.Round) cs.roundState.SetValidRound(vote.Round) cs.roundState.SetValidBlock(cs.roundState.ProposalBlock()) cs.roundState.SetValidBlockParts(cs.roundState.ProposalBlockParts()) } else { - cs.logger.Debug( + logger.Debug( "valid block we do not know about; set ProposalBlock=nil", "proposal", cs.roundState.ProposalBlock().Hash(), "block_id", blockID.Hash, @@ -2569,7 +2565,7 @@ func (cs *State) addVote( case tmproto.PrecommitType: precommits := cs.roundState.Votes().Precommits(vote.Round) - cs.logger.Debug("added vote to precommit", + logger.Debug("added vote to precommit", "height", vote.Height, "round", vote.Round, "validator", vote.ValidatorAddress.String(), @@ -2675,7 +2671,7 @@ func (cs *State) signAddVote( privValidatorPubKey, ok := cs.privValidatorPubKey.Get() if !ok { // Vote won't be signed, but it's not critical. - cs.logger.Error("signAddVote", "err", errPubKeyIsNotSet) + logger.Error("signAddVote", "err", errPubKeyIsNotSet) return nil } @@ -2687,11 +2683,11 @@ func (cs *State) signAddVote( // TODO: pass pubKey to signVote vote, err := cs.signVote(ctx, privValidator, msgType, hash, header) if err != nil { - cs.logger.Error("failed signing vote", "height", cs.roundState.Height(), "round", cs.roundState.Round(), "vote", vote, "err", err) + logger.Error("failed signing vote", "height", cs.roundState.Height(), "round", cs.roundState.Round(), "vote", vote, "err", err) return nil } cs.sendInternalMessage(ctx, msgInfo{&VoteMessage{vote}, "", tmtime.Now()}) - cs.logger.Info("signed and pushed vote", "height", cs.roundState.Height(), "round", cs.roundState.Round(), "vote", vote) + logger.Info("signed and pushed vote", "height", cs.roundState.Height(), "round", cs.roundState.Round(), "vote", vote) return vote } @@ -2728,7 +2724,7 @@ func (cs *State) checkDoubleSigningRisk(height int64) error { if lastCommit != nil { for sigIdx, s := range lastCommit.Signatures { if s.BlockIDFlag == types.BlockIDFlagCommit && bytes.Equal(s.ValidatorAddress, valAddr) { - cs.logger.Info("found signature from the same key", "sig", s, "idx", sigIdx, "height", height-i) + logger.Info("found signature from the same key", "sig", s, "idx", sigIdx, "height", height-i) return ErrSignatureFoundInPastBlocks } } diff --git a/sei-tendermint/internal/consensus/state_test.go b/sei-tendermint/internal/consensus/state_test.go index 696bc54c13..5bf958d399 100644 --- a/sei-tendermint/internal/consensus/state_test.go +++ b/sei-tendermint/internal/consensus/state_test.go @@ -22,7 +22,6 @@ import ( tmpubsub "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" tmquery "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -645,11 +644,10 @@ func testStateLockNoPOL(t *testing.T) { // power on the network for the block. func TestStateLock_POLUpdateLock(t *testing.T) { config := configSetup(t) - logger := log.NewNopLogger() ctx := t.Context() - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -711,7 +709,7 @@ func TestStateLock_POLUpdateLock(t *testing.T) { round++ // Generate a new proposal block. - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) propR1, propBlockR1 := decideProposal(ctx, t, cs2, vs2, vs2.Height, vs2.Round) propBlockR1Parts, err := propBlockR1.MakePartSet(partSize) require.NoError(t, err) @@ -923,7 +921,7 @@ func TestStateLock_PrevoteNilWhenLockedAndMissProposal(t *testing.T) { // if it is locked on a block and misses the proposal in a round. func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() + config := configSetup(t) /* All of the assertions in this test occur on the `cs1` validator. @@ -932,7 +930,7 @@ func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) { state. */ - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -989,7 +987,7 @@ func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) { */ incrementRound(vs2, vs3, vs4) round++ - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) propR1, propBlockR1 := decideProposal(ctx, t, cs2, vs2, vs2.Height, vs2.Round) propBlockR1Parts, err := propBlockR1.MakePartSet(types.BlockPartSizeBytes) require.NoError(t, err) @@ -1020,7 +1018,7 @@ func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) { // that it has been completely removed. func TestStateLock_POLDoesNotUnlock(t *testing.T) { config := configSetup(t) - logger := log.NewNopLogger() + ctx := t.Context() /* All of the assertions in this test occur on the `cs1` validator. @@ -1029,7 +1027,7 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) { state. */ - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -1091,7 +1089,7 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) { */ round++ incrementRound(vs2, vs3, vs4) - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) prop, propBlock := decideProposal(ctx, t, cs2, vs2, vs2.Height, vs2.Round) propBlockParts, err := propBlock.MakePartSet(types.BlockPartSizeBytes) require.NoError(t, err) @@ -1125,7 +1123,7 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) { */ round++ incrementRound(vs2, vs3, vs4) - cs3 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs3 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) prop, propBlock = decideProposal(ctx, t, cs3, vs3, vs3.Height, vs3.Round) propBlockParts, err = propBlock.MakePartSet(types.BlockPartSizeBytes) require.NoError(t, err) @@ -1154,10 +1152,10 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) { // new block if a proposal was not seen for that block. func TestStateLock_MissingProposalWhenPOLSeenDoesNotUpdateLock(t *testing.T) { config := configSetup(t) - logger := log.NewNopLogger() + ctx := t.Context() - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -1210,7 +1208,7 @@ func TestStateLock_MissingProposalWhenPOLSeenDoesNotUpdateLock(t *testing.T) { */ incrementRound(vs2, vs3, vs4) round++ - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) prop, propBlock := decideProposal(ctx, t, cs2, vs2, vs2.Height, vs2.Round) require.NotNil(t, propBlock, "Failed to create proposal block with vs2") require.NotNil(t, prop, "Failed to create proposal block with vs2") @@ -1315,10 +1313,10 @@ func TestStateLock_POLSafety1(t *testing.T) { // Deflake: SetProposalAndBlock in round 2 can race timeoutPropose under CI load. config.Consensus.UnsafeProposeTimeoutOverride = 250 * time.Millisecond config.Consensus.UnsafeProposeTimeoutDeltaOverride = 0 - logger := log.NewNopLogger() + ctx := t.Context() - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -1346,7 +1344,7 @@ func TestStateLock_POLSafety1(t *testing.T) { // Pre-build the round 2 proposal before cs1 transitions rounds to avoid // burning round 2's propose timeout budget under CI load. r2Round := round + 1 - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) prop, propBlock := decideProposal(ctx, t, cs2, vs2, vs2.Height, r2Round) propBlockParts, err := propBlock.MakePartSet(partSize) require.NoError(t, err) @@ -1528,9 +1526,8 @@ func TestStateLock_POLSafety2(t *testing.T) { func TestState_PrevotePOLFromPreviousRound(t *testing.T) { ctx := t.Context() config := configSetup(t) - logger := log.NewNopLogger() - cs1, vss := makeState(ctx, t, makeStateArgs{config: config, logger: logger}) + cs1, vss := makeState(ctx, t, makeStateArgs{config: config}) vs2, vs3, vs4 := vss[1], vss[2], vss[3] height, round := cs1.roundState.Height(), cs1.roundState.Round() @@ -1592,7 +1589,7 @@ func TestState_PrevotePOLFromPreviousRound(t *testing.T) { incrementRound(vs2, vs3, vs4) round++ // Generate a new proposal block. - cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) + cs2 := newState(ctx, t, cs1.state, vs2, kvstore.NewApplication()) cs2.roundState.SetValidRound(1) propR1, propBlockR1 := decideProposal(ctx, t, cs2, vs2, vs2.Height, round) diff --git a/sei-tendermint/internal/consensus/ticker.go b/sei-tendermint/internal/consensus/ticker.go index cbee307e2a..0a1df6fb19 100644 --- a/sei-tendermint/internal/consensus/ticker.go +++ b/sei-tendermint/internal/consensus/ticker.go @@ -3,7 +3,6 @@ package consensus import ( "context" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" ) @@ -23,15 +22,13 @@ type TimeoutTicker interface { // Timeouts are scheduled along the tickChan, // and fired on the tockChan. type timeoutTicker struct { - logger log.Logger tick utils.Mutex[*utils.AtomicSend[utils.Option[timeoutInfo]]] // for scheduling timeouts tockChan chan timeoutInfo // for notifying about them } // NewTimeoutTicker returns a new TimeoutTicker. -func NewTimeoutTicker(logger log.Logger) TimeoutTicker { +func NewTimeoutTicker() TimeoutTicker { tt := &timeoutTicker{ - logger: logger, tick: utils.NewMutex(utils.Alloc(utils.NewAtomicSend(utils.None[timeoutInfo]()))), tockChan: make(chan timeoutInfo), } @@ -74,11 +71,11 @@ func (t *timeoutTicker) Run(ctx context.Context) error { if !ok { return nil } - t.logger.Debug("Internal state machine timeout scheduled", "duration", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) + logger.Debug("Internal state machine timeout scheduled", "duration", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) if err := utils.Sleep(ctx, ti.Duration); err != nil { return err } - t.logger.Debug("Internal state machine timeout elapsed ", "duration", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) + logger.Debug("Internal state machine timeout elapsed ", "duration", ti.Duration, "height", ti.Height, "round", ti.Round, "step", ti.Step) tockSend.Store(utils.Some(ti)) return nil }) diff --git a/sei-tendermint/internal/consensus/ticker_test.go b/sei-tendermint/internal/consensus/ticker_test.go index 6174080581..b244642d11 100644 --- a/sei-tendermint/internal/consensus/ticker_test.go +++ b/sei-tendermint/internal/consensus/ticker_test.go @@ -3,17 +3,16 @@ package consensus import ( "context" "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" "testing" "time" + + "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" + "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" ) func TestTicker(t *testing.T) { err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - logger, _ := log.NewDefaultLogger("plain", "debug") - ticker := NewTimeoutTicker(logger) + ticker := NewTimeoutTicker() ch := ticker.Chan() s.SpawnBg(func() error { err := ticker.Run(ctx) diff --git a/sei-tendermint/internal/eventbus/event_bus.go b/sei-tendermint/internal/eventbus/event_bus.go index e596d7bdc7..90a0d327ad 100644 --- a/sei-tendermint/internal/eventbus/event_bus.go +++ b/sei-tendermint/internal/eventbus/event_bus.go @@ -8,7 +8,6 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmpubsub "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" tmquery "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -30,11 +29,10 @@ type EventBus struct { } // NewDefault returns a new event bus with default options. -func NewDefault(l log.Logger) *EventBus { - logger := l.With("module", "eventbus") - pubsub := tmpubsub.NewServer(l, tmpubsub.BufferCapacity(DefaultBufferCapacity)) +func NewDefault() *EventBus { + pubsub := tmpubsub.NewServer(tmpubsub.BufferCapacity(DefaultBufferCapacity)) b := &EventBus{pubsub: pubsub} - b.BaseService = *service.NewBaseService(logger, "EventBus", b) + b.BaseService = *service.NewBaseService("EventBus", b) return b } diff --git a/sei-tendermint/internal/eventbus/event_bus_test.go b/sei-tendermint/internal/eventbus/event_bus_test.go index 1f9c51d412..e729bca2e3 100644 --- a/sei-tendermint/internal/eventbus/event_bus_test.go +++ b/sei-tendermint/internal/eventbus/event_bus_test.go @@ -14,14 +14,13 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" tmpubsub "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" tmquery "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) func TestEventBusPublishEventTx(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -73,7 +72,7 @@ func TestEventBusPublishEventTx(t *testing.T) { func TestEventBusPublishEventNewBlock(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -126,7 +125,7 @@ func TestEventBusPublishEventNewBlock(t *testing.T) { func TestEventBusPublishEventTxDuplicateKeys(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -243,7 +242,7 @@ func TestEventBusPublishEventTxDuplicateKeys(t *testing.T) { func TestEventBusPublishEventNewBlockHeader(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -292,7 +291,7 @@ func TestEventBusPublishEventNewBlockHeader(t *testing.T) { func TestEventBusPublishEventEvidenceValidated(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -333,7 +332,7 @@ func TestEventBusPublishEventEvidenceValidated(t *testing.T) { func TestEventBusPublishEventNewEvidence(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -374,7 +373,7 @@ func TestEventBusPublishEventNewEvidence(t *testing.T) { func TestEventBusPublish(t *testing.T) { ctx := t.Context() - eventBus := eventbus.NewDefault(log.NewNopLogger()) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) @@ -457,7 +456,7 @@ func benchmarkEventBus(ctx context.Context, numClients int, randQueries bool, ra // for random* functions mrand.Seed(time.Now().Unix()) - eventBus := eventbus.NewDefault(log.NewNopLogger()) // set buffer capacity to 0 so we are not testing cache + eventBus := eventbus.NewDefault() // set buffer capacity to 0 so we are not testing cache err := eventBus.Start(ctx) if err != nil { b.Error(err) diff --git a/sei-tendermint/internal/evidence/pool.go b/sei-tendermint/internal/evidence/pool.go index 3dab138234..9a52c1ab20 100644 --- a/sei-tendermint/internal/evidence/pool.go +++ b/sei-tendermint/internal/evidence/pool.go @@ -12,12 +12,12 @@ import ( "github.com/gogo/protobuf/proto" gogotypes "github.com/gogo/protobuf/types" "github.com/google/orderedcode" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" clist "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/clist" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -38,10 +38,10 @@ const ( prefixPending = int64(10) ) +var logger = seilog.NewLogger("tendermint", "internal", "evidence") + // Pool maintains a pool of valid evidence to be broadcasted and committed type Pool struct { - logger log.Logger - evidenceStore dbm.DB evidenceList *clist.CList // concurrent linked-list of evidence evidenceSize uint32 // amount of pending evidence @@ -72,11 +72,10 @@ type Pool struct { // NewPool creates an evidence pool. If using an existing evidence store, // it will add all pending evidence to the concurrent list. -func NewPool(logger log.Logger, evidenceDB dbm.DB, stateStore sm.Store, blockStore BlockStore, metrics *Metrics, eventBus *eventbus.EventBus) *Pool { +func NewPool(evidenceDB dbm.DB, stateStore sm.Store, blockStore BlockStore, metrics *Metrics, eventBus *eventbus.EventBus) *Pool { return &Pool{ blockStore: blockStore, stateDB: stateStore, - logger: logger, evidenceStore: evidenceDB, evidenceList: clist.New(), consensusBuffer: make([]duplicateVoteSet, 0), @@ -94,7 +93,7 @@ func (evpool *Pool) PendingEvidence(maxBytes int64) ([]types.Evidence, int64) { evidence, size, err := evpool.listEvidence(prefixPending, maxBytes) if err != nil { - evpool.logger.Error("failed to retrieve pending evidence", "err", err) + logger.Error("failed to retrieve pending evidence", "err", err) } return evidence, size @@ -117,7 +116,7 @@ func (evpool *Pool) Update(ctx context.Context, state sm.State, ev types.Evidenc )) } - evpool.logger.Debug( + logger.Debug( "updating evidence pool", "last_block_height", state.LastBlockHeight, "last_block_time", state.LastBlockTime, @@ -142,11 +141,11 @@ func (evpool *Pool) Update(ctx context.Context, state sm.State, ev types.Evidenc // AddEvidence checks the evidence is valid and adds it to the pool. func (evpool *Pool) AddEvidence(ctx context.Context, ev types.Evidence) error { - evpool.logger.Debug("attempting to add evidence", "evidence", ev) + logger.Debug("attempting to add evidence", "evidence", ev) // We have already verified this piece of evidence - no need to do it again if evpool.isPending(ev) { - evpool.logger.Debug("evidence already pending; ignoring", "evidence", ev) + logger.Debug("evidence already pending; ignoring", "evidence", ev) return nil } @@ -154,7 +153,7 @@ func (evpool *Pool) AddEvidence(ctx context.Context, ev types.Evidence) error { if evpool.isCommitted(ev) { // This can happen if the peer that sent us the evidence is behind so we // shouldn't punish the peer. - evpool.logger.Debug("evidence was already committed; ignoring", "evidence", ev) + logger.Debug("evidence was already committed; ignoring", "evidence", ev) return nil } @@ -171,7 +170,7 @@ func (evpool *Pool) AddEvidence(ctx context.Context, ev types.Evidence) error { // 3) Add evidence to clist. evpool.evidenceList.PushBack(ev) - evpool.logger.Info("verified new evidence of byzantine behavior", "evidence", ev) + logger.Info("verified new evidence of byzantine behavior", "evidence", ev) return nil } @@ -219,10 +218,10 @@ func (evpool *Pool) CheckEvidence(ctx context.Context, evList types.EvidenceList if err := evpool.addPendingEvidence(ctx, ev); err != nil { // Something went wrong with adding the evidence but we already know it is valid // hence we log an error and continue - evpool.logger.Error("failed to add evidence to pending list", "err", err, "evidence", ev) + logger.Error("failed to add evidence to pending list", "err", err, "evidence", ev) } - evpool.logger.Info("check evidence: verified evidence of byzantine behavior", "evidence", ev) + logger.Info("check evidence: verified evidence of byzantine behavior", "evidence", ev) } // check for duplicate evidence. We cache hashes so we don't have to work them out again. @@ -307,7 +306,7 @@ func (evpool *Pool) isCommitted(evidence types.Evidence) bool { key := keyCommitted(evidence) ok, err := evpool.evidenceStore.Has(key) if err != nil { - evpool.logger.Error("failed to find committed evidence", "err", err) + logger.Error("failed to find committed evidence", "err", err) } return ok } @@ -317,7 +316,7 @@ func (evpool *Pool) isPending(evidence types.Evidence) bool { key := keyPending(evidence) ok, err := evpool.evidenceStore.Has(key) if err != nil { - evpool.logger.Error("failed to find pending evidence", "err", err) + logger.Error("failed to find pending evidence", "err", err) } return ok } @@ -345,7 +344,7 @@ func (evpool *Pool) addPendingEvidence(ctx context.Context, ev types.Evidence) e // This should normally never be true if evpool.eventBus == nil { - evpool.logger.Debug("event bus is not configured") + logger.Debug("event bus is not configured") return nil } @@ -365,7 +364,7 @@ func (evpool *Pool) markEvidenceAsCommitted(evidence types.EvidenceList, height for _, ev := range evidence { if evpool.isPending(ev) { if err := batch.Delete(keyPending(ev)); err != nil { - evpool.logger.Error("failed to batch delete pending evidence", "err", err) + logger.Error("failed to batch delete pending evidence", "err", err) } blockEvidenceMap[evMapKey(ev)] = struct{}{} } @@ -377,15 +376,15 @@ func (evpool *Pool) markEvidenceAsCommitted(evidence types.EvidenceList, height h := gogotypes.Int64Value{Value: height} evBytes, err := proto.Marshal(&h) if err != nil { - evpool.logger.Error("failed to marshal committed evidence", "key(height/hash)", key, "err", err) + logger.Error("failed to marshal committed evidence", "key(height/hash)", key, "err", err) continue } if err := evpool.evidenceStore.Set(key, evBytes); err != nil { - evpool.logger.Error("failed to save committed evidence", "key(height/hash)", key, "err", err) + logger.Error("failed to save committed evidence", "key(height/hash)", key, "err", err) } - evpool.logger.Debug("marked evidence as committed", "evidence", ev) + logger.Debug("marked evidence as committed", "evidence", ev) } // check if we need to remove any pending evidence @@ -395,7 +394,7 @@ func (evpool *Pool) markEvidenceAsCommitted(evidence types.EvidenceList, height // remove committed evidence from pending bucket if err := batch.WriteSync(); err != nil { - evpool.logger.Error("failed to batch delete pending evidence", "err", err) + logger.Error("failed to batch delete pending evidence", "err", err) return } @@ -469,7 +468,7 @@ func (evpool *Pool) removeExpiredPendingEvidence() (int64, time.Time) { return height, time } - evpool.logger.Debug("removing expired evidence", + logger.Debug("removing expired evidence", "height", evpool.State().LastBlockHeight, "time", evpool.State().LastBlockTime, "expired evidence", len(blockEvidenceMap), @@ -477,7 +476,7 @@ func (evpool *Pool) removeExpiredPendingEvidence() (int64, time.Time) { // remove expired evidence from pending bucket if err := batch.WriteSync(); err != nil { - evpool.logger.Error("failed to batch delete pending evidence", "err", err) + logger.Error("failed to batch delete pending evidence", "err", err) return evpool.State().LastBlockHeight, evpool.State().LastBlockTime } @@ -493,7 +492,7 @@ func (evpool *Pool) batchExpiredPendingEvidence(batch dbm.Batch) (int64, time.Ti blockEvidenceMap := make(map[string]struct{}) iter, err := dbm.IteratePrefix(evpool.evidenceStore, prefixToBytes(prefixPending)) if err != nil { - evpool.logger.Error("failed to iterate over pending evidence", "err", err) + logger.Error("failed to iterate over pending evidence", "err", err) return evpool.State().LastBlockHeight, evpool.State().LastBlockTime, blockEvidenceMap } defer func() { _ = iter.Close() }() @@ -501,7 +500,7 @@ func (evpool *Pool) batchExpiredPendingEvidence(batch dbm.Batch) (int64, time.Ti for ; iter.Valid(); iter.Next() { ev, err := bytesToEv(iter.Value()) if err != nil { - evpool.logger.Error("failed to transition evidence from protobuf", "err", err, "ev", ev) + logger.Error("failed to transition evidence from protobuf", "err", err, "ev", ev) continue } @@ -516,7 +515,7 @@ func (evpool *Pool) batchExpiredPendingEvidence(batch dbm.Batch) (int64, time.Ti // else add to the batch if err := batch.Delete(iter.Key()); err != nil { - evpool.logger.Error("failed to batch delete evidence", "err", err, "ev", ev) + logger.Error("failed to batch delete evidence", "err", err, "ev", ev) continue } @@ -573,13 +572,13 @@ func (evpool *Pool) processConsensusBuffer(ctx context.Context, state sm.State) case voteSet.VoteA.Height < state.LastBlockHeight: valSet, dbErr := evpool.stateDB.LoadValidators(voteSet.VoteA.Height) if dbErr != nil { - evpool.logger.Error("failed to load validator set for conflicting votes", + logger.Error("failed to load validator set for conflicting votes", "height", voteSet.VoteA.Height, "err", err) continue } blockMeta := evpool.blockStore.LoadBlockMeta(voteSet.VoteA.Height) if blockMeta == nil { - evpool.logger.Error("failed to load block time for conflicting votes", "height", voteSet.VoteA.Height) + logger.Error("failed to load block time for conflicting votes", "height", voteSet.VoteA.Height) continue } dve, err = types.NewDuplicateVoteEvidence( @@ -593,36 +592,36 @@ func (evpool *Pool) processConsensusBuffer(ctx context.Context, state sm.State) // evidence pool shouldn't expect to get votes from consensus of a height that is above the current // state. If this error is seen then perhaps consider keeping the votes in the buffer and retry // in following heights - evpool.logger.Error("inbound duplicate votes from consensus are of a greater height than current state", + logger.Error("inbound duplicate votes from consensus are of a greater height than current state", "duplicate vote height", voteSet.VoteA.Height, "state.LastBlockHeight", state.LastBlockHeight) continue } if err != nil { - evpool.logger.Error("error in generating evidence from votes", "err", err) + logger.Error("error in generating evidence from votes", "err", err) continue } // check if we already have this evidence if evpool.isPending(dve) { - evpool.logger.Debug("evidence already pending; ignoring", "evidence", dve) + logger.Debug("evidence already pending; ignoring", "evidence", dve) continue } // check that the evidence is not already committed on chain if evpool.isCommitted(dve) { - evpool.logger.Debug("evidence already committed; ignoring", "evidence", dve) + logger.Debug("evidence already committed; ignoring", "evidence", dve) continue } if err := evpool.addPendingEvidence(ctx, dve); err != nil { - evpool.logger.Error("failed to flush evidence from consensus buffer to pending list", "err", err) + logger.Error("failed to flush evidence from consensus buffer to pending list", "err", err) continue } evpool.evidenceList.PushBack(dve) - evpool.logger.Info("verified new evidence of byzantine behavior", "evidence", dve) + logger.Info("verified new evidence of byzantine behavior", "evidence", dve) } // reset consensus buffer evpool.consensusBuffer = make([]duplicateVoteSet, 0) diff --git a/sei-tendermint/internal/evidence/pool_test.go b/sei-tendermint/internal/evidence/pool_test.go index 37c5eab343..0a55e0d2f5 100644 --- a/sei-tendermint/internal/evidence/pool_test.go +++ b/sei-tendermint/internal/evidence/pool_test.go @@ -21,7 +21,6 @@ import ( sf "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/test/factory" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/version" @@ -71,11 +70,10 @@ func TestEvidencePoolBasic(t *testing.T) { stateStore.On("LoadValidators", mock.AnythingOfType("int64")).Return(valSet, nil) stateStore.On("Load").Return(createState(height+1, valSet), nil) - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) startPool(t, pool, stateStore) // evidence not seen yet: @@ -138,11 +136,10 @@ func TestAddExpiredEvidence(t *testing.T) { return &types.BlockMeta{Header: types.Header{Time: expiredEvidenceTime}} }) - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) startPool(t, pool, stateStore) testCases := []struct { @@ -401,11 +398,10 @@ func TestLightClientAttackEvidenceLifecycle(t *testing.T) { blockStore.On("LoadBlockCommit", height).Return(trusted.Commit) blockStore.On("LoadBlockCommit", commonHeight).Return(common.Commit) - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) hash := ev.Hash() @@ -456,12 +452,11 @@ func TestRecoverPendingEvidence(t *testing.T) { blockStore, err := initializeBlockStore(dbm.NewMemDB(), state, valAddress) require.NoError(t, err) - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) // create previous pool and populate it - pool := evidence.NewPool(logger, evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) startPool(t, pool, stateStore) goodEvidence, err := types.NewMockDuplicateVoteEvidenceWithValidator( @@ -504,7 +499,7 @@ func TestRecoverPendingEvidence(t *testing.T) { }, }, nil) - newPool := evidence.NewPool(logger, evidenceDB, newStateStore, blockStore, evidence.NopMetrics(), nil) + newPool := evidence.NewPool(evidenceDB, newStateStore, blockStore, evidence.NopMetrics(), nil) startPool(t, newPool, newStateStore) evList, _ := newPool.PendingEvidence(defaultEvidenceMaxBytes) require.Equal(t, 1, len(evList)) @@ -607,12 +602,10 @@ func defaultTestPool(ctx context.Context, t *testing.T, height int64) (*evidence blockStore, err := initializeBlockStore(dbm.NewMemDB(), state, valAddress) require.NoError(t, err) - logger := log.NewNopLogger() - - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), eventBus) startPool(t, pool, stateStore) return pool, val, eventBus } diff --git a/sei-tendermint/internal/evidence/reactor.go b/sei-tendermint/internal/evidence/reactor.go index e8835fbf37..4a68cbff0e 100644 --- a/sei-tendermint/internal/evidence/reactor.go +++ b/sei-tendermint/internal/evidence/reactor.go @@ -9,7 +9,6 @@ import ( clist "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/clist" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" pb "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -45,7 +44,6 @@ func GetChannelDescriptor() p2p.ChannelDescriptor[*pb.Evidence] { // Reactor handles evpool evidence broadcasting amongst peers. type Reactor struct { service.BaseService - logger log.Logger evpool *Pool router *p2p.Router @@ -60,7 +58,6 @@ type Reactor struct { // service.Service interface. It accepts a p2p Channel dedicated for handling // envelopes with EvidenceList messages. func NewReactor( - logger log.Logger, router *p2p.Router, evpool *Pool, ) (*Reactor, error) { @@ -69,14 +66,13 @@ func NewReactor( return nil, fmt.Errorf("router.OpenChannel(): %w", err) } r := &Reactor{ - logger: logger, evpool: evpool, router: router, channel: channel, peerRoutines: make(map[types.NodeID]context.CancelFunc), } - r.BaseService = *service.NewBaseService(logger, "Evidence", r) + r.BaseService = *service.NewBaseService("Evidence", r) return r, nil } @@ -103,7 +99,7 @@ func (r *Reactor) handleEvidenceMessage(ctx context.Context, m p2p.RecvMsg[*pb.E defer func() { if e := recover(); e != nil { err = fmt.Errorf("panic in processing message: %v", e) - r.logger.Error( + logger.Error( "recovering from processing message panic", "err", err, "stack", string(debug.Stack()), @@ -154,7 +150,7 @@ func (r *Reactor) processEvidenceCh(ctx context.Context) error { // REF: https://github.com/tendermint/tendermint/issues/4727 func (r *Reactor) processPeerUpdate(ctx context.Context, peerUpdate p2p.PeerUpdate) { evidenceCh := r.channel - r.logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) + logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) r.mtx.Lock() defer r.mtx.Unlock() @@ -225,7 +221,7 @@ func (r *Reactor) broadcastEvidenceLoop(ctx context.Context, peerID types.NodeID r.mtx.Unlock() if e := recover(); e != nil { - r.logger.Error( + logger.Error( "recovering from broadcasting evidence loop", "err", e, "stack", string(debug.Stack()), @@ -264,7 +260,7 @@ func (r *Reactor) broadcastEvidenceLoop(ctx context.Context, peerID types.NodeID // removed frequently from the broadcasting peer. evidenceCh.Send(evProto, peerID) - r.logger.Debug("gossiped evidence to peer", "evidence", ev, "peer", peerID) + logger.Debug("gossiped evidence to peer", "evidence", ev, "peer", peerID) select { case <-timer.C: diff --git a/sei-tendermint/internal/evidence/reactor_test.go b/sei-tendermint/internal/evidence/reactor_test.go index 0f195052f8..1b761c70f2 100644 --- a/sei-tendermint/internal/evidence/reactor_test.go +++ b/sei-tendermint/internal/evidence/reactor_test.go @@ -20,7 +20,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/evidence/mocks" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -31,7 +30,6 @@ var ( type reactorTestSuite struct { network *p2p.TestNetwork - logger log.Logger reactors map[types.NodeID]*evidence.Reactor pools map[types.NodeID]*evidence.Pool nodes []*p2p.TestNode @@ -43,7 +41,6 @@ func setup(ctx context.Context, t *testing.T, stateStores []sm.Store) *reactorTe numStateStores := len(stateStores) rts := &reactorTestSuite{ numStateStores: numStateStores, - logger: log.NewNopLogger().With("testCase", t.Name()), network: p2p.MakeTestNetwork(t, p2p.TestNetworkOptions{NumNodes: numStateStores}), reactors: make(map[types.NodeID]*evidence.Reactor, numStateStores), pools: make(map[types.NodeID]*evidence.Pool, numStateStores), @@ -52,7 +49,6 @@ func setup(ctx context.Context, t *testing.T, stateStores []sm.Store) *reactorTe for idx, node := range rts.network.Nodes() { nodeID := node.NodeID - logger := rts.logger.With("validator", idx) evidenceDB := dbm.NewMemDB() blockStore := &mocks.BlockStore{} state, _ := stateStores[idx].Load() @@ -62,15 +58,15 @@ func setup(ctx context.Context, t *testing.T, stateStores []sm.Store) *reactorTe } return nil }) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) - rts.pools[nodeID] = evidence.NewPool(logger, evidenceDB, stateStores[idx], blockStore, evidence.NopMetrics(), eventBus) + rts.pools[nodeID] = evidence.NewPool(evidenceDB, stateStores[idx], blockStore, evidence.NopMetrics(), eventBus) startPool(t, rts.pools[nodeID], stateStores[idx]) rts.nodes = append(rts.nodes, node) - reactor, err := evidence.NewReactor(logger, node.Router, rts.pools[nodeID]) + reactor, err := evidence.NewReactor(node.Router, rts.pools[nodeID]) if err != nil { t.Fatalf("evidence.NewReactor(): %v", err) } diff --git a/sei-tendermint/internal/evidence/verify.go b/sei-tendermint/internal/evidence/verify.go index cd7d57ad2c..2f13a710e2 100644 --- a/sei-tendermint/internal/evidence/verify.go +++ b/sei-tendermint/internal/evidence/verify.go @@ -76,7 +76,7 @@ func (evpool *Pool) verify(ctx context.Context, evidence types.Evidence) error { if err := ev.ValidateABCI(val, valSet, evTime); err != nil { ev.GenerateABCI(val, valSet, evTime) if addErr := evpool.addPendingEvidence(ctx, ev); addErr != nil { - evpool.logger.Error("adding pending duplicate vote evidence failed", "err", addErr) + logger.Error("adding pending duplicate vote evidence failed", "err", addErr) } return err } @@ -136,7 +136,7 @@ func (evpool *Pool) verify(ctx context.Context, evidence types.Evidence) error { if err := ev.ValidateABCI(commonVals, trustedHeader, evTime); err != nil { ev.GenerateABCI(commonVals, trustedHeader, evTime) if addErr := evpool.addPendingEvidence(ctx, ev); addErr != nil { - evpool.logger.Error("adding pending light client attack evidence failed", "err", addErr) + logger.Error("adding pending light client attack evidence failed", "err", addErr) } return err diff --git a/sei-tendermint/internal/evidence/verify_test.go b/sei-tendermint/internal/evidence/verify_test.go index 8e9014121c..00b6ec5a7b 100644 --- a/sei-tendermint/internal/evidence/verify_test.go +++ b/sei-tendermint/internal/evidence/verify_test.go @@ -17,7 +17,6 @@ import ( sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" smmocks "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/mocks" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -75,7 +74,6 @@ func TestVerify_LunaticAttackAgainstState(t *testing.T) { byzVals = 4 ) ctx := t.Context() - logger := log.NewNopLogger() attackTime := defaultEvidenceTime.Add(1 * time.Hour) // create valid lunatic evidence @@ -96,7 +94,7 @@ func TestVerify_LunaticAttackAgainstState(t *testing.T) { blockStore.On("LoadBlockMeta", height).Return(&types.BlockMeta{Header: *trusted.Header}) blockStore.On("LoadBlockCommit", commonHeight).Return(common.Commit) blockStore.On("LoadBlockCommit", height).Return(trusted.Commit) - pool := evidence.NewPool(log.NewNopLogger(), dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) evList := types.EvidenceList{ev} // check that the evidence pool correctly verifies the evidence @@ -116,15 +114,15 @@ func TestVerify_LunaticAttackAgainstState(t *testing.T) { // duplicate evidence should be rejected evList = types.EvidenceList{ev, ev} - pool = evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) + pool = evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) assert.Error(t, pool.CheckEvidence(ctx, evList)) // If evidence is submitted with an altered timestamp it should return an error - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) ev.Timestamp = defaultEvidenceTime.Add(1 * time.Minute) - pool = evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool = evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) err := pool.AddEvidence(ctx, ev) assert.Error(t, err) @@ -132,7 +130,7 @@ func TestVerify_LunaticAttackAgainstState(t *testing.T) { // Evidence submitted with a different validator power should fail ev.TotalVotingPower = 1 - pool = evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) + pool = evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), nil) err = pool.AddEvidence(ctx, ev) assert.Error(t, err) ev.TotalVotingPower = common.ValidatorSet.TotalVotingPower() @@ -150,8 +148,6 @@ func TestVerify_ForwardLunaticAttack(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // create a forward lunatic attack ev, trusted, common := makeLunaticEvidence(ctx, t, attackHeight, commonHeight, totalVals, byzVals, totalVals-byzVals, defaultEvidenceTime, attackTime) @@ -178,10 +174,10 @@ func TestVerify_ForwardLunaticAttack(t *testing.T) { blockStore.On("LoadBlockCommit", nodeHeight).Return(trusted.Commit) blockStore.On("Height").Return(nodeHeight) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) // check that the evidence pool correctly verifies the evidence assert.NoError(t, pool.CheckEvidence(ctx, types.EvidenceList{ev})) @@ -198,15 +194,13 @@ func TestVerify_ForwardLunaticAttack(t *testing.T) { oldBlockStore.On("Height").Return(nodeHeight) require.Equal(t, defaultEvidenceTime, oldBlockStore.LoadBlockMeta(nodeHeight).Header.Time) - pool = evidence.NewPool(logger, dbm.NewMemDB(), stateStore, oldBlockStore, evidence.NopMetrics(), nil) + pool = evidence.NewPool(dbm.NewMemDB(), stateStore, oldBlockStore, evidence.NopMetrics(), nil) assert.Error(t, pool.CheckEvidence(ctx, types.EvidenceList{ev})) } func TestVerifyLightClientAttack_Equivocation(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - conflictingVals, conflictingPrivVals := factory.ValidatorSet(ctx, 5, 10) conflictingHeader := factory.MakeHeader(&types.Header{ @@ -288,10 +282,10 @@ func TestVerifyLightClientAttack_Equivocation(t *testing.T) { blockStore.On("LoadBlockMeta", int64(10)).Return(&types.BlockMeta{Header: *trustedHeader}) blockStore.On("LoadBlockCommit", int64(10)).Return(trustedCommit) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) evList := types.EvidenceList{ev} err = pool.CheckEvidence(ctx, evList) @@ -304,8 +298,6 @@ func TestVerifyLightClientAttack_Equivocation(t *testing.T) { func TestVerifyLightClientAttack_Amnesia(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - var height int64 = 10 conflictingVals, conflictingPrivVals := factory.ValidatorSet(ctx, 5, 10) @@ -379,10 +371,10 @@ func TestVerifyLightClientAttack_Amnesia(t *testing.T) { blockStore.On("LoadBlockMeta", int64(10)).Return(&types.BlockMeta{Header: *trustedHeader}) blockStore.On("LoadBlockCommit", int64(10)).Return(trustedCommit) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) evList := types.EvidenceList{ev} err = pool.CheckEvidence(ctx, evList) @@ -401,7 +393,6 @@ type voteData struct { func TestVerifyDuplicateVoteEvidence(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() val := types.NewMockPV() val2 := types.NewMockPV() valSet := types.NewValidatorSet([]*types.Validator{val.ExtractIntoValidator(ctx, 1)}) @@ -479,10 +470,10 @@ func TestVerifyDuplicateVoteEvidence(t *testing.T) { blockStore := &mocks.BlockStore{} blockStore.On("LoadBlockMeta", int64(10)).Return(&types.BlockMeta{Header: types.Header{Time: defaultEvidenceTime}}) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - pool := evidence.NewPool(logger, dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) + pool := evidence.NewPool(dbm.NewMemDB(), stateStore, blockStore, evidence.NopMetrics(), eventBus) startPool(t, pool, stateStore) evList := types.EvidenceList{goodEv} diff --git a/sei-tendermint/internal/inspect/inspect.go b/sei-tendermint/internal/inspect/inspect.go index 136e7bac65..e04c31862f 100644 --- a/sei-tendermint/internal/inspect/inspect.go +++ b/sei-tendermint/internal/inspect/inspect.go @@ -15,13 +15,15 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmstrings "github.com/sei-protocol/sei-chain/sei-tendermint/libs/strings" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" "golang.org/x/sync/errgroup" ) +var logger = seilog.NewLogger("tendermint", "internal", "inspect") + // Inspector manages an RPC service that exports methods to debug a failed node. // After a node shuts down due to a consensus failure, it will no longer start // up its state cannot easily be inspected. An Inspector value provides a similar interface @@ -35,31 +37,28 @@ type Inspector struct { indexerService *indexer.Service eventBus *eventbus.EventBus - logger log.Logger } // New returns an Inspector that serves RPC on the specified BlockStore and StateStore. // The Inspector type does not modify the state or block stores. // The sinks are used to enable block and transaction querying via the RPC server. // The caller is responsible for starting and stopping the Inspector service. -func New(cfg *config.RPCConfig, bs state.BlockStore, ss state.Store, es []indexer.EventSink, logger log.Logger) *Inspector { - eb := eventbus.NewDefault(logger.With("module", "events")) +func New(cfg *config.RPCConfig, bs state.BlockStore, ss state.Store, es []indexer.EventSink) *Inspector { + eb := eventbus.NewDefault() return &Inspector{ - routes: rpc.Routes(*cfg, ss, bs, es, logger), + routes: rpc.Routes(*cfg, ss, bs, es), config: cfg, - logger: logger, eventBus: eb, indexerService: indexer.NewService(indexer.ServiceArgs{ Sinks: es, EventBus: eb, - Logger: logger.With("module", "txindex"), }), } } // NewFromConfig constructs an Inspector using the values defined in the passed in config. -func NewFromConfig(logger log.Logger, cfg *config.Config) (*Inspector, error) { +func NewFromConfig(cfg *config.Config) (*Inspector, error) { bsDB, err := config.DefaultDBProvider(&config.DBContext{ID: "blockstore", Config: cfg}) if err != nil { return nil, err @@ -78,7 +77,7 @@ func NewFromConfig(logger log.Logger, cfg *config.Config) (*Inspector, error) { return nil, err } ss := state.NewStore(sDB) - return New(cfg.RPC, bs, ss, sinks, logger), nil + return New(cfg.RPC, bs, ss, sinks), nil } // Run starts the Inspector servers and blocks until the servers shut down. The passed @@ -96,16 +95,15 @@ func (ins *Inspector) Run(ctx context.Context) error { } defer ins.indexerService.Wait() - return startRPCServers(ctx, ins.config, ins.logger, ins.routes) + return startRPCServers(ctx, ins.config, ins.routes) } -func startRPCServers(ctx context.Context, cfg *config.RPCConfig, logger log.Logger, routes rpccore.RoutesMap) error { +func startRPCServers(ctx context.Context, cfg *config.RPCConfig, routes rpccore.RoutesMap) error { g, tctx := errgroup.WithContext(ctx) listenAddrs := tmstrings.SplitAndTrimEmpty(cfg.ListenAddress, ",", " ") - rh := rpc.Handler(cfg, routes, logger) + rh := rpc.Handler(cfg, routes) for _, listenerAddr := range listenAddrs { server := rpc.Server{ - Logger: logger, Config: cfg, Handler: rh, Addr: listenerAddr, diff --git a/sei-tendermint/internal/inspect/inspect_test.go b/sei-tendermint/internal/inspect/inspect_test.go index e82a1b094c..454275a73a 100644 --- a/sei-tendermint/internal/inspect/inspect_test.go +++ b/sei-tendermint/internal/inspect/inspect_test.go @@ -22,7 +22,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" indexermocks "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/mocks" statemocks "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/mocks" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" httpclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -30,12 +29,10 @@ import ( func TestInspectConstructor(t *testing.T) { cfg, err := config.ResetTestRoot(t.TempDir(), "test") require.NoError(t, err) - testLogger := log.NewNopLogger() t.Cleanup(leaktest.Check(t)) defer func() { _ = os.RemoveAll(cfg.RootDir) }() t.Run("from config", func(t *testing.T) { - logger := testLogger.With(t.Name()) - d, err := inspect.NewFromConfig(logger, cfg) + d, err := inspect.NewFromConfig(cfg) require.NoError(t, err) require.NotNil(t, d) }) @@ -46,12 +43,10 @@ func TestInspectRun(t *testing.T) { cfg, err := config.ResetTestRoot(t.TempDir(), "test") require.NoError(t, err) - testLogger := log.NewNopLogger() t.Cleanup(leaktest.Check(t)) defer func() { _ = os.RemoveAll(cfg.RootDir) }() t.Run("from config", func(t *testing.T) { - logger := testLogger.With(t.Name()) - d, err := inspect.NewFromConfig(logger, cfg) + d, err := inspect.NewFromConfig(cfg) require.NoError(t, err) ctx, cancel := context.WithTimeout(t.Context(), 5*time.Second) stoppedWG := &sync.WaitGroup{} @@ -84,8 +79,7 @@ func TestBlock(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} wg.Add(1) @@ -131,8 +125,7 @@ func TestTxSearch(t *testing.T) { Return([]*abcitypes.TxResultV2{testTxResult}, nil) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} wg.Add(1) @@ -179,8 +172,7 @@ func TestTx(t *testing.T) { }, nil) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} wg.Add(1) @@ -228,8 +220,7 @@ func TestConsensusParams(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -280,8 +271,7 @@ func TestBlockResults(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -329,8 +319,7 @@ func TestCommit(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -384,8 +373,7 @@ func TestBlockByHash(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -438,8 +426,7 @@ func TestBlockchain(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -492,8 +479,7 @@ func TestValidators(t *testing.T) { eventSinkMock.On("Type").Return(indexer.EventSinkType("Mock")) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} @@ -552,8 +538,7 @@ func TestBlockSearch(t *testing.T) { mock.MatchedBy(func(q *query.Query) bool { return testQuery == q.String() })). Return([]int64{testHeight}, nil) rpcConfig := config.TestRPCConfig() - l := log.NewNopLogger() - d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}) ctx := t.Context() wg := &sync.WaitGroup{} diff --git a/sei-tendermint/internal/inspect/rpc/rpc.go b/sei-tendermint/internal/inspect/rpc/rpc.go index 4678df39ce..5d47620b23 100644 --- a/sei-tendermint/internal/inspect/rpc/rpc.go +++ b/sei-tendermint/internal/inspect/rpc/rpc.go @@ -6,21 +6,22 @@ import ( "time" "github.com/rs/cors" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/rpc/core" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" ) +var logger = seilog.NewLogger("tendermint", "internal", "inspect", "rpc") + // Server defines parameters for running an Inspector rpc server. type Server struct { Addr string // TCP address to listen on, ":http" if empty Handler http.Handler - Logger log.Logger Config *config.RPCConfig } @@ -29,13 +30,12 @@ type eventBusUnsubscriber interface { } // Routes returns the set of routes used by the Inspector server. -func Routes(cfg config.RPCConfig, s state.Store, bs state.BlockStore, es []indexer.EventSink, logger log.Logger) core.RoutesMap { +func Routes(cfg config.RPCConfig, s state.Store, bs state.BlockStore, es []indexer.EventSink) core.RoutesMap { env := &core.Environment{ Config: cfg, EventSinks: es, StateStore: s, BlockStore: bs, - Logger: logger, } return core.RoutesMap{ "blockchain": server.NewRPCFunc(env.BlockchainInfo), @@ -54,24 +54,23 @@ func Routes(cfg config.RPCConfig, s state.Store, bs state.BlockStore, es []index // Handler returns the http.Handler configured for use with an Inspector server. Handler // registers the routes on the http.Handler and also registers the websocket handler // and the CORS handler if specified by the configuration options. -func Handler(rpcConfig *config.RPCConfig, routes core.RoutesMap, logger log.Logger) http.Handler { +func Handler(rpcConfig *config.RPCConfig, routes core.RoutesMap) http.Handler { mux := http.NewServeMux() - wmLogger := logger.With("protocol", "websocket") var eventBus eventBusUnsubscriber websocketDisconnectFn := func(remoteAddr string) { err := eventBus.UnsubscribeAll(context.Background(), remoteAddr) if err != nil && err != pubsub.ErrSubscriptionNotFound { - wmLogger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err) + logger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err) } } - wm := server.NewWebsocketManager(logger, routes, + wm := server.NewWebsocketManager(routes, server.OnDisconnect(websocketDisconnectFn), server.ReadLimit(rpcConfig.MaxBodyBytes)) mux.HandleFunc("/websocket", wm.WebsocketHandler) - server.RegisterRPCFuncs(mux, routes, logger) + server.RegisterRPCFuncs(mux, routes) var rootHandler http.Handler = mux if rpcConfig.IsCorsEnabled() { rootHandler = addCORSHandler(rpcConfig, mux) @@ -101,7 +100,7 @@ func (srv *Server) ListenAndServe(ctx context.Context) error { _ = listener.Close() }() - return server.Serve(ctx, listener, srv.Handler, srv.Logger, serverRPCConfig(srv.Config)) + return server.Serve(ctx, listener, srv.Handler, serverRPCConfig(srv.Config)) } // ListenAndServeTLS listens on the address specified in srv.Addr. ListenAndServeTLS handles @@ -115,7 +114,7 @@ func (srv *Server) ListenAndServeTLS(ctx context.Context, certFile, keyFile stri <-ctx.Done() _ = listener.Close() }() - return server.ServeTLS(ctx, listener, srv.Handler, certFile, keyFile, srv.Logger, serverRPCConfig(srv.Config)) + return server.ServeTLS(ctx, listener, srv.Handler, certFile, keyFile, serverRPCConfig(srv.Config)) } func serverRPCConfig(r *config.RPCConfig) *server.Config { diff --git a/sei-tendermint/internal/mempool/mempool.go b/sei-tendermint/internal/mempool/mempool.go index 1ae6e86fcc..bc8cca672b 100644 --- a/sei-tendermint/internal/mempool/mempool.go +++ b/sei-tendermint/internal/mempool/mempool.go @@ -15,7 +15,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/clist" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/reservoir" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -48,7 +47,6 @@ type TxMempoolOption func(*TxMempool) // when a block proposer constructs a block and a thread-safe linked-list that // is used to gossip transactions to peers in a FIFO manner. type TxMempool struct { - logger log.Logger metrics *Metrics config *config.MempoolConfig proxyAppConn abci.Application @@ -125,7 +123,6 @@ type TxMempool struct { } func NewTxMempool( - logger log.Logger, cfg *config.MempoolConfig, proxyAppConn abci.Application, router router, @@ -133,7 +130,6 @@ func NewTxMempool( ) *TxMempool { txmp := &TxMempool{ - logger: logger, config: cfg, proxyAppConn: proxyAppConn, height: -1, @@ -315,7 +311,7 @@ func (txmp *TxMempool) CheckTx( hint, err := txmp.proxyAppConn.GetTxPriorityHint(ctx, &abci.RequestGetTxPriorityHintV2{Tx: tx}) if err != nil { txmp.metrics.observeCheckTxPriorityDistribution(0, true, txInfo.SenderNodeID, err) - txmp.logger.Error("failed to get tx priority hint", "err", err) + logger.Error("failed to get tx priority hint", "err", err) return err } txmp.metrics.observeCheckTxPriorityDistribution(hint.Priority, true, txInfo.SenderNodeID, nil) @@ -699,7 +695,7 @@ func (txmp *TxMempool) Update( // transactions are left. if txmp.Size() > 0 { if recheck { - txmp.logger.Debug( + logger.Debug( "executing re-CheckTx for all remaining transactions", "num_txs", txmp.Size(), "height", blockHeight, @@ -744,10 +740,10 @@ func (txmp *TxMempool) addNewTransaction(wtx *WrappedTx, res *abci.ResponseCheck if err != nil || res.Code != abci.CodeTypeOK { // ignore bad transactions - txmp.logger.Info( + logger.Info( "rejected bad transaction", "priority", wtx.priority, - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "peer_id", txInfo.SenderNodeID, "code", res.Code, "post_check_err", err, @@ -765,9 +761,9 @@ func (txmp *TxMempool) addNewTransaction(wtx *WrappedTx, res *abci.ResponseCheck if len(sender) > 0 { if wtx := txmp.txStore.GetTxBySender(sender); wtx != nil { - txmp.logger.Error( + logger.Error( "rejected incoming good transaction; tx already exists for sender", - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "sender", sender, ) txmp.metrics.RejectedTxs.Add(1) @@ -786,9 +782,9 @@ func (txmp *TxMempool) addNewTransaction(wtx *WrappedTx, res *abci.ResponseCheck // No room for the new incoming transaction so we just remove it from // the cache. wtx.removeHandler(true) - txmp.logger.Error( + logger.Error( "rejected incoming good transaction; mempool full", - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "err", err.Error(), ) txmp.metrics.RejectedTxs.Add(1) @@ -802,11 +798,11 @@ func (txmp *TxMempool) addNewTransaction(wtx *WrappedTx, res *abci.ResponseCheck // reCheckTx callback is being executed for the same transaction. for _, toEvict := range evictTxs { txmp.removeTx(toEvict, true, true, true) - txmp.logger.Debug( + logger.Debug( "evicted existing good transaction; mempool full", "old_tx", fmt.Sprintf("%X", toEvict.tx.Hash()), "old_priority", toEvict.priority, - "new_tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "new_tx", wtx.tx, "new_priority", wtx.priority, ) txmp.metrics.EvictedTxs.Add(1) @@ -826,10 +822,10 @@ func (txmp *TxMempool) addNewTransaction(wtx *WrappedTx, res *abci.ResponseCheck } if txmp.insertTx(wtx) { - txmp.logger.Debug( + logger.Debug( "inserted good transaction", "priority", wtx.priority, - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "height", txmp.height, "num_txs", txmp.NumTxsNotPending(), ) @@ -864,7 +860,7 @@ func (txmp *TxMempool) handleRecheckResult(tx types.Tx, res *abci.ResponseCheckT // the one we received from the ABCI application. for !bytes.Equal(tx, wtx.tx) { - txmp.logger.Debug( + logger.Debug( "re-CheckTx transaction mismatch", "got", wtx.tx.Hash(), "expected", tx.Key(), @@ -895,10 +891,10 @@ func (txmp *TxMempool) handleRecheckResult(tx types.Tx, res *abci.ResponseCheckT if res.Code == abci.CodeTypeOK && err == nil && !res.IsPendingTransaction { wtx.priority = res.Priority } else { - txmp.logger.Debug( + logger.Debug( "existing transaction no longer valid; failed re-CheckTx callback", "priority", wtx.priority, - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "err", err, "code", res.Code, ) @@ -919,7 +915,7 @@ func (txmp *TxMempool) handleRecheckResult(tx types.Tx, res *abci.ResponseCheckT } if txmp.recheckCursor == nil { - txmp.logger.Debug("finished rechecking transactions") + logger.Debug("finished rechecking transactions") if txmp.NumTxsNotPending() > 0 { txmp.notifyTxsAvailable() @@ -942,7 +938,7 @@ func (txmp *TxMempool) updateReCheckTxs(ctx context.Context) { if txmp.Size() == 0 { panic("attempted to update re-CheckTx txs when mempool is empty") } - txmp.logger.Debug( + logger.Debug( "executing re-CheckTx for all remaining transactions", "num_txs", txmp.Size(), "height", txmp.height, @@ -963,7 +959,7 @@ func (txmp *TxMempool) updateReCheckTxs(ctx context.Context) { }) if err != nil { // no need in retrying since the tx will be rechecked after the next block - txmp.logger.Debug("failed to execute CheckTx during recheck", "err", err, "hash", fmt.Sprintf("%x", wtx.tx.Hash())) + logger.Debug("failed to execute CheckTx during recheck", "err", err, "hash", wtx.tx.Hash()) continue } txmp.handleRecheckResult(wtx.tx, res) @@ -1069,7 +1065,7 @@ func (txmp *TxMempool) removeTx(wtx *WrappedTx, removeFromCache bool, shouldReen rtx := reenqueue.tx go func() { if err := txmp.CheckTx(context.Background(), rtx, nil, TxInfo{}); err != nil { - txmp.logger.Error(fmt.Sprintf("failed to reenqueue transaction %X due to %s", rtx.Hash(), err)) + logger.Error("failed to reenqueue transaction", "tx-hash", rtx.Hash(), "err", err) } }() } @@ -1088,10 +1084,10 @@ func (txmp *TxMempool) logExpiredTx(blockHeight int64, wtx *WrappedTx) { return } - txmp.logger.Info( + logger.Info( "transaction expired", "priority", wtx.priority, - "tx", fmt.Sprintf("%X", wtx.tx.Hash()), + "tx", wtx.tx, "address", wtx.evmAddress, "evm", wtx.isEVM, "nonce", wtx.evmNonce, @@ -1178,7 +1174,7 @@ func (txmp *TxMempool) handlePendingTransactions() { for _, tx := range accepted { atomic.AddInt64(&txmp.pendingSizeBytes, int64(-tx.tx.Size())) if err := txmp.addNewTransaction(tx.tx, tx.checkTxResponse.ResponseCheckTx, tx.txInfo); err != nil { - txmp.logger.Error(fmt.Sprintf("error adding pending transaction: %s", err)) + logger.Error("error adding pending transaction", "err", err) } } for _, tx := range rejected { diff --git a/sei-tendermint/internal/mempool/mempool_test.go b/sei-tendermint/internal/mempool/mempool_test.go index 438653bcd7..0db06ae268 100644 --- a/sei-tendermint/internal/mempool/mempool_test.go +++ b/sei-tendermint/internal/mempool/mempool_test.go @@ -20,7 +20,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/kvstore" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -175,8 +174,6 @@ func (app *application) GetTxPriorityHint(context.Context, *abci.RequestGetTxPri func setup(t testing.TB, app abci.Application, cacheSize int, options ...TxMempoolOption) *TxMempool { t.Helper() - logger := log.NewNopLogger() - cfg, err := config.ResetTestRoot(t.TempDir(), strings.ReplaceAll(t.Name(), "/", "|")) require.NoError(t, err) cfg.Mempool.CacheSize = cacheSize @@ -184,7 +181,7 @@ func setup(t testing.TB, app abci.Application, cacheSize int, options ...TxMempo t.Cleanup(func() { os.RemoveAll(cfg.RootDir) }) - return NewTxMempool(logger.With("test", t.Name()), cfg.Mempool, app, NewTestPeerEvictor(), options...) + return NewTxMempool(cfg.Mempool, app, NewTestPeerEvictor(), options...) } func checkTxs(ctx context.Context, t *testing.T, txmp *TxMempool, numTxs int, peerID uint16) []testTx { diff --git a/sei-tendermint/internal/mempool/reactor.go b/sei-tendermint/internal/mempool/reactor.go index fb32fc827a..7f07645fc4 100644 --- a/sei-tendermint/internal/mempool/reactor.go +++ b/sei-tendermint/internal/mempool/reactor.go @@ -10,13 +10,15 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/clist" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" pb "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/mempool" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) var ( + logger = seilog.NewLogger("tendermint", "internal", "mempool") + _ service.Service = (*Reactor)(nil) ) @@ -25,7 +27,6 @@ var ( // txs to the peers you received it from. type Reactor struct { service.BaseService - logger log.Logger cfg *config.MempoolConfig mempool *TxMempool @@ -46,7 +47,6 @@ type Reactor struct { // NewReactor returns a reference to a new reactor. func NewReactor( - logger log.Logger, cfg *config.MempoolConfig, txmp *TxMempool, router *p2p.Router, @@ -56,7 +56,6 @@ func NewReactor( return nil, fmt.Errorf("router.OpenChannel(): %w", err) } r := &Reactor{ - logger: logger, cfg: cfg, mempool: txmp, ids: NewMempoolIDs(), @@ -67,7 +66,7 @@ func NewReactor( readyToStart: make(chan struct{}, 1), } - r.BaseService = *service.NewBaseService(logger, "Mempool", r) + r.BaseService = *service.NewBaseService("Mempool", r) return r, nil } @@ -103,7 +102,7 @@ func GetChannelDescriptor(cfg *config.MempoolConfig) p2p.ChannelDescriptor[*pb.M // OnStop to ensure the outbound p2p Channels are closed. func (r *Reactor) OnStart(ctx context.Context) error { if !r.cfg.Broadcast { - r.logger.Info("tx broadcasting is disabled") + logger.Info("tx broadcasting is disabled") } if r.channel == nil { @@ -124,8 +123,6 @@ func (r *Reactor) OnStop() {} // empty set of txs are sent in an envelope or if we receive an unexpected // message type. func (r *Reactor) handleMempoolMessage(ctx context.Context, m p2p.RecvMsg[*pb.Message]) error { - logger := r.logger.With("peer", m.From) - switch msg := m.Message.Sum.(type) { case *pb.Message_Txs: if err := msg.Txs.Validate(); err != nil { @@ -139,7 +136,7 @@ func (r *Reactor) handleMempoolMessage(ctx context.Context, m p2p.RecvMsg[*pb.Me } for _, tx := range protoTxs { - if err := r.mempool.CheckTx(ctx, types.Tx(tx), nil, txInfo); err != nil { + if err := r.mempool.CheckTx(ctx, tx, nil, txInfo); err != nil { if errors.Is(err, types.ErrTxInCache) { // if the tx is in the cache, // then we've been gossiped a @@ -159,7 +156,8 @@ func (r *Reactor) handleMempoolMessage(ctx context.Context, m p2p.RecvMsg[*pb.Me } logger.Debug("checktx failed for tx", - "tx", fmt.Sprintf("%X", types.Tx(tx).Hash()), + "tx", types.Tx(tx), + "peer", m.From, "err", err) } } @@ -179,7 +177,7 @@ func (r *Reactor) handleMessage(ctx context.Context, m p2p.RecvMsg[*pb.Message]) if e := recover(); e != nil { r.observePanic(e) err = fmt.Errorf("panic in processing message: %v", e) - r.logger.Error( + logger.Error( "recovering from processing message panic", "err", err, "stack", string(debug.Stack()), @@ -187,7 +185,7 @@ func (r *Reactor) handleMessage(ctx context.Context, m p2p.RecvMsg[*pb.Message]) } }() - r.logger.Debug("received message", "peer", m.From) + logger.Debug("received message", "peer", m.From) return r.handleMempoolMessage(ctx, m) } @@ -212,7 +210,7 @@ func (r *Reactor) processMempoolCh(ctx context.Context) { // removed peers, we remove the peer from the mempool peer ID set and signal to // stop the tx broadcasting goroutine. func (r *Reactor) processPeerUpdate(ctx context.Context, peerUpdate p2p.PeerUpdate) { - r.logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) + logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) r.mtx.Lock() defer r.mtx.Unlock() @@ -283,7 +281,7 @@ func (r *Reactor) broadcastTxRoutine(ctx context.Context, peerID types.NodeID) { if e := recover(); e != nil { r.observePanic(e) - r.logger.Error( + logger.Error( "recovering from broadcasting mempool loop", "err", e, "stack", string(debug.Stack()), @@ -318,9 +316,9 @@ func (r *Reactor) broadcastTxRoutine(ctx context.Context, peerID types.NodeID) { // Send the mempool tx to the corresponding peer. Note, the peer may be // behind and thus would not be able to process the mempool tx correctly. r.channel.Send(&pb.Message{Sum: &pb.Message_Txs{Txs: &pb.Txs{Txs: [][]byte{memTx.tx}}}}, peerID) - r.logger.Debug( + logger.Debug( "gossiped tx to peer", - "tx", fmt.Sprintf("%X", memTx.tx.Hash()), + "tx", memTx.tx.Hash(), "peer", peerID, ) } diff --git a/sei-tendermint/internal/mempool/reactor_test.go b/sei-tendermint/internal/mempool/reactor_test.go index 01ba78ecea..9a2ceb2c4c 100644 --- a/sei-tendermint/internal/mempool/reactor_test.go +++ b/sei-tendermint/internal/mempool/reactor_test.go @@ -17,7 +17,6 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -25,7 +24,6 @@ import ( type reactorTestSuite struct { network *p2p.TestNetwork - logger log.Logger reactors map[types.NodeID]*Reactor mempools map[types.NodeID]*TxMempool @@ -34,7 +32,7 @@ type reactorTestSuite struct { nodes []types.NodeID } -func setupReactors(ctx context.Context, t *testing.T, logger log.Logger, numNodes int) *reactorTestSuite { +func setupReactors(ctx context.Context, t *testing.T, numNodes int) *reactorTestSuite { t.Helper() cfg, err := config.ResetTestRoot(t.TempDir(), strings.ReplaceAll(t.Name(), "/", "|")) @@ -42,7 +40,6 @@ func setupReactors(ctx context.Context, t *testing.T, logger log.Logger, numNode t.Cleanup(func() { os.RemoveAll(cfg.RootDir) }) rts := &reactorTestSuite{ - logger: log.NewNopLogger().With("testCase", t.Name()), network: p2p.MakeTestNetwork(t, p2p.TestNetworkOptions{NumNodes: numNodes}), reactors: make(map[types.NodeID]*Reactor, numNodes), mempools: make(map[types.NodeID]*TxMempool, numNodes), @@ -58,7 +55,6 @@ func setupReactors(ctx context.Context, t *testing.T, logger log.Logger, numNode rts.mempools[nodeID] = mempool reactor, err := NewReactor( - rts.logger.With("nodeID", nodeID), cfg.Mempool, mempool, node.Router, @@ -121,8 +117,7 @@ func TestReactorBroadcastDoesNotPanic(t *testing.T) { const numNodes = 2 - logger := log.NewNopLogger() - rts := setupReactors(ctx, t, logger, numNodes) + rts := setupReactors(ctx, t, numNodes) t.Cleanup(leaktest.Check(t)) observePanic := func(r any) { @@ -165,9 +160,7 @@ func TestReactorBroadcastTxs(t *testing.T) { numNodes := 4 ctx := t.Context() - logger := log.NewNopLogger() - - rts := setupReactors(ctx, t, logger, numNodes) + rts := setupReactors(ctx, t, numNodes) t.Cleanup(leaktest.Check(t)) primary := rts.nodes[0] @@ -191,8 +184,7 @@ func TestReactorConcurrency(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - rts := setupReactors(ctx, t, logger, numNodes) + rts := setupReactors(ctx, t, numNodes) t.Cleanup(leaktest.Check(t)) primary := rts.nodes[0] @@ -250,8 +242,7 @@ func TestReactorNoBroadcastToSender(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - rts := setupReactors(ctx, t, logger, numNodes) + rts := setupReactors(ctx, t, numNodes) t.Cleanup(leaktest.Check(t)) primary := rts.nodes[0] @@ -275,9 +266,7 @@ func TestReactor_MaxTxBytes(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - rts := setupReactors(ctx, t, logger, numNodes) + rts := setupReactors(ctx, t, numNodes) t.Cleanup(leaktest.Check(t)) primary := rts.nodes[0] @@ -314,8 +303,7 @@ func TestDontExhaustMaxActiveIDs(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - rts := setupReactors(ctx, t, logger, 1) + rts := setupReactors(ctx, t, 1) t.Cleanup(leaktest.Check(t)) nodeID := rts.nodes[0] @@ -359,9 +347,7 @@ func TestBroadcastTxForPeerStopsWhenPeerStops(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - rts := setupReactors(ctx, t, logger, 2) + rts := setupReactors(ctx, t, 2) t.Cleanup(leaktest.Check(t)) primary := rts.nodes[0] diff --git a/sei-tendermint/internal/p2p/channel.go b/sei-tendermint/internal/p2p/channel.go index f60b7ab0ce..3e49f8177a 100644 --- a/sei-tendermint/internal/p2p/channel.go +++ b/sei-tendermint/internal/p2p/channel.go @@ -81,7 +81,7 @@ func (ch *Channel[T]) send(msg T, queues ...*Queue[sendMsg]) { func (ch *Channel[T]) Send(msg T, to types.NodeID) { c, ok := ch.router.peerManager.Conns().Get(to) if !ok { - ch.router.logger.Debug("dropping message for unconnected peer", "peer", to, "channel", ch.desc.ID) + logger.Debug("dropping message for unconnected peer", "peer", to, "channel", ch.desc.ID) return } if _, contains := c.peerChannels[ch.desc.ID]; !contains { diff --git a/sei-tendermint/internal/p2p/conn/oldmux.go b/sei-tendermint/internal/p2p/conn/oldmux.go index e52d8b9e89..9759547279 100644 --- a/sei-tendermint/internal/p2p/conn/oldmux.go +++ b/sei-tendermint/internal/p2p/conn/oldmux.go @@ -10,15 +10,17 @@ import ( "time" gogoproto "github.com/gogo/protobuf/proto" + "github.com/sei-protocol/seilog" "golang.org/x/time/rate" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p/pb" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/protoutils" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" ) +var logger = seilog.NewLogger("tendermint", "internal", "p2p", "conn") + // ChannelID is an arbitrary channel ID. type ChannelID uint16 @@ -94,8 +96,6 @@ The byte id and the relative priorities of each `Channel` are configured upon initialization of the connection. */ type MConnection struct { - logger log.Logger - conn Conn sendQueue utils.Watch[*sendQueue] recvPong utils.Mutex[*utils.AtomicSend[bool]] @@ -172,13 +172,11 @@ func (q *sendQueue) setFlush(t time.Time) { // NewMConnection wraps net.Conn and creates multiplex connection with a config func NewMConnection( - logger log.Logger, conn Conn, chDescs []*ChannelDescriptor, config MConnConfig, ) *MConnection { return &MConnection{ - logger: logger, conn: conn, sendQueue: utils.NewWatch(newSendQueue(chDescs)), recvCh: make(chan mConnMessage), @@ -212,7 +210,7 @@ func (c *MConnection) String() string { // WARNING: takes ownership of msgBytes // TODO(gprusak): fix the ownership func (c *MConnection) Send(ctx context.Context, chID ChannelID, msgBytes []byte) error { - c.logger.Debug("Send", "channel", chID, "conn", c, "msgBytes", msgBytes) + logger.Debug("Send", "channel", chID, "conn", c, "msgBytes", msgBytes) for q, ctrl := range c.sendQueue.Lock() { ch, ok := q.channels[chID] if !ok { @@ -365,7 +363,7 @@ func (c *MConnection) sendRoutine(ctx context.Context) (err error) { return err } } else { - c.logger.Debug("Flush", "conn", c) + logger.Debug("Flush", "conn", c) if err := c.conn.Flush(ctx); err != nil { return fmt.Errorf("bufWriter.Flush(): %w", err) } @@ -413,13 +411,13 @@ func (c *MConnection) recvRoutine(ctx context.Context) (err error) { if !castOk || !ok { return errBadChannel{fmt.Errorf("unknown channel %X", p.PacketMsg.ChannelId)} } - c.logger.Debug("Read PacketMsg", "conn", c, "packet", packet) + logger.Debug("Read PacketMsg", "conn", c, "packet", packet) msgBytes, err := ch.pushMsg(p.PacketMsg) if err != nil { return fmt.Errorf("recvPacketMsg(): %v", err) } if msgBytes != nil { - c.logger.Debug("Received bytes", "chID", channelID, "msgBytes", msgBytes) + logger.Debug("Received bytes", "chID", channelID, "msgBytes", msgBytes) if err := utils.Send(ctx, c.recvCh, mConnMessage{ channelID: channelID, payload: msgBytes, diff --git a/sei-tendermint/internal/p2p/conn/oldmux_test.go b/sei-tendermint/internal/p2p/conn/oldmux_test.go index c40b7ee780..732928378f 100644 --- a/sei-tendermint/internal/p2p/conn/oldmux_test.go +++ b/sei-tendermint/internal/p2p/conn/oldmux_test.go @@ -13,7 +13,6 @@ import ( "github.com/fortytw2/leaktest" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p/pb" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/protoutils" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" @@ -33,7 +32,7 @@ func makeChDescs() []*ChannelDescriptor { } func newMConnectionWithCfg(conn Conn, chDescs []*ChannelDescriptor, cfg MConnConfig) *MConnection { - return NewMConnection(log.NewNopLogger(), conn, chDescs, cfg) + return NewMConnection(conn, chDescs, cfg) } func newMConnection(conn Conn) *MConnection { diff --git a/sei-tendermint/internal/p2p/peermanager.go b/sei-tendermint/internal/p2p/peermanager.go index 33261fa5ef..81b84ede3c 100644 --- a/sei-tendermint/internal/p2p/peermanager.go +++ b/sei-tendermint/internal/p2p/peermanager.go @@ -3,14 +3,15 @@ package p2p import ( "context" "errors" - "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/im" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "internal", "p2p") + type connSet[C peerConn] = im.Map[types.NodeID, C] type peerManagerInner[C peerConn] struct { @@ -105,7 +106,6 @@ func (i *peerManagerInner[C]) Disconnected(conn C) { // * Connected(conn) -> [communicate] -> Disconnected(conn) // For adding new peer addrs, call AddAddrs(). type peerManager[C peerConn] struct { - logger log.Logger options *RouterOptions isBlockSyncPeer map[types.NodeID]bool isPrivate map[types.NodeID]bool @@ -117,8 +117,9 @@ type peerManager[C peerConn] struct { func (p *peerManager[C]) LogState() { for inner := range p.inner.Lock() { - p.logger.Info("p2p connections", - "regular", fmt.Sprintf("%v/%v", len(inner.regular.conns), p.options.maxConns()), + logger.Info("p2p connections", + "regular", len(inner.regular.conns), + "regular-max", p.options.maxConns(), "unconditional", len(inner.persistent.conns), ) } @@ -176,7 +177,7 @@ func (m *peerManager[C]) Subscribe() *peerUpdatesRecv[C] { } } -func newPeerManager[C peerConn](logger log.Logger, selfID types.NodeID, options *RouterOptions) *peerManager[C] { +func newPeerManager[C peerConn](selfID types.NodeID, options *RouterOptions) *peerManager[C] { inner := &peerManagerInner[C]{ options: options, isPersistent: map[types.NodeID]bool{}, @@ -216,7 +217,6 @@ func newPeerManager[C peerConn](logger log.Logger, selfID types.NodeID, options } } return &peerManager[C]{ - logger: logger, options: options, isBlockSyncPeer: isBlockSyncPeer, isPrivate: isPrivate, diff --git a/sei-tendermint/internal/p2p/peermanager_test.go b/sei-tendermint/internal/p2p/peermanager_test.go index d18b7679e1..03bbcd586f 100644 --- a/sei-tendermint/internal/p2p/peermanager_test.go +++ b/sei-tendermint/internal/p2p/peermanager_test.go @@ -8,7 +8,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" @@ -53,7 +52,7 @@ func (c *fakeConn) Close() { } func makePeerManager(selfID types.NodeID, options *RouterOptions) *peerManager[*fakeConn] { - return newPeerManager[*fakeConn](log.NewNopLogger(), selfID, options) + return newPeerManager[*fakeConn](selfID, options) } var selfID = types.NodeIDFromPubKey(ed25519.TestSecretKey([]byte{12, 43}).Public()) diff --git a/sei-tendermint/internal/p2p/pex/reactor.go b/sei-tendermint/internal/p2p/pex/reactor.go index 1892084281..17e8a03cc9 100644 --- a/sei-tendermint/internal/p2p/pex/reactor.go +++ b/sei-tendermint/internal/p2p/pex/reactor.go @@ -7,16 +7,18 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" pb "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/p2p" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" "golang.org/x/time/rate" ) var ( + logger = seilog.NewLogger("tendermint", "internal", "p2p", "pex") + _ service.Service = (*Reactor)(nil) ) @@ -64,7 +66,6 @@ func ChannelDescriptor() p2p.ChannelDescriptor[*pb.PexMessage] { type Reactor struct { service.BaseService sendInterval time.Duration - logger log.Logger router *p2p.Router // peerLimiters limits the number of messages received from peers. peerLimiters utils.Mutex[map[types.NodeID]*rate.Limiter] @@ -73,7 +74,6 @@ type Reactor struct { // NewReactor returns a reference to a new reactor. func NewReactor( - logger log.Logger, router *p2p.Router, sendInterval time.Duration, ) (*Reactor, error) { @@ -82,13 +82,12 @@ func NewReactor( return nil, err } r := &Reactor{ - logger: logger, sendInterval: sendInterval, channel: channel, router: router, peerLimiters: utils.NewMutex(map[types.NodeID]*rate.Limiter{}), } - r.BaseService = *service.NewBaseService(logger, "PEX", r) + r.BaseService = *service.NewBaseService("PEX", r) return r, nil } @@ -123,7 +122,7 @@ func wrap[T *pb.PexRequest | *pb.PexResponse](msg T) *pb.PexMessage { func (r *Reactor) sendRoutine(ctx context.Context) error { for { - r.logger.Info("PEX broadcast") + logger.Info("PEX broadcast") r.channel.Broadcast(wrap(&pb.PexRequest{})) if err := utils.Sleep(ctx, r.sendInterval); err != nil { return err diff --git a/sei-tendermint/internal/p2p/pex/reactor_test.go b/sei-tendermint/internal/p2p/pex/reactor_test.go index d199cc4f67..ad909ed1f4 100644 --- a/sei-tendermint/internal/p2p/pex/reactor_test.go +++ b/sei-tendermint/internal/p2p/pex/reactor_test.go @@ -281,7 +281,6 @@ func setupNetwork(t *testing.T, opts testOptions) *reactorTestSuite { require.NoError(t, err) } else { reactor, err := NewReactor( - node.Logger, node.Router, testSendInterval, ) @@ -347,7 +346,6 @@ func (r *reactorTestSuite) addNodes(t *testing.T, nodes int) { }) nodeID := node.NodeID reactor, err := NewReactor( - node.Logger, node.Router, testSendInterval, ) diff --git a/sei-tendermint/internal/p2p/router.go b/sei-tendermint/internal/p2p/router.go index 3e2b63581b..acc56b81e4 100644 --- a/sei-tendermint/internal/p2p/router.go +++ b/sei-tendermint/internal/p2p/router.go @@ -9,7 +9,6 @@ import ( gogoproto "github.com/gogo/protobuf/proto" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p/conn" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" @@ -32,7 +31,6 @@ type ConnSet = connSet[*ConnV2] // Router manages peer connections and routes messages between peers and channels. type Router struct { *service.BaseService - logger log.Logger metrics *Metrics lc *metricsLabelCache @@ -63,7 +61,6 @@ func (r *Router) getChannelDescs() []*conn.ChannelDescriptor { // NewRouter creates a new Router. func NewRouter( - logger log.Logger, metrics *Metrics, privKey NodeSecretKey, nodeInfoProducer func() *types.NodeInfo, @@ -74,7 +71,7 @@ func NewRouter( return nil, err } selfID := privKey.Public().NodeID() - peerManager := newPeerManager[*ConnV2](logger, selfID, options) + peerManager := newPeerManager[*ConnV2](selfID, options) peerDB, err := newPeerDB(db, options.maxPeers()) if err != nil { return nil, fmt.Errorf("newPeerDB(): %w", err) @@ -85,7 +82,6 @@ func NewRouter( } } router := &Router{ - logger: logger, metrics: metrics, lc: newMetricsLabelCache(), privKey: privKey, @@ -99,7 +95,7 @@ func NewRouter( if gigaCfg, ok := options.Giga.Get(); ok { router.giga = utils.Some(NewGigaRouter(gigaCfg, privKey)) } - router.BaseService = service.NewBaseService(logger, "router", router) + router.BaseService = service.NewBaseService("router", router) return router, nil } @@ -253,7 +249,7 @@ func (r *Router) acceptPeersRoutine(ctx context.Context) error { release() return r.runConn(ctx, hConn, info, utils.None[NodeAddress]()) }) - r.logger.Error("r.runConn(inbound)", "addr", addr, "err", err) + logger.Error("r.runConn(inbound)", "addr", addr, "err", err) return nil }) } @@ -316,7 +312,7 @@ func (r *Router) dialPeersRoutine(ctx context.Context) error { } return nil }) - r.logger.Error("r.runConn(outbound)", "addr", addr.String(), "err", err) + logger.Error("r.runConn(outbound)", "addr", addr, "err", err) return nil }) } @@ -364,7 +360,7 @@ func (r *Router) metricsRoutine(ctx context.Context) error { // Evict reports a peer misbehavior and forces peer to be disconnected. func (r *Router) Evict(id types.NodeID, err error) { - r.logger.Error("evicting", "peer", id, "err", err) + logger.Error("evicting", "peer", id, "err", err) r.peerManager.Evict(id) } @@ -388,7 +384,7 @@ func (r *Router) dial(ctx context.Context, addr NodeAddress) (_ tcp.Conn, err er defer cancel() } - r.logger.Debug("dialing peer address", "peer", addr) + logger.Debug("dialing peer address", "peer", addr) endpoints, err := addr.Resolve(resolveCtx) if err != nil { return tcp.Conn{}, fmt.Errorf("address.Resolve(): %w", err) @@ -409,10 +405,10 @@ func (r *Router) dial(ctx context.Context, addr NodeAddress) (_ tcp.Conn, err er } c, err := tcp.Dial(dialCtx, endpoint.AddrPort) if err != nil { - r.logger.Debug("failed to dial endpoint", "peer", addr.NodeID, "endpoint", endpoint, "err", err) + logger.Debug("failed to dial endpoint", "peer", addr.NodeID, "endpoint", endpoint, "err", err) continue } - r.logger.Debug("dialed peer", "peer", addr.NodeID, "endpoint", endpoint) + logger.Debug("dialed peer", "peer", addr.NodeID, "endpoint", endpoint) return c, nil } return tcp.Conn{}, errors.New("all endpoints failed") diff --git a/sei-tendermint/internal/p2p/router_test.go b/sei-tendermint/internal/p2p/router_test.go index eeef0a3b1d..91e483dc5c 100644 --- a/sei-tendermint/internal/p2p/router_test.go +++ b/sei-tendermint/internal/p2p/router_test.go @@ -16,7 +16,6 @@ import ( "golang.org/x/time/rate" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p/conn" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" @@ -105,12 +104,11 @@ func TestRouter_Network(t *testing.T) { func TestRouter_Channel_Basic(t *testing.T) { t.Cleanup(leaktest.Check(t)) - logger, _ := log.NewDefaultLogger("plain", "debug") rng := utils.TestRng() ctx := t.Context() chDesc := makeChDesc(5) - router := makeRouter(logger, rng) + router := makeRouter(rng) require.NoError(t, router.Start(ctx)) t.Cleanup(router.Wait) @@ -259,10 +257,9 @@ func TestRouter_PexOnHandshake_ListenerPeersPropagated(t *testing.T) { var keyFiltered = makeKey(utils.TestRngFromSeed(738234133)) var infoFiltered = makeInfo(keyFiltered) -func makeRouterWithOptionsAndKey(logger log.Logger, opts *RouterOptions, key NodeSecretKey) *Router { +func makeRouterWithOptionsAndKey(opts *RouterOptions, key NodeSecretKey) *Router { info := makeInfo(key) return utils.OrPanic1(NewRouter( - logger.With("node", info.NodeID), NopMetrics(), key, func() *types.NodeInfo { return &info }, @@ -296,20 +293,19 @@ func makeRouterOptions() *RouterOptions { } } -func makeRouterWithOptions(logger log.Logger, rng utils.Rng, opts *RouterOptions) *Router { - return makeRouterWithOptionsAndKey(logger, opts, makeKey(rng)) +func makeRouterWithOptions(rng utils.Rng, opts *RouterOptions) *Router { + return makeRouterWithOptionsAndKey(opts, makeKey(rng)) } -func makeRouterWithKey(logger log.Logger, key NodeSecretKey) *Router { - return makeRouterWithOptionsAndKey(logger, makeRouterOptions(), key) +func makeRouterWithKey(key NodeSecretKey) *Router { + return makeRouterWithOptionsAndKey(makeRouterOptions(), key) } -func makeRouter(logger log.Logger, rng utils.Rng) *Router { - return makeRouterWithKey(logger, makeKey(rng)) +func makeRouter(rng utils.Rng) *Router { + return makeRouterWithKey(makeKey(rng)) } func TestRouter_FilterByIP(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") ctx := t.Context() rng := utils.TestRng() t.Cleanup(leaktest.Check(t)) @@ -323,7 +319,7 @@ func TestRouter_FilterByIP(t *testing.T) { return nil }) if err := scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { - r := makeRouterWithOptions(logger, rng, opts) + r := makeRouterWithOptions(rng, opts) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -331,7 +327,7 @@ func TestRouter_FilterByIP(t *testing.T) { sub := r.peerManager.Subscribe() t.Logf("Connection should succeed.") - r2 := makeRouter(logger, rng) + r2 := makeRouter(rng) addr := TestAddress(r) if err := scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { @@ -355,7 +351,7 @@ func TestRouter_FilterByIP(t *testing.T) { reject.Store(true) t.Logf("Connection should fail during handshake.") - r2 = makeRouter(logger, rng) + r2 = makeRouter(rng) return scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { tcpConn, err := r2.dial(ctx, addr) if err != nil { @@ -420,10 +416,9 @@ func TestRouter_AcceptPeers(t *testing.T) { for name, tc := range testcases { t.Run(name, func(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) if err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouterWithKey(logger, selfKey) + r := makeRouterWithKey(selfKey) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -459,14 +454,13 @@ func TestRouter_AcceptPeers(t *testing.T) { // Test checking that multiple peers connecting at once don't block each other. func TestRouter_AcceptPeers_Parallel(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") ctx := t.Context() rng := utils.TestRng() t.Cleanup(leaktest.Check(t)) if err := scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { t.Logf("Set up and start the router.") - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -478,7 +472,7 @@ func TestRouter_AcceptPeers_Parallel(t *testing.T) { var conns []tcp.Conn addr := TestAddress(r) for range 10 { - x := makeRouter(logger, rng) + x := makeRouter(rng) peers = append(peers, x) conn, err := x.dial(ctx, addr) if err != nil { @@ -504,20 +498,19 @@ func TestRouter_AcceptPeers_Parallel(t *testing.T) { } func TestRouter_dialPeer_Retry(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") rng := utils.TestRng() t.Cleanup(leaktest.Check(t)) if err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { t.Logf("Set up and start the router.") - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err } sub := r.peerManager.Subscribe() - x := makeRouter(logger, rng) + x := makeRouter(rng) listener, err := tcp.Listen(x.Endpoint().AddrPort) if err != nil { return fmt.Errorf("tcp.Listen(): %w", err) @@ -572,10 +565,9 @@ func TestRouter_dialPeer_Reject(t *testing.T) { } for name, tc := range testcases { t.Run(name, func(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -609,14 +601,13 @@ func TestRouter_dialPeer_Reject(t *testing.T) { } func TestRouter_dialPeers_Parallel(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") ctx := t.Context() rng := utils.TestRng() t.Cleanup(leaktest.Check(t)) t.Logf("Set up and start the router.") if err := scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -628,7 +619,7 @@ func TestRouter_dialPeers_Parallel(t *testing.T) { var conns []tcp.Conn for i := range 10 { t.Logf("ACCEPT %v", i) - peer := makeRouter(logger, rng) + peer := makeRouter(rng) listener, err := tcp.Listen(peer.Endpoint().AddrPort) if err != nil { return fmt.Errorf("tcp.Listen(): %w", err) @@ -664,13 +655,12 @@ func TestRouter_dialPeers_Parallel(t *testing.T) { } func TestRouter_EvictPeers(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) rng := utils.TestRng() key := makeKey(rng) info := makeInfo(key) if err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -702,11 +692,10 @@ func TestRouter_EvictPeers(t *testing.T) { } func TestRouter_DontSendOnInvalidChannel(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) rng := utils.TestRng() if err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -725,7 +714,7 @@ func TestRouter_DontSendOnInvalidChannel(t *testing.T) { return fmt.Errorf("r.OpenChannel(2): %w", err) } - x := makeRouter(logger, rng) + x := makeRouter(rng) x1, err := OpenChannel(x, desc1) if err != nil { return fmt.Errorf("x.OpenChannel(1): %w", err) @@ -776,12 +765,11 @@ func TestRouter_DontSendOnInvalidChannel(t *testing.T) { // Test checking that connection information is successfully stored and restored // from PeerDB. func TestRouter_PeerDB(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) rng := utils.TestRng() if err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { t.Logf("start the first node") - r := makeRouter(logger, rng) + r := makeRouter(rng) addr := TestAddress(r) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) @@ -794,7 +782,6 @@ func TestRouter_PeerDB(t *testing.T) { err := scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { t.Logf("start the second node") r2 := utils.OrPanic1(NewRouter( - logger.With("node", info.NodeID), NopMetrics(), key, func() *types.NodeInfo { return &info }, @@ -825,7 +812,6 @@ func TestRouter_PeerDB(t *testing.T) { t.Logf("restart the second node") r2 := utils.OrPanic1(NewRouter( - logger.With("node", info.NodeID), NopMetrics(), key, func() *types.NodeInfo { return &info }, diff --git a/sei-tendermint/internal/p2p/testonly.go b/sei-tendermint/internal/p2p/testonly.go index 1ee3876af5..9450ab3ccb 100644 --- a/sei-tendermint/internal/p2p/testonly.go +++ b/sei-tendermint/internal/p2p/testonly.go @@ -14,7 +14,6 @@ import ( gogotypes "github.com/gogo/protobuf/types" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p/conn" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/tcp" @@ -38,8 +37,7 @@ func NodeInSlice(id types.NodeID, ids []types.NodeID) bool { // testing. It creates an arbitrary number of nodes that are connected to each // other, and can open channels across all nodes with custom reactors. type TestNetwork struct { - logger log.Logger - nodes utils.Mutex[map[types.NodeID]*TestNode] + nodes utils.Mutex[map[types.NodeID]*TestNode] } // NetworkOptions is an argument structure to parameterize the @@ -72,10 +70,8 @@ func TestAddress(r *Router) NodeAddress { // MakeNetwork creates a test network with the given number of nodes and // connects them to each other. func MakeTestNetwork(t *testing.T, opts TestNetworkOptions) *TestNetwork { - logger, _ := log.NewDefaultLogger("plain", "info") n := &TestNetwork{ - logger: logger, - nodes: utils.NewMutex(map[types.NodeID]*TestNode{}), + nodes: utils.NewMutex(map[types.NodeID]*TestNode{}), } for i := 0; i < opts.NumNodes; i++ { n.MakeNode(t, opts.NodeOpts) @@ -224,7 +220,6 @@ func (n *TestNetwork) Remove(t *testing.T, id types.NodeID) { // Node is a node in a Network, with a Router and a PeerManager. type TestNode struct { - Logger log.Logger NodeID types.NodeID NodeInfo types.NodeInfo NodeAddress NodeAddress @@ -280,7 +275,6 @@ func (n *TestNode) Disconnect(ctx context.Context, target types.NodeID) { func (n *TestNetwork) MakeNode(t *testing.T, opts TestNodeOptions) *TestNode { privKey := NodeSecretKey(ed25519.GenerateSecretKey()) nodeID := privKey.Public().NodeID() - logger := n.logger.With("node", nodeID[:5]) endpoint := Endpoint{AddrPort: tcp.TestReserveAddr()} routerOpts := &RouterOptions{ SelfAddress: utils.Some(endpoint.NodeAddress(nodeID)), @@ -303,7 +297,6 @@ func (n *TestNetwork) MakeNode(t *testing.T, opts TestNodeOptions) *TestNode { } router, err := NewRouter( - logger, NopMetrics(), privKey, func() *types.NodeInfo { return &nodeInfo }, @@ -316,7 +309,6 @@ func (n *TestNetwork) MakeNode(t *testing.T, opts TestNodeOptions) *TestNode { t.Cleanup(router.Stop) node := &TestNode{ - Logger: logger, NodeID: nodeID, NodeInfo: nodeInfo, NodeAddress: routerOpts.Endpoint.NodeAddress(nodeID), diff --git a/sei-tendermint/internal/p2p/transport.go b/sei-tendermint/internal/p2p/transport.go index 864ac9fc08..b797f29f9b 100644 --- a/sei-tendermint/internal/p2p/transport.go +++ b/sei-tendermint/internal/p2p/transport.go @@ -72,7 +72,7 @@ func (r *Router) connSendRoutine(ctx context.Context, conn *ConnV2) error { if err := conn.mconn.Send(ctx, m.ChannelID, bz); err != nil { return err } - r.logger.Debug("sent message", "peer", conn.peerInfo.NodeID, "message", m.Message) + logger.Debug("sent message", "peer", conn.peerInfo.NodeID, "message", m.Message) } } @@ -88,7 +88,7 @@ func (r *Router) connRecvRoutine(ctx context.Context, conn *ConnV2) error { ch, ok := chs[chID] if !ok { // TODO(gprusak): verify if this is a misbehavior, and drop the peer if it is. - r.logger.Debug("dropping message for unknown channel", "peer", conn.peerInfo.NodeID, "channel", chID) + logger.Debug("dropping message for unknown channel", "peer", conn.peerInfo.NodeID, "channel", chID) continue } @@ -104,7 +104,7 @@ func (r *Router) connRecvRoutine(ctx context.Context, conn *ConnV2) error { "chID", fmt.Sprint(chID), "peer_id", string(conn.peerInfo.NodeID), "message_type", r.lc.ValueToMetricLabel(msg)).Add(float64(gogoproto.Size(msg))) - r.logger.Debug("received message", "peer", conn.peerInfo.NodeID, "message", msg) + logger.Debug("received message", "peer", conn.peerInfo.NodeID, "message", msg) } } } @@ -117,7 +117,6 @@ func (r *Router) runConn(ctx context.Context, hConn *handshakedConn, peerInfo ty sendQueue: NewQueue[sendMsg](queueBufferDefault), peerChannels: toChannelIDs(peerInfo.Channels), mconn: conn.NewMConnection( - r.logger.With("peer", Endpoint{hConn.conn.RemoteAddr()}.NodeAddress(peerInfo.NodeID)), hConn.conn, r.getChannelDescs(), r.options.Connection, @@ -127,7 +126,7 @@ func (r *Router) runConn(ctx context.Context, hConn *handshakedConn, peerInfo ty return fmt.Errorf("r.peerManager.Connected(): %w", err) } defer r.peerManager.Disconnected(conn) - r.logger.Info("peer connected", "peer", conn.PeerInfo().NodeID, "endpoint", conn) + logger.Info("peer connected", "peer", conn.PeerInfo().NodeID, "endpoint", conn) return scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { s.SpawnNamed("mconn.Run", func() error { return conn.mconn.Run(ctx) }) s.SpawnNamed("connSendRoutine", func() error { return r.connSendRoutine(ctx, conn) }) diff --git a/sei-tendermint/internal/p2p/transport_test.go b/sei-tendermint/internal/p2p/transport_test.go index 2952ef0209..b97cfdf89b 100644 --- a/sei-tendermint/internal/p2p/transport_test.go +++ b/sei-tendermint/internal/p2p/transport_test.go @@ -2,6 +2,7 @@ package p2p import ( "context" + "fmt" "net/netip" "sync/atomic" "testing" @@ -10,14 +11,11 @@ import ( "github.com/fortytw2/leaktest" "github.com/gogo/protobuf/proto" - "fmt" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/tcp" "github.com/sei-protocol/sei-chain/sei-tendermint/types" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) func makeInfo(key NodeSecretKey) types.NodeInfo { @@ -43,14 +41,13 @@ func makeInfo(key NodeSecretKey) types.NodeInfo { } func TestRouter_MaxConcurrentAccepts(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") rng := utils.TestRng() opts := makeRouterOptions() maxAccepts := 2 opts.MaxConcurrentAccepts = utils.Some(maxAccepts) err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouterWithOptions(logger, rng, opts) + r := makeRouterWithOptions(rng, opts) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -61,7 +58,7 @@ func TestRouter_MaxConcurrentAccepts(t *testing.T) { for range 10 { s.SpawnNamed("test", func() error { return scope.Run(ctx, func(ctx context.Context, s scope.Scope) error { - x := makeRouter(logger, rng) + x := makeRouter(rng) // Establish a connection. addr := TestAddress(r) tcpConn, err := x.dial(ctx, addr) @@ -105,13 +102,12 @@ func TestRouter_Listen(t *testing.T) { for _, tc := range testcases { t.Run(tc.Addr().String(), func(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") t.Cleanup(leaktest.Check(t)) rng := utils.TestRng() err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { opts := makeRouterOptions() opts.Endpoint.AddrPort = tc - r := makeRouterWithOptions(logger, rng, opts) + r := makeRouterWithOptions(rng, opts) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err @@ -121,7 +117,7 @@ func TestRouter_Listen(t *testing.T) { return fmt.Errorf("r.Endpoint() = %v, want %v", got, want) } - x := makeRouter(logger, rng) + x := makeRouter(rng) addr := TestAddress(r) tcpConn, err := x.dial(ctx, addr) if err != nil { @@ -142,16 +138,15 @@ func TestRouter_Listen(t *testing.T) { // Test checking that handshake provides correct NodeInfo. func TestHandshake_NodeInfo(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") rng := utils.TestRng() err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - r := makeRouter(logger, rng) + r := makeRouter(rng) s.SpawnBg(func() error { return utils.IgnoreCancel(r.Run(ctx)) }) if err := r.WaitForStart(ctx); err != nil { return err } - x := makeRouter(logger, rng) + x := makeRouter(rng) addr := TestAddress(r) tcpConn, err := x.dial(ctx, addr) if err != nil { @@ -174,11 +169,10 @@ func TestHandshake_NodeInfo(t *testing.T) { // Test checking that handshake respects the context. func TestHandshake_Context(t *testing.T) { - logger, _ := log.NewDefaultLogger("plain", "debug") rng := utils.TestRng() err := scope.Run(t.Context(), func(ctx context.Context, s scope.Scope) error { - a := makeRouter(logger, rng) - b := makeRouter(logger, rng) + a := makeRouter(rng) + b := makeRouter(rng) listener, err := tcp.Listen(a.Endpoint().AddrPort) if err != nil { return fmt.Errorf("tcp.Listen(): %w", err) diff --git a/sei-tendermint/internal/pubsub/example_test.go b/sei-tendermint/internal/pubsub/example_test.go index 3fec333ab8..fd339d0ac7 100644 --- a/sei-tendermint/internal/pubsub/example_test.go +++ b/sei-tendermint/internal/pubsub/example_test.go @@ -8,13 +8,12 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) func TestExample(t *testing.T) { ctx := t.Context() - s := newTestServer(ctx, t, log.NewNopLogger()) + s := newTestServer(ctx, t) sub := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: "example-client", diff --git a/sei-tendermint/internal/pubsub/pubsub.go b/sei-tendermint/internal/pubsub/pubsub.go index f7c158e2ef..523805619f 100644 --- a/sei-tendermint/internal/pubsub/pubsub.go +++ b/sei-tendermint/internal/pubsub/pubsub.go @@ -41,12 +41,14 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) var ( + logger = seilog.NewLogger("tendermint", "internal", "pubsub") + // ErrSubscriptionNotFound is returned when a client tries to unsubscribe // from not existing subscription. ErrSubscriptionNotFound = errors.New("subscription not found") @@ -90,7 +92,6 @@ func (args UnsubscribeArgs) Validate() error { // messages with or without events, and manages internal state. type Server struct { service.BaseService - logger log.Logger queue chan item done <-chan struct{} // closed when server should exit @@ -121,10 +122,10 @@ type Option func(*Server) // NewServer returns a new server. See the commentary on the Option functions // for a detailed description of how to configure buffering. If no options are // provided, the resulting server's queue is unbuffered. -func NewServer(logger log.Logger, options ...Option) *Server { - s := &Server{logger: logger} +func NewServer(options ...Option) *Server { + s := &Server{} - s.BaseService = *service.NewBaseService(logger, "PubSub", s) + s.BaseService = *service.NewBaseService("PubSub", s) for _, opt := range options { opt(s) } @@ -345,7 +346,7 @@ func (s *Server) run(ctx context.Context) { // Sender: Service the queue and forward messages to subscribers. for it := range queue { if err := s.send(it.Data, it.Events); err != nil { - s.logger.Error("error sending event", "err", err) + logger.Error("error sending event", "err", err) } } // Terminate all subscribers before exit. diff --git a/sei-tendermint/internal/pubsub/pubsub_test.go b/sei-tendermint/internal/pubsub/pubsub_test.go index 94598d3117..fc32f15fd0 100644 --- a/sei-tendermint/internal/pubsub/pubsub_test.go +++ b/sei-tendermint/internal/pubsub/pubsub_test.go @@ -12,7 +12,6 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -31,8 +30,7 @@ func (e pubstring) ToLegacy() types.LegacyEventData { return e } func TestSubscribeWithArgs(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) t.Run("DefaultLimit", func(t *testing.T) { sub := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ @@ -59,9 +57,8 @@ func TestSubscribeWithArgs(t *testing.T) { func TestObserver(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) done := make(chan struct{}) var got interface{} @@ -80,9 +77,7 @@ func TestObserver(t *testing.T) { func TestObserverErrors(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) require.Error(t, s.Observe(ctx, nil, query.All)) require.NoError(t, s.Observe(ctx, func(pubsub.Message) error { return nil })) @@ -92,9 +87,7 @@ func TestObserverErrors(t *testing.T) { func TestPublishDoesNotBlock(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) sub := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: clientID, @@ -121,8 +114,7 @@ func TestPublishDoesNotBlock(t *testing.T) { func TestSubscribeErrors(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) t.Run("NegativeLimitErr", func(t *testing.T) { _, err := s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ @@ -137,8 +129,7 @@ func TestSubscribeErrors(t *testing.T) { func TestSlowSubscriber(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) sub := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: clientID, @@ -158,8 +149,7 @@ func TestSlowSubscriber(t *testing.T) { func TestDifferentClients(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) sub1 := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: "client-1", @@ -212,8 +202,7 @@ func TestDifferentClients(t *testing.T) { func TestSubscribeDuplicateKeys(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) testCases := []struct { query string @@ -267,8 +256,7 @@ func TestSubscribeDuplicateKeys(t *testing.T) { func TestClientSubscribesTwice(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) q := query.MustCompile(`tm.events.type='NewBlock'`) events := []abci.Event{{ @@ -302,8 +290,7 @@ func TestClientSubscribesTwice(t *testing.T) { func TestUnsubscribe(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) sub := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: clientID, @@ -326,8 +313,7 @@ func TestUnsubscribe(t *testing.T) { func TestClientUnsubscribesTwice(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: clientID, @@ -347,8 +333,7 @@ func TestClientUnsubscribesTwice(t *testing.T) { func TestResubscribe(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) args := pubsub.SubscribeArgs{ ClientID: clientID, @@ -370,8 +355,7 @@ func TestResubscribe(t *testing.T) { func TestUnsubscribeAll(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - s := newTestServer(ctx, t, logger) + s := newTestServer(ctx, t) sub1 := newTestSub(t).must(s.SubscribeWithArgs(ctx, pubsub.SubscribeArgs{ ClientID: clientID, @@ -391,8 +375,8 @@ func TestUnsubscribeAll(t *testing.T) { } func TestBufferCapacity(t *testing.T) { - logger := log.NewNopLogger() - s := pubsub.NewServer(logger, pubsub.BufferCapacity(2)) + + s := pubsub.NewServer(pubsub.BufferCapacity(2)) require.Equal(t, 2, s.BufferCapacity()) @@ -418,10 +402,10 @@ func TestBufferCapacity(t *testing.T) { } -func newTestServer(ctx context.Context, t testing.TB, logger log.Logger) *pubsub.Server { +func newTestServer(ctx context.Context, t testing.TB) *pubsub.Server { t.Helper() - s := pubsub.NewServer(logger) + s := pubsub.NewServer() require.NoError(t, s.Start(ctx)) t.Cleanup(s.Wait) diff --git a/sei-tendermint/internal/rpc/core/blocks.go b/sei-tendermint/internal/rpc/core/blocks.go index ee890047b1..9351d67e40 100644 --- a/sei-tendermint/internal/rpc/core/blocks.go +++ b/sei-tendermint/internal/rpc/core/blocks.go @@ -34,7 +34,7 @@ func (env *Environment) BlockchainInfo(ctx context.Context, req *coretypes.Reque if err != nil { return nil, err } - env.Logger.Debug("BlockchainInfo", "maxHeight", maxHeight, "minHeight", minHeight) + logger.Debug("BlockchainInfo", "maxHeight", maxHeight, "minHeight", minHeight) blockMetas := make([]*types.BlockMeta, 0, maxHeight-minHeight+1) for height := maxHeight; height >= minHeight; height-- { diff --git a/sei-tendermint/internal/rpc/core/env.go b/sei-tendermint/internal/rpc/core/env.go index 1107ea625a..8c9e2e7dbd 100644 --- a/sei-tendermint/internal/rpc/core/env.go +++ b/sei-tendermint/internal/rpc/core/env.go @@ -9,6 +9,7 @@ import ( "time" "github.com/rs/cors" + "github.com/sei-protocol/seilog" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/config" @@ -25,7 +26,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/statesync" tmjson "github.com/sei-protocol/sei-chain/sei-tendermint/libs/json" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/strings" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" @@ -47,6 +47,8 @@ const ( genesisChunkSize = 16 * 1024 * 1024 // 16 ) +var logger = seilog.NewLogger("tendermint", "internal", "rpc", "core") + //---------------------------------------------- // These interfaces are used by RPC and must be thread safe @@ -95,8 +97,6 @@ type Environment struct { Mempool mempool.Mempool StateSyncMetricer statesync.Metricer - Logger log.Logger - Config config.RPCConfig // cache of chunked genesis data. @@ -265,11 +265,11 @@ func (env *Environment) StartService(ctx context.Context, conf *config.Config) ( } go func() { // N.B. Use background for unsubscribe, ctx is already terminated. - defer env.EventBus.UnsubscribeAll(context.Background(), subscriberID) // nolint:errcheck + defer func() { _ = env.EventBus.UnsubscribeAll(context.Background(), subscriberID) }() for { msg, err := sub.Next(ctx) if err != nil { - env.Logger.Error("Subscription terminated", "err", err) + logger.Error("Subscription terminated", "err", err) return } etype, ok := eventlog.FindType(msg.Events()) @@ -279,27 +279,25 @@ func (env *Environment) StartService(ctx context.Context, conf *config.Config) ( } }() - env.Logger.Info("Event log subscription enabled") + logger.Info("Event log subscription enabled") } // We may expose the RPC over both TCP and a Unix-domain socket. listeners := make([]net.Listener, len(listenAddrs)) for i, listenAddr := range listenAddrs { mux := http.NewServeMux() - rpcLogger := env.Logger.With("module", "rpc-server") - rpcserver.RegisterRPCFuncs(mux, routes, rpcLogger) + rpcserver.RegisterRPCFuncs(mux, routes) if conf.RPC.ExperimentalDisableWebsocket { - rpcLogger.Info("Disabling websocket endpoints (experimental-disable-websocket=true)") + logger.Info("Disabling websocket endpoints (experimental-disable-websocket=true)", "module", "rpc-server") } else { - rpcLogger.Info("WARNING: Websocket RPC access is deprecated and will be removed " + - "in Tendermint v0.37. See https://tinyurl.com/adr075 for more information.") - wmLogger := rpcLogger.With("protocol", "websocket") - wm := rpcserver.NewWebsocketManager(wmLogger, routes, + logger.Info("WARNING: Websocket RPC access is deprecated and will be removed "+ + "in Tendermint v0.37. See https://tinyurl.com/adr075 for more information.", "module", "rpc-server") + wm := rpcserver.NewWebsocketManager(routes, rpcserver.OnDisconnect(func(remoteAddr string) { err := env.EventBus.UnsubscribeAll(context.Background(), remoteAddr) if err != nil && err != tmpubsub.ErrSubscriptionNotFound { - wmLogger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err) + logger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "protocol", "websocket", "err", err) } }), rpcserver.ReadLimit(cfg.MaxBodyBytes), @@ -332,10 +330,9 @@ func (env *Environment) StartService(ctx context.Context, conf *config.Config) ( rootHandler, conf.RPC.CertFile(), conf.RPC.KeyFile(), - rpcLogger, cfg, ); err != nil { - env.Logger.Error("error serving server with TLS", "err", err) + logger.Error("error serving server with TLS", "err", err) } }() } else { @@ -344,10 +341,9 @@ func (env *Environment) StartService(ctx context.Context, conf *config.Config) ( ctx, listener, rootHandler, - rpcLogger, cfg, ); err != nil { - env.Logger.Error("error serving server", "err", err) + logger.Error("error serving server", "err", err) } }() } diff --git a/sei-tendermint/internal/rpc/core/events.go b/sei-tendermint/internal/rpc/core/events.go index f98d88f26a..4323581e2e 100644 --- a/sei-tendermint/internal/rpc/core/events.go +++ b/sei-tendermint/internal/rpc/core/events.go @@ -38,9 +38,9 @@ func (env *Environment) Subscribe(ctx context.Context, req *coretypes.RequestSub return nil, errors.New("maximum query length exceeded") } - env.Logger.Info("WARNING: Websocket subscriptions are deprecated and will be removed " + + logger.Info("WARNING: Websocket subscriptions are deprecated and will be removed " + "in Tendermint v0.37. See https://tinyurl.com/adr075 for more information.") - env.Logger.Info("Subscribe to query", "remote", addr, "query", req.Query) + logger.Info("Subscribe to query", "remote", addr, "query", req.Query) q, err := tmquery.New(req.Query) if err != nil { @@ -75,7 +75,7 @@ func (env *Environment) Subscribe(ctx context.Context, req *coretypes.RequestSub resp := callInfo.RPCRequest.MakeError(nil, err) ok := callInfo.WSConn.TryWriteRPCResponse(opctx, resp) if !ok { - env.Logger.Info("Unable to write response (slow client)", + logger.Info("Unable to write response (slow client)", "to", addr, "subscriptionID", subscriptionID, "err", err) } return @@ -91,7 +91,7 @@ func (env *Environment) Subscribe(ctx context.Context, req *coretypes.RequestSub err = callInfo.WSConn.WriteRPCResponse(wctx, resp) cancel() if err != nil { - env.Logger.Info("Unable to write response (slow client)", + logger.Info("Unable to write response (slow client)", "to", addr, "subscriptionID", subscriptionID, "err", err) } } @@ -104,7 +104,7 @@ func (env *Environment) Subscribe(ctx context.Context, req *coretypes.RequestSub // More: https://docs.tendermint.com/master/rpc/#/Websocket/unsubscribe func (env *Environment) Unsubscribe(ctx context.Context, req *coretypes.RequestUnsubscribe) (*coretypes.ResultUnsubscribe, error) { args := tmpubsub.UnsubscribeArgs{Subscriber: rpctypes.GetCallInfo(ctx).RemoteAddr()} - env.Logger.Info("Unsubscribe from query", "remote", args.Subscriber, "subscription", req.Query) + logger.Info("Unsubscribe from query", "remote", args.Subscriber, "subscription", req.Query) var err error args.Query, err = tmquery.New(req.Query) @@ -124,7 +124,7 @@ func (env *Environment) Unsubscribe(ctx context.Context, req *coretypes.RequestU // More: https://docs.tendermint.com/master/rpc/#/Websocket/unsubscribe_all func (env *Environment) UnsubscribeAll(ctx context.Context) (*coretypes.ResultUnsubscribe, error) { addr := rpctypes.GetCallInfo(ctx).RemoteAddr() - env.Logger.Info("Unsubscribe from all", "remote", addr) + logger.Info("Unsubscribe from all", "remote", addr) err := env.EventBus.UnsubscribeAll(ctx, addr) if err != nil { return nil, err diff --git a/sei-tendermint/internal/rpc/core/mempool.go b/sei-tendermint/internal/rpc/core/mempool.go index 9cd35b64b8..1058859c3f 100644 --- a/sei-tendermint/internal/rpc/core/mempool.go +++ b/sei-tendermint/internal/rpc/core/mempool.go @@ -114,7 +114,7 @@ func (env *Environment) BroadcastTxCommit(ctx context.Context, req *coretypes.Re count++ select { case <-ctx.Done(): - env.Logger.Error("error on broadcastTxCommit", + logger.Error("error on broadcastTxCommit", "duration", time.Since(startAt), "err", err) return &coretypes.ResultBroadcastTxCommit{ diff --git a/sei-tendermint/internal/state/execution.go b/sei-tendermint/internal/state/execution.go index 6d96dce3a3..16444775da 100644 --- a/sei-tendermint/internal/state/execution.go +++ b/sei-tendermint/internal/state/execution.go @@ -13,12 +13,14 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/merkle" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/mempool" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" otrace "go.opentelemetry.io/otel/trace" ) +var logger = seilog.NewLogger("tendermint", "internal", "state") + //----------------------------------------------------------------------------- // BlockExecutor handles block execution and state updates. // It exposes ApplyBlock(), which validates & executes the block, updates state w/ ABCI responses, @@ -43,7 +45,6 @@ type BlockExecutor struct { mempool mempool.Mempool evpool EvidencePool - logger log.Logger metrics *Metrics // cache the verification results over a single height @@ -53,7 +54,6 @@ type BlockExecutor struct { // NewBlockExecutor returns a new BlockExecutor with the passed-in EventBus. func NewBlockExecutor( stateStore Store, - logger log.Logger, app abci.Application, pool mempool.Mempool, evpool EvidencePool, @@ -67,7 +67,6 @@ func NewBlockExecutor( app: app, mempool: pool, evpool: evpool, - logger: logger, metrics: metrics, cache: make(map[string]struct{}), blockStore: blockStore, @@ -93,7 +92,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( ) (block *types.Block, err error) { defer func() { if r := recover(); r != nil { - blockExec.logger.Error("panic recovered in CreateProposalBlock", "panic", r, "height", height) + logger.Error("panic recovered in CreateProposalBlock", "panic", r, "height", height) // Convert panic to error block = nil err = fmt.Errorf("CreateProposalBlock panic recovered: %v", r) @@ -153,7 +152,7 @@ func (blockExec *BlockExecutor) CreateProposalBlock( for _, rtx := range txrSet.RemovedTxs() { if err := blockExec.mempool.RemoveTxByKey(rtx.Key()); err != nil { - blockExec.logger.Debug("error removing transaction from the mempool", "error", err, "tx hash", rtx.Hash()) + logger.Debug("error removing transaction from the mempool", "error", err, "tx hash", rtx) } } itxs := txrSet.IncludedTxs() @@ -215,13 +214,13 @@ func (blockExec *BlockExecutor) ValidateBlock(ctx context.Context, state State, if err != nil { // Check if this is a LastResultsHash mismatch and log detailed info if !types.SkipLastResultsHashValidation.Load() && !bytes.Equal(block.LastResultsHash, state.LastResultsHash) { - blockExec.logger.Error("LastResultsHash mismatch detected", + logger.Error("LastResultsHash mismatch detected", "height", block.Height, "expectedHash", fmt.Sprintf("%X", state.LastResultsHash), "gotHash", fmt.Sprintf("%X", block.LastResultsHash), "blockHash", fmt.Sprintf("%X", block.Hash()), "lastBlockHeight", state.LastBlockHeight, - "lastBlockID", state.LastBlockID.String(), + "lastBlockID", state.LastBlockID, "numTxs", len(block.Txs), ) } @@ -298,7 +297,7 @@ func (blockExec *BlockExecutor) ApplyBlock( return state, ErrProxyAppConn(err) } - blockExec.logger.Info( + logger.Info( "finalized block", "height", block.Height, "latency_ms", time.Since(startTime).Milliseconds(), @@ -335,7 +334,7 @@ func (blockExec *BlockExecutor) ApplyBlock( return state, err } if len(validatorUpdates) > 0 { - blockExec.logger.Debug("updates to validators", "updates", types.ValidatorListString(validatorUpdates)) + logger.Debug("updates to validators", "updates", types.ValidatorListString(validatorUpdates)) blockExec.metrics.ValidatorSetUpdates.Add(1) } if fBlockRes.ConsensusParamUpdates != nil { @@ -356,14 +355,14 @@ func (blockExec *BlockExecutor) ApplyBlock( // Log LastResultsHash computation details for debugging consensus issues if len(fBlockRes.TxResults) > 0 { - blockExec.logger.Info("LastResultsHash computed", + logger.Info("LastResultsHash computed", "height", block.Height, "hash", fmt.Sprintf("%X", h), "txCount", len(fBlockRes.TxResults), ) // Log per-tx deterministic fields (Code, Data, GasWanted, GasUsed) for debugging for i, txRes := range fBlockRes.TxResults { - blockExec.logger.Debug("TxResult for LastResultsHash", + logger.Debug("TxResult for LastResultsHash", "height", block.Height, "txIndex", i, "code", txRes.Code, @@ -396,7 +395,7 @@ func (blockExec *BlockExecutor) ApplyBlock( commitSpan.End() } if time.Since(commitStart) > 1000*time.Millisecond { - blockExec.logger.Info("commit in blockExec", + logger.Info("commit in blockExec", "duration", time.Since(commitStart), "height", block.Height) } @@ -437,9 +436,9 @@ func (blockExec *BlockExecutor) ApplyBlock( if retainHeight > 0 { pruned, err := blockExec.pruneBlocks(retainHeight) if err != nil { - blockExec.logger.Error("failed to prune blocks", "retain_height", retainHeight, "err", err) + logger.Error("failed to prune blocks", "retain_height", retainHeight, "err", err) } else { - blockExec.logger.Debug("pruned blocks", "pruned", pruned, "retain_height", retainHeight) + logger.Debug("pruned blocks", "pruned", pruned, "retain_height", retainHeight) } } blockExec.metrics.PruneBlockLatency.Observe(float64(time.Since(pruneBlockTime).Milliseconds())) @@ -457,7 +456,7 @@ func (blockExec *BlockExecutor) ApplyBlock( defer fireEventsSpan.End() } fireEventsStartTime := time.Now() - FireEvents(blockExec.logger, blockExec.eventBus, block, blockID, fBlockRes, validatorUpdates) + FireEvents(blockExec.eventBus, block, blockID, fBlockRes, validatorUpdates) blockExec.metrics.FireEventsLatency.Observe(float64(time.Since(fireEventsStartTime).Milliseconds())) if fireEventsSpan != nil { fireEventsSpan.End() @@ -484,13 +483,13 @@ func (blockExec *BlockExecutor) Commit( start := time.Now() res, err := blockExec.app.Commit(ctx) if err != nil { - blockExec.logger.Error("client error during proxyAppConn.Commit", "err", err) + logger.Error("client error during proxyAppConn.Commit", "err", err) return 0, err } blockExec.metrics.ApplicationCommitTime.Observe(float64(time.Since(start))) // ResponseCommit has no error code - just data - blockExec.logger.Info( + logger.Info( "committed state", "height", block.Height, "num_txs", len(block.Txs), @@ -536,7 +535,7 @@ func (blockExec *BlockExecutor) CheckTxFromPeerProposal(ctx context.Context, tx if err := blockExec.mempool.CheckTx(ctx, tx, func(rct *abci.ResponseCheckTx) {}, mempool.TxInfo{ SenderID: math.MaxUint16, }); err != nil { - blockExec.logger.Info(fmt.Sprintf("CheckTx for proposal tx from peer raised error %s. This could be ignored if the error is because the tx is added to the mempool while this check was happening", err)) + logger.Info("CheckTx for proposal tx from peer raised error; this could be ignored if the error is because the tx is added to the mempool while this check was happening", "err", err) } } @@ -739,7 +738,6 @@ func (state State) Update( // Fire TxEvent for every tx. // NOTE: if Tendermint crashes before commit, some or all of these events may be published again. func FireEvents( - logger log.Logger, eventBus types.BlockEventPublisher, block *types.Block, blockID types.BlockID, @@ -810,7 +808,6 @@ func ExecCommitBlock( be *BlockExecutor, appConn abci.Application, block *types.Block, - logger log.Logger, store Store, initialHeight int64, s State, @@ -862,7 +859,7 @@ func ExecCommitBlock( } blockID := types.BlockID{Hash: block.Hash(), PartSetHeader: bps.Header()} - FireEvents(be.logger, be.eventBus, block, blockID, finalizeBlockResponse, validatorUpdates) + FireEvents(be.eventBus, block, blockID, finalizeBlockResponse, validatorUpdates) } // Commit block diff --git a/sei-tendermint/internal/state/execution_test.go b/sei-tendermint/internal/state/execution_test.go index 4cb3822033..bc7750b5c1 100644 --- a/sei-tendermint/internal/state/execution_test.go +++ b/sei-tendermint/internal/state/execution_test.go @@ -23,7 +23,6 @@ import ( sf "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/test/factory" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/version" @@ -36,11 +35,10 @@ var ( func TestApplyBlock(t *testing.T) { app := &testApp{} - logger := log.NewNopLogger() ctx := t.Context() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, _ := makeState(t, 1, 1) @@ -58,7 +56,7 @@ func TestApplyBlock(t *testing.T) { mock.Anything, mock.Anything).Return(nil) mp.On("TxStore").Return(nil) - blockExec := sm.NewBlockExecutor(stateStore, logger, app, mp, sm.EmptyEvidencePool{}, blockStore, eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(stateStore, app, mp, sm.EmptyEvidencePool{}, blockStore, eventBus, sm.NopMetrics()) block := sf.MakeBlock(state, 1, new(types.Commit)) bps, err := block.MakePartSet(testPartSize) @@ -79,7 +77,6 @@ func TestApplyBlock(t *testing.T) { func TestFinalizeBlockDecidedLastCommit(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() app := &testApp{} state, stateDB, privVals := makeState(t, 7, 1) @@ -115,10 +112,10 @@ func TestFinalizeBlockDecidedLastCommit(t *testing.T) { mock.Anything).Return(nil) mp.On("TxStore").Return(nil) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) - blockExec := sm.NewBlockExecutor(stateStore, log.NewNopLogger(), app, mp, evpool, blockStore, eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(stateStore, app, mp, evpool, blockStore, eventBus, sm.NopMetrics()) state, _, lastCommit := makeAndCommitGoodBlock(ctx, t, state, 1, new(types.Commit), state.NextValidators.Validators[0].Address, blockExec, privVals, nil) for idx, isAbsent := range tc.absentCommitSigs { @@ -149,7 +146,6 @@ func TestFinalizeBlockByzantineValidators(t *testing.T) { ctx := t.Context() app := &testApp{} - logger := log.NewNopLogger() state, stateDB, privVals := makeState(t, 1, 1) stateStore := sm.NewStore(stateDB) @@ -237,12 +233,12 @@ func TestFinalizeBlockByzantineValidators(t *testing.T) { mock.Anything).Return(nil) mp.On("TxStore").Return(nil) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) blockStore := store.NewBlockStore(dbm.NewMemDB()) - blockExec := sm.NewBlockExecutor(stateStore, log.NewNopLogger(), app, mp, evpool, blockStore, eventBus, sm.NopMetrics()) + blockExec := sm.NewBlockExecutor(stateStore, app, mp, evpool, blockStore, eventBus, sm.NopMetrics()) block := sf.MakeBlock(state, 1, new(types.Commit)) block.Evidence = ev @@ -265,20 +261,18 @@ func TestProcessProposal(t *testing.T) { ctx := t.Context() app := abcimocks.NewApplication(t) - logger := log.NewNopLogger() state, stateDB, privVals := makeState(t, 1, height) stateStore := sm.NewStore(stateDB) blockStore := store.NewBlockStore(dbm.NewMemDB()) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) mp := &mpmocks.Mempool{} mp.On("TxStore").Return(nil) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -477,7 +471,6 @@ func TestFinalizeBlockValidatorUpdates(t *testing.T) { ctx := t.Context() app := &testApp{} - logger := log.NewNopLogger() state, stateDB, _ := makeState(t, 1, 1) stateStore := sm.NewStore(stateDB) @@ -496,12 +489,11 @@ func TestFinalizeBlockValidatorUpdates(t *testing.T) { mp.On("ReapMaxBytesMaxGas", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(types.Txs{}) mp.On("TxStore").Return(nil) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -556,9 +548,8 @@ func TestFinalizeBlockValidatorUpdatesResultingInEmptySet(t *testing.T) { ctx := t.Context() app := &testApp{} - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, _ := makeState(t, 1, 1) @@ -568,7 +559,6 @@ func TestFinalizeBlockValidatorUpdatesResultingInEmptySet(t *testing.T) { mp.On("TxStore").Return(nil) blockExec := sm.NewBlockExecutor( stateStore, - log.NewNopLogger(), app, mp, sm.EmptyEvidencePool{}, @@ -598,9 +588,7 @@ func TestEmptyPrepareProposal(t *testing.T) { ctx := t.Context() var err error - logger := log.NewNopLogger() - - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) app := abcimocks.NewApplication(t) @@ -624,7 +612,6 @@ func TestEmptyPrepareProposal(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -646,8 +633,7 @@ func TestPrepareProposalErrorOnNonExistingRemoved(t *testing.T) { const height = 2 ctx := t.Context() - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 1, height) @@ -674,7 +660,6 @@ func TestPrepareProposalErrorOnNonExistingRemoved(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, evpool, @@ -698,8 +683,7 @@ func TestPrepareProposalReorderTxs(t *testing.T) { ctx := t.Context() var err error - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 1, height) @@ -723,7 +707,6 @@ func TestPrepareProposalReorderTxs(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, evpool, @@ -750,8 +733,7 @@ func TestPrepareProposalErrorOnTooManyTxs(t *testing.T) { ctx := t.Context() var err error - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 1, height) @@ -778,7 +760,6 @@ func TestPrepareProposalErrorOnTooManyTxs(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, evpool, @@ -802,8 +783,7 @@ func TestPrepareProposalErrorOnPrepareProposalError(t *testing.T) { ctx := t.Context() var err error - logger := log.NewNopLogger() - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 1, height) @@ -820,7 +800,6 @@ func TestPrepareProposalErrorOnPrepareProposalError(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, evpool, @@ -893,7 +872,6 @@ func (app *panicApp) FinalizeBlock(_ context.Context, req *abci.RequestFinalizeB // TestCreateProposalBlockPanicRecovery tests that panics are recovered and converted to errors func TestCreateProposalBlockPanicRecovery(t *testing.T) { ctx := context.Background() - logger := log.NewNopLogger() // Create the panicking app app := &panicApp{} @@ -902,7 +880,7 @@ func TestCreateProposalBlockPanicRecovery(t *testing.T) { state, stateDB, _ := makeState(t, 1, 1) stateStore := sm.NewStore(stateDB) blockStore := store.NewBlockStore(dbm.NewMemDB()) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) defer eventBus.Stop() @@ -912,7 +890,6 @@ func TestCreateProposalBlockPanicRecovery(t *testing.T) { blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, diff --git a/sei-tendermint/internal/state/indexer/indexer_service.go b/sei-tendermint/internal/state/indexer/indexer_service.go index dc3b21f3e1..c4815848b8 100644 --- a/sei-tendermint/internal/state/indexer/indexer_service.go +++ b/sei-tendermint/internal/state/indexer/indexer_service.go @@ -6,16 +6,17 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/eventbus" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "internal", "state", "indexer") + // Service connects event bus, transaction and block indexers together in // order to index transactions and blocks coming from the event bus. type Service struct { service.BaseService - logger log.Logger eventSinks []EventSink eventBus *eventbus.EventBus @@ -31,7 +32,6 @@ type Service struct { // NewService constructs a new indexer service from the given arguments. func NewService(args ServiceArgs) *Service { is := &Service{ - logger: args.Logger, eventSinks: args.Sinks, eventBus: args.EventBus, metrics: args.Metrics, @@ -39,7 +39,7 @@ func NewService(args ServiceArgs) *Service { if is.metrics == nil { is.metrics = NopMetrics() } - is.BaseService = *service.NewBaseService(args.Logger, "IndexerService", is) + is.BaseService = *service.NewBaseService("IndexerService", is) return is } @@ -72,7 +72,7 @@ func (is *Service) publish(msg pubsub.Message) error { // GATHER: Accumulate a transaction into the current block's batch. txResult := msg.Data().(types.EventDataTx).TxResultV2 if err := curr.Add(&txResult); err != nil { - is.logger.Error("failed to add tx to batch", + logger.Error("failed to add tx to batch", "height", is.currentBlock.height, "index", txResult.Index, "err", err) } @@ -85,12 +85,12 @@ func (is *Service) publish(msg pubsub.Message) error { for _, sink := range is.eventSinks { start := time.Now() if err := sink.IndexBlockEvents(is.currentBlock.header); err != nil { - is.logger.Error("failed to index block header", + logger.Error("failed to index block header", "height", is.currentBlock.height, "err", err) } else { is.metrics.BlockEventsSeconds.Observe(time.Since(start).Seconds()) is.metrics.BlocksIndexed.Add(1) - is.logger.Debug("indexed block", + logger.Debug("indexed block", "height", is.currentBlock.height, "sink", sink.Type()) } @@ -98,12 +98,12 @@ func (is *Service) publish(msg pubsub.Message) error { start := time.Now() err := sink.IndexTxEvents(curr.Ops) if err != nil { - is.logger.Error("failed to index block txs", + logger.Error("failed to index block txs", "height", is.currentBlock.height, "err", err) } else { is.metrics.TxEventsSeconds.Observe(time.Since(start).Seconds()) is.metrics.TransactionsIndexed.Add(float64(curr.Size())) - is.logger.Debug("indexed txs", + logger.Debug("indexed txs", "height", is.currentBlock.height, "sink", sink.Type()) } } @@ -135,7 +135,7 @@ func (is *Service) OnStart(ctx context.Context) error { func (is *Service) OnStop() { for _, sink := range is.eventSinks { if err := sink.Stop(); err != nil { - is.logger.Error("failed to close eventsink", "eventsink", sink.Type(), "err", err) + logger.Error("failed to close eventsink", "eventsink", sink.Type(), "err", err) } } } @@ -145,7 +145,6 @@ type ServiceArgs struct { Sinks []EventSink EventBus *eventbus.EventBus Metrics *Metrics - Logger log.Logger } // KVSinkEnabled returns the given eventSinks is containing KVEventSink. diff --git a/sei-tendermint/internal/state/indexer/indexer_service_test.go b/sei-tendermint/internal/state/indexer/indexer_service_test.go index 84e2a6b006..d177477a8b 100644 --- a/sei-tendermint/internal/state/indexer/indexer_service_test.go +++ b/sei-tendermint/internal/state/indexer/indexer_service_test.go @@ -19,7 +19,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink/kv" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink/psql" - tmlog "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" // Register the Postgre database driver. @@ -41,9 +40,8 @@ var ( func TestIndexerServiceIndexesBlocks(t *testing.T) { ctx := t.Context() - logger := tmlog.NewNopLogger() // event bus - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() err := eventBus.Start(ctx) require.NoError(t, err) t.Cleanup(eventBus.Wait) @@ -60,7 +58,6 @@ func TestIndexerServiceIndexesBlocks(t *testing.T) { assert.True(t, indexer.IndexingEnabled(eventSinks)) service := indexer.NewService(indexer.ServiceArgs{ - Logger: logger, Sinks: eventSinks, EventBus: eventBus, }) diff --git a/sei-tendermint/internal/state/validation_test.go b/sei-tendermint/internal/state/validation_test.go index e4f54af9ba..8ce029d9cb 100644 --- a/sei-tendermint/internal/state/validation_test.go +++ b/sei-tendermint/internal/state/validation_test.go @@ -20,7 +20,6 @@ import ( statefactory "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/test/factory" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" testfactory "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" @@ -31,10 +30,10 @@ const validationTestsStopHeight int64 = 10 func TestValidateBlockHeader(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() + app := &testApp{} - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 3, 1) @@ -55,7 +54,6 @@ func TestValidateBlockHeader(t *testing.T) { blockStore := store.NewBlockStore(dbm.NewMemDB()) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -136,10 +134,9 @@ func TestValidateBlockHeader(t *testing.T) { func TestValidateBlockCommit(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() app := &testApp{} - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) state, stateDB, privVals := makeState(t, 1, 1) @@ -160,7 +157,6 @@ func TestValidateBlockCommit(t *testing.T) { blockStore := store.NewBlockStore(dbm.NewMemDB()) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -277,7 +273,6 @@ func TestValidateBlockCommit(t *testing.T) { func TestValidateBlockEvidence(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() app := &testApp{} state, stateDB, privVals := makeState(t, 4, 1) @@ -291,7 +286,7 @@ func TestValidateBlockEvidence(t *testing.T) { evpool.On("ABCIEvidence", mock.AnythingOfType("int64"), mock.AnythingOfType("[]types.Evidence")).Return( []abci.Misbehavior{}) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) mp := &mpmocks.Mempool{} mp.On("Lock").Return() @@ -309,7 +304,6 @@ func TestValidateBlockEvidence(t *testing.T) { state.ConsensusParams.Evidence.MaxBytes = 1000 blockExec := sm.NewBlockExecutor( stateStore, - log.NewNopLogger(), app, mp, evpool, diff --git a/sei-tendermint/internal/statesync/reactor.go b/sei-tendermint/internal/statesync/reactor.go index 30bdd1b644..6e3b9e2ffe 100644 --- a/sei-tendermint/internal/statesync/reactor.go +++ b/sei-tendermint/internal/statesync/reactor.go @@ -17,7 +17,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" @@ -160,7 +159,6 @@ type Metricer interface { // serving snapshots for other nodes. type Reactor struct { service.BaseService - logger log.Logger chainID string initialHeight int64 @@ -226,7 +224,6 @@ func NewReactor( chainID string, initialHeight int64, cfg config.StateSyncConfig, - logger log.Logger, conn abci.Application, router *p2p.Router, stateStore sm.Store, @@ -256,7 +253,6 @@ func NewReactor( return nil, fmt.Errorf("open params channel: %w", err) } r := &Reactor{ - logger: logger, chainID: chainID, initialHeight: initialHeight, cfg: cfg, @@ -280,7 +276,7 @@ func NewReactor( restartNoAvailablePeersWindow: time.Duration(selfRemediationConfig.StatesyncNoPeersRestartWindowSeconds) * time.Second, //nolint:gosec // validated in config.ValidateBasic against MaxInt64 } - r.BaseService = *service.NewBaseService(logger, "StateSync", r) + r.BaseService = *service.NewBaseService("StateSync", r) return r, nil } @@ -290,9 +286,8 @@ func (r *Reactor) initStateProvider(ctx context.Context, chainID string, initial Height: r.cfg.TrustHeight, Hash: r.cfg.TrustHashBytes(), } - spLogger := r.logger.With("module", "stateprovider") - spLogger.Info("initializing state provider", "trustPeriod", to.Period, - "trustHeight", to.Height, "useP2P", r.cfg.UseP2P) + logger.Info("initializing state provider", "trustPeriod", to.Period, + "trustHeight", to.Height, "useP2P", r.cfg.UseP2P, "module", "stateprovider") if r.cfg.UseP2P { if err := r.waitForEnoughPeers(ctx, 2); err != nil { @@ -305,7 +300,7 @@ func (r *Reactor) initStateProvider(ctx context.Context, chainID string, initial providers[idx] = NewBlockProvider(p, chainID, r.dispatcher) } - stateProvider, err := NewP2PStateProvider(ctx, chainID, initialHeight, r.cfg.VerifyLightBlockTimeout, providers, to, r.paramsChannel, r.logger.With("module", "stateprovider"), r.cfg.BlacklistTTL) + stateProvider, err := NewP2PStateProvider(ctx, chainID, initialHeight, r.cfg.VerifyLightBlockTimeout, providers, to, r.paramsChannel, r.cfg.BlacklistTTL) if err != nil { return fmt.Errorf("failed to initialize P2P state provider: %w", err) } @@ -313,7 +308,7 @@ func (r *Reactor) initStateProvider(ctx context.Context, chainID string, initial return nil } - stateProvider, err := NewRPCStateProvider(ctx, chainID, initialHeight, r.cfg.VerifyLightBlockTimeout, r.cfg.RPCServers, to, spLogger, r.cfg.BlacklistTTL) + stateProvider, err := NewRPCStateProvider(ctx, chainID, initialHeight, r.cfg.VerifyLightBlockTimeout, r.cfg.RPCServers, to, r.cfg.BlacklistTTL) if err != nil { return fmt.Errorf("failed to initialize RPC state provider: %w", err) } @@ -333,7 +328,6 @@ func (r *Reactor) OnStart(ctx context.Context) error { // ideal. r.initSyncer = func() *syncer { return &syncer{ - logger: r.logger, stateProvider: r.stateProvider, conn: r.conn, snapshots: newSnapshotPool(), @@ -366,9 +360,9 @@ func (r *Reactor) OnStart(ctx context.Context) error { } if r.needsStateSync { - r.logger.Info("This node needs state sync, going to perform a state sync") + logger.Info("This node needs state sync, going to perform a state sync") if _, err := r.Sync(ctx); err != nil { - r.logger.Error("state sync failed; shutting down this node", "err", err) + logger.Error("state sync failed; shutting down this node", "err", err) return err } } @@ -404,7 +398,7 @@ func (r *Reactor) Sync(ctx context.Context) (sm.State, error) { if err := r.waitForEnoughPeers(ctx, 2); err != nil { return sm.State{}, err } - r.logger.Info("Finished waiting for 2 peers to start state sync") + logger.Info("Finished waiting for 2 peers to start state sync") } r.mtx.Lock() @@ -429,7 +423,7 @@ func (r *Reactor) Sync(ctx context.Context) (sm.State, error) { r.mtx.Unlock() }() - r.logger.Info("starting state sync") + logger.Info("starting state sync") if r.cfg.UseLocalSnapshot { snapshotList, _ := r.recentSnapshots(context.Background(), recentSnapshots) @@ -441,7 +435,7 @@ func (r *Reactor) Sync(ctx context.Context) (sm.State, error) { } state, commit, err := r.syncer.SyncAny(ctx, r.cfg.DiscoveryTime, r.requestSnaphot) - r.logger.Info("Finished state sync, fetching state and commit to bootstrap the node") + logger.Info("Finished state sync, fetching state and commit to bootstrap the node") if err != nil { return sm.State{}, err } @@ -456,7 +450,7 @@ func (r *Reactor) Sync(ctx context.Context) (sm.State, error) { if !r.cfg.UseLocalSnapshot { if err := r.Backfill(ctx, state); err != nil { - r.logger.Error("backfill failed. Proceeding optimistically...", "err", err) + logger.Error("backfill failed. Proceeding optimistically...", "err", err) } } @@ -470,7 +464,7 @@ func (r *Reactor) Sync(ctx context.Context) (sm.State, error) { } if r.postSyncHook != nil { - r.logger.Info("Executing post tate sync hook") + logger.Info("Executing post tate sync hook") if err := r.postSyncHook(ctx, state); err != nil { return sm.State{}, err } @@ -510,7 +504,7 @@ func (r *Reactor) backfill( trustedBlockID types.BlockID, stopTime time.Time, ) error { - r.logger.Info("starting backfill process...", "startHeight", startHeight, + logger.Info("starting backfill process...", "startHeight", startHeight, "stopHeight", stopHeight, "stopTime", stopTime, "trustedBlockID", trustedBlockID) r.backfillBlockTotal = startHeight - stopHeight + 1 @@ -540,7 +534,7 @@ func (r *Reactor) backfill( case height := <-queue.nextHeight(): // pop the next peer of the list to send a request to peer := r.peers.Pop(ctx) - r.logger.Debug("fetching next block", "height", height, "peer", peer) + logger.Debug("fetching next block", "height", height, "peer", peer) subCtx, cancel := context.WithTimeout(ctxWithCancel, r.cfg.LightBlockResponseTimeout) defer cancel() lb, err := func() (*types.LightBlock, error) { @@ -556,18 +550,18 @@ func (r *Reactor) backfill( if err != nil { queue.retry(height) if errors.Is(err, ErrNoConnectedPeers) { - r.logger.Info("backfill: no connected peers to fetch light blocks from; sleeping...", + logger.Info("backfill: no connected peers to fetch light blocks from; sleeping...", "sleepTime", sleepTime) time.Sleep(sleepTime) } else { // we don't punish the peer as it might just have not responded in time - r.logger.Info("backfill: error with fetching light block", + logger.Info("backfill: error with fetching light block", "height", height, "err", err) } continue } if lb == nil { - r.logger.Info("backfill: peer didn't have block, fetching from another peer", "height", height) + logger.Info("backfill: peer didn't have block, fetching from another peer", "height", height) queue.retry(height) // As we are fetching blocks backwards, if this node doesn't have the block it likely doesn't // have any prior ones, thus we remove it from the peer list. @@ -579,7 +573,7 @@ func (r *Reactor) backfill( // hashes line up err = lb.ValidateBasic(chainID) if err != nil || lb.Height != height { - r.logger.Info("backfill: fetched light block failed validate basic, removing peer...", + logger.Info("backfill: fetched light block failed validate basic, removing peer...", "err", err, "height", height) queue.retry(height) r.evict(peer, fmt.Errorf("statesync: received invalid light block: %w", err)) @@ -591,7 +585,7 @@ func (r *Reactor) backfill( block: lb, peer: peer, }) - r.logger.Debug("backfill: added light block to processing queue", "height", height) + logger.Debug("backfill: added light block to processing queue", "height", height) case <-queue.done(): return @@ -612,7 +606,7 @@ func (r *Reactor) backfill( // we equate to. ValidatorsHash and CommitHash have already been // checked in the `ValidateBasic` if w, g := trustedBlockID.Hash, resp.block.Hash(); !bytes.Equal(w, g) { - r.logger.Info("received invalid light block. header hash doesn't match trusted LastBlockID", + logger.Info("received invalid light block. header hash doesn't match trusted LastBlockID", "trustedHash", w, "receivedHash", g, "height", resp.block.Height) r.evict(resp.peer, fmt.Errorf("statesync: received invalid light block. Expected hash %v, got: %v", w, g)) queue.retry(resp.block.Height) @@ -637,7 +631,7 @@ func (r *Reactor) backfill( trustedBlockID = resp.block.LastBlockID queue.success() - r.logger.Info("backfill: verified and stored light block", "height", resp.block.Height) + logger.Info("backfill: verified and stored light block", "height", resp.block.Height) lastValidatorSet = resp.block.ValidatorSet @@ -661,7 +655,7 @@ func (r *Reactor) backfill( return err } - r.logger.Info("successfully completed backfill process", "endHeight", queue.terminal.Height) + logger.Info("successfully completed backfill process", "endHeight", queue.terminal.Height) return nil } } @@ -672,7 +666,7 @@ func (r *Reactor) backfill( // for this channel. This should never be called outside of handleMessage. func (r *Reactor) handleSnapshotMessage(ctx context.Context, m p2p.RecvMsg[*pb.Message]) (err error) { defer r.recoverToErr(&err) - logger := r.logger.With("peer", m.From) + logger := logger.With("peer", m.From) snapshotCh := r.snapshotChannel switch msg := m.Message.Sum.(type) { @@ -745,7 +739,7 @@ func (r *Reactor) handleChunkMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mess switch msg := m.Message.Sum.(type) { case *pb.Message_ChunkRequest: req := msg.ChunkRequest - r.logger.Debug( + logger.Debug( "received chunk request", "height", req.GetHeight(), "format", req.GetFormat(), @@ -758,7 +752,7 @@ func (r *Reactor) handleChunkMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mess Chunk: req.GetIndex(), }) if err != nil { - r.logger.Error( + logger.Error( "failed to load chunk", "height", req.GetHeight(), "format", req.GetFormat(), @@ -769,7 +763,7 @@ func (r *Reactor) handleChunkMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mess return nil } - r.logger.Debug( + logger.Debug( "sending chunk", "height", req.GetHeight(), "format", req.GetFormat(), @@ -790,11 +784,11 @@ func (r *Reactor) handleChunkMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mess defer r.mtx.RUnlock() if r.syncer == nil { - r.logger.Debug("received unexpected chunk; no state sync in progress", "peer", m.From) + logger.Debug("received unexpected chunk; no state sync in progress", "peer", m.From) return nil } - r.logger.Debug( + logger.Debug( "received chunk; adding to sync", "height", resp.GetHeight(), "format", resp.GetFormat(), @@ -809,7 +803,7 @@ func (r *Reactor) handleChunkMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mess Sender: m.From, }) if err != nil { - r.logger.Error( + logger.Error( "failed to add chunk", "height", resp.GetHeight(), "format", resp.GetFormat(), @@ -833,10 +827,10 @@ func (r *Reactor) handleLightBlockMessage(ctx context.Context, m p2p.RecvMsg[*pb switch msg := m.Message.Sum.(type) { case *pb.Message_LightBlockRequest: req := msg.LightBlockRequest - r.logger.Info("received light block request", "height", req.GetHeight()) + logger.Info("received light block request", "height", req.GetHeight()) lb, err := r.fetchLightBlock(req.GetHeight()) if err != nil { - r.logger.Error("failed to retrieve light block", "err", err, "height", req.GetHeight()) + logger.Error("failed to retrieve light block", "err", err, "height", req.GetHeight()) return err } if lb == nil { @@ -846,7 +840,7 @@ func (r *Reactor) handleLightBlockMessage(ctx context.Context, m p2p.RecvMsg[*pb lbproto, err := lb.ToProto() if err != nil { - r.logger.Error("marshaling light block to proto", "err", err) + logger.Error("marshaling light block to proto", "err", err) return nil } @@ -859,12 +853,12 @@ func (r *Reactor) handleLightBlockMessage(ctx context.Context, m p2p.RecvMsg[*pb if resp.LightBlock != nil { height = resp.LightBlock.GetSignedHeader().GetHeader().GetHeight() } - r.logger.Info("received light block response", "peer", m.From, "height", height) + logger.Info("received light block response", "peer", m.From, "height", height) if err := r.dispatcher.Respond(ctx, resp.LightBlock, m.From); err != nil { if errors.Is(err, context.Canceled) { return err } - r.logger.Error("error processing light block response", "err", err, "height", height) + logger.Error("error processing light block response", "err", err, "height", height) } default: @@ -881,13 +875,13 @@ func (r *Reactor) handleParamsMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mes case *pb.Message_ParamsRequest: req := msg.ParamsRequest if req.GetHeight() > math.MaxInt64 { - r.logger.Error("invalid height in params request", "height", req.GetHeight()) + logger.Error("invalid height in params request", "height", req.GetHeight()) return nil } - r.logger.Debug("received consensus params request", "height", req.GetHeight()) + logger.Debug("received consensus params request", "height", req.GetHeight()) cp, err := r.stateStore.LoadConsensusParams(int64(req.GetHeight())) //nolint:gosec // height from peer is validated above if err != nil { - r.logger.Error("failed to fetch requested consensus params", "err", err, "height", req.GetHeight()) + logger.Error("failed to fetch requested consensus params", "err", err, "height", req.GetHeight()) return nil } @@ -900,7 +894,7 @@ func (r *Reactor) handleParamsMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mes resp := msg.ParamsResponse r.mtx.RLock() defer r.mtx.RUnlock() - r.logger.Debug("received consensus params response", "height", resp.GetHeight()) + logger.Debug("received consensus params response", "height", resp.GetHeight()) cp := types.ConsensusParamsFromProto(resp.GetConsensusParams()) @@ -913,7 +907,7 @@ func (r *Reactor) handleParamsMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mes return errors.New("failed to send consensus params, stateprovider not ready for response") } } else { - r.logger.Debug("received unexpected params response; using RPC state provider", "peer", m.From) + logger.Debug("received unexpected params response; using RPC state provider", "peer", m.From) } default: @@ -926,7 +920,7 @@ func (r *Reactor) handleParamsMessage(ctx context.Context, m p2p.RecvMsg[*pb.Mes func (r *Reactor) recoverToErr(err *error) { if e := recover(); e != nil { *err = fmt.Errorf("panic in processing message: %v", e) - r.logger.Error( + logger.Error( "recovering from processing message panic", "err", *err, "stack", string(debug.Stack()), @@ -993,7 +987,7 @@ func (r *Reactor) processParamsCh(ctx context.Context) { // processPeerUpdate processes a PeerUpdate, returning an error upon failing to // handle the PeerUpdate or if a panic is recovered. func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { - r.logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) + logger.Debug("received peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) switch peerUpdate.Status { case p2p.PeerStatusUp: @@ -1004,7 +998,7 @@ func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { r.peers.Append(peerUpdate.NodeID) } else { - r.logger.Error("could not use peer for statesync (removing)", "peer", peerUpdate.NodeID) + logger.Error("could not use peer for statesync (removing)", "peer", peerUpdate.NodeID) r.peers.Remove(peerUpdate.NodeID) } case p2p.PeerStatusDown: @@ -1018,7 +1012,7 @@ func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { if r.lastNoAvailablePeers.IsZero() { r.lastNoAvailablePeers = time.Now() } else if time.Since(r.lastNoAvailablePeers) > r.restartNoAvailablePeersWindow { - r.logger.Error("no available peers left for statesync (restarting router)") + logger.Error("no available peers left for statesync (restarting router)") r.restartEvent() } } else { @@ -1047,11 +1041,11 @@ func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { r.syncer.RemovePeer(peerUpdate.NodeID) if sp, ok := r.stateProvider.(*StateProviderP2P); ok { if err := sp.RemoveProviderByID(peerUpdate.NodeID); err != nil { - r.logger.Error("failed to remove peer witness", "peer", peerUpdate.NodeID, "error", err) + logger.Error("failed to remove peer witness", "peer", peerUpdate.NodeID, "error", err) } } } - r.logger.Debug("processed peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) + logger.Debug("processed peer update", "peer", peerUpdate.NodeID, "status", peerUpdate.Status) } // processPeerUpdates initiates a blocking process where we listen for and handle @@ -1155,7 +1149,7 @@ func (r *Reactor) waitForEnoughPeers(ctx context.Context, numPeers int) error { case <-t.C: continue case <-logT.C: - r.logger.Info("waiting for sufficient peers to start statesync", + logger.Info("waiting for sufficient peers to start statesync", "duration", time.Since(startAt).String(), "target", numPeers, "peers", r.peers.Len(), diff --git a/sei-tendermint/internal/statesync/reactor_test.go b/sei-tendermint/internal/statesync/reactor_test.go index 1cbc2eb1f1..5280991603 100644 --- a/sei-tendermint/internal/statesync/reactor_test.go +++ b/sei-tendermint/internal/statesync/reactor_test.go @@ -21,7 +21,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/statesync/mocks" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" @@ -68,14 +67,11 @@ func setup( cfg := config.DefaultStateSyncConfig() cfg.LightBlockResponseTimeout = 100 * time.Millisecond - logger, _ := log.NewDefaultLogger("plain", "debug") - n := network.Nodes()[0] reactor, err := NewReactor( factory.DefaultTestChainID, 1, *cfg, - logger.With("component", "reactor"), conn, n.Router, stateStore, @@ -92,7 +88,6 @@ func setup( if setSyncer { reactor.syncer = &syncer{ - logger: logger, stateProvider: stateProvider, conn: conn, snapshots: newSnapshotPool(), diff --git a/sei-tendermint/internal/statesync/stateprovider.go b/sei-tendermint/internal/statesync/stateprovider.go index 4d523cc624..94429ea891 100644 --- a/sei-tendermint/internal/statesync/stateprovider.go +++ b/sei-tendermint/internal/statesync/stateprovider.go @@ -9,11 +9,11 @@ import ( "sync" "time" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/scope" "github.com/sei-protocol/sei-chain/sei-tendermint/light" @@ -33,6 +33,8 @@ const ( //go:generate ../../scripts/mockery_generate.sh StateProvider +var logger = seilog.NewLogger("tendermint", "internal", "statesync") + // StateProvider is a provider of trusted state data for bootstrapping a node. This refers // to the state.State object, not the state machine. There are two implementations. One // uses the P2P layer and the other uses the RPC layer. Both use light client verification. @@ -51,7 +53,6 @@ type stateProviderRPC struct { initialHeight int64 providers map[lightprovider.Provider]string verifyLightBlockTimeout time.Duration - logger log.Logger } // NewRPCStateProvider creates a new StateProvider using a light client and RPC clients. @@ -62,7 +63,6 @@ func NewRPCStateProvider( verifyLightBlockTimeout time.Duration, servers []string, trustOptions light.TrustOptions, - logger log.Logger, blacklistTTL time.Duration, ) (StateProvider, error) { if len(servers) < 2 { @@ -84,12 +84,11 @@ func NewRPCStateProvider( } lc, err := light.NewClient(ctx, chainID, trustOptions, providers[0], providers[1:], - lightdb.New(dbm.NewMemDB()), blacklistTTL, light.Logger(logger)) + lightdb.New(dbm.NewMemDB()), blacklistTTL) if err != nil { return nil, err } return &stateProviderRPC{ - logger: logger, lc: lc, initialHeight: initialHeight, providers: providerRemotes, @@ -194,7 +193,7 @@ func (s *stateProviderRPC) State(ctx context.Context, height uint64) (sm.State, if err != nil { return sm.State{}, fmt.Errorf("unable to create RPC client: %w", err) } - rpcclient := lightrpc.NewClient(s.logger, primaryRPC, s.lc) + rpcclient := lightrpc.NewClient(primaryRPC, s.lc) result, err := rpcclient.ConsensusParams(ctx, ¤tLightBlock.Height) if err != nil { return sm.State{}, fmt.Errorf("unable to fetch consensus parameters for height %v: %w", @@ -233,7 +232,6 @@ func NewP2PStateProvider( providers []lightprovider.Provider, trustOptions light.TrustOptions, paramsSendCh *p2p.Channel[*pb.Message], - logger log.Logger, blacklistTTL time.Duration, ) (StateProvider, error) { if len(providers) < 2 { @@ -241,7 +239,7 @@ func NewP2PStateProvider( } lc, err := light.NewClient(ctx, chainID, trustOptions, providers[0], providers[1:], - lightdb.New(dbm.NewMemDB()), blacklistTTL, light.Logger(logger)) + lightdb.New(dbm.NewMemDB()), blacklistTTL) if err != nil { return nil, err } diff --git a/sei-tendermint/internal/statesync/syncer.go b/sei-tendermint/internal/statesync/syncer.go index f77497e856..12ce82a9aa 100644 --- a/sei-tendermint/internal/statesync/syncer.go +++ b/sei-tendermint/internal/statesync/syncer.go @@ -12,7 +12,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/proxy" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" pb "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/statesync" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -51,7 +50,6 @@ var ( // sync all snapshots in the pool (pausing to discover new ones), or Sync() to sync a specific // snapshot. Snapshots and chunks are fed via AddSnapshot() and AddChunk() as appropriate. type syncer struct { - logger log.Logger stateProvider StateProvider conn abci.Application snapshots *snapshotPool @@ -84,10 +82,10 @@ func (s *syncer) AddChunk(chunk *chunk) (bool, error) { return false, err } if added { - s.logger.Debug("Added chunk to queue", "height", chunk.Height, "format", chunk.Format, + logger.Debug("Added chunk to queue", "height", chunk.Height, "format", chunk.Format, "chunk", chunk.Index) } else { - s.logger.Debug("Ignoring duplicate chunk in queue", "height", chunk.Height, "format", chunk.Format, + logger.Debug("Ignoring duplicate chunk in queue", "height", chunk.Height, "format", chunk.Format, "chunk", chunk.Index) } return added, nil @@ -102,8 +100,7 @@ func (s *syncer) AddSnapshot(peerID types.NodeID, snapshot *snapshot) (bool, err } if added { s.metrics.TotalSnapshots.Add(1) - s.logger.Info(fmt.Sprintf("Discovered and added new snapshot from peer %s", peerID), "height", snapshot.Height, "format", snapshot.Format, - "hash", snapshot.Hash) + logger.Info("discovered and added new snapshot", "peer", peerID, "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) } return added, nil } @@ -111,13 +108,13 @@ func (s *syncer) AddSnapshot(peerID types.NodeID, snapshot *snapshot) (bool, err // AddPeer adds a peer to the pool. For now we just keep it simple and send a // single request to discover snapshots, later we may want to do retries and stuff. func (s *syncer) AddPeer(peerID types.NodeID) { - s.logger.Info("Requesting snapshots from peer", "peer", peerID) + logger.Info("Requesting snapshots from peer", "peer", peerID) s.snapshotCh.Send(wrap(&pb.SnapshotsRequest{}), peerID) } // RemovePeer removes a peer from the pool. func (s *syncer) RemovePeer(peerID types.NodeID) { - s.logger.Debug("Removing peer from sync", "peer", peerID) + logger.Debug("Removing peer from sync", "peer", peerID) s.snapshots.RemovePeer(peerID) } @@ -137,7 +134,7 @@ func (s *syncer) SyncAny( if err := requestSnapshots(); err != nil { return sm.State{}, nil, err } - s.logger.Info(fmt.Sprintf("Discovering snapshots for %v", discoveryTime)) + logger.Info("discovering snapshots", "duration", discoveryTime) time.Sleep(discoveryTime) } @@ -166,7 +163,7 @@ func (s *syncer) SyncAny( if discoveryTime == 0 { return sm.State{}, nil, errNoSnapshots } - s.logger.Info(fmt.Sprintf("No snapshots discovered sleeping for %v", discoveryTime)) + logger.Info("no snapshots discovered, sleeping", "duration", discoveryTime) time.Sleep(discoveryTime) continue } @@ -179,7 +176,7 @@ func (s *syncer) SyncAny( s.processingSnapshot = snapshot s.metrics.SnapshotChunkTotal.Set(float64(snapshot.Chunks)) - s.logger.Info(fmt.Sprintf("Going to start state sync with the picked snapshot height %d", snapshot.Height)) + logger.Info("starting state sync with picked snapshot", "height", snapshot.Height) newState, commit, err := s.Sync(ctx, snapshot, chunks) switch { case err == nil: @@ -192,30 +189,30 @@ func (s *syncer) SyncAny( case errors.Is(err, errRetrySnapshot): chunks.RetryAll() - s.logger.Info("Retrying snapshot", "height", snapshot.Height, "format", snapshot.Format, + logger.Info("Retrying snapshot", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) continue case errors.Is(err, errTimeout): s.snapshots.Reject(snapshot) - s.logger.Error("Timed out waiting for snapshot chunks, rejected snapshot", + logger.Error("Timed out waiting for snapshot chunks, rejected snapshot", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) case errors.Is(err, errRejectSnapshot): s.snapshots.Reject(snapshot) - s.logger.Info("Snapshot rejected", "height", snapshot.Height, "format", snapshot.Format, + logger.Info("Snapshot rejected", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) case errors.Is(err, errRejectFormat): s.snapshots.RejectFormat(snapshot.Format) - s.logger.Info("Snapshot format rejected", "format", snapshot.Format) + logger.Info("Snapshot format rejected", "format", snapshot.Format) case errors.Is(err, errRejectSender): - s.logger.Info("Snapshot senders rejected", "height", snapshot.Height, "format", snapshot.Format, + logger.Info("Snapshot senders rejected", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) for _, peer := range s.snapshots.GetPeers(snapshot) { s.snapshots.RejectPeer(peer) - s.logger.Info("Snapshot sender rejected", "peer", peer) + logger.Info("Snapshot sender rejected", "peer", peer) } default: @@ -224,7 +221,7 @@ func (s *syncer) SyncAny( // Discard snapshot and chunks for next iteration if err := chunks.Close(); err != nil { - s.logger.Error("Failed to clean up chunk queue", "err", err) + logger.Error("Failed to clean up chunk queue", "err", err) } snapshot = nil chunks = nil @@ -263,7 +260,7 @@ func (s *syncer) Sync(ctx context.Context, snapshot *snapshot, chunks *chunkQueu return sm.State{}, nil, fmt.Errorf("failed to get app hash at height %d. No witnesses remaining", snapshot.Height) } - s.logger.Info("failed to get and verify tendermint state. Dropping snapshot and trying again", + logger.Info("failed to get and verify tendermint state. Dropping snapshot and trying again", "err", err, "height", snapshot.Height) return sm.State{}, nil, errRejectSnapshot } @@ -301,7 +298,7 @@ func (s *syncer) Sync(ctx context.Context, snapshot *snapshot, chunks *chunkQueu return sm.State{}, nil, fmt.Errorf("failed to get tendermint state at height %d. No witnesses remaining", snapshot.Height) } - s.logger.Info("failed to get and verify tendermint state. Dropping snapshot and trying again", + logger.Info("failed to get and verify tendermint state. Dropping snapshot and trying again", "err", err, "height", snapshot.Height) return sm.State{}, nil, errRejectSnapshot } @@ -315,7 +312,7 @@ func (s *syncer) Sync(ctx context.Context, snapshot *snapshot, chunks *chunkQueu return sm.State{}, nil, fmt.Errorf("failed to get commit at height %d. No witnesses remaining", snapshot.Height) } - s.logger.Info("failed to get and verify commit. Dropping snapshot and trying again", + logger.Info("failed to get and verify commit. Dropping snapshot and trying again", "err", err, "height", snapshot.Height) return sm.State{}, nil, errRejectSnapshot } @@ -332,7 +329,7 @@ func (s *syncer) Sync(ctx context.Context, snapshot *snapshot, chunks *chunkQueu } // Done! 🎉 - s.logger.Info("Snapshot restored", "height", snapshot.Height, "format", snapshot.Format, + logger.Info("Snapshot restored", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) return state, commit, nil @@ -341,7 +338,7 @@ func (s *syncer) Sync(ctx context.Context, snapshot *snapshot, chunks *chunkQueu // offerSnapshot offers a snapshot to the app. It returns various errors depending on the app's // response, or nil if the snapshot was accepted. func (s *syncer) offerSnapshot(ctx context.Context, snapshot *snapshot) error { - s.logger.Info("Offering snapshot to ABCI app", "height", snapshot.Height, + logger.Info("Offering snapshot to ABCI app", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) resp, err := s.conn.OfferSnapshot(ctx, &abci.RequestOfferSnapshot{ Snapshot: &abci.Snapshot{ @@ -358,7 +355,7 @@ func (s *syncer) offerSnapshot(ctx context.Context, snapshot *snapshot) error { } switch resp.Result { case abci.ResponseOfferSnapshot_ACCEPT: - s.logger.Info("Snapshot accepted, restoring", "height", snapshot.Height, + logger.Info("Snapshot accepted, restoring", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) return nil case abci.ResponseOfferSnapshot_ABORT: @@ -393,7 +390,7 @@ func (s *syncer) applyChunks(ctx context.Context, chunks *chunkQueue, start time if err != nil { return fmt.Errorf("failed to apply chunk %v: %w", chunk.Index, err) } - s.logger.Info("Applied snapshot chunk to ABCI app", "height", chunk.Height, + logger.Info("Applied snapshot chunk to ABCI app", "height", chunk.Height, "format", chunk.Format, "chunk", chunk.Index, "total", chunks.Size()) // Discard and refetch any chunks as requested by the app @@ -454,17 +451,17 @@ func (s *syncer) fetchLocalChunks(ctx context.Context, snapshot *snapshot, chunk } } if err != nil { - s.logger.Error("Failed to allocate chunk from queue", "err", err) + logger.Error("Failed to allocate chunk from queue", "err", err) return } - s.logger.Info("Fetching local snapshot chunks", "height", snapshot.Height, "chunk", index, "total", chunks.Size()) + logger.Info("Fetching local snapshot chunks", "height", snapshot.Height, "chunk", index, "total", chunks.Size()) msg, err := s.conn.LoadSnapshotChunk(ctx, &abci.RequestLoadSnapshotChunk{ Height: snapshot.Height, Format: snapshot.Format, Chunk: index, }) if err != nil { - s.logger.Error("Failed to LoadSnapshotChunk from abci", "err", err) + logger.Error("Failed to LoadSnapshotChunk from abci", "err", err) return } _, err = s.AddChunk(&chunk{ @@ -475,7 +472,7 @@ func (s *syncer) fetchLocalChunks(ctx context.Context, snapshot *snapshot, chunk Sender: "self", }) if err != nil { - s.logger.Error("Failed to LoadSnapshotChunk from abci", "err", err) + logger.Error("Failed to LoadSnapshotChunk from abci", "err", err) return } } @@ -504,11 +501,11 @@ func (s *syncer) fetchChunks(ctx context.Context, snapshot *snapshot, chunks *ch } } if err != nil { - s.logger.Error("Failed to allocate chunk from queue", "err", err) + logger.Error("Failed to allocate chunk from queue", "err", err) return } } - s.logger.Info("Fetching snapshot chunk", "height", snapshot.Height, + logger.Info("Fetching snapshot chunk", "height", snapshot.Height, "format", snapshot.Format, "chunk", index, "total", chunks.Size()) ticker := time.NewTicker(s.retryTimeout) @@ -539,12 +536,12 @@ func (s *syncer) fetchChunks(ctx context.Context, snapshot *snapshot, chunks *ch func (s *syncer) requestChunk(snapshot *snapshot, chunk uint32) { peer := s.snapshots.GetPeer(snapshot) if peer == "" { - s.logger.Error("No valid peers found for snapshot", "height", snapshot.Height, + logger.Error("No valid peers found for snapshot", "height", snapshot.Height, "format", snapshot.Format, "hash", snapshot.Hash) return } - s.logger.Debug( + logger.Debug( "Requesting snapshot chunk", "height", snapshot.Height, "format", snapshot.Format, @@ -577,14 +574,14 @@ func (s *syncer) verifyApp(ctx context.Context, snapshot *snapshot, appVersion u } if !bytes.Equal(snapshot.trustedAppHash, resp.LastBlockAppHash) { - s.logger.Error("appHash verification failed", + logger.Error("appHash verification failed", "expected", snapshot.trustedAppHash, "actual", resp.LastBlockAppHash) return errVerifyFailed } if uint64(resp.LastBlockHeight) != snapshot.Height { //nolint:gosec // LastBlockHeight is a non-negative block height - s.logger.Error( + logger.Error( "ABCI app reported unexpected last block height", "expected", snapshot.Height, "actual", resp.LastBlockHeight, @@ -592,6 +589,6 @@ func (s *syncer) verifyApp(ctx context.Context, snapshot *snapshot, appVersion u return errVerifyFailed } - s.logger.Info("Verified ABCI app", "height", snapshot.Height, "appHash", snapshot.trustedAppHash) + logger.Info("Verified ABCI app", "height", snapshot.Height, "appHash", snapshot.trustedAppHash) return nil } diff --git a/sei-tendermint/libs/CHANGELOG.md b/sei-tendermint/libs/CHANGELOG.md index 0f900c57fb..545c312f1a 100644 --- a/sei-tendermint/libs/CHANGELOG.md +++ b/sei-tendermint/libs/CHANGELOG.md @@ -5,21 +5,22 @@ *June 24th, 2018* BREAKING: - - [events, pubsub] Removed - moved to github.com/tendermint/tendermint - - [merkle] Use 20-bytes of SHA256 instead of RIPEMD160. NOTE: this package is - moving to github.com/tendermint/go-crypto ! - - [common] Remove gogoproto from KVPair types - - [common] Error simplification, #220 + +- [events, pubsub] Removed - moved to github.com/tendermint/tendermint +- [merkle] Use 20-bytes of SHA256 instead of RIPEMD160. NOTE: this package is + moving to github.com/tendermint/go-crypto ! +- [common] Remove gogoproto from KVPair types +- [common] Error simplification, #220 FEATURES: - - [db/remotedb] New DB type using an external CLevelDB process via - GRPC - - [autofile] logjack command for piping stdin to a rotating file - - [bech32] New package. NOTE: should move out of here - it's just two small - functions - - [common] ColoredBytes([]byte) string for printing mixed ascii and bytes - - [db] DebugDB uses ColoredBytes() +- [db/remotedb] New DB type using an external CLevelDB process via + GRPC +- [autofile] logjack command for piping stdin to a rotating file +- [bech32] New package. NOTE: should move out of here - it's just two small + functions +- [common] ColoredBytes([]byte) string for printing mixed ascii and bytes +- [db] DebugDB uses ColoredBytes() ## 0.8.4 @@ -27,7 +28,7 @@ FEATURES: IMPROVEMENTS: - - [autofile] Flush on Stop; Close() method to Flush and close file +- [autofile] Flush on Stop; Close() method to Flush and close file ## 0.8.3 @@ -35,153 +36,165 @@ IMPROVEMENTS: FEATURES: - - [common] ASCIITrim() +- [common] ASCIITrim() ## 0.8.2 (April 23rd, 2018) FEATURES: - - [pubsub] TagMap, NewTagMap - - [merkle] SimpleProofsFromMap() - - [common] IsASCIIText() - - [common] PrefixEndBytes // e.g. increment or nil - - [common] BitArray.MarshalJSON/.UnmarshalJSON - - [common] BitArray uses 'x' not 'X' for String() and above. - - [db] DebugDB shows better colorized output +- [pubsub] TagMap, NewTagMap +- [merkle] SimpleProofsFromMap() +- [common] IsASCIIText() +- [common] PrefixEndBytes // e.g. increment or nil +- [common] BitArray.MarshalJSON/.UnmarshalJSON +- [common] BitArray uses 'x' not 'X' for String() and above. +- [db] DebugDB shows better colorized output BUG FIXES: - - [common] Fix TestParallelAbort nondeterministic failure #201/#202 - - [db] PrefixDB Iterator/ReverseIterator fixes - - [db] DebugDB fixes +- [common] Fix TestParallelAbort nondeterministic failure #201/#202 +- [db] PrefixDB Iterator/ReverseIterator fixes +- [db] DebugDB fixes ## 0.8.1 (April 5th, 2018) FEATURES: - - [common] Error.Error() includes cause - - [common] IsEmpty() for 0 length +- [common] Error.Error() includes cause +- [common] IsEmpty() for 0 length ## 0.8.0 (April 4th, 2018) BREAKING: - - [merkle] `PutVarint->PutUvarint` in encodeByteSlice - - [db] batch.WriteSync() - - [common] Refactored and fixed `Parallel` function - - [common] Refactored `Rand` functionality - - [common] Remove unused `Right/LeftPadString` functions - - [common] Remove StackError, introduce Error interface (to replace use of pkg/errors) +- [merkle] `PutVarint->PutUvarint` in encodeByteSlice +- [db] batch.WriteSync() +- [common] Refactored and fixed `Parallel` function +- [common] Refactored `Rand` functionality +- [common] Remove unused `Right/LeftPadString` functions +- [common] Remove StackError, introduce Error interface (to replace use of pkg/errors) FEATURES: - - [db] NewPrefixDB for a DB with all keys prefixed - - [db] NewDebugDB prints everything during operation - - [common] SplitAndTrim func - - [common] rand.Float64(), rand.Int63n(n), rand.Int31n(n) and global equivalents - - [common] HexBytes Format() +- [db] NewPrefixDB for a DB with all keys prefixed +- [db] NewDebugDB prints everything during operation +- [common] SplitAndTrim func +- [common] rand.Float64(), rand.Int63n(n), rand.Int31n(n) and global equivalents +- [common] HexBytes Format() BUG FIXES: - - [pubsub] Fix unsubscribing - - [cli] Return config errors - - [common] Fix WriteFileAtomic Windows bug +- [pubsub] Fix unsubscribing +- [cli] Return config errors +- [common] Fix WriteFileAtomic Windows bug ## 0.7.1 (March 22, 2018) IMPROVEMENTS: - - glide -> dep +- glide -> dep BUG FIXES: - - [common] Fix panic in NewBitArray for negative bits - - [common] Fix and simplify WriteFileAtomic so it cleans up properly +- [common] Fix panic in NewBitArray for negative bits +- [common] Fix and simplify WriteFileAtomic so it cleans up properly ## 0.7.0 (February 20, 2018) BREAKING: - - [db] Major API upgrade. See `db/types.go`. - - [common] added `Quit() <-chan struct{}` to Service interface. - The returned channel is closed when service is stopped. - - [common] Remove HTTP functions - - [common] Heap.Push takes an `int`, new Heap.PushComparable takes the comparable. - - [logger] Removed. Use `log` - - [merkle] Major API updade - uses cmn.KVPairs. - - [cli] WriteDemoConfig -> WriteConfigValues - - [all] Remove go-wire dependency! +- [db] Major API upgrade. See `db/types.go`. +- [common] added `Quit() <-chan struct{}` to Service interface. + The returned channel is closed when service is stopped. +- [common] Remove HTTP functions +- [common] Heap.Push takes an `int`, new Heap.PushComparable takes the comparable. +- [logger] Removed. Use `log` +- [merkle] Major API updade - uses cmn.KVPairs. +- [cli] WriteDemoConfig -> WriteConfigValues +- [all] Remove go-wire dependency! FEATURES: - - [db] New FSDB that uses the filesystem directly - - [common] HexBytes - - [common] KVPair and KI64Pair (protobuf based key-value pair objects) +- [db] New FSDB that uses the filesystem directly +- [common] HexBytes +- [common] KVPair and KI64Pair (protobuf based key-value pair objects) IMPROVEMENTS: - - [clist] add WaitChan() to CList, NextWaitChan() and PrevWaitChan() - to CElement. These can be used instead of blocking `*Wait()` methods - if you need to be able to send quit signal and not block forever - - [common] IsHex handles 0x-prefix +- [clist] add WaitChan() to CList, NextWaitChan() and PrevWaitChan() + to CElement. These can be used instead of blocking `*Wait()` methods + if you need to be able to send quit signal and not block forever +- [common] IsHex handles 0x-prefix BUG FIXES: - - [common] BitArray check for nil arguments - - [common] Fix memory leak in RepeatTimer +- [common] BitArray check for nil arguments +- [common] Fix memory leak in RepeatTimer ## 0.6.0 (December 29, 2017) BREAKING: - - [cli] remove --root - - [pubsub] add String() method to Query interface + +- [cli] remove --root +- [pubsub] add String() method to Query interface IMPROVEMENTS: - - [common] use a thread-safe and well seeded non-crypto rng + +- [common] use a thread-safe and well seeded non-crypto rng BUG FIXES - - [clist] fix misuse of wait group - - [common] introduce Ticker interface and logicalTicker for better testing of timers + +- [clist] fix misuse of wait group +- [common] introduce Ticker interface and logicalTicker for better testing of timers ## 0.5.0 (December 5, 2017) BREAKING: - - [common] replace Service#Start, Service#Stop first return value (bool) with an - error (ErrAlreadyStarted, ErrAlreadyStopped) - - [common] replace Service#Reset first return value (bool) with an error - - [process] removed + +- [common] replace Service#Start, Service#Stop first return value (bool) with an + error (ErrAlreadyStarted, ErrAlreadyStopped) +- [common] replace Service#Reset first return value (bool) with an error +- [process] removed FEATURES: - - [common] IntInSlice and StringInSlice functions - - [pubsub/query] introduce `Condition` struct, expose `Operator`, and add `query.Conditions()` + +- [common] IntInSlice and StringInSlice functions +- [pubsub/query] introduce `Condition` struct, expose `Operator`, and add `query.Conditions()` ## 0.4.1 (November 27, 2017) FEATURES: - - [common] `Keys()` method on `CMap` + +- [common] `Keys()` method on `CMap` IMPROVEMENTS: - - [log] complex types now encoded as "%+v" by default if `String()` method is undefined (previously resulted in error) - - [log] logger logs its own errors + +- [log] complex types now encoded as "%+v" by default if `String()` method is undefined (previously resulted in error) +- [log] logger logs its own errors BUG FIXES: - - [common] fixed `Kill()` to build on Windows (Windows does not have `syscall.Kill`) + +- [common] fixed `Kill()` to build on Windows (Windows does not have `syscall.Kill`) ## 0.4.0 (October 26, 2017) BREAKING: - - [common] GoPath is now a function - - [db] `DB` and `Iterator` interfaces have new methods to better support iteration + +- [common] GoPath is now a function +- [db] `DB` and `Iterator` interfaces have new methods to better support iteration FEATURES: - - [autofile] `Read([]byte)` and `Write([]byte)` methods on `Group` to support binary WAL - - [common] `Kill()` sends SIGTERM to the current process + +- [autofile] `Read([]byte)` and `Write([]byte)` methods on `Group` to support binary WAL +- [common] `Kill()` sends SIGTERM to the current process IMPROVEMENTS: - - comments and linting + +- comments and linting BUG FIXES: - - [events] fix allocation error prefixing cache with 1000 empty events + +- [events] fix allocation error prefixing cache with 1000 empty events ## 0.3.2 (October 2, 2017) @@ -190,7 +203,6 @@ BUG FIXES: - [autofile] fix AutoFile.Sync() to open file if it's been closed - [db] fix MemDb.Close() to not empty the database (ie. its just a noop) - ## 0.3.1 (September 22, 2017) BUG FIXES: @@ -204,8 +216,8 @@ BREAKING CHANGES: - [log] logger functions no longer returns an error - [common] NewBaseService takes the new logger - [cli] RunCaptureWithArgs now captures stderr and stdout - - +func RunCaptureWithArgs(cmd Executable, args []string, env map[string]string) (stdout, stderr string, err error) - - -func RunCaptureWithArgs(cmd Executable, args []string, env map[string]string) (output string, err error) + - +func RunCaptureWithArgs(cmd Executable, args []string, env map[string]string) (stdout, stderr string, err error) + - -func RunCaptureWithArgs(cmd Executable, args []string, env map[string]string) (output string, err error) FEATURES: @@ -248,7 +260,6 @@ BREAKING CHANGES: - [common] NewBaseService takes the new logger - FEATURES: - [cli] New library to standardize building command line tools diff --git a/sei-tendermint/libs/log/default.go b/sei-tendermint/libs/log/default.go deleted file mode 100644 index c6e9349a07..0000000000 --- a/sei-tendermint/libs/log/default.go +++ /dev/null @@ -1,61 +0,0 @@ -package log - -import ( - "fmt" - "log/slog" - "os" -) - -var _ Logger = (*defaultLogger)(nil) - -type defaultLogger struct { - logger *slog.Logger -} - -// NewDefaultLogger returns a default logger that can be used within Tendermint -// and that fulfills the Logger interface. The underlying logging provider is -// log/slog, which supports typical log levels (debug, info, warn, error) along -// with JSON and plain/text log formats. -// -// All logging methods accept a series of key/value pair tuples, where the key -// must be a string. -func NewDefaultLogger(format, level string) (Logger, error) { - var lvl slog.Level - if err := lvl.UnmarshalText([]byte(level)); err != nil { - return nil, fmt.Errorf("failed to parse log level (%s): %w", level, err) - } - options := &slog.HandlerOptions{ - Level: lvl, - } - var handler slog.Handler - switch format { - case LogFormatPlain, LogFormatText: - handler = slog.NewTextHandler(os.Stderr, options) - case LogFormatJSON: - handler = slog.NewJSONHandler(os.Stderr, options) - default: - return nil, fmt.Errorf("unsupported log format: %s", format) - } - - return &defaultLogger{ - logger: slog.New(handler), - }, nil -} - -func (l defaultLogger) Info(msg string, keyVals ...interface{}) { - l.logger.Info(msg, keyVals...) -} - -func (l defaultLogger) Error(msg string, keyVals ...interface{}) { - l.logger.Error(msg, keyVals...) -} - -func (l defaultLogger) Debug(msg string, keyVals ...interface{}) { - l.logger.Debug(msg, keyVals...) -} - -func (l defaultLogger) With(keyVals ...interface{}) Logger { - return &defaultLogger{ - logger: l.logger.With(keyVals...), - } -} diff --git a/sei-tendermint/libs/log/default_test.go b/sei-tendermint/libs/log/default_test.go deleted file mode 100644 index c0a13681a9..0000000000 --- a/sei-tendermint/libs/log/default_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package log_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" -) - -func TestNewDefaultLogger(t *testing.T) { - testCases := map[string]struct { - format string - level string - expectErr bool - }{ - "invalid format": { - format: "foo", - level: log.LogLevelInfo, - expectErr: true, - }, - "invalid level": { - format: log.LogFormatJSON, - level: "foo", - expectErr: true, - }, - "valid format and level": { - format: log.LogFormatJSON, - level: log.LogLevelInfo, - expectErr: false, - }, - } - - for name, tc := range testCases { - t.Run(name, func(t *testing.T) { - _, err := log.NewDefaultLogger(tc.format, tc.level) - if tc.expectErr { - require.Error(t, err) - } else { - require.NoError(t, err) - } - }) - } -} diff --git a/sei-tendermint/libs/log/logger.go b/sei-tendermint/libs/log/logger.go deleted file mode 100644 index 8a9ca74a68..0000000000 --- a/sei-tendermint/libs/log/logger.go +++ /dev/null @@ -1,33 +0,0 @@ -package log - -const ( - // LogFormatPlain defines a logging format used for human-readable text-based - // logging that is not structured. Typically, this format is used for development - // and testing purposes. - LogFormatPlain string = "plain" - - // LogFormatText defines a logging format used for human-readable text-based - // logging that is not structured. Typically, this format is used for development - // and testing purposes. - LogFormatText string = "text" - - // LogFormatJSON defines a logging format for structured JSON-based logging - // that is typically used in production environments, which can be sent to - // logging facilities that support complex log parsing and querying. - LogFormatJSON string = "json" - - // Supported loging levels - LogLevelDebug = "debug" - LogLevelInfo = "info" - LogLevelWarn = "warn" - LogLevelError = "error" -) - -// Logger defines a generic logging interface compatible with Tendermint. -type Logger interface { - Debug(msg string, keyVals ...interface{}) - Info(msg string, keyVals ...interface{}) - Error(msg string, keyVals ...interface{}) - - With(keyVals ...interface{}) Logger -} diff --git a/sei-tendermint/libs/log/nop.go b/sei-tendermint/libs/log/nop.go deleted file mode 100644 index a2cecc39a1..0000000000 --- a/sei-tendermint/libs/log/nop.go +++ /dev/null @@ -1,20 +0,0 @@ -package log - -import ( - "context" - "log/slog" -) - -type noopHandler struct { - attrs []slog.Attr - group string -} - -func (h *noopHandler) Enabled(context.Context, slog.Level) bool { return false } -func (h *noopHandler) Handle(context.Context, slog.Record) error { return nil } -func (h *noopHandler) WithAttrs([]slog.Attr) slog.Handler { return &noopHandler{} } -func (h *noopHandler) WithGroup(string) slog.Handler { return &noopHandler{} } - -func NewNopLogger() Logger { - return &defaultLogger{logger: slog.New(&noopHandler{})} -} diff --git a/sei-tendermint/libs/log/testing.go b/sei-tendermint/libs/log/testing.go deleted file mode 100644 index 9e8c18e3a5..0000000000 --- a/sei-tendermint/libs/log/testing.go +++ /dev/null @@ -1,42 +0,0 @@ -package log - -import ( - "log/slog" - "testing" -) - -// NewTestingLogger converts a testing.T into a logging interface to -// make test failures and verbose provide better feedback associated -// with test failures. This logging instance is safe for use from -// multiple threads, but in general you should create one of these -// loggers ONCE for each *testing.T instance that you interact with. -// -// By default it collects only ERROR messages, or DEBUG messages in -// verbose mode, and relies on the underlying behavior of -// testing.T.Log() -// -// Users should be careful to ensure that no calls to this logger are -// made in goroutines that are running after (which, by the rules of -// testing.TB will panic.) -func NewTestingLogger(t testing.TB) Logger { - level := slog.LevelError - if testing.Verbose() { - level = slog.LevelDebug - } - out := &testingWriter{t} - return &defaultLogger{ - logger: slog.New( - slog.NewTextHandler( - out, - &slog.HandlerOptions{Level: level})), - } -} - -type testingWriter struct { - t testing.TB -} - -func (tw testingWriter) Write(in []byte) (int, error) { - tw.t.Log(string(in)) - return len(in), nil -} diff --git a/sei-tendermint/libs/log/testing_logger.go b/sei-tendermint/libs/log/testing_logger.go deleted file mode 100644 index 16ee5b089b..0000000000 --- a/sei-tendermint/libs/log/testing_logger.go +++ /dev/null @@ -1,33 +0,0 @@ -package log - -import ( - "log/slog" - "os" - "sync" - "testing" -) - -var ( - // reuse the same logger across all tests - _testingLogger Logger - initTestingLogger sync.Once -) - -// TestingLogger returns a TMLogger which writes to STDOUT if testing being run -// with the verbose (-v) flag, NopLogger otherwise. -// -// Note that the call to TestingLogger() must be made -// inside a test (not in the init func) because -// verbose flag only set at the time of testing. -func TestingLogger() Logger { - initTestingLogger.Do(func() { - if testing.Verbose() { - _testingLogger = &defaultLogger{ - logger: slog.New(slog.NewTextHandler(os.Stdout, nil)), - } - } else { - _testingLogger = NewNopLogger() - } - }) - return _testingLogger -} diff --git a/sei-tendermint/libs/log/tm_logger.go b/sei-tendermint/libs/log/tm_logger.go deleted file mode 100644 index a9c5692f4f..0000000000 --- a/sei-tendermint/libs/log/tm_logger.go +++ /dev/null @@ -1,255 +0,0 @@ -package log - -import ( - "context" - "encoding/hex" - "fmt" - "io" - "log/slog" - "strings" - "sync" - "time" - "unicode" - "unicode/utf8" -) - -const moduleKey = "module" - -// bufPool recycles byte buffers for log line formatting. -var bufPool = sync.Pool{ - New: func() interface{} { - b := make([]byte, 0, 256) - return &b - }, -} - -// NewTMLogger returns a logger that encodes msg and keyvals to the Writer -// using log/slog with a custom TMFmtHandler for Tendermint's log format. -func NewTMLogger(w io.Writer) Logger { - return &defaultLogger{ - logger: slog.New(NewTMFmtHandler(w, nil)), - } -} - -// TMFmtHandler is an slog.Handler that writes log records in Tendermint's -// custom format: -// -// D[2016-05-02|11:06:44.322] Stopping AddrBook module=main key=value -// -// It is safe for concurrent use. -type TMFmtHandler struct { - w io.Writer - level slog.Leveler - attrs []slog.Attr - groups []string -} - -// NewTMFmtHandler returns a new TMFmtHandler that writes to w. -// opts may be nil for defaults. -func NewTMFmtHandler(w io.Writer, opts *slog.HandlerOptions) *TMFmtHandler { - if opts == nil { - opts = &slog.HandlerOptions{} - } - level := opts.Level - if level == nil { - level = slog.LevelInfo - } - return &TMFmtHandler{ - w: w, - level: level, - } -} - -// Enabled reports whether the handler handles records at the given level. -func (h *TMFmtHandler) Enabled(_ context.Context, level slog.Level) bool { - return level >= h.level.Level() -} - -// Handle formats and writes a log record. -func (h *TMFmtHandler) Handle(_ context.Context, r slog.Record) error { - bp := bufPool.Get().(*[]byte) - buf := (*bp)[:0] - defer func() { - *bp = buf - bufPool.Put(bp) - }() - - // Timestamp. - ts := r.Time - if ts.IsZero() { - ts = time.Now() - } - - // Header: "D[2006-01-02|15:04:05.000] %-44s " - buf = append(buf, levelChar(r.Level)) - buf = append(buf, '[') - buf = ts.AppendFormat(buf, "2006-01-02|15:04:05.000") - buf = append(buf, ']') - buf = append(buf, ' ') - - // Left-justify message in 44 chars. - msg := r.Message - buf = append(buf, msg...) - if pad := 44 - len(msg); pad > 0 { - for i := 0; i < pad; i++ { - buf = append(buf, ' ') - } - } - buf = append(buf, ' ') - - // Collect key-value pairs, extracting "module" to place it first. - module := "" - kvStart := len(buf) - - appendAttr := func(key string, val slog.Value) { - if key == moduleKey { - module = val.String() - return - } - buf = appendKeyval(buf, key, val) - } - - for _, a := range h.attrs { - appendAttr(h.prefixedKey(a.Key), a.Value) - } - r.Attrs(func(a slog.Attr) bool { - appendAttr(h.prefixedKey(a.Key), a.Value) - return true - }) - - // Insert "module=..." right after the message, before other key-values. - if module != "" { - kvBytes := make([]byte, len(buf)-kvStart) - copy(kvBytes, buf[kvStart:]) - buf = buf[:kvStart] - buf = append(buf, "module="...) - buf = appendVal(buf, module) - buf = append(buf, ' ') - buf = append(buf, kvBytes...) - } - - // Trim trailing space, add newline. - if len(buf) > 0 && buf[len(buf)-1] == ' ' { - buf = buf[:len(buf)-1] - } - buf = append(buf, '\n') - - _, err := h.w.Write(buf) - return err -} - -// WithAttrs returns a new handler with the given attrs pre-collected. -func (h *TMFmtHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - if len(attrs) == 0 { - return h - } - h2 := h.clone() - h2.attrs = append(h2.attrs, attrs...) - return h2 -} - -// WithGroup returns a new handler where all subsequent attrs are nested under -// the given group name (dot-separated). -func (h *TMFmtHandler) WithGroup(name string) slog.Handler { - if name == "" { - return h - } - h2 := h.clone() - h2.groups = append(h2.groups, name) - return h2 -} - -func (h *TMFmtHandler) clone() *TMFmtHandler { - return &TMFmtHandler{ - w: h.w, - level: h.level, - attrs: append([]slog.Attr(nil), h.attrs...), - groups: append([]string(nil), h.groups...), - } -} - -func (h *TMFmtHandler) prefixedKey(key string) string { - if len(h.groups) == 0 { - return key - } - return strings.Join(h.groups, ".") + "." + key -} - -// levelChar maps an slog.Level to a single uppercase character. -func levelChar(l slog.Level) byte { - switch { - case l >= slog.LevelError: - return 'E' - case l >= slog.LevelWarn: - return 'W' - case l >= slog.LevelInfo: - return 'I' - default: - return 'D' - } -} - -// appendKeyval appends "key=value " to buf in logfmt style. -func appendKeyval(buf []byte, key string, v slog.Value) []byte { - buf = append(buf, key...) - buf = append(buf, '=') - buf = appendValue(buf, v) - buf = append(buf, ' ') - return buf -} - -// appendValue formats an slog.Value for logfmt output. -func appendValue(buf []byte, v slog.Value) []byte { - v = v.Resolve() - switch v.Kind() { - case slog.KindString: - return appendVal(buf, v.String()) - case slog.KindInt64: - return fmt.Appendf(buf, "%d", v.Int64()) - case slog.KindUint64: - return fmt.Appendf(buf, "%d", v.Uint64()) - case slog.KindFloat64: - return fmt.Appendf(buf, "%g", v.Float64()) - case slog.KindBool: - if v.Bool() { - return append(buf, "true"...) - } - return append(buf, "false"...) - case slog.KindDuration: - return appendVal(buf, v.Duration().String()) - case slog.KindTime: - return appendVal(buf, v.Time().Format(time.RFC3339Nano)) - case slog.KindAny: - a := v.Any() - // Match original: []byte → uppercase hex string. - if b, ok := a.([]byte); ok { - return append(buf, strings.ToUpper(hex.EncodeToString(b))...) - } - return appendVal(buf, fmt.Sprintf("%+v", a)) - default: - return appendVal(buf, fmt.Sprintf("%+v", v.Any())) - } -} - -// appendVal appends s to buf, quoting it if necessary for logfmt. -func appendVal(buf []byte, s string) []byte { - if s == "" { - return append(buf, `""`...) - } - if needsQuote(s) { - return fmt.Appendf(buf, "%q", s) - } - return append(buf, s...) -} - -// needsQuote reports whether s needs quoting for logfmt. -func needsQuote(s string) bool { - for i := 0; i < len(s); { - r, size := utf8.DecodeRuneInString(s[i:]) - if r == '"' || r == '=' || r == '\\' || unicode.IsSpace(r) || !unicode.IsPrint(r) { - return true - } - i += size - } - return false -} diff --git a/sei-tendermint/libs/log/tm_logger_test.go b/sei-tendermint/libs/log/tm_logger_test.go deleted file mode 100644 index 4feb2504df..0000000000 --- a/sei-tendermint/libs/log/tm_logger_test.go +++ /dev/null @@ -1,153 +0,0 @@ -package log - -import ( - "bytes" - "log/slog" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/require" -) - -func TestTMFmtHandler_BasicOutput(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("Stopping AddrBook", "module", "main", "reason", "already stopped") - - out := buf.String() - t.Logf("output: %s", out) - - require.True(t, strings.HasPrefix(out, "I["), "expected line to start with 'I['") - require.Contains(t, out, "] Stopping AddrBook") - require.Contains(t, out, "module=main") - require.Contains(t, out, `reason="already stopped"`) -} - -func TestTMFmtHandler_LevelChars(t *testing.T) { - tests := []struct { - level slog.Level - char string - }{ - {slog.LevelDebug, "D["}, - {slog.LevelInfo, "I["}, - {slog.LevelWarn, "W["}, - {slog.LevelError, "E["}, - } - - for _, tt := range tests { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Log(nil, tt.level, "test message") - - require.True(t, strings.HasPrefix(buf.String(), tt.char), - "level %v: expected prefix %q, got: %s", tt.level, tt.char, buf.String()) - } -} - -func TestTMFmtHandler_ByteSliceHex(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test", "hash", slog.AnyValue([]byte{0xde, 0xad, 0xbe, 0xef})) - - require.Contains(t, buf.String(), "DEADBEEF") -} - -func TestTMFmtHandler_WithAttrs(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h).With("module", "consensus", "height", 100) - - logger.Info("new round") - - out := buf.String() - require.Contains(t, out, "module=consensus") - require.Contains(t, out, "height=100") -} - -func TestTMFmtHandler_WithGroup(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h).WithGroup("peer").With("id", "abc123") - - logger.Info("connected") - - require.Contains(t, buf.String(), "peer.id=abc123") -} - -func TestTMFmtHandler_Enabled(t *testing.T) { - h := NewTMFmtHandler(&bytes.Buffer{}, &slog.HandlerOptions{Level: slog.LevelWarn}) - - require.False(t, h.Enabled(nil, slog.LevelInfo), "Info should be disabled when level is Warn") - require.True(t, h.Enabled(nil, slog.LevelWarn), "Warn should be enabled") - require.True(t, h.Enabled(nil, slog.LevelError), "Error should be enabled") -} - -func TestTMFmtHandler_TimeFormat(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test") - - // Match at least up to the minute. - now := time.Now().Format("2006-01-02|15:04:05") - require.Contains(t, buf.String(), now[:16]) -} - -func TestTMFmtHandler_ModuleNotDuplicatedInKV(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test", "module", "p2p", "peer", "abc") - - out := buf.String() - count := strings.Count(out, "module=") - require.Equal(t, 1, count, "module= should appear exactly once: %s", out) -} - -func TestTMFmtHandler_ModuleBeforeOtherKVs(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test", "aaa", "first", "module", "p2p", "zzz", "last") - - out := buf.String() - modIdx := strings.Index(out, "module=") - aaaIdx := strings.Index(out, "aaa=") - zzzIdx := strings.Index(out, "zzz=") - - require.Greater(t, modIdx, -1, "module= not found") - require.Less(t, modIdx, aaaIdx, "module should come before aaa") - require.Less(t, modIdx, zzzIdx, "module should come before zzz") -} - -func TestTMFmtHandler_QuotingValues(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test", "key", "has space", "simple", "nospace") - - out := buf.String() - require.Contains(t, out, `key="has space"`) - require.Contains(t, out, "simple=nospace") -} - -func TestTMFmtHandler_EmptyValue(t *testing.T) { - var buf bytes.Buffer - h := NewTMFmtHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}) - logger := slog.New(h) - - logger.Info("test", "key", "") - - require.Contains(t, buf.String(), `key=""`) -} diff --git a/sei-tendermint/libs/service/service.go b/sei-tendermint/libs/service/service.go index 08be563477..255cb60e93 100644 --- a/sei-tendermint/libs/service/service.go +++ b/sei-tendermint/libs/service/service.go @@ -7,11 +7,13 @@ import ( "sync" "sync/atomic" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" + "github.com/sei-protocol/seilog" ) var ( + logger = seilog.NewLogger("tendermint", "internal", "libs", "service") + _ Service = (*BaseService)(nil) ) @@ -73,7 +75,7 @@ Typical usage: fs := &FooService{ // init } - fs.BaseService = *NewBaseService(log, "FooService", fs) + fs.BaseService = *NewBaseService( "FooService", fs) return fs } @@ -87,19 +89,17 @@ Typical usage: } */ type BaseService struct { - logger log.Logger - name string + name string // The "subclass" of BaseService impl Implementation inner atomic.Pointer[baseService] } // NewBaseService creates a new BaseService. -func NewBaseService(logger log.Logger, name string, impl Implementation) *BaseService { +func NewBaseService(name string, impl Implementation) *BaseService { return &BaseService{ - logger: logger, - name: name, - impl: impl, + name: name, + impl: impl, } } @@ -114,7 +114,7 @@ func (bs *BaseService) Start(ctx context.Context) error { return nil } - bs.logger.Debug("starting service", "service", bs.name, "impl", bs.name) + logger.Debug("starting service", "service", bs.name, "impl", bs.name) // Currently sei-tendermint services (and tests) rely on the fact that OnStart is called with // exactly the same context as Start. if err := bs.impl.OnStart(ctx); err != nil { @@ -125,10 +125,10 @@ func (bs *BaseService) Start(ctx context.Context) error { go func() { <-inner.ctx.Done() inner.cancel() // free the context. - bs.logger.Debug("stopping service", "service", bs.name) + logger.Debug("stopping service", "service", bs.name) bs.impl.OnStop() inner.wg.Wait() // wait for all spawned tasks to finish - bs.logger.Info("stopped service", "service", bs.name) + logger.Info("stopped service", "service", bs.name) close(inner.done) }() return nil @@ -162,7 +162,7 @@ func (bs *BaseService) Spawn(name string, task func(ctx context.Context) error) go func() { defer inner.wg.Done() if err := utils.IgnoreCancel(task(inner.ctx)); err != nil { - bs.logger.Error("task failed", "name", name, "service", bs.name, "error", err) + logger.Error("task failed", "name", name, "service", bs.name, "error", err) } }() } diff --git a/sei-tendermint/libs/service/service_test.go b/sei-tendermint/libs/service/service_test.go index 14f9d9749a..a76ec8b3a7 100644 --- a/sei-tendermint/libs/service/service_test.go +++ b/sei-tendermint/libs/service/service_test.go @@ -9,8 +9,6 @@ import ( "github.com/fortytw2/leaktest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" ) type testService struct { @@ -57,12 +55,11 @@ func (t *testService) isMultiStopped() bool { func TestBaseService(t *testing.T) { t.Cleanup(leaktest.Check(t)) - logger := log.NewNopLogger() t.Run("Wait", func(t *testing.T) { wctx, wcancel := context.WithCancel(t.Context()) ts := &testService{} - ts.BaseService = *NewBaseService(logger, t.Name(), ts) + ts.BaseService = *NewBaseService(t.Name(), ts) err := ts.Start(wctx) require.NoError(t, err) require.True(t, ts.isStarted()) @@ -86,7 +83,7 @@ func TestBaseService(t *testing.T) { t.Run("ManualStop", func(t *testing.T) { ctx := t.Context() ts := &testService{} - ts.BaseService = *NewBaseService(logger, t.Name(), ts) + ts.BaseService = *NewBaseService(t.Name(), ts) require.False(t, ts.IsRunning()) require.False(t, ts.isStarted()) require.NoError(t, ts.Start(ctx)) @@ -101,7 +98,7 @@ func TestBaseService(t *testing.T) { t.Run("SingleThreaded", func(t *testing.T) { ctx := t.Context() ts := &testService{} - ts.BaseService = *NewBaseService(logger, t.Name(), ts) + ts.BaseService = *NewBaseService(t.Name(), ts) require.NoError(t, ts.Start(ctx)) require.True(t, ts.isStarted()) @@ -115,7 +112,7 @@ func TestBaseService(t *testing.T) { ctx := t.Context() ts := &testService{} - ts.BaseService = *NewBaseService(logger, t.Name(), ts) + ts.BaseService = *NewBaseService(t.Name(), ts) require.NoError(t, ts.Start(ctx)) require.True(t, ts.isStarted()) diff --git a/sei-tendermint/light/client.go b/sei-tendermint/light/client.go index d7cf9ee268..98c874921d 100644 --- a/sei-tendermint/light/client.go +++ b/sei-tendermint/light/client.go @@ -9,14 +9,16 @@ import ( "sync" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmmath "github.com/sei-protocol/sei-chain/sei-tendermint/libs/math" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" "github.com/sei-protocol/sei-chain/sei-tendermint/light/store" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) +var logger = seilog.NewLogger("tendermint", "light") + type mode byte const ( @@ -88,11 +90,6 @@ func PruningSize(h uint16) Option { return func(c *Client) { c.pruningSize = h } } -// Logger option can be used to set a logger for the client. -func Logger(l log.Logger) Option { - return func(c *Client) { c.logger = l } -} - // MaxClockDrift defines how much new header's time can drift into // the future relative to the light clients local time. Default: 10s. func MaxClockDrift(d time.Duration) Option { @@ -144,8 +141,6 @@ type Client struct { // See PruningSize option pruningSize uint16 - - logger log.Logger } // NewClient returns a new light client. It returns an error if it fails to @@ -205,7 +200,6 @@ func NewClient( maxBlockLag: defaultMaxBlockLag, blacklistTTL: blacklistTTL, pruningSize: defaultPruningSize, - logger: log.NewNopLogger(), } for _, o := range options { @@ -249,7 +243,6 @@ func NewClientFromTrustedStore( witnesses: witnesses, trustedStore: trustedStore, pruningSize: defaultPruningSize, - logger: log.NewNopLogger(), } for _, o := range options { @@ -302,7 +295,7 @@ func (c *Client) restoreTrustedLightBlock() error { return fmt.Errorf("can't get last trusted light block: %w", err) } c.latestTrustedBlock = trustedBlock - c.logger.Info("restored trusted light block", "height", lastHeight) + logger.Info("restored trusted light block", "height", lastHeight) return nil } @@ -401,7 +394,7 @@ func (c *Client) Update(ctx context.Context, now time.Time) (*types.LightBlock, if err != nil { return nil, err } - c.logger.Info("advanced to new state", "height", latestBlock.Height, "hash", latestBlock.Hash()) + logger.Info("advanced to new state", "height", latestBlock.Height, "hash", latestBlock.Hash()) return latestBlock, nil } @@ -427,7 +420,7 @@ func (c *Client) VerifyLightBlockAtHeight(ctx context.Context, height int64, now // Check if the light block is already verified. h, err := c.TrustedLightBlock(height) if err == nil { - c.logger.Debug("header has already been verified", "height", height, "hash", h.Hash()) + logger.Debug("header has already been verified", "height", height, "hash", h.Hash()) // Return already trusted light block return h, nil } @@ -485,7 +478,7 @@ func (c *Client) VerifyHeader(ctx context.Context, newHeader *types.Header, now if !bytes.Equal(l.Hash(), newHeader.Hash()) { return fmt.Errorf("existing trusted header %X does not match newHeader %X", l.Hash(), newHeader.Hash()) } - c.logger.Debug("header has already been verified", + logger.Debug("header has already been verified", "height", newHeader.Height, "hash", newHeader.Hash()) return nil } @@ -504,7 +497,7 @@ func (c *Client) VerifyHeader(ctx context.Context, newHeader *types.Header, now } func (c *Client) verifyLightBlock(ctx context.Context, newLightBlock *types.LightBlock, now time.Time) error { - c.logger.Info("verify light block", "height", newLightBlock.Height, "hash", newLightBlock.Hash()) + logger.Info("verify light block", "height", newLightBlock.Height, "hash", newLightBlock.Hash()) var ( verifyFunc func(ctx context.Context, trusted *types.LightBlock, new *types.LightBlock, now time.Time) error @@ -551,7 +544,7 @@ func (c *Client) verifyLightBlock(ctx context.Context, newLightBlock *types.Ligh err = verifyFunc(ctx, closestBlock, newLightBlock, now) } if err != nil { - c.logger.Error("failed to verify", "err", err) + logger.Error("failed to verify", "err", err) return err } @@ -585,7 +578,7 @@ func (c *Client) verifySequential( } // 2) Verify them - c.logger.Debug("verify adjacent newLightBlock against verifiedBlock", + logger.Debug("verify adjacent newLightBlock against verifiedBlock", "trustedHeight", verifiedBlock.Height, "trustedHash", verifiedBlock.Hash(), "newHeight", interimBlock.Height, @@ -600,21 +593,21 @@ func (c *Client) verifySequential( case ErrInvalidHeader: // If the target header is invalid, return immediately. if err.To == newLightBlock.Height { - c.logger.Debug("target header is invalid", "err", err) + logger.Debug("target header is invalid", "err", err) return err } // If some intermediate header is invalid, remove the primary and try again. - c.logger.Info("primary sent invalid header -> removing", "err", err, "primary", c.primary) + logger.Info("primary sent invalid header -> removing", "err", err, "primary", c.primary) replacementBlock, removeErr := c.findNewPrimary(ctx, newLightBlock.Height, true) if removeErr != nil { - c.logger.Debug("failed to replace primary. Returning original error", "err", removeErr) + logger.Debug("failed to replace primary. Returning original error", "err", removeErr) return err } if !bytes.Equal(replacementBlock.Hash(), newLightBlock.Hash()) { - c.logger.Debug("replaced primary but new primary has a different block to the initial one") + logger.Debug("replaced primary but new primary has a different block to the initial one") return err } @@ -672,7 +665,7 @@ func (c *Client) verifySkipping( ) for { - c.logger.Debug("verify non-adjacent newHeader against verifiedBlock", + logger.Debug("verify non-adjacent newHeader against verifiedBlock", "trustedHeight", verifiedBlock.Height, "trustedHash", verifiedBlock.Hash(), "newHeight", blockCache[depth].Height, @@ -766,7 +759,7 @@ func (c *Client) verifySkippingAgainstPrimary( case ErrInvalidHeader: // If it was the target header, return immediately. if e.To == newLightBlock.Height { - c.logger.Debug("target header is invalid", "err", err) + logger.Debug("target header is invalid", "err", err) return err } @@ -792,16 +785,16 @@ func (c *Client) verifySkippingAgainstPrimary( // if we've reached here we're attempting to retry verification with a // different provider - c.logger.Info("primary returned error", "err", e, "primary", c.primary, "replace", replace) + logger.Info("primary returned error", "err", e, "primary", c.primary, "replace", replace) replacementBlock, removeErr := c.findNewPrimary(ctx, newLightBlock.Height, replace) if removeErr != nil { - c.logger.Error("failed to replace primary. Returning original error", "err", removeErr) + logger.Error("failed to replace primary. Returning original error", "err", removeErr) return e.Reason } if !bytes.Equal(replacementBlock.Hash(), newLightBlock.Hash()) { - c.logger.Debug("replaced primary but new primary has a different block to the initial one. Returning original error") + logger.Debug("replaced primary but new primary has a different block to the initial one. Returning original error") return e.Reason } @@ -885,13 +878,13 @@ func (c *Client) AddProvider(p provider.Provider) { // Cleanup removes all the data (headers and validator sets) stored. Note: the // client must be stopped at this point. func (c *Client) Cleanup() error { - c.logger.Info("removing all light blocks") + logger.Info("removing all light blocks") c.latestTrustedBlock = nil return c.trustedStore.Prune(0) } func (c *Client) updateTrustedLightBlock(l *types.LightBlock) error { - c.logger.Debug("updating trusted light block", "light_block", l) + logger.Debug("updating trusted light block", "light_block", l) if err := c.trustedStore.SaveLightBlock(l); err != nil { return fmt.Errorf("failed to save trusted header: %w", err) @@ -924,35 +917,35 @@ func (c *Client) backwards( ) if verifiedHeader.Height-newHeader.Height > 10000 { - c.logger.Info(fmt.Sprintf("skipping the backward verification process from %d to %d", newHeader.Height, verifiedHeader.Height)) + logger.Info("skipping backward verification process", "from", newHeader.Height, "to", verifiedHeader.Height) return nil } - c.logger.Info(fmt.Sprintf("starting the backward verification process from %d to %d", newHeader.Height, verifiedHeader.Height)) + logger.Info("starting backward verification process", "from", newHeader.Height, "to", verifiedHeader.Height) for verifiedHeader.Height > newHeader.Height { interimBlock, err := c.lightBlockFromPrimary(ctx, verifiedHeader.Height-1) if err != nil { return fmt.Errorf("failed to obtain the header at height #%d: %w", verifiedHeader.Height-1, err) } interimHeader = interimBlock.Header - c.logger.Debug("verify newHeader against verifiedHeader", + logger.Debug("verify newHeader against verifiedHeader", "trustedHeight", verifiedHeader.Height, "trustedHash", verifiedHeader.Hash(), "newHeight", interimHeader.Height, "newHash", interimHeader.Hash()) if err := VerifyBackwards(interimHeader, verifiedHeader); err != nil { // verification has failed - c.logger.Info("backwards verification failed, replacing primary...", "err", err, "primary", c.primary) + logger.Info("backwards verification failed, replacing primary...", "err", err, "primary", c.primary) // the client tries to see if it can get a witness to continue with the request newPrimarysBlock, replaceErr := c.findNewPrimary(ctx, newHeader.Height, true) if replaceErr != nil { - c.logger.Debug("failed to replace primary. Returning original error", "err", replaceErr) + logger.Debug("failed to replace primary. Returning original error", "err", replaceErr) return err } // before continuing we must check that they have the same target header to validate if !bytes.Equal(newPrimarysBlock.Hash(), newHeader.Hash()) { - c.logger.Debug("replaced primary but new primary has a different block to the initial one") + logger.Debug("replaced primary but new primary has a different block to the initial one") // return the original error return err } @@ -991,14 +984,14 @@ func (c *Client) lightBlockFromPrimary(ctx context.Context, height int64) (*type case provider.ErrNoResponse, provider.ErrLightBlockNotFound, provider.ErrHeightTooHigh: // we find a new witness to replace the primary - c.logger.Info("error from light block request from primary, replacing...", + logger.Info("error from light block request from primary, replacing...", "error", err, "height", height, "primary", c.primary) return c.findNewPrimary(ctx, height, false) default: // The light client has most likely received either provider.ErrUnreliableProvider or provider.ErrBadLightBlock // These errors mean that the light client should drop the primary and try with another provider instead - c.logger.Info("error from light block request from primary, removing...", + logger.Info("error from light block request from primary, removing...", "error", err, "height", height, "primary", c.primary) return c.findNewPrimary(ctx, height, true) } @@ -1115,7 +1108,7 @@ func (c *Client) findNewPrimary(ctx context.Context, height int64, remove bool) } // promote respondent as the new primary - c.logger.Debug("found new primary", "primary", c.witnesses[response.witnessIndex]) + logger.Debug("found new primary", "primary", c.witnesses[response.witnessIndex]) c.primary = c.witnesses[response.witnessIndex] // add promoted witness to the list of witnesses to be removed @@ -1137,14 +1130,14 @@ func (c *Client) findNewPrimary(ctx context.Context, height int64, remove bool) // process benign errors by logging them only case provider.ErrNoResponse, provider.ErrLightBlockNotFound, provider.ErrHeightTooHigh: lastError = response.err - c.logger.Info("error on light block request from witness", + logger.Info("error on light block request from witness", "error", response.err, "primary", c.witnesses[response.witnessIndex]) continue // process malevolent errors like ErrUnreliableProvider and ErrBadLightBlock by removing the witness default: lastError = response.err - c.logger.Error("error on light block request from witness, removing...", + logger.Error("error on light block request from witness, removing...", "error", response.err, "primary", c.witnesses[response.witnessIndex]) witnessesToRemove = append(witnessesToRemove, response.witnessIndex) } @@ -1181,17 +1174,17 @@ func (c *Client) compareFirstLightBlockWithWitnesses(ctx context.Context, l *typ case nil: continue case ErrConflictingHeaders: - c.logger.Error("Witness reports a conflicting light block. "+ + logger.Error("Witness reports a conflicting light block. "+ "Please check if the primary is correct or use a different witness.", "witness", c.witnesses[e.WitnessIndex], "err", err) return err case errBadWitness: // If witness sent us an invalid header, then remove it - c.logger.Info("Witness returned an error, removing...", + logger.Info("Witness returned an error, removing...", "err", err) witnessesToRemove = append(witnessesToRemove, e.WitnessIndex) case ErrProposerPrioritiesDiverge: - c.logger.Error("Witness reports conflicting proposer priorities. "+ + logger.Error("Witness reports conflicting proposer priorities. "+ "Please check if the primary is correct or use a different witness.", "witness", c.witnesses[e.WitnessIndex], "err", err) return err @@ -1202,7 +1195,7 @@ func (c *Client) compareFirstLightBlockWithWitnesses(ctx context.Context, l *typ } // the witness either didn't respond or didn't have the block. We ignore it. - c.logger.Debug("unable to compare first header with witness, ignoring", + logger.Debug("unable to compare first header with witness, ignoring", "err", err) } diff --git a/sei-tendermint/light/client_benchmark_test.go b/sei-tendermint/light/client_benchmark_test.go index 83af04d944..d7a76ff8ec 100644 --- a/sei-tendermint/light/client_benchmark_test.go +++ b/sei-tendermint/light/client_benchmark_test.go @@ -8,7 +8,6 @@ import ( dbm "github.com/tendermint/tm-db" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" dbs "github.com/sei-protocol/sei-chain/sei-tendermint/light/store/db" @@ -72,8 +71,6 @@ func BenchmarkSequence(b *testing.B) { benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1) - logger := log.NewTestingLogger(b) - c, err := light.NewClient( ctx, chainID, @@ -86,7 +83,6 @@ func BenchmarkSequence(b *testing.B) { []provider.Provider{benchmarkFullNode}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), light.SequentialVerification(), ) if err != nil { @@ -108,8 +104,6 @@ func BenchmarkBisection(b *testing.B) { benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) genesisBlock, _ := benchmarkFullNode.LightBlock(ctx, 1) - logger := log.NewTestingLogger(b) - c, err := light.NewClient( b.Context(), chainID, @@ -122,7 +116,6 @@ func BenchmarkBisection(b *testing.B) { []provider.Provider{benchmarkFullNode}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) if err != nil { b.Fatal(err) @@ -144,8 +137,6 @@ func BenchmarkBackwards(b *testing.B) { benchmarkFullNode := newProviderBenchmarkImpl(headers, vals) trustedBlock, _ := benchmarkFullNode.LightBlock(ctx, 0) - logger := log.NewTestingLogger(b) - c, err := light.NewClient( ctx, chainID, @@ -158,7 +149,6 @@ func BenchmarkBackwards(b *testing.B) { []provider.Provider{benchmarkFullNode}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) if err != nil { b.Fatal(err) diff --git a/sei-tendermint/light/client_test.go b/sei-tendermint/light/client_test.go index 6dae83fb78..a240fdcfdf 100644 --- a/sei-tendermint/light/client_test.go +++ b/sei-tendermint/light/client_test.go @@ -14,7 +14,6 @@ import ( dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" provider_mocks "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider/mocks" @@ -229,8 +228,6 @@ func TestClient(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - mockNode := mockNodeFromHeadersAndVals(testCase.otherHeaders, testCase.vals) mockNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrLightBlockNotFound) c, err := light.NewClient( @@ -242,7 +239,6 @@ func TestClient(t *testing.T) { dbs.New(dbm.NewMemDB()), blacklistTTL, light.SequentialVerification(), - light.Logger(logger), ) if testCase.initErr { @@ -352,7 +348,6 @@ func TestClient(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() mockNode := mockNodeFromHeadersAndVals(tc.otherHeaders, tc.vals) mockNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrLightBlockNotFound) @@ -365,7 +360,6 @@ func TestClient(t *testing.T) { dbs.New(dbm.NewMemDB()), blacklistTTL, light.SkippingVerification(light.DefaultTrustLevel), - light.Logger(logger), ) if tc.initErr { require.Error(t, err) @@ -467,7 +461,6 @@ func TestClient(t *testing.T) { }) t.Run("Cleanup", func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() mockFullNode := &provider_mocks.Provider{} mockFullNode.On("LightBlock", mock.Anything, int64(1)).Return(l1, nil) @@ -479,7 +472,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) _, err = c.TrustedLightBlock(1) @@ -501,8 +493,6 @@ func TestClient(t *testing.T) { t.Run("hashes should match", func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - mockNode := &provider_mocks.Provider{} trustedStore := dbs.New(dbm.NewMemDB()) err := trustedStore.SaveLightBlock(l1) @@ -516,7 +506,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockNode}, trustedStore, blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -536,8 +525,6 @@ func TestClient(t *testing.T) { err := trustedStore.SaveLightBlock(l1) require.NoError(t, err) - logger := log.NewNopLogger() - // header1 != h1 header1 := keys.GenSignedHeader(t, chainID, 1, bTime.Add(1*time.Hour), nil, vals, vals, hash("app_hash"), hash("cons_hash"), hash("results_hash"), 0, len(keys)) @@ -555,7 +542,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockNode}, trustedStore, blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -577,8 +563,6 @@ func TestClient(t *testing.T) { mockFullNode.On("LightBlock", mock.Anything, int64(1)).Return(l1, nil) mockFullNode.On("LightBlock", mock.Anything, int64(3)).Return(l3, nil) - logger := log.NewNopLogger() - c, err := light.NewClient( ctx, chainID, @@ -587,7 +571,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -603,7 +586,6 @@ func TestClient(t *testing.T) { t.Run("Concurrency", func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() mockFullNode := &provider_mocks.Provider{} mockFullNode.On("LightBlock", mock.Anything, int64(2)).Return(l2, nil) @@ -616,7 +598,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -657,7 +638,6 @@ func TestClient(t *testing.T) { 2: h2, }, valSet) mockFullNode.On("ID", mock.Anything, mock.Anything).Return(id1, nil) - logger := log.NewNopLogger() c, err := light.NewClient( ctx, @@ -667,7 +647,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -700,7 +679,6 @@ func TestClient(t *testing.T) { mockDeadNode := &provider_mocks.Provider{} mockDeadNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrNoResponse) - logger := log.NewNopLogger() c, err := light.NewClient( ctx, chainID, @@ -709,7 +687,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockDeadNode, mockFullNode, mockFullNode1}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -732,8 +709,6 @@ func TestClient(t *testing.T) { mockSlowNode := &provider_mocks.Provider{} mockSlowNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, context.DeadlineExceeded) - logger := log.NewNopLogger() - _, err := light.NewClient( ctx, chainID, @@ -742,7 +717,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockDeadNode, mockSlowNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.Error(t, err) require.Equal(t, context.DeadlineExceeded, err) @@ -756,7 +730,6 @@ func TestClient(t *testing.T) { mockFullNode := &provider_mocks.Provider{} mockFullNode.On("LightBlock", mock.Anything, mock.Anything).Return(l1, nil) - logger := log.NewNopLogger() mockDeadNode := &provider_mocks.Provider{} mockDeadNode.On("LightBlock", mock.Anything, mock.Anything).Return(nil, provider.ErrLightBlockNotFound) mockDeadNode.On("ID", mock.Anything, mock.Anything).Return(id2, nil) @@ -769,7 +742,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode, mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) _, err = c.Update(ctx, bTime.Add(2*time.Hour)) @@ -780,7 +752,6 @@ func TestClient(t *testing.T) { }) t.Run("BackwardsVerification", func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() { headers, vals, _ := genLightBlocksWithKeys(t, 9, 3, 0, bTime) @@ -803,7 +774,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockLargeFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -863,7 +833,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) @@ -896,7 +865,6 @@ func TestClient(t *testing.T) { mockNode.AssertExpectations(t) }) t.Run("RemovesWitnessIfItSendsUsIncorrectHeader", func(t *testing.T) { - logger := log.NewNopLogger() // different headers hash then primary plus less than 1/3 signed (no fork) headers1 := map[int64]*types.SignedHeader{ @@ -941,7 +909,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockBadNode1, mockBadNode2}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) // witness should have behaved properly -> no error require.NoError(t, err) @@ -965,7 +932,6 @@ func TestClient(t *testing.T) { mockBadNode2.AssertExpectations(t) }) t.Run("BadWitnessesAreBlacklisted", func(t *testing.T) { - logger := log.NewNopLogger() // different headers hash then primary plus less than 1/3 signed (no fork) headers1 := map[int64]*types.SignedHeader{ @@ -1010,7 +976,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockBadNode1, mockBadNode2}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) // witness should have behaved properly -> no error @@ -1036,8 +1001,6 @@ func TestClient(t *testing.T) { t.Run("TrustedValidatorSet", func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // Create a different header for height 2 that will cause a hash mismatch // This is more reliable than validator set mismatches for witness removal differentHeader := keys.GenSignedHeaderLastBlockID(t, chainID, 2, bTime.Add(30*time.Minute), nil, vals, vals, @@ -1083,7 +1046,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockBadValSetNode, mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), ) require.NoError(t, err) assert.Equal(t, 2, len(c.Witnesses())) @@ -1117,7 +1079,6 @@ func TestClient(t *testing.T) { }) ctx := t.Context() - logger := log.NewNopLogger() c, err := light.NewClient( ctx, @@ -1127,7 +1088,6 @@ func TestClient(t *testing.T) { []provider.Provider{mockFullNode}, dbs.New(dbm.NewMemDB()), blacklistTTL, - light.Logger(logger), light.PruningSize(1), ) require.NoError(t, err) diff --git a/sei-tendermint/light/detector.go b/sei-tendermint/light/detector.go index 4ddbefb644..eab36ac6c5 100644 --- a/sei-tendermint/light/detector.go +++ b/sei-tendermint/light/detector.go @@ -36,7 +36,7 @@ func (c *Client) detectDivergence(ctx context.Context, primaryTrace []*types.Lig witnessesToRemove = make([]int, 0) witnessesToBlacklist = make([]provider.Provider, 0) ) - c.logger.Debug("running detector against trace", "finalizeBlockHeight", lastVerifiedHeader.Height, + logger.Debug("running detector against trace", "finalizeBlockHeight", lastVerifiedHeader.Height, "finalizeBlockHash", lastVerifiedHeader.Hash, "length", len(primaryTrace)) c.providerMutex.Lock() defer c.providerMutex.Unlock() @@ -76,7 +76,7 @@ func (c *Client) detectDivergence(ctx context.Context, primaryTrace []*types.Lig witnessesToBlacklist = append(witnessesToBlacklist, c.witnesses[e.WitnessIndex]) case errBadWitness: - c.logger.Info("witness returned an error during header comparison, removing...", + logger.Info("witness returned an error during header comparison, removing...", "witness", c.witnesses[e.WitnessIndex], "err", err) witnessesToRemove = append(witnessesToRemove, e.WitnessIndex) witnessesToBlacklist = append(witnessesToBlacklist, c.witnesses[e.WitnessIndex]) @@ -84,7 +84,7 @@ func (c *Client) detectDivergence(ctx context.Context, primaryTrace []*types.Lig if errors.Is(e, context.Canceled) || errors.Is(e, context.DeadlineExceeded) { return e } - c.logger.Info("error in light block request to witness", "err", err) + logger.Info("error in light block request to witness", "err", err) } } @@ -214,7 +214,7 @@ func (c *Client) compareNewLightBlockWithWitness(ctx context.Context, errc chan return } - c.logger.Debug("matching header received by witness", "height", l.Height, "witness", witnessIndex) + logger.Debug("matching header received by witness", "height", l.Height, "witness", witnessIndex) errc <- nil } @@ -222,7 +222,7 @@ func (c *Client) compareNewLightBlockWithWitness(ctx context.Context, errc chan func (c *Client) sendEvidence(ctx context.Context, ev *types.LightClientAttackEvidence, receiver provider.Provider) { err := receiver.ReportEvidence(ctx, ev) if err != nil { - c.logger.Error("failed to report evidence to provider", "ev", ev, "provider", receiver) + logger.Error("failed to report evidence to provider", "ev", ev, "provider", receiver) } } @@ -244,7 +244,7 @@ func (c *Client) handleConflictingHeaders( now, ) if err != nil { - c.logger.Info("error validating witness's divergent header", "witness", supportingWitness, "err", err) + logger.Info("error validating witness's divergent header", "witness", supportingWitness, "err", err) return nil } @@ -252,12 +252,12 @@ func (c *Client) handleConflictingHeaders( // and generate evidence against the primary that we can send to the witness commonBlock, trustedBlock := witnessTrace[0], witnessTrace[len(witnessTrace)-1] evidenceAgainstPrimary := newLightClientAttackEvidence(primaryBlock, trustedBlock, commonBlock) - c.logger.Error("ATTEMPTED ATTACK DETECTED. Sending evidence againt primary by witness", "ev", evidenceAgainstPrimary, + logger.Error("ATTEMPTED ATTACK DETECTED. Sending evidence againt primary by witness", "ev", evidenceAgainstPrimary, "primary", c.primary, "witness", supportingWitness) c.sendEvidence(ctx, evidenceAgainstPrimary, supportingWitness) if primaryBlock.Commit.Round != witnessTrace[len(witnessTrace)-1].Commit.Round { - c.logger.Info("The light client has detected, and prevented, an attempted amnesia attack." + + logger.Info("The light client has detected, and prevented, an attempted amnesia attack." + " We think this attack is pretty unlikely, so if you see it, that's interesting to us." + " Can you let us know by opening an issue through https://github.com/tendermint/tendermint/issues/new?") } @@ -273,14 +273,14 @@ func (c *Client) handleConflictingHeaders( now, ) if err != nil { - c.logger.Info("error validating primary's divergent header", "primary", c.primary, "err", err) + logger.Info("error validating primary's divergent header", "primary", c.primary, "err", err) return ErrLightClientAttack } // We now use the primary trace to create evidence against the witness and send it to the primary commonBlock, trustedBlock = primaryTrace[0], primaryTrace[len(primaryTrace)-1] evidenceAgainstWitness := newLightClientAttackEvidence(witnessBlock, trustedBlock, commonBlock) - c.logger.Error("Sending evidence against witness by primary", "ev", evidenceAgainstWitness, + logger.Error("Sending evidence against witness by primary", "ev", evidenceAgainstWitness, "primary", c.primary, "witness", supportingWitness) c.sendEvidence(ctx, evidenceAgainstWitness, c.primary) // We return the error and don't process anymore witnesses diff --git a/sei-tendermint/light/detector_test.go b/sei-tendermint/light/detector_test.go index 6f6d3bf5ea..c4d7351821 100644 --- a/sei-tendermint/light/detector_test.go +++ b/sei-tendermint/light/detector_test.go @@ -13,7 +13,6 @@ import ( dbm "github.com/tendermint/tm-db" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" dbs "github.com/sei-protocol/sei-chain/sei-tendermint/light/store/db" @@ -21,7 +20,6 @@ import ( ) func TestLightClientAttackEvidence_Lunatic(t *testing.T) { - logger := log.NewNopLogger() // primary performs a lunatic attack var ( @@ -93,7 +91,6 @@ func TestLightClientAttackEvidence_Lunatic(t *testing.T) { []provider.Provider{mockWitness}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) @@ -137,8 +134,6 @@ func TestLightClientAttackEvidence_Equivocation(t *testing.T) { t.Run(tc.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // primary performs an equivocation attack var ( valSize = 5 @@ -209,7 +204,6 @@ func TestLightClientAttackEvidence_Equivocation(t *testing.T) { []provider.Provider{mockWitness}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), tc.lightOption, ) require.NoError(t, err) @@ -239,7 +233,6 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) { ) ctx := t.Context() - logger := log.NewNopLogger() witnessHeaders, witnessValidators, chainKeys := genLightBlocksWithKeys(t, latestHeight, valSize, 2, bTime) for _, unusedHeader := range []int64{3, 5, 6, 8} { @@ -308,7 +301,6 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) { []provider.Provider{mockWitness, accomplice}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), light.MaxClockDrift(1*time.Second), light.MaxBlockLag(1*time.Second), ) @@ -370,7 +362,6 @@ func TestLightClientAttackEvidence_ForwardLunatic(t *testing.T) { []provider.Provider{mockLaggingWitness, accomplice}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), light.MaxClockDrift(1*time.Second), light.MaxBlockLag(1*time.Second), ) @@ -395,8 +386,6 @@ func TestClientDivergentTraces1(t *testing.T) { headers, vals, _ = genLightBlocksWithKeys(t, 1, 5, 2, bTime) mockWitness := mockNodeFromHeadersAndVals(headers, vals) - logger := log.NewNopLogger() - _, err = light.NewClient( ctx, chainID, @@ -409,7 +398,6 @@ func TestClientDivergentTraces1(t *testing.T) { []provider.Provider{mockWitness}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) require.Error(t, err) assert.Contains(t, err.Error(), "does not match primary") @@ -421,7 +409,6 @@ func TestClientDivergentTraces1(t *testing.T) { // => verification should be successful but two unresponsive witnesses should be blacklisted func TestClientDivergentTraces2(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() headers, vals, _ := genLightBlocksWithKeys(t, 2, 5, 2, bTime) mockPrimaryNode := mockNodeFromHeadersAndVals(headers, vals) @@ -441,7 +428,6 @@ func TestClientDivergentTraces2(t *testing.T) { []provider.Provider{mockDeadNode, mockDeadNode, mockPrimaryNode}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) @@ -457,7 +443,6 @@ func TestClientDivergentTraces2(t *testing.T) { // => creation should succeed, but the verification should fail // nolint: dupl func TestClientDivergentTraces3(t *testing.T) { - logger := log.NewNopLogger() // primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(t, 2, 5, 2, bTime) @@ -485,7 +470,6 @@ func TestClientDivergentTraces3(t *testing.T) { []provider.Provider{mockWitness}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) @@ -500,7 +484,6 @@ func TestClientDivergentTraces3(t *testing.T) { // It should be ignored // nolint: dupl func TestClientDivergentTraces4(t *testing.T) { - logger := log.NewNopLogger() // primaryHeaders, primaryVals, _ := genLightBlocksWithKeys(t, 2, 5, 2, bTime) @@ -528,7 +511,6 @@ func TestClientDivergentTraces4(t *testing.T) { []provider.Provider{mockWitness}, dbs.New(dbm.NewMemDB()), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) diff --git a/sei-tendermint/light/example_test.go b/sei-tendermint/light/example_test.go index 2badffff25..11056e12ff 100644 --- a/sei-tendermint/light/example_test.go +++ b/sei-tendermint/light/example_test.go @@ -5,7 +5,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/kvstore" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" @@ -23,11 +22,6 @@ func TestExampleClient(t *testing.T) { t.Fatal(err) } - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - t.Fatal(err) - } - // Start a test application app := kvstore.NewApplication() @@ -69,7 +63,6 @@ func TestExampleClient(t *testing.T) { []provider.Provider{primary}, dbs.New(db), 5*time.Minute, - light.Logger(logger), ) if err != nil { t.Fatal(err) @@ -101,5 +94,5 @@ func TestExampleClient(t *testing.T) { t.Fatal(err) } - logger.Info("verified light block", "light-block", lb) + t.Log("verified light block", "light-block", lb) } diff --git a/sei-tendermint/light/light_test.go b/sei-tendermint/light/light_test.go index 3885b04d51..4d22a3a850 100644 --- a/sei-tendermint/light/light_test.go +++ b/sei-tendermint/light/light_test.go @@ -11,7 +11,6 @@ import ( dbm "github.com/tendermint/tm-db" "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/kvstore" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/light" "github.com/sei-protocol/sei-chain/sei-tendermint/light/provider" @@ -32,8 +31,6 @@ func TestClientIntegration_Update(t *testing.T) { conf, err := rpctest.CreateConfig(t, t.Name()) require.NoError(t, err) - logger := log.NewNopLogger() - // Start a test application app := kvstore.NewApplication() _, closer, err := rpctest.StartTendermint(ctx, conf, app, rpctest.SuppressStdout) @@ -71,7 +68,6 @@ func TestClientIntegration_Update(t *testing.T) { []provider.Provider{primary}, dbs.New(db), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) @@ -95,8 +91,6 @@ func TestClientIntegration_VerifyLightBlockAtHeight(t *testing.T) { conf, err := rpctest.CreateConfig(t, t.Name()) require.NoError(t, err) - logger := log.NewNopLogger() - // Start a test application app := kvstore.NewApplication() @@ -128,7 +122,6 @@ func TestClientIntegration_VerifyLightBlockAtHeight(t *testing.T) { []provider.Provider{primary}, dbs.New(db), 5*time.Minute, - light.Logger(logger), ) require.NoError(t, err) @@ -205,7 +198,6 @@ func TestClientStatusRPC(t *testing.T) { witnesses, dbs.New(db), 5*time.Minute, - light.Logger(log.NewNopLogger()), ) require.NoError(t, err) diff --git a/sei-tendermint/light/proxy/proxy.go b/sei-tendermint/light/proxy/proxy.go index d212ac4e8d..05f5db89ef 100644 --- a/sei-tendermint/light/proxy/proxy.go +++ b/sei-tendermint/light/proxy/proxy.go @@ -8,19 +8,20 @@ import ( tmpubsub "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" rpccore "github.com/sei-protocol/sei-chain/sei-tendermint/internal/rpc/core" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/light" lrpc "github.com/sei-protocol/sei-chain/sei-tendermint/light/rpc" rpchttp "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" rpcserver "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "light", "proxy") + // A Proxy defines parameters for running an HTTP server proxy. type Proxy struct { Addr string // TCP address to listen on, ":http" if empty Config *rpcserver.Config Client *lrpc.Client - Logger log.Logger Listener net.Listener } @@ -30,7 +31,6 @@ func NewProxy( lightClient *light.Client, listenAddr, providerAddr string, config *rpcserver.Config, - logger log.Logger, opts ...lrpc.Option, ) (*Proxy, error) { rpcClient, err := rpchttp.NewWithTimeout(providerAddr, config.WriteTimeout) @@ -41,8 +41,7 @@ func NewProxy( return &Proxy{ Addr: listenAddr, Config: config, - Client: lrpc.NewClient(logger, rpcClient, lightClient, opts...), - Logger: logger, + Client: lrpc.NewClient(rpcClient, lightClient, opts...), }, nil } @@ -61,7 +60,6 @@ func (p *Proxy) ListenAndServe(ctx context.Context) error { ctx, listener, mux, - p.Logger, p.Config, ) } @@ -82,7 +80,6 @@ func (p *Proxy) ListenAndServeTLS(ctx context.Context, certFile, keyFile string) mux, certFile, keyFile, - p.Logger, p.Config, ) } @@ -92,15 +89,14 @@ func (p *Proxy) listen(ctx context.Context) (net.Listener, *http.ServeMux, error // 1) Register regular routes. r := rpccore.NewRoutesMap(proxyService{Client: p.Client}, nil) - rpcserver.RegisterRPCFuncs(mux, r, p.Logger) + rpcserver.RegisterRPCFuncs(mux, r) // 2) Allow websocket connections. - wmLogger := p.Logger.With("protocol", "websocket") - wm := rpcserver.NewWebsocketManager(wmLogger, r, + wm := rpcserver.NewWebsocketManager(r, rpcserver.OnDisconnect(func(remoteAddr string) { err := p.Client.UnsubscribeAll(context.Background(), remoteAddr) if err != nil && err != tmpubsub.ErrSubscriptionNotFound { - wmLogger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err) + logger.Error("Failed to unsubscribe addr from events", "protocol", "websocket", "addr", remoteAddr, "err", err) } }), rpcserver.ReadLimit(p.Config.MaxBodyBytes), diff --git a/sei-tendermint/light/rpc/client.go b/sei-tendermint/light/rpc/client.go index d1c8085343..2f2067c1d1 100644 --- a/sei-tendermint/light/rpc/client.go +++ b/sei-tendermint/light/rpc/client.go @@ -13,7 +13,6 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/merkle" tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmmath "github.com/sei-protocol/sei-chain/sei-tendermint/libs/math" service "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" rpcclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client" @@ -88,13 +87,13 @@ func DefaultMerkleKeyPathFn() KeyPathFunc { } // NewClient returns a new client. -func NewClient(logger log.Logger, next rpcclient.Client, lc LightClient, opts ...Option) *Client { +func NewClient(next rpcclient.Client, lc LightClient, opts ...Option) *Client { c := &Client{ next: next, lc: lc, prt: merkle.DefaultProofRuntime(), } - c.BaseService = *service.NewBaseService(logger, "Client", c) + c.BaseService = *service.NewBaseService("Client", c) for _, o := range opts { o(c) } diff --git a/sei-tendermint/node/node.go b/sei-tendermint/node/node.go index 32b97bb0af..ceb4777c7e 100644 --- a/sei-tendermint/node/node.go +++ b/sei-tendermint/node/node.go @@ -32,7 +32,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/statesync" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -48,7 +47,6 @@ import ( // It includes all configuration information and running services. type nodeImpl struct { service.BaseService - logger log.Logger // config config *config.Config @@ -87,7 +85,6 @@ func makeNode( app abci.Application, genesisDocProvider genesisDocProvider, dbProvider config.DBProvider, - logger log.Logger, tracerProviderOptions []trace.TracerProviderOption, nodeMetrics *NodeMetrics, ) (service.Service, error) { @@ -119,7 +116,7 @@ func makeNode( } proxyApp := proxy.New(app, nodeMetrics.proxy) - eventBus := eventbus.NewDefault(logger.With("module", "events")) + eventBus := eventbus.NewDefault() var eventLog *eventlog.Log if w := cfg.RPC.EventLogWindowSize; w > 0 { @@ -140,11 +137,10 @@ func makeNode( indexerService := indexer.NewService(indexer.ServiceArgs{ Sinks: eventSinks, EventBus: eventBus, - Logger: logger.With("module", "txindex"), Metrics: nodeMetrics.indexer, }) - privValidator, err := createPrivval(ctx, logger, cfg, genDoc, filePrivval) + privValidator, err := createPrivval(ctx, cfg, genDoc, filePrivval) if err != nil { return nil, combineCloseError(err, makeCloser(closers)) } @@ -161,7 +157,6 @@ func makeNode( // TODO construct node here: node := &nodeImpl{ config: cfg, - logger: logger, genesisDoc: genDoc, privValidator: privValidator, @@ -184,12 +179,11 @@ func makeNode( EventSinks: eventSinks, EventBus: eventBus, EventLog: eventLog, - Logger: logger.With("module", "rpc"), Config: *cfg.RPC, }, } - router, peerCloser, err := createRouter(logger, nodeMetrics.p2p, node.NodeInfo, nodeKey, cfg, proxyApp, dbProvider) + router, peerCloser, err := createRouter(nodeMetrics.p2p, node.NodeInfo, nodeKey, cfg, proxyApp, dbProvider) closers = append(closers, peerCloser) if err != nil { return nil, combineCloseError( @@ -200,7 +194,7 @@ func makeNode( node.rpcEnv.PeerManager = router node.shutdownOps = makeCloser(closers) - evReactor, evPool, edbCloser, err := createEvidenceReactor(logger, cfg, dbProvider, + evReactor, evPool, edbCloser, err := createEvidenceReactor(cfg, dbProvider, stateStore, blockStore, node.router, nodeMetrics.evidence, eventBus) closers = append(closers, edbCloser) if err != nil { @@ -210,7 +204,7 @@ func makeNode( node.rpcEnv.EvidencePool = evPool node.evPool = evPool - mpReactor, mp, err := createMempoolReactor(logger, cfg, proxyApp, stateStore, nodeMetrics.mempool, node.router) + mpReactor, mp, err := createMempoolReactor(cfg, proxyApp, stateStore, nodeMetrics.mempool, node.router) if err != nil { return nil, fmt.Errorf("createMempoolReactor(): %w", err) } @@ -222,7 +216,6 @@ func makeNode( // make block executor for consensus and blockchain reactors to execute blocks blockExec := sm.NewBlockExecutor( stateStore, - logger.With("module", "state"), proxyApp, mp, evPool, @@ -243,7 +236,7 @@ func makeNode( blockSync := !onlyValidatorIsUs(state, pubKey) waitSync := stateSync || blockSync - csState, err := consensus.NewState(logger.With("module", "consensus"), + csState, err := consensus.NewState( cfg.Consensus, stateStore, blockExec, @@ -261,7 +254,6 @@ func makeNode( node.rpcEnv.ConsensusState = csState csReactor, err := consensus.NewReactor( - logger, csState, node.router, eventBus, @@ -279,7 +271,6 @@ func makeNode( // Create the blockchain reactor. Note, we do not start block sync if we're // doing a state sync first. bcReactor, err := blocksync.NewReactor( - logger.With("module", "blockchain"), stateStore, blockExec, blockStore, @@ -307,7 +298,6 @@ func makeNode( if cfg.P2P.PexReactor { pxReactor, err := pex.NewReactor( - logger, node.router, pex.DefaultSendInterval, ) @@ -340,7 +330,6 @@ func makeNode( genDoc.ChainID, genDoc.InitialHeight, *cfg.StateSync, - logger.With("module", "statesync"), proxyApp, node.router, stateStore, @@ -368,7 +357,7 @@ func makeNode( } node.rpcEnv.PubKey = pubKey - node.BaseService = *service.NewBaseService(logger, "Node", node) + node.BaseService = *service.NewBaseService("Node", node) return node, nil } @@ -393,7 +382,7 @@ func (n *nodeImpl) OnStart(ctx context.Context) error { if n.shouldHandshake { // Create the handshaker, which calls RequestInfo, sets the AppVersion on the state, // and replays any blocks as necessary to sync tendermint with the app. - if err := consensus.NewHandshaker(n.logger.With("module", "handshaker"), + if err := consensus.NewHandshaker( n.stateStore, n.initialState, n.blockStore, n.rpcEnv.EventBus, n.genesisDoc, ).Handshake(ctx, n.rpcEnv.ProxyApp); err != nil { return err @@ -408,7 +397,7 @@ func (n *nodeImpl) OnStart(ctx context.Context) error { return fmt.Errorf("cannot load state: %w", err) } - logNodeStartupInfo(state, n.rpcEnv.PubKey, n.logger, n.config.Mode) + logNodeStartupInfo(state, n.rpcEnv.PubKey, n.config.Mode) // TODO: Fetch and provide real options and do proper p2p bootstrapping. // TODO: Use a persistent peer database. @@ -436,10 +425,10 @@ func (n *nodeImpl) OnStart(ctx context.Context) error { }() go func() { - n.logger.Info("Starting pprof server", "laddr", n.config.RPC.PprofListenAddress) + logger.Info("Starting pprof server", "laddr", n.config.RPC.PprofListenAddress) if err := srv.ListenAndServe(); err != nil { - n.logger.Error("pprof server error", "err", err) + logger.Error("pprof server error", "err", err) close(signal) } }() @@ -448,7 +437,7 @@ func (n *nodeImpl) OnStart(ctx context.Context) error { now := tmtime.Now() genTime := n.genesisDoc.GenesisTime if genTime.After(now) { - n.logger.Info("Genesis time is in the future. Sleeping until then...", "genTime", genTime) + logger.Info("Genesis time is in the future. Sleeping until then...", "genTime", genTime) timer := time.NewTimer(genTime.Sub(now)) defer timer.Stop() @@ -499,18 +488,18 @@ func (n *nodeImpl) OnStart(ctx context.Context) error { // OnStop stops the Node. It implements service.Service. func (n *nodeImpl) OnStop() { - n.logger.Info("Stopping Node") + logger.Info("Stopping Node") // stop the listeners / external services first for _, l := range n.rpcListeners { - n.logger.Info("Closing rpc listener", "listener", l.Addr()) + logger.Info("Closing rpc listener", "listener", l.Addr()) if err := l.Close(); err != nil { - n.logger.Error("error closing listener", "listener", l.Addr(), "err", err) + logger.Error("error closing listener", "listener", l.Addr(), "err", err) } } for _, es := range n.eventSinks { if err := es.Stop(); err != nil { - n.logger.Error("failed to stop event sink", "err", err) + logger.Error("failed to stop event sink", "err", err) } } @@ -530,23 +519,23 @@ func (n *nodeImpl) OnStop() { if n.prometheusSrv != nil { if err := n.prometheusSrv.Shutdown(context.Background()); err != nil { // Error from closing listeners, or context timeout: - n.logger.Error("Prometheus HTTP server Shutdown", "err", err) + logger.Error("Prometheus HTTP server Shutdown", "err", err) } } if err := n.shutdownOps(); err != nil { if strings.TrimSpace(err.Error()) != "" { - n.logger.Error("problem shutting down additional services", "err", err) + logger.Error("problem shutting down additional services", "err", err) } } if n.blockStore != nil { if err := n.blockStore.Close(); err != nil { - n.logger.Error("problem closing blockstore", "err", err) + logger.Error("problem closing blockstore", "err", err) } } if n.stateStore != nil { if err := n.stateStore.Close(); err != nil { - n.logger.Error("problem closing statestore", "err", err) + logger.Error("problem closing statestore", "err", err) } } } @@ -578,7 +567,7 @@ func (n *nodeImpl) startPrometheusServer(ctx context.Context, addr string) *http go func() { if err := srv.ListenAndServe(); err != nil { - n.logger.Error("Prometheus HTTP server ListenAndServe", "err", err) + logger.Error("Prometheus HTTP server ListenAndServe", "err", err) close(signal) } }() diff --git a/sei-tendermint/node/node_test.go b/sei-tendermint/node/node_test.go index c8e23296e1..c4f8d04cb4 100644 --- a/sei-tendermint/node/node_test.go +++ b/sei-tendermint/node/node_test.go @@ -28,7 +28,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" @@ -38,11 +37,10 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) -func newLocalNodeService(ctx context.Context, cfg *config.Config, logger log.Logger) (service.Service, error) { +func newLocalNodeService(ctx context.Context, cfg *config.Config) (service.Service, error) { return New( ctx, cfg, - logger, func() {}, kvstore.NewApplication(), nil, @@ -58,9 +56,8 @@ func TestNodeStartStop(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() // create & start node - ns, err := newLocalNodeService(ctx, cfg, logger) + ns, err := newLocalNodeService(ctx, cfg) require.NoError(t, err) n, ok := ns.(*nodeImpl) @@ -96,10 +93,10 @@ func TestNodeStartStop(t *testing.T) { require.NoError(t, err, "waiting for event") } -func getTestNode(ctx context.Context, t *testing.T, conf *config.Config, logger log.Logger) *nodeImpl { +func getTestNode(ctx context.Context, t *testing.T, conf *config.Config) *nodeImpl { t.Helper() - ns, err := newLocalNodeService(ctx, conf, logger) + ns, err := newLocalNodeService(ctx, conf) require.NoError(t, err) n, ok := ns.(*nodeImpl) @@ -125,10 +122,8 @@ func TestNodeDelayedStart(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // create & start node - n := getTestNode(ctx, t, cfg, logger) + n := getTestNode(ctx, t, cfg) n.GenesisDoc().GenesisTime = now.Add(2 * time.Second) require.NoError(t, n.Start(ctx)) @@ -145,10 +140,8 @@ func TestNodeSetAppVersion(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // create node - n := getTestNode(ctx, t, cfg, logger) + n := getTestNode(ctx, t, cfg) require.NoError(t, n.Start(ctx)) defer n.Stop() @@ -171,15 +164,13 @@ func TestNodeSetPrivValTCP(t *testing.T) { t.Cleanup(leaktest.Check(t)) ctx := t.Context() - logger := log.NewNopLogger() - cfg, err := config.ResetTestRoot(t.TempDir(), "node_priv_val_tcp_test") require.NoError(t, err) defer os.RemoveAll(cfg.RootDir) cfg.PrivValidator.ListenAddr = addr dialer := privval.DialTCPFn(addr, 100*time.Millisecond, ed25519.GenerateSecretKey()) - dialerEndpoint := privval.NewSignerDialerEndpoint(logger, dialer) + dialerEndpoint := privval.NewSignerDialerEndpoint(dialer) privval.SignerDialerEndpointTimeoutReadWrite(100 * time.Millisecond)(dialerEndpoint) signerServer := privval.NewSignerServer( @@ -197,7 +188,7 @@ func TestNodeSetPrivValTCP(t *testing.T) { genDoc, err := defaultGenesisDocProviderFunc(cfg)() require.NoError(t, err) - pval, err := createPrivval(ctx, logger, cfg, genDoc, nil) + pval, err := createPrivval(ctx, cfg, genDoc, nil) require.NoError(t, err) assert.IsType(t, &privval.RetrySignerClient{}, pval) @@ -214,9 +205,7 @@ func TestPrivValidatorListenAddrNoProtocol(t *testing.T) { defer os.RemoveAll(cfg.RootDir) cfg.PrivValidator.ListenAddr = addrNoPrefix - logger := log.NewNopLogger() - - ns, err := newLocalNodeService(ctx, cfg, logger) + ns, err := newLocalNodeService(ctx, cfg) n, _ := ns.(*nodeImpl) @@ -238,10 +227,8 @@ func TestNodeSetPrivValIPC(t *testing.T) { defer os.RemoveAll(cfg.RootDir) cfg.PrivValidator.ListenAddr = "unix://" + tmpfile - logger := log.NewNopLogger() - dialer := privval.DialUnixFn(tmpfile) - dialerEndpoint := privval.NewSignerDialerEndpoint(logger, dialer) + dialerEndpoint := privval.NewSignerDialerEndpoint(dialer) privval.SignerDialerEndpointTimeoutReadWrite(100 * time.Millisecond)(dialerEndpoint) @@ -259,7 +246,7 @@ func TestNodeSetPrivValIPC(t *testing.T) { genDoc, err := defaultGenesisDocProviderFunc(cfg)() require.NoError(t, err) - pval, err := createPrivval(ctx, logger, cfg, genDoc, nil) + pval, err := createPrivval(ctx, cfg, genDoc, nil) require.NoError(t, err) assert.IsType(t, &privval.RetrySignerClient{}, pval) @@ -283,8 +270,6 @@ func TestCreateProposalBlock(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(cfg.RootDir) - logger := log.NewNopLogger() - app := kvstore.NewApplication() const height int64 = 1 @@ -298,7 +283,6 @@ func TestCreateProposalBlock(t *testing.T) { proposerAddr, _ := state.Validators.GetByIndex(0) mp := mempool.NewTxMempool( - logger.With("module", "mempool"), cfg.Mempool, app, nil, @@ -307,7 +291,7 @@ func TestCreateProposalBlock(t *testing.T) { // Make EvidencePool evidenceDB := dbm.NewMemDB() blockStore := store.NewBlockStore(dbm.NewMemDB()) - evidencePool := evidence.NewPool(logger, evidenceDB, stateStore, blockStore, evidence.NopMetrics(), nil) + evidencePool := evidence.NewPool(evidenceDB, stateStore, blockStore, evidence.NopMetrics(), nil) // fill the evidence pool with more evidence // than can fit in a block @@ -333,11 +317,10 @@ func TestCreateProposalBlock(t *testing.T) { assert.NoError(t, err) } - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, evidencePool, @@ -381,8 +364,6 @@ func TestMaxTxsProposalBlockSize(t *testing.T) { defer os.RemoveAll(cfg.RootDir) - logger := log.NewNopLogger() - app := kvstore.NewApplication() const height int64 = 1 @@ -397,7 +378,6 @@ func TestMaxTxsProposalBlockSize(t *testing.T) { // Make Mempool mp := mempool.NewTxMempool( - logger.With("module", "mempool"), cfg.Mempool, app, nil, @@ -409,12 +389,11 @@ func TestMaxTxsProposalBlockSize(t *testing.T) { err = mp.CheckTx(ctx, tx, nil, mempool.TxInfo{}) assert.NoError(t, err) - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -450,8 +429,6 @@ func TestMaxProposalBlockSize(t *testing.T) { require.NoError(t, err) defer os.RemoveAll(cfg.RootDir) - logger := log.NewNopLogger() - app := kvstore.NewApplication() state, stateDB, privVals := state(t, types.MaxVotesCount, int64(1)) @@ -464,7 +441,6 @@ func TestMaxProposalBlockSize(t *testing.T) { // Make Mempool mp := mempool.NewTxMempool( - logger.With("module", "mempool"), cfg.Mempool, app, nil, @@ -482,12 +458,11 @@ func TestMaxProposalBlockSize(t *testing.T) { assert.NoError(t, mp.CheckTx(ctx, tx, nil, mempool.TxInfo{})) } - eventBus := eventbus.NewDefault(logger) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) blockExec := sm.NewBlockExecutor( stateStore, - logger, app, mp, sm.EmptyEvidencePool{}, @@ -591,10 +566,7 @@ func TestNodeNewSeedNode(t *testing.T) { nodeKey, err := types.LoadOrGenNodeKey(cfg.NodeKeyFile()) require.NoError(t, err) - logger := log.NewNopLogger() - ns, err := makeSeedNode( - logger, cfg, config.DefaultDBProvider, nodeKey, @@ -627,10 +599,8 @@ func TestNodeSetEventSink(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - setupTest := func(t *testing.T) []indexer.EventSink { - eventBus := eventbus.NewDefault(logger.With("module", "events")) + eventBus := eventbus.NewDefault() require.NoError(t, eventBus.Start(ctx)) t.Cleanup(eventBus.Wait) @@ -675,7 +645,7 @@ func TestNodeSetEventSink(t *testing.T) { assert.Equal(t, indexer.NULL, eventSinks[0].Type()) cfg.TxIndex.Indexer = []string{"kvv"} - ns, err := newLocalNodeService(ctx, cfg, logger) + ns, err := newLocalNodeService(ctx, cfg) assert.Nil(t, ns) assert.Contains(t, err.Error(), "unsupported event sink type") t.Cleanup(cleanup(ns)) @@ -687,7 +657,7 @@ func TestNodeSetEventSink(t *testing.T) { assert.Equal(t, indexer.NULL, eventSinks[0].Type()) cfg.TxIndex.Indexer = []string{"psql"} - ns, err = newLocalNodeService(ctx, cfg, logger) + ns, err = newLocalNodeService(ctx, cfg) assert.Nil(t, ns) assert.Contains(t, err.Error(), "the psql connection settings cannot be empty") t.Cleanup(cleanup(ns)) @@ -697,13 +667,13 @@ func TestNodeSetEventSink(t *testing.T) { var e = errors.New("found duplicated sinks, please check the tx-index section in the config.toml") cfg.TxIndex.Indexer = []string{"null", "kv", "Kv"} - ns, err = newLocalNodeService(ctx, cfg, logger) + ns, err = newLocalNodeService(ctx, cfg) require.Error(t, err) assert.Contains(t, err.Error(), e.Error()) t.Cleanup(cleanup(ns)) cfg.TxIndex.Indexer = []string{"Null", "kV", "kv", "nUlL"} - ns, err = newLocalNodeService(ctx, cfg, logger) + ns, err = newLocalNodeService(ctx, cfg) require.Error(t, err) assert.Contains(t, err.Error(), e.Error()) t.Cleanup(cleanup(ns)) diff --git a/sei-tendermint/node/public.go b/sei-tendermint/node/public.go index 133b2d481d..cefa65f1c3 100644 --- a/sei-tendermint/node/public.go +++ b/sei-tendermint/node/public.go @@ -7,13 +7,15 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" "go.opentelemetry.io/otel/sdk/trace" ) +var logger = seilog.NewLogger("tendermint", "node") + // New constructs a tendermint node. The provided app runs in the same // process as the tendermint node and will be wrapped in a local ABCI client // inside this function. The final option is a pointer to a Genesis document: @@ -22,7 +24,6 @@ import ( func New( ctx context.Context, conf *config.Config, - logger log.Logger, restartEvent func(), app abci.Application, gen *tmtypes.GenesisDoc, @@ -58,13 +59,11 @@ func New( app, genProvider, config.DefaultDBProvider, - logger, tracerProviderOptions, nodeMetrics, ) case config.ModeSeed: return makeSeedNode( - logger, conf, config.DefaultDBProvider, nodeKey, diff --git a/sei-tendermint/node/seed.go b/sei-tendermint/node/seed.go index 3dec75f26c..88dcc5735a 100644 --- a/sei-tendermint/node/seed.go +++ b/sei-tendermint/node/seed.go @@ -16,7 +16,6 @@ import ( rpccore "github.com/sei-protocol/sei-chain/sei-tendermint/internal/rpc/core" sm "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer/sink" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" tmtime "github.com/sei-protocol/sei-chain/sei-tendermint/libs/time" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -24,7 +23,6 @@ import ( type seedNodeImpl struct { service.BaseService - logger log.Logger // config config *config.Config @@ -45,7 +43,6 @@ type seedNodeImpl struct { // makeSeedNode returns a new seed node, containing only p2p, pex reactor func makeSeedNode( - logger log.Logger, cfg *config.Config, dbProvider config.DBProvider, nodeKey types.NodeKey, @@ -71,14 +68,14 @@ func makeSeedNode( return nil, err } - router, peerCloser, err := createRouter(logger, nodeMetrics.p2p, func() *types.NodeInfo { return &nodeInfo }, nodeKey, cfg, nil, dbProvider) + router, peerCloser, err := createRouter(nodeMetrics.p2p, func() *types.NodeInfo { return &nodeInfo }, nodeKey, cfg, nil, dbProvider) if err != nil { return nil, combineCloseError( fmt.Errorf("failed to create router: %w", err), peerCloser) } - pexReactor, err := pex.NewReactor(logger, router, pex.DefaultSendInterval) + pexReactor, err := pex.NewReactor(router, pex.DefaultSendInterval) if err != nil { return nil, fmt.Errorf("pex.NewReactor(): %w", err) } @@ -94,13 +91,12 @@ func makeSeedNode( if err != nil { return nil, combineCloseError(err, makeCloser(closers)) } - eventBus := eventbus.NewDefault(logger.With("module", "events")) + eventBus := eventbus.NewDefault() stateStore := sm.NewStore(stateDB) node := &seedNodeImpl{ config: cfg, - logger: logger, genesisDoc: genDoc, nodeKey: nodeKey, @@ -120,12 +116,11 @@ func makeSeedNode( GenDoc: genDoc, EventSinks: eventSinks, EventBus: eventBus, - Logger: logger.With("module", "rpc"), Config: *cfg.RPC, }, nodeInfo: nodeInfo, } - node.BaseService = *service.NewBaseService(logger, "SeedNode", node) + node.BaseService = *service.NewBaseService("SeedNode", node) return node, nil } @@ -151,10 +146,10 @@ func (n *seedNodeImpl) OnStart(ctx context.Context) error { }() go func() { - n.logger.Info("Starting pprof server", "laddr", n.config.RPC.PprofListenAddress) + logger.Info("Starting pprof server", "laddr", n.config.RPC.PprofListenAddress) if err := srv.ListenAndServe(); err != nil { - n.logger.Error("pprof server error", "err", err) + logger.Error("pprof server error", "err", err) rpcCancel() } }() @@ -163,7 +158,7 @@ func (n *seedNodeImpl) OnStart(ctx context.Context) error { now := tmtime.Now() genTime := n.genesisDoc.GenesisTime if genTime.After(now) { - n.logger.Info("Genesis time is in the future. Sleeping until then...", "genTime", genTime) + logger.Info("Genesis time is in the future. Sleeping until then...", "genTime", genTime) time.Sleep(genTime.Sub(now)) } @@ -184,7 +179,7 @@ func (n *seedNodeImpl) OnStart(ctx context.Context) error { // OnStop stops the Seed Node. It implements service.Service. func (n *seedNodeImpl) OnStop() { - n.logger.Info("Stopping Node") + logger.Info("Stopping Node") n.pexReactor.Wait() n.router.Wait() @@ -192,7 +187,7 @@ func (n *seedNodeImpl) OnStop() { if err := n.shutdownOps(); err != nil { if strings.TrimSpace(err.Error()) != "" { - n.logger.Error("problem shutting down additional services", "err", err) + logger.Error("problem shutting down additional services", "err", err) } } } diff --git a/sei-tendermint/node/setup.go b/sei-tendermint/node/setup.go index bf1d1f6bed..2dcbc693b8 100644 --- a/sei-tendermint/node/setup.go +++ b/sei-tendermint/node/setup.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + _ "net/http/pprof" // nolint: gosec // securely exposed on separate, optional port "strings" "time" @@ -23,7 +24,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/state/indexer" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/statesync" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/store" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" tmstrings "github.com/sei-protocol/sei-chain/sei-tendermint/libs/strings" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -33,8 +33,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/version" dbm "github.com/tendermint/tm-db" "golang.org/x/time/rate" - - _ "net/http/pprof" // nolint: gosec // securely exposed on separate, optional port ) type closer func() error @@ -94,7 +92,7 @@ func initDBs( return blockStore, stateDB, makeCloser(closers), nil } -func logNodeStartupInfo(state sm.State, pubKey utils.Option[crypto.PubKey], logger log.Logger, mode string) { +func logNodeStartupInfo(state sm.State, pubKey utils.Option[crypto.PubKey], mode string) { // Log the version info. logger.Info("Version info", "tmVersion", version.TMVersion, @@ -145,17 +143,14 @@ func onlyValidatorIsUs(state sm.State, pubKey utils.Option[crypto.PubKey]) bool } func createMempoolReactor( - logger log.Logger, cfg *config.Config, appClient abci.Application, store sm.Store, memplMetrics *mempool.Metrics, router *p2p.Router, ) (*mempool.Reactor, mempool.Mempool, error) { - logger = logger.With("module", "mempool") mp := mempool.NewTxMempool( - logger, cfg.Mempool, appClient, router, @@ -165,7 +160,6 @@ func createMempoolReactor( ) reactor, err := mempool.NewReactor( - logger, cfg.Mempool, mp, router, @@ -182,7 +176,6 @@ func createMempoolReactor( } func createEvidenceReactor( - logger log.Logger, cfg *config.Config, dbProvider config.DBProvider, store sm.Store, @@ -196,10 +189,8 @@ func createEvidenceReactor( return nil, nil, func() error { return nil }, fmt.Errorf("unable to initialize evidence db: %w", err) } - logger = logger.With("module", "evidence") - - evidencePool := evidence.NewPool(logger, evidenceDB, store, blockStore, metrics, eventBus) - evidenceReactor, err := evidence.NewReactor(logger, router, evidencePool) + evidencePool := evidence.NewPool(evidenceDB, store, blockStore, metrics, eventBus) + evidenceReactor, err := evidence.NewReactor(router, evidencePool) if err != nil { return nil, nil, evidenceDB.Close, fmt.Errorf("evidence.NewReactor(): %w", err) } @@ -207,7 +198,6 @@ func createEvidenceReactor( } func createRouter( - logger log.Logger, p2pMetrics *p2p.Metrics, nodeInfoProducer func() *types.NodeInfo, nodeKey types.NodeKey, @@ -292,7 +282,6 @@ func createRouter( } closer = peerDB.Close router, err := p2p.NewRouter( - logger.With("module", "p2p"), p2pMetrics, p2p.NodeSecretKey(nodeKey.PrivKey), nodeInfoProducer, @@ -396,10 +385,9 @@ func makeSeedNodeInfo( func createAndStartPrivValidatorSocketClient( ctx context.Context, listenAddr, chainID string, - logger log.Logger, ) (types.PrivValidator, error) { - pve, err := privval.NewSignerListener(listenAddr, logger) + pve, err := privval.NewSignerListener(listenAddr) if err != nil { return nil, fmt.Errorf("starting validator listener: %w", err) } @@ -429,13 +417,11 @@ func createAndStartPrivValidatorGRPCClient( ctx context.Context, cfg *config.Config, chainID string, - logger log.Logger, ) (types.PrivValidator, error) { pvsc, err := tmgrpc.DialRemoteSigner( ctx, cfg.PrivValidator, chainID, - logger, cfg.Instrumentation.Prometheus, ) if err != nil { @@ -451,14 +437,14 @@ func createAndStartPrivValidatorGRPCClient( return pvsc, nil } -func createPrivval(ctx context.Context, logger log.Logger, conf *config.Config, genDoc *types.GenesisDoc, defaultPV *privval.FilePV) (types.PrivValidator, error) { +func createPrivval(ctx context.Context, conf *config.Config, genDoc *types.GenesisDoc, defaultPV *privval.FilePV) (types.PrivValidator, error) { if conf.PrivValidator.ListenAddr != "" { protocol, _ := tmnet.ProtocolAndAddress(conf.PrivValidator.ListenAddr) // FIXME: we should return un-started services and // then start them later. switch protocol { case "grpc": - privValidator, err := createAndStartPrivValidatorGRPCClient(ctx, conf, genDoc.ChainID, logger) + privValidator, err := createAndStartPrivValidatorGRPCClient(ctx, conf, genDoc.ChainID) if err != nil { return nil, fmt.Errorf("error with private validator grpc client: %w", err) } @@ -468,7 +454,6 @@ func createPrivval(ctx context.Context, logger log.Logger, conf *config.Config, ctx, conf.PrivValidator.ListenAddr, genDoc.ChainID, - logger, ) if err != nil { return nil, fmt.Errorf("error with private validator socket client: %w", err) diff --git a/sei-tendermint/privval/grpc/client.go b/sei-tendermint/privval/grpc/client.go index 0e4e1eab76..a152cfa6d1 100644 --- a/sei-tendermint/privval/grpc/client.go +++ b/sei-tendermint/privval/grpc/client.go @@ -7,7 +7,6 @@ import ( "google.golang.org/grpc/status" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -16,8 +15,6 @@ import ( // SignerClient implements PrivValidator. // Handles remote validator connections that provide signing services type SignerClient struct { - logger log.Logger - client privvalproto.PrivValidatorAPIClient conn *grpc.ClientConn chainID string @@ -28,10 +25,9 @@ var _ types.PrivValidator = (*SignerClient)(nil) // NewSignerClient returns an instance of SignerClient. // it will start the endpoint (if not already started) func NewSignerClient(conn *grpc.ClientConn, - chainID string, log log.Logger) (*SignerClient, error) { + chainID string) (*SignerClient, error) { sc := &SignerClient{ - logger: log, chainID: chainID, client: privvalproto.NewPrivValidatorAPIClient(conn), // Create the Private Validator Client } @@ -41,7 +37,7 @@ func NewSignerClient(conn *grpc.ClientConn, // Close closes the underlying connection func (sc *SignerClient) Close() error { - sc.logger.Info("Stopping service") + logger.Info("Stopping service") if sc.conn != nil { return sc.conn.Close() } @@ -57,7 +53,7 @@ func (sc *SignerClient) GetPubKey(ctx context.Context) (crypto.PubKey, error) { resp, err := sc.client.GetPubKey(ctx, &privvalproto.PubKeyRequest{ChainId: sc.chainID}) if err != nil { errStatus, _ := status.FromError(err) - sc.logger.Error("SignerClient::GetPubKey", "err", errStatus.Message()) + logger.Error("SignerClient::GetPubKey", "err", errStatus) return crypto.PubKey{}, errStatus.Err() } @@ -74,7 +70,7 @@ func (sc *SignerClient) SignVote(ctx context.Context, chainID string, vote *tmpr resp, err := sc.client.SignVote(ctx, &privvalproto.SignVoteRequest{ChainId: sc.chainID, Vote: vote}) if err != nil { errStatus, _ := status.FromError(err) - sc.logger.Error("Client SignVote", "err", errStatus.Message()) + logger.Error("Client SignVote", "err", errStatus) return errStatus.Err() } @@ -90,7 +86,7 @@ func (sc *SignerClient) SignProposal(ctx context.Context, chainID string, propos if err != nil { errStatus, _ := status.FromError(err) - sc.logger.Error("SignerClient::SignProposal", "err", errStatus.Message()) + logger.Error("SignerClient::SignProposal", "err", errStatus) return errStatus.Err() } diff --git a/sei-tendermint/privval/grpc/client_test.go b/sei-tendermint/privval/grpc/client_test.go index c7e419d9ee..ff7768852e 100644 --- a/sei-tendermint/privval/grpc/client_test.go +++ b/sei-tendermint/privval/grpc/client_test.go @@ -7,7 +7,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" tmgrpc "github.com/sei-protocol/sei-chain/sei-tendermint/privval/grpc" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" @@ -22,12 +21,12 @@ import ( const chainID = "chain-id" -func dialer(t *testing.T, pv types.PrivValidator, logger log.Logger) (*grpc.Server, func(context.Context, string) (net.Conn, error)) { +func dialer(t *testing.T, pv types.PrivValidator) (*grpc.Server, func(context.Context, string) (net.Conn, error)) { listener := bufconn.Listen(1024 * 1024) server := grpc.NewServer() - s := tmgrpc.NewSignerServer(logger, chainID, pv) + s := tmgrpc.NewSignerServer(chainID, pv) privvalproto.RegisterPrivValidatorAPIServer(server, s) @@ -43,8 +42,8 @@ func TestSignerClient_GetPubKey(t *testing.T) { ctx := t.Context() mockPV := types.NewMockPV() - logger := log.NewTestingLogger(t) - srv, dialer := dialer(t, mockPV, logger) + + srv, dialer := dialer(t, mockPV) defer srv.Stop() conn, err := grpc.DialContext(ctx, "", @@ -54,7 +53,7 @@ func TestSignerClient_GetPubKey(t *testing.T) { require.NoError(t, err) defer conn.Close() - client, err := tmgrpc.NewSignerClient(conn, chainID, logger) + client, err := tmgrpc.NewSignerClient(conn, chainID) require.NoError(t, err) pk, err := client.GetPubKey(ctx) @@ -66,8 +65,8 @@ func TestSignerClient_SignVote(t *testing.T) { ctx := t.Context() mockPV := types.NewMockPV() - logger := log.NewTestingLogger(t) - srv, dialer := dialer(t, mockPV, logger) + + srv, dialer := dialer(t, mockPV) defer srv.Stop() conn, err := grpc.DialContext(ctx, "", @@ -77,7 +76,7 @@ func TestSignerClient_SignVote(t *testing.T) { require.NoError(t, err) defer conn.Close() - client, err := tmgrpc.NewSignerClient(conn, chainID, logger) + client, err := tmgrpc.NewSignerClient(conn, chainID) require.NoError(t, err) ts := time.Now() @@ -120,8 +119,8 @@ func TestSignerClient_SignProposal(t *testing.T) { ctx := t.Context() mockPV := types.NewMockPV() - logger := log.NewTestingLogger(t) - srv, dialer := dialer(t, mockPV, logger) + + srv, dialer := dialer(t, mockPV) defer srv.Stop() conn, err := grpc.DialContext(ctx, "", @@ -131,7 +130,7 @@ func TestSignerClient_SignProposal(t *testing.T) { require.NoError(t, err) defer conn.Close() - client, err := tmgrpc.NewSignerClient(conn, chainID, logger) + client, err := tmgrpc.NewSignerClient(conn, chainID) require.NoError(t, err) ts := time.Now() diff --git a/sei-tendermint/privval/grpc/server.go b/sei-tendermint/privval/grpc/server.go index 5f59074a3e..6bce11bd2a 100644 --- a/sei-tendermint/privval/grpc/server.go +++ b/sei-tendermint/privval/grpc/server.go @@ -7,7 +7,6 @@ import ( "google.golang.org/grpc/status" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -15,14 +14,12 @@ import ( // SignerServer implements PrivValidatorAPIServer 9generated via protobuf services) // Handles remote validator connections that provide signing services type SignerServer struct { - logger log.Logger chainID string privVal types.PrivValidator } -func NewSignerServer(logger log.Logger, chainID string, privVal types.PrivValidator) *SignerServer { +func NewSignerServer(chainID string, privVal types.PrivValidator) *SignerServer { return &SignerServer{ - logger: logger, chainID: chainID, privVal: privVal, } @@ -40,7 +37,7 @@ func (ss *SignerServer) GetPubKey(ctx context.Context, req *privvalproto.PubKeyR if err != nil { return nil, status.Errorf(codes.NotFound, "error getting pubkey: %v", err) } - ss.logger.Info("SignerServer: GetPubKey Success") + logger.Info("SignerServer: GetPubKey Success") return &privvalproto.PubKeyResponse{PubKey: crypto.PubKeyToProto(pubKey)}, nil } @@ -54,7 +51,7 @@ func (ss *SignerServer) SignVote(ctx context.Context, req *privvalproto.SignVote return nil, status.Errorf(codes.InvalidArgument, "error signing vote: %v", err) } - ss.logger.Info("SignerServer: SignVote Success", "height", req.Vote.Height) + logger.Info("SignerServer: SignVote Success", "height", req.Vote.Height) return &privvalproto.SignedVoteResponse{Vote: *vote}, nil } @@ -69,7 +66,7 @@ func (ss *SignerServer) SignProposal(ctx context.Context, req *privvalproto.Sign return nil, status.Errorf(codes.InvalidArgument, "error signing proposal: %v", err) } - ss.logger.Info("SignerServer: SignProposal Success", "height", req.Proposal.Height) + logger.Info("SignerServer: SignProposal Success", "height", req.Proposal.Height) return &privvalproto.SignedProposalResponse{Proposal: *proposal}, nil } diff --git a/sei-tendermint/privval/grpc/server_test.go b/sei-tendermint/privval/grpc/server_test.go index 540f0e2627..1ef6afeff4 100644 --- a/sei-tendermint/privval/grpc/server_test.go +++ b/sei-tendermint/privval/grpc/server_test.go @@ -8,7 +8,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils/require" @@ -36,9 +35,8 @@ func TestGetPubKey(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewTestingLogger(t) - s := tmgrpc.NewSignerServer(logger, ChainID, tc.pv) + s := tmgrpc.NewSignerServer(ChainID, tc.pv) req := &privvalproto.PubKeyRequest{ChainId: ChainID} resp, err := s.GetPubKey(ctx, req) @@ -109,9 +107,8 @@ func TestSignVote(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewTestingLogger(t) - s := tmgrpc.NewSignerServer(logger, ChainID, tc.pv) + s := tmgrpc.NewSignerServer(ChainID, tc.pv) req := &privvalproto.SignVoteRequest{ChainId: ChainID, Vote: tc.have.ToProto()} resp, err := s.SignVote(ctx, req) @@ -178,9 +175,8 @@ func TestSignProposal(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { ctx := t.Context() - logger := log.NewTestingLogger(t) - s := tmgrpc.NewSignerServer(logger, ChainID, tc.pv) + s := tmgrpc.NewSignerServer(ChainID, tc.pv) req := &privvalproto.SignProposalRequest{ChainId: ChainID, Proposal: tc.have.ToProto()} resp, err := s.SignProposal(ctx, req) diff --git a/sei-tendermint/privval/grpc/util.go b/sei-tendermint/privval/grpc/util.go index b7eed5fbf3..82ec63581a 100644 --- a/sei-tendermint/privval/grpc/util.go +++ b/sei-tendermint/privval/grpc/util.go @@ -10,6 +10,7 @@ import ( grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" + "github.com/sei-protocol/seilog" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc" @@ -18,10 +19,11 @@ import ( "google.golang.org/grpc/keepalive" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" ) +var logger = seilog.NewLogger("tendermint", "privval", "grpc") + // DefaultDialOptions constructs a list of grpc dial options func DefaultDialOptions( extraOpts ...grpc.DialOption, @@ -58,26 +60,26 @@ func DefaultDialOptions( return dialOpts } -func GenerateTLS(certPath, keyPath, ca string, log log.Logger) grpc.DialOption { +func GenerateTLS(certPath, keyPath, ca string) grpc.DialOption { certificate, err := tls.LoadX509KeyPair( certPath, keyPath, ) if err != nil { - log.Error("error", err) + logger.Error("Failed to generate TLS", "err", err) os.Exit(1) } certPool := x509.NewCertPool() bs, err := os.ReadFile(filepath.Clean(ca)) if err != nil { - log.Error("failed to read ca cert:", "error", err) + logger.Error("failed to read ca cert:", "error", err) os.Exit(1) } ok := certPool.AppendCertsFromPEM(bs) if !ok { - log.Error("failed to append certs") + logger.Error("failed to append certs") os.Exit(1) } @@ -95,13 +97,12 @@ func DialRemoteSigner( ctx context.Context, cfg *config.PrivValidatorConfig, chainID string, - logger log.Logger, usePrometheus bool, ) (*SignerClient, error) { var transportSecurity grpc.DialOption if cfg.AreSecurityOptionsPresent() { transportSecurity = GenerateTLS(cfg.ClientCertificateFile(), - cfg.ClientKeyFile(), cfg.RootCAFile(), logger) + cfg.ClientKeyFile(), cfg.RootCAFile()) } else { transportSecurity = grpc.WithTransportCredentials(insecure.NewCredentials()) logger.Info("Using an insecure gRPC connection!") @@ -121,5 +122,5 @@ func DialRemoteSigner( logger.Error("unable to connect to server", "target", address, "err", err) } - return NewSignerClient(conn, chainID, logger) + return NewSignerClient(conn, chainID) } diff --git a/sei-tendermint/privval/signer_client.go b/sei-tendermint/privval/signer_client.go index 768d77425c..8321dff801 100644 --- a/sei-tendermint/privval/signer_client.go +++ b/sei-tendermint/privval/signer_client.go @@ -6,7 +6,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -15,7 +14,6 @@ import ( // SignerClient implements PrivValidator. // Handles remote validator connections that provide signing services type SignerClient struct { - logger log.Logger endpoint *SignerListenerEndpoint chainID string } @@ -32,7 +30,6 @@ func NewSignerClient(ctx context.Context, endpoint *SignerListenerEndpoint, chai } return &SignerClient{ - logger: endpoint.logger, endpoint: endpoint, chainID: chainID, }, nil @@ -65,7 +62,7 @@ func (sc *SignerClient) WaitForConnection(ctx context.Context, maxWait time.Dura func (sc *SignerClient) Ping(ctx context.Context) error { response, err := sc.endpoint.SendRequest(ctx, mustWrapMsg(&privvalproto.PingRequest{})) if err != nil { - sc.logger.Error("SignerClient::Ping", "err", err) + logger.Error("SignerClient::Ping", "err", err) return nil } diff --git a/sei-tendermint/privval/signer_client_test.go b/sei-tendermint/privval/signer_client_test.go index 9f401d07e6..71be36691a 100644 --- a/sei-tendermint/privval/signer_client_test.go +++ b/sei-tendermint/privval/signer_client_test.go @@ -12,7 +12,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" cryptoproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" @@ -30,7 +29,7 @@ type signerTestCase struct { closer context.CancelFunc } -func getSignerTestCases(ctx context.Context, t *testing.T, logger log.Logger) []signerTestCase { +func getSignerTestCases(ctx context.Context, t *testing.T) []signerTestCase { t.Helper() testCases := make([]signerTestCase, 0) @@ -42,7 +41,7 @@ func getSignerTestCases(ctx context.Context, t *testing.T, logger log.Logger) [] cctx, ccancel := context.WithCancel(ctx) // get a pair of signer listener, signer dialer endpoints - sl, sd := getMockEndpoints(cctx, t, logger, dtc.addr, dtc.dialer) + sl, sd := getMockEndpoints(cctx, t, dtc.addr, dtc.dialer) sc, err := NewSignerClient(cctx, sl, chainID) require.NoError(t, err) ss := NewSignerServer(sd, chainID, mockPV) @@ -71,9 +70,7 @@ func TestSignerClose(t *testing.T) { bctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(bctx, t, logger) { + for _, tc := range getSignerTestCases(bctx, t) { t.Run(tc.name, func(t *testing.T) { defer leaktest.Check(t) defer func() { @@ -93,9 +90,7 @@ func TestSignerPing(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { err := tc.signerClient.Ping(ctx) assert.NoError(t, err) } @@ -106,9 +101,7 @@ func TestSignerGetPubKey(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() @@ -135,9 +128,7 @@ func TestSignerProposal(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() @@ -174,9 +165,7 @@ func TestSignerVote(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() @@ -216,9 +205,7 @@ func TestSignerVoteResetDeadline(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { ts := time.Now() hash := tmrand.Bytes(crypto.HashSize) @@ -266,9 +253,7 @@ func TestSignerVoteKeepAlive(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() @@ -315,9 +300,7 @@ func TestSignerSignProposalErrors(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() // Replace service with a mock that always fails @@ -355,9 +338,7 @@ func TestSignerSignVoteErrors(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() @@ -420,9 +401,7 @@ func TestSignerUnexpectedResponse(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - - for _, tc := range getSignerTestCases(ctx, t, logger) { + for _, tc := range getSignerTestCases(ctx, t) { t.Run(tc.name, func(t *testing.T) { defer tc.closer() diff --git a/sei-tendermint/privval/signer_dialer_endpoint.go b/sei-tendermint/privval/signer_dialer_endpoint.go index 7caba5bc7d..fa423c5395 100644 --- a/sei-tendermint/privval/signer_dialer_endpoint.go +++ b/sei-tendermint/privval/signer_dialer_endpoint.go @@ -4,7 +4,6 @@ import ( "context" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" ) @@ -49,7 +48,6 @@ type SignerDialerEndpoint struct { // dialer and respond to any signature requests over the connection // using the given privVal. func NewSignerDialerEndpoint( - logger log.Logger, dialer SocketDialer, options ...SignerServiceEndpointOption, ) *SignerDialerEndpoint { @@ -59,9 +57,8 @@ func NewSignerDialerEndpoint( retryWait: defaultRetryWaitMilliseconds * time.Millisecond, maxConnRetries: defaultMaxDialRetries, } - sd.logger = logger - sd.BaseService = *service.NewBaseService(logger, "SignerDialerEndpoint", sd) + sd.BaseService = *service.NewBaseService("SignerDialerEndpoint", sd) sd.timeoutReadWrite = defaultTimeoutReadWriteSeconds * time.Second for _, optionFunc := range options { @@ -90,7 +87,7 @@ func (sd *SignerDialerEndpoint) ensureConnection(ctx context.Context) error { if err != nil { retries++ - sd.logger.Debug("SignerDialer: Reconnection failed", "retries", retries, "max", sd.maxConnRetries, "err", err) + logger.Debug("SignerDialer: Reconnection failed", "retries", retries, "max", sd.maxConnRetries, "err", err) // Wait between retries timer.Reset(sd.retryWait) @@ -101,12 +98,12 @@ func (sd *SignerDialerEndpoint) ensureConnection(ctx context.Context) error { } } else { sd.SetConnection(conn) - sd.logger.Debug("SignerDialer: Connection Ready") + logger.Debug("SignerDialer: Connection Ready") return nil } } - sd.logger.Debug("SignerDialer: Max retries exceeded", "retries", retries, "max", sd.maxConnRetries) + logger.Debug("SignerDialer: Max retries exceeded", "retries", retries, "max", sd.maxConnRetries) return ErrNoConnection } diff --git a/sei-tendermint/privval/signer_endpoint.go b/sei-tendermint/privval/signer_endpoint.go index cf00ba7d39..cf1865512f 100644 --- a/sei-tendermint/privval/signer_endpoint.go +++ b/sei-tendermint/privval/signer_endpoint.go @@ -8,7 +8,6 @@ import ( "time" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/libs/protoio" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" ) @@ -19,7 +18,6 @@ const ( type signerEndpoint struct { service.BaseService - logger log.Logger connMtx sync.Mutex conn net.Conn @@ -109,7 +107,7 @@ func (se *signerEndpoint) ReadMessage() (msg privvalproto.Message, err error) { err = fmt.Errorf("empty error: %w", ErrReadTimeout) } - se.logger.Debug("Dropping [read]", "obj", se) + logger.Debug("Dropping [read]", "obj", se) se.dropConnection() } @@ -154,7 +152,7 @@ func (se *signerEndpoint) isConnected() bool { func (se *signerEndpoint) dropConnection() { if se.conn != nil { if err := se.conn.Close(); err != nil { - se.logger.Error("signerEndpoint::dropConnection", "err", err) + logger.Error("signerEndpoint::dropConnection", "err", err) } se.conn = nil } diff --git a/sei-tendermint/privval/signer_listener_endpoint.go b/sei-tendermint/privval/signer_listener_endpoint.go index 13423515a7..b2a065ca69 100644 --- a/sei-tendermint/privval/signer_listener_endpoint.go +++ b/sei-tendermint/privval/signer_listener_endpoint.go @@ -7,11 +7,13 @@ import ( "sync" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" privvalproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/privval" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "privval") + // SignerListenerEndpointOption sets an optional parameter on the SignerListenerEndpoint. type SignerListenerEndpointOption func(*SignerListenerEndpoint) @@ -44,7 +46,6 @@ type SignerListenerEndpoint struct { // NewSignerListenerEndpoint returns an instance of SignerListenerEndpoint. func NewSignerListenerEndpoint( - logger log.Logger, listener net.Listener, options ...SignerListenerEndpointOption, ) *SignerListenerEndpoint { @@ -53,8 +54,7 @@ func NewSignerListenerEndpoint( timeoutAccept: defaultTimeoutAcceptSeconds * time.Second, } - sl.logger = logger - sl.BaseService = *service.NewBaseService(logger, "SignerListenerEndpoint", sl) + sl.BaseService = *service.NewBaseService("SignerListenerEndpoint", sl) sl.timeoutReadWrite = defaultTimeoutReadWriteSeconds * time.Second for _, optionFunc := range options { @@ -90,7 +90,7 @@ func (sl *SignerListenerEndpoint) OnStop() { // Stop listening if sl.listener != nil { if err := sl.listener.Close(); err != nil { - sl.logger.Error("Closing Listener", "err", err) + logger.Error("Closing Listener", "err", err) sl.listener = nil } } @@ -142,7 +142,7 @@ func (sl *SignerListenerEndpoint) ensureConnection(ctx context.Context, maxWait } // block until connected or timeout - sl.logger.Info("SignerListener: Blocking for connection") + logger.Info("SignerListener: Blocking for connection") sl.triggerConnect() return sl.WaitConnection(ctx, sl.connectionAvailableCh, maxWait) } @@ -153,7 +153,7 @@ func (sl *SignerListenerEndpoint) acceptNewConnection() (net.Conn, error) { } // wait for a new conn - sl.logger.Info("SignerListener: Listening for new connection") + logger.Info("SignerListener: Listening for new connection") conn, err := sl.listener.Accept() if err != nil { return nil, err @@ -181,7 +181,7 @@ func (sl *SignerListenerEndpoint) serviceLoop(ctx context.Context) { { conn, err := sl.acceptNewConnection() if err == nil { - sl.logger.Info("SignerListener: Connected") + logger.Info("SignerListener: Connected") // We have a good connection, wait for someone that needs one otherwise cancellation select { @@ -209,7 +209,7 @@ func (sl *SignerListenerEndpoint) pingLoop(ctx context.Context) { { _, err := sl.SendRequest(ctx, mustWrapMsg(&privvalproto.PingRequest{})) if err != nil { - sl.logger.Error("SignerListener: Ping timeout") + logger.Error("SignerListener: Ping timeout") sl.triggerReconnect() } } diff --git a/sei-tendermint/privval/signer_listener_endpoint_test.go b/sei-tendermint/privval/signer_listener_endpoint_test.go index 651d35a8d0..72ae4b2223 100644 --- a/sei-tendermint/privval/signer_listener_endpoint_test.go +++ b/sei-tendermint/privval/signer_listener_endpoint_test.go @@ -11,7 +11,6 @@ import ( "github.com/stretchr/testify/require" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -44,8 +43,6 @@ func TestSignerRemoteRetryTCPOnly(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - ln, err := net.Listen("tcp", "127.0.0.1:0") require.NoError(t, err) @@ -68,7 +65,7 @@ func TestSignerRemoteRetryTCPOnly(t *testing.T) { } }(ln, attemptCh) - dialerEndpoint := NewSignerDialerEndpoint(logger, + dialerEndpoint := NewSignerDialerEndpoint( DialTCPFn(ln.Addr().String(), testTimeoutReadWrite, ed25519.GenerateSecretKey()), ) SignerDialerEndpointTimeoutReadWrite(time.Millisecond)(dialerEndpoint) @@ -95,20 +92,17 @@ func TestRetryConnToRemoteSigner(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - for _, tc := range getDialerTestCases(t) { var ( chainID = tmrand.Str(12) mockPV = types.NewMockPV() endpointIsOpenCh = make(chan struct{}) thisConnTimeout = testTimeoutReadWrite - listenerEndpoint = newSignerListenerEndpoint(t, logger, tc.addr, thisConnTimeout) + listenerEndpoint = newSignerListenerEndpoint(t, tc.addr, thisConnTimeout) ) t.Cleanup(listenerEndpoint.Wait) dialerEndpoint := NewSignerDialerEndpoint( - logger, tc.dialer, ) SignerDialerEndpointTimeoutReadWrite(testTimeoutReadWrite)(dialerEndpoint) @@ -126,7 +120,6 @@ func TestRetryConnToRemoteSigner(t *testing.T) { signerServer.Stop() dialerEndpoint2 := NewSignerDialerEndpoint( - logger, tc.dialer, ) signerServer2 := NewSignerServer(dialerEndpoint2, chainID, mockPV) @@ -146,7 +139,7 @@ func TestRetryConnToRemoteSigner(t *testing.T) { } } -func newSignerListenerEndpoint(t *testing.T, logger log.Logger, addr string, timeoutReadWrite time.Duration) *SignerListenerEndpoint { +func newSignerListenerEndpoint(t *testing.T, addr string, timeoutReadWrite time.Duration) *SignerListenerEndpoint { proto, address := tmnet.ProtocolAndAddress(addr) ln, err := net.Listen(proto, address) @@ -167,7 +160,6 @@ func newSignerListenerEndpoint(t *testing.T, logger log.Logger, addr string, tim } return NewSignerListenerEndpoint( - logger, listener, SignerListenerEndpointTimeoutReadWrite(testTimeoutReadWrite), ) @@ -191,7 +183,6 @@ func startListenerEndpointAsync( func getMockEndpoints( ctx context.Context, t *testing.T, - logger log.Logger, addr string, socketDialer SocketDialer, ) (*SignerListenerEndpoint, *SignerDialerEndpoint) { @@ -200,11 +191,10 @@ func getMockEndpoints( endpointIsOpenCh = make(chan struct{}) dialerEndpoint = NewSignerDialerEndpoint( - logger, socketDialer, ) - listenerEndpoint = newSignerListenerEndpoint(t, logger, addr, testTimeoutReadWrite) + listenerEndpoint = newSignerListenerEndpoint(t, addr, testTimeoutReadWrite) ) SignerDialerEndpointTimeoutReadWrite(testTimeoutReadWrite)(dialerEndpoint) diff --git a/sei-tendermint/privval/signer_server.go b/sei-tendermint/privval/signer_server.go index 025b5797cb..174f5eac69 100644 --- a/sei-tendermint/privval/signer_server.go +++ b/sei-tendermint/privval/signer_server.go @@ -36,7 +36,7 @@ func NewSignerServer(endpoint *SignerDialerEndpoint, chainID string, privVal typ validationRequestHandler: DefaultValidationRequestHandler, } - ss.BaseService = *service.NewBaseService(endpoint.logger, "SignerServer", ss) + ss.BaseService = *service.NewBaseService("SignerServer", ss) return ss } @@ -49,7 +49,7 @@ func (ss *SignerServer) OnStart(ctx context.Context) error { // OnStop implements service.Service. func (ss *SignerServer) OnStop() { - ss.endpoint.logger.Debug("SignerServer: OnStop calling Close") + logger.Debug("SignerServer: OnStop calling Close") _ = ss.endpoint.Close() } @@ -68,7 +68,7 @@ func (ss *SignerServer) servicePendingRequest(ctx context.Context) { req, err := ss.endpoint.ReadMessage() if err != nil { if err != io.EOF { - ss.endpoint.logger.Error("SignerServer: HandleMessage", "err", err) + logger.Error("SignerServer: HandleMessage", "err", err) } return } @@ -81,13 +81,13 @@ func (ss *SignerServer) servicePendingRequest(ctx context.Context) { res, err = ss.validationRequestHandler(ctx, ss.privVal, req, ss.chainID) // todo if err != nil { // only log the error; we'll reply with an error in res - ss.endpoint.logger.Error("SignerServer: handleMessage", "err", err) + logger.Error("SignerServer: handleMessage", "err", err) } } err = ss.endpoint.WriteMessage(res) if err != nil { - ss.endpoint.logger.Error("SignerServer: writeMessage", "err", err) + logger.Error("SignerServer: writeMessage", "err", err) } } diff --git a/sei-tendermint/privval/utils.go b/sei-tendermint/privval/utils.go index 90b99d029c..93fdd5708c 100644 --- a/sei-tendermint/privval/utils.go +++ b/sei-tendermint/privval/utils.go @@ -6,7 +6,6 @@ import ( "net" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" ) @@ -26,7 +25,7 @@ func IsConnTimeout(err error) bool { } // NewSignerListener creates a new SignerListenerEndpoint using the corresponding listen address -func NewSignerListener(listenAddr string, logger log.Logger) (*SignerListenerEndpoint, error) { +func NewSignerListener(listenAddr string) (*SignerListenerEndpoint, error) { protocol, address := tmnet.ProtocolAndAddress(listenAddr) if protocol != "unix" && protocol != "tcp" { //nolint:goconst return nil, fmt.Errorf("unsupported address family %q, want unix or tcp", protocol) @@ -48,5 +47,5 @@ func NewSignerListener(listenAddr string, logger log.Logger) (*SignerListenerEnd panic("invalid protocol: " + protocol) // semantically unreachable } - return NewSignerListenerEndpoint(logger.With("module", "privval"), listener), nil + return NewSignerListenerEndpoint(listener), nil } diff --git a/sei-tendermint/rpc/client/http/ws.go b/sei-tendermint/rpc/client/http/ws.go index 8984d90536..7b71946ed5 100644 --- a/sei-tendermint/rpc/client/http/ws.go +++ b/sei-tendermint/rpc/client/http/ws.go @@ -9,16 +9,17 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub" tmjson "github.com/sei-protocol/sei-chain/sei-tendermint/libs/json" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpcclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" jsonrpcclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/client" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "rpc", "client", "http") + // wsEvents is a wrapper around WSClient, which implements SubscriptionClient. type wsEvents struct { - Logger log.Logger - ws *jsonrpcclient.WSClient + ws *jsonrpcclient.WSClient mtx sync.RWMutex subscriptions map[string]*wsSubscription @@ -34,7 +35,6 @@ var _ rpcclient.SubscriptionClient = (*wsEvents)(nil) func newWsEvents(remote string) (*wsEvents, error) { w := &wsEvents{ - Logger: log.NewNopLogger(), subscriptions: make(map[string]*wsSubscription), } @@ -47,7 +47,6 @@ func newWsEvents(remote string) (*wsEvents, error) { // resubscribe immediately w.redoSubscriptionsAfter(0 * time.Second) }) - w.ws.Logger = w.Logger return w, nil } @@ -151,7 +150,7 @@ func (w *wsEvents) redoSubscriptionsAfter(d time.Duration) { } err := w.ws.Subscribe(ctx, q) if err != nil { - w.Logger.Error("failed to resubscribe", "query", q, "err", err) + logger.Error("failed to resubscribe", "query", q, "err", err) delete(w.subscriptions, q) } } @@ -170,7 +169,7 @@ func (w *wsEvents) eventListener(ctx context.Context) { } if resp.Error != nil { - w.Logger.Error("WS error", "err", resp.Error.Error()) + logger.Error("WS error", "err", resp.Error) // Error can be ErrAlreadySubscribed or max client (subscriptions per // client) reached or Tendermint exited. // We can ignore ErrAlreadySubscribed, but need to retry in other @@ -186,7 +185,7 @@ func (w *wsEvents) eventListener(ctx context.Context) { result := new(coretypes.ResultEvent) err := tmjson.Unmarshal(resp.Result, result) if err != nil { - w.Logger.Error("failed to unmarshal response", "err", err) + logger.Error("failed to unmarshal response", "err", err) continue } diff --git a/sei-tendermint/rpc/client/local/local.go b/sei-tendermint/rpc/client/local/local.go index 35342ba480..dff8fd0016 100644 --- a/sei-tendermint/rpc/client/local/local.go +++ b/sei-tendermint/rpc/client/local/local.go @@ -11,12 +11,14 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/pubsub/query" rpccore "github.com/sei-protocol/sei-chain/sei-tendermint/internal/rpc/core" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpcclient "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "rpc", "client", "local") + /* Local is a Client implementation that directly executes the rpc functions on a given node, without going through HTTP or GRPC. @@ -39,8 +41,7 @@ backoff (10ms -> 20ms -> 40ms) until successful. */ type Local struct { *eventbus.EventBus - Logger log.Logger - env *rpccore.Environment + env *rpccore.Environment } // NodeService describes the portion of the node interface that the @@ -51,14 +52,13 @@ type NodeService interface { } // New configures a client that calls the Node directly. -func New(logger log.Logger, node NodeService) (*Local, error) { +func New(node NodeService) (*Local, error) { env := node.RPCEnvironment() if env == nil { return nil, errors.New("rpc is nil") } return &Local{ EventBus: node.EventBus(), - Logger: logger, env: env, }, nil } @@ -257,8 +257,7 @@ func (c *Local) eventsRoutine(ctx context.Context, sub eventbus.Subscription, su if errors.Is(err, pubsub.ErrUnsubscribed) { return // client unsubscribed } else if err != nil { - c.Logger.Error("subscription was canceled, resubscribing", - "err", err, "query", subArgs.Query.String()) + logger.Error("subscription was canceled, resubscribing", "query", subArgs.Query, "err", err) sub = c.resubscribe(ctx, subArgs) if sub == nil { return // client terminated diff --git a/sei-tendermint/rpc/client/main_test.go b/sei-tendermint/rpc/client/main_test.go index b81ca7065c..86b53b2058 100644 --- a/sei-tendermint/rpc/client/main_test.go +++ b/sei-tendermint/rpc/client/main_test.go @@ -9,12 +9,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/kvstore" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" rpctest "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/test" ) -func NodeSuite(ctx context.Context, t *testing.T, logger log.Logger) (service.Service, *config.Config) { +func NodeSuite(ctx context.Context, t *testing.T) (service.Service, *config.Config) { t.Helper() ctx, cancel := context.WithCancel(ctx) diff --git a/sei-tendermint/rpc/client/rpc_test.go b/sei-tendermint/rpc/client/rpc_test.go index 8b6e6dd1cb..5f04d8ca51 100644 --- a/sei-tendermint/rpc/client/rpc_test.go +++ b/sei-tendermint/rpc/client/rpc_test.go @@ -20,7 +20,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/internal/mempool" rpccore "github.com/sei-protocol/sei-chain/sei-tendermint/internal/rpc/core" tmjson "github.com/sei-protocol/sei-chain/sei-tendermint/libs/json" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmmath "github.com/sei-protocol/sei-chain/sei-tendermint/libs/math" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/utils" @@ -33,7 +32,7 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) -func getHTTPClient(t *testing.T, logger log.Logger, conf *config.Config) *rpchttp.HTTP { +func getHTTPClient(t *testing.T, conf *config.Config) *rpchttp.HTTP { t.Helper() rpcAddr := conf.RPC.ListenAddress @@ -42,7 +41,6 @@ func getHTTPClient(t *testing.T, logger log.Logger, conf *config.Config) *rpchtt ctx := t.Context() require.NoError(t, c.Start(ctx)) - c.Logger = logger t.Cleanup(func() { require.NoError(t, c.Stop()) }) @@ -50,7 +48,7 @@ func getHTTPClient(t *testing.T, logger log.Logger, conf *config.Config) *rpchtt return c } -func getHTTPClientWithTimeout(t *testing.T, logger log.Logger, conf *config.Config, timeout time.Duration) *rpchttp.HTTP { +func getHTTPClientWithTimeout(t *testing.T, conf *config.Config, timeout time.Duration) *rpchttp.HTTP { t.Helper() rpcAddr := conf.RPC.ListenAddress @@ -61,7 +59,6 @@ func getHTTPClientWithTimeout(t *testing.T, logger log.Logger, conf *config.Conf ctx := t.Context() require.NoError(t, c.Start(ctx)) - c.Logger = logger t.Cleanup(func() { require.NoError(t, c.Stop()) }) @@ -76,22 +73,19 @@ func GetClients(t *testing.T, ns service.Service, conf *config.Config) []client. node, ok := ns.(rpclocal.NodeService) require.True(t, ok) - logger := log.NewTestingLogger(t) - ncl, err := rpclocal.New(logger, node) + ncl, err := rpclocal.New(node) require.NoError(t, err) return []client.Client{ ncl, - getHTTPClient(t, logger, conf), + getHTTPClient(t, conf), } } func TestClientOperations(t *testing.T) { ctx := t.Context() - logger := log.NewTestingLogger(t) - - _, conf := NodeSuite(ctx, t, logger) + _, conf := NodeSuite(ctx, t) t.Run("NilCustomHTTPClient", func(t *testing.T) { _, err := rpchttp.NewWithClient("http://example.com", nil) @@ -129,16 +123,15 @@ func TestClientOperations(t *testing.T) { }) t.Run("Batching", func(t *testing.T) { t.Run("JSONRPCCalls", func(t *testing.T) { - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + + c := getHTTPClient(t, conf) testBatchedJSONRPCCalls(ctx, c) }) t.Run("JSONRPCCallsCancellation", func(t *testing.T) { _, _, tx1 := MakeTxKV() _, _, tx2 := MakeTxKV() - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) batch := c.NewBatch() _, err := batch.BroadcastTxCommit(ctx, tx1) require.NoError(t, err) @@ -152,25 +145,22 @@ func TestClientOperations(t *testing.T) { require.Equal(t, 0, batch.Count()) }) t.Run("SendingEmptyRequest", func(t *testing.T) { - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) batch := c.NewBatch() _, err := batch.Send(ctx) require.Error(t, err, "sending an empty batch of JSON RPC requests should result in an error") }) t.Run("ClearingEmptyRequest", func(t *testing.T) { - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) batch := c.NewBatch() require.Zero(t, batch.Clear(), "clearing an empty batch of JSON RPC requests should result in a 0 result") }) t.Run("ConcurrentJSONRPC", func(t *testing.T) { - logger := log.NewTestingLogger(t) var wg sync.WaitGroup - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) for range 50 { wg.Add(1) go func() { @@ -185,9 +175,8 @@ func TestClientOperations(t *testing.T) { // Make sure info is correct (we connect properly) func TestClientMethodCalls(t *testing.T) { - logger := log.NewTestingLogger(t) - n, conf := NodeSuite(t.Context(), t, logger) + n, conf := NodeSuite(t.Context(), t) // for broadcast tx tests pool := getMempool(t, n) @@ -594,9 +583,7 @@ func getMempool(t *testing.T, srv service.Service) mempool.Mempool { func TestClientMethodCallsAdvanced(t *testing.T) { ctx := t.Context() - logger := log.NewTestingLogger(t) - - n, conf := NodeSuite(ctx, t, logger) + n, conf := NodeSuite(ctx, t) pool := getMempool(t, n) t.Run("UnconfirmedTxs", func(t *testing.T) { @@ -674,9 +661,8 @@ func TestClientMethodCallsAdvanced(t *testing.T) { pool.Flush() }) t.Run("Tx", func(t *testing.T) { - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) // first we broadcast a tx _, _, tx := MakeTxKV() @@ -733,9 +719,8 @@ func TestClientMethodCallsAdvanced(t *testing.T) { } }) t.Run("TxSearchWithTimeout", func(t *testing.T) { - logger := log.NewTestingLogger(t) - timeoutClient := getHTTPClientWithTimeout(t, logger, conf, 10*time.Second) + timeoutClient := getHTTPClientWithTimeout(t, conf, 10*time.Second) _, _, tx := MakeTxKV() _, err := timeoutClient.BroadcastTxCommit(ctx, tx) @@ -748,9 +733,8 @@ func TestClientMethodCallsAdvanced(t *testing.T) { }) t.Run("TxSearch", func(t *testing.T) { t.Skip("Test Asserts Non-Deterministic Results") - logger := log.NewTestingLogger(t) - c := getHTTPClient(t, logger, conf) + c := getHTTPClient(t, conf) // first we broadcast a few txs for range 10 { diff --git a/sei-tendermint/rpc/jsonrpc/client/ws_client.go b/sei-tendermint/rpc/jsonrpc/client/ws_client.go index d2790f0e3b..322c04b31b 100644 --- a/sei-tendermint/rpc/jsonrpc/client/ws_client.go +++ b/sei-tendermint/rpc/jsonrpc/client/ws_client.go @@ -11,11 +11,13 @@ import ( "time" "github.com/gorilla/websocket" + "github.com/sei-protocol/seilog" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) +var logger = seilog.NewLogger("tendermint", "rpc", "jsonrpc", "client") + // wsOptions carries optional settings for a websocket connection. type wsOptions struct { MaxReconnectAttempts uint // maximum attempts to reconnect @@ -37,8 +39,7 @@ var defaultWSOptions = wsOptions{ // // WSClient is safe for concurrent use by multiple goroutines. type WSClient struct { - Logger log.Logger - conn *websocket.Conn + conn *websocket.Conn Address string // IP:PORT or /path/to/socket Endpoint string // /websocket/url/endpoint @@ -101,7 +102,6 @@ func NewWS(remoteAddr, endpoint string) (*WSClient, error) { } c := &WSClient{ - Logger: log.NewNopLogger(), Address: parsedURL.GetTrimmedHostWithPath(), Dialer: dialFn, Endpoint: endpoint, @@ -176,7 +176,7 @@ func (c *WSClient) IsReconnecting() bool { func (c *WSClient) Send(ctx context.Context, request rpctypes.RPCRequest) error { select { case c.send <- request: - c.Logger.Info("sent a request", "req", request) + logger.Info("sent a request", "req", request) // c.mtx.Lock() // c.sentIDs[request.ID.(types.JSONRPCIntID)] = true // c.mtx.Unlock() @@ -241,7 +241,7 @@ func (c *WSClient) reconnect(ctx context.Context) error { jitter := time.Duration(mrand.Float64() * float64(time.Second)) // 1s == (1e9 ns) backoffDuration := jitter + ((1 << attempt) * time.Second) - c.Logger.Info("reconnecting", "attempt", attempt+1, "backoff_duration", backoffDuration) + logger.Info("reconnecting", "attempt", attempt+1, "backoff_duration", backoffDuration) timer.Reset(backoffDuration) select { case <-ctx.Done(): @@ -251,9 +251,9 @@ func (c *WSClient) reconnect(ctx context.Context) error { err := c.dial() if err != nil { - c.Logger.Error("failed to redial", "err", err) + logger.Error("failed to redial", "err", err) } else { - c.Logger.Info("reconnected") + logger.Info("reconnected") if c.onReconnect != nil { go c.onReconnect() } @@ -280,17 +280,17 @@ func (c *WSClient) processBacklog() error { case request := <-c.backlog: if c.writeWait > 0 { if err := c.conn.SetWriteDeadline(time.Now().Add(c.writeWait)); err != nil { - c.Logger.Error("failed to set write deadline", "err", err) + logger.Error("failed to set write deadline", "err", err) } } if err := c.conn.WriteJSON(request); err != nil { - c.Logger.Error("failed to resend request", "err", err) + logger.Error("failed to resend request", "err", err) c.reconnectAfter <- err // requeue request c.backlog <- request return err } - c.Logger.Info("resend a request", "req", request) + logger.Info("resend a request", "req", request) default: } return nil @@ -305,9 +305,9 @@ func (c *WSClient) reconnectRoutine(ctx context.Context) { // wait until writeRoutine and readRoutine finish c.wg.Wait() if err := c.reconnect(ctx); err != nil { - c.Logger.Error("failed to reconnect", "err", err, "original_err", originalError) + logger.Error("failed to reconnect", "err", err, "original_err", originalError) if err = c.Stop(); err != nil { - c.Logger.Error("failed to stop conn", "error", err) + logger.Error("failed to stop conn", "error", err) } return @@ -354,11 +354,11 @@ func (c *WSClient) writeRoutine(ctx context.Context) { case request := <-c.send: if c.writeWait > 0 { if err := c.conn.SetWriteDeadline(time.Now().Add(c.writeWait)); err != nil { - c.Logger.Error("failed to set write deadline", "err", err) + logger.Error("failed to set write deadline", "err", err) } } if err := c.conn.WriteJSON(request); err != nil { - c.Logger.Error("failed to send request", "err", err) + logger.Error("failed to send request", "err", err) c.reconnectAfter <- err // add request to the backlog, so we don't lose it c.backlog <- request @@ -367,11 +367,11 @@ func (c *WSClient) writeRoutine(ctx context.Context) { case <-ticker.C: if c.writeWait > 0 { if err := c.conn.SetWriteDeadline(time.Now().Add(c.writeWait)); err != nil { - c.Logger.Error("failed to set write deadline", "err", err) + logger.Error("failed to set write deadline", "err", err) } } if err := c.conn.WriteMessage(websocket.PingMessage, []byte{}); err != nil { - c.Logger.Error("failed to write ping", "err", err) + logger.Error("failed to write ping", "err", err) c.reconnectAfter <- err return } @@ -382,7 +382,7 @@ func (c *WSClient) writeRoutine(ctx context.Context) { websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""), ); err != nil { - c.Logger.Error("failed to write message", "err", err) + logger.Error("failed to write message", "err", err) } return } @@ -401,7 +401,7 @@ func (c *WSClient) readRoutine(ctx context.Context) { // reset deadline for every message type (control or data) if c.readWait > 0 { if err := c.conn.SetReadDeadline(time.Now().Add(c.readWait)); err != nil { - c.Logger.Error("failed to set read deadline", "err", err) + logger.Error("failed to set read deadline", "err", err) } } _, data, err := c.conn.ReadMessage() @@ -410,7 +410,7 @@ func (c *WSClient) readRoutine(ctx context.Context) { return } - c.Logger.Error("failed to read response", "err", err) + logger.Error("failed to read response", "err", err) close(c.readRoutineQuit) c.reconnectAfter <- err return @@ -419,7 +419,7 @@ func (c *WSClient) readRoutine(ctx context.Context) { var response rpctypes.RPCResponse err = json.Unmarshal(data, &response) if err != nil { - c.Logger.Error("failed to parse response", "err", err, "data", string(data)) + logger.Error("failed to parse response", "err", err, "data", string(data)) continue } @@ -433,7 +433,7 @@ func (c *WSClient) readRoutine(ctx context.Context) { // c.wg.Wait() in c.Stop(). Note we rely on Quit being closed so that it sends unlimited Quit signals to stop // both readRoutine and writeRoutine - c.Logger.Info("got response", "id", response.ID, "result", response.Result) + logger.Info("got response", "id", response.ID, "result", response.Result) select { case <-ctx.Done(): diff --git a/sei-tendermint/rpc/jsonrpc/doc.go b/sei-tendermint/rpc/jsonrpc/doc.go index ea8c8ecfc2..c665327b29 100644 --- a/sei-tendermint/rpc/jsonrpc/doc.go +++ b/sei-tendermint/rpc/jsonrpc/doc.go @@ -72,7 +72,7 @@ // logger := log.NewTMLogger(os.Stdout) // listener, err := rpc.Listen("0.0.0.0:8080", rpcserver.Config{}) // if err != nil { panic(err) } -// go rpcserver.Serve(listener, mux, logger) +// go rpcserver.Serve(listener, mux) // // Note that unix sockets are supported as well (eg. `/path/to/socket` instead of `0.0.0.0:8008`) // Now see all available endpoints by sending a GET request to `0.0.0.0:8008`. diff --git a/sei-tendermint/rpc/jsonrpc/jsonrpc_test.go b/sei-tendermint/rpc/jsonrpc/jsonrpc_test.go index 5d913dc763..16540e8e0d 100644 --- a/sei-tendermint/rpc/jsonrpc/jsonrpc_test.go +++ b/sei-tendermint/rpc/jsonrpc/jsonrpc_test.go @@ -17,7 +17,6 @@ import ( "github.com/stretchr/testify/require" tmbytes "github.com/sei-protocol/sei-chain/sei-tendermint/libs/bytes" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/client" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" ) @@ -91,34 +90,32 @@ func EchoDataBytesResult(ctx context.Context, v *RequestEchoDataBytes) (*ResultE } // launch unix and tcp servers -func setup(ctx context.Context, t *testing.T, logger log.Logger) (string, string) { - tcpLogger := logger.With("socket", "tcp") +func setup(ctx context.Context, t *testing.T) (string, string) { mux := http.NewServeMux() - server.RegisterRPCFuncs(mux, Routes, tcpLogger) - wm := server.NewWebsocketManager(tcpLogger, Routes, server.ReadWait(5*time.Second), server.PingPeriod(1*time.Second)) + server.RegisterRPCFuncs(mux, Routes) + wm := server.NewWebsocketManager(Routes, server.ReadWait(5*time.Second), server.PingPeriod(1*time.Second)) mux.HandleFunc(websocketEndpoint, wm.WebsocketHandler) config := server.DefaultConfig() listener1, err := server.Listen("tcp://127.0.0.1:0", config.MaxOpenConnections) require.NoError(t, err) tcpAddr := "tcp://" + listener1.Addr().String() go func() { - if err := server.Serve(ctx, listener1, mux, tcpLogger, config); err != nil { + if err := server.Serve(ctx, listener1, mux, config); err != nil { if !errors.Is(err, http.ErrServerClosed) { require.NoError(t, err) } } }() - unixLogger := logger.With("socket", "unix") mux2 := http.NewServeMux() - server.RegisterRPCFuncs(mux2, Routes, unixLogger) - wm = server.NewWebsocketManager(unixLogger, Routes) + server.RegisterRPCFuncs(mux2, Routes) + wm = server.NewWebsocketManager(Routes) mux2.HandleFunc(websocketEndpoint, wm.WebsocketHandler) unixAddr := "unix://" + filepath.Join(t.TempDir(), "rpc_test.sock") listener2, err := server.Listen(unixAddr, config.MaxOpenConnections) require.NoError(t, err) go func() { - if err := server.Serve(ctx, listener2, mux2, unixLogger, config); err != nil { + if err := server.Serve(ctx, listener2, mux2, config); err != nil { if !errors.Is(err, http.ErrServerClosed) { require.NoError(t, err) } @@ -256,10 +253,9 @@ func testWithWSClient(ctx context.Context, t *testing.T, cl *client.WSClient) { func TestRPC(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() t.Cleanup(leaktest.Check(t)) - tcpAddr, unixAddr := setup(ctx, t, logger) + tcpAddr, unixAddr := setup(ctx, t) t.Run("ServersAndClientsBasic", func(t *testing.T) { serverAddrs := [...]string{tcpAddr, unixAddr} for _, addr := range serverAddrs { @@ -267,8 +263,6 @@ func TestRPC(t *testing.T) { tctx, tcancel := context.WithCancel(ctx) defer tcancel() - logger := log.NewNopLogger() - cl2, err := client.New(addr) require.NoError(t, err) t.Logf("testing server with JSONRPC client") @@ -276,7 +270,6 @@ func TestRPC(t *testing.T) { cl3, err := client.NewWS(addr, websocketEndpoint) require.NoError(t, err) - cl3.Logger = logger err = cl3.Start(tctx) require.NoError(t, err) t.Logf("testing server with WS client") @@ -289,7 +282,6 @@ func TestRPC(t *testing.T) { cl, err := client.NewWS(tcpAddr, websocketEndpoint) require.NoError(t, err) - cl.Logger = log.NewNopLogger() tctx, tcancel := context.WithCancel(ctx) defer tcancel() @@ -329,7 +321,6 @@ func TestRPC(t *testing.T) { cl, err := client.NewWS(tcpAddr, websocketEndpoint) require.NoError(t, err) - cl.Logger = log.NewNopLogger() tctx, tcancel := context.WithCancel(ctx) defer tcancel() diff --git a/sei-tendermint/rpc/jsonrpc/server/http_json_handler.go b/sei-tendermint/rpc/jsonrpc/server/http_json_handler.go index 1df0dd8563..aacc76a9f5 100644 --- a/sei-tendermint/rpc/jsonrpc/server/http_json_handler.go +++ b/sei-tendermint/rpc/jsonrpc/server/http_json_handler.go @@ -8,7 +8,6 @@ import ( "net/http" "strings" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) @@ -17,19 +16,19 @@ import ( const REQUEST_BATCH_SIZE_LIMIT = 10 // jsonrpc calls grab the given method's function info and runs reflect.Call -func makeJSONRPCHandler(funcMap map[string]*RPCFunc, logger log.Logger) http.HandlerFunc { +func makeJSONRPCHandler(funcMap map[string]*RPCFunc) http.HandlerFunc { return func(w http.ResponseWriter, hreq *http.Request) { // For POST requests, reject a non-root URL path. This should not happen // in the standard configuration, since the wrapper checks the path. if hreq.URL.Path != "/" { - writeRPCResponse(w, logger, rpctypes.RPCRequest{}.MakeErrorf( + writeRPCResponse(w, rpctypes.RPCRequest{}.MakeErrorf( rpctypes.CodeInvalidRequest, "invalid path: %q", hreq.URL.Path)) return } b, err := io.ReadAll(hreq.Body) if err != nil { - writeRPCResponse(w, logger, rpctypes.RPCRequest{}.MakeErrorf( + writeRPCResponse(w, rpctypes.RPCRequest{}.MakeErrorf( rpctypes.CodeInvalidRequest, "reading request body: %v", err)) return } @@ -43,12 +42,12 @@ func makeJSONRPCHandler(funcMap map[string]*RPCFunc, logger log.Logger) http.Han requests, err := parseRequests(b) if len(requests) > REQUEST_BATCH_SIZE_LIMIT { - writeRPCResponse(w, logger, rpctypes.RPCRequest{}.MakeErrorf( + writeRPCResponse(w, rpctypes.RPCRequest{}.MakeErrorf( rpctypes.CodeParseError, "Batch size limit exceeded.")) return } if err != nil { - writeRPCResponse(w, logger, rpctypes.RPCRequest{}.MakeErrorf( + writeRPCResponse(w, rpctypes.RPCRequest{}.MakeErrorf( rpctypes.CodeParseError, "decoding request: %v", err)) return } @@ -83,7 +82,7 @@ func makeJSONRPCHandler(funcMap map[string]*RPCFunc, logger log.Logger) http.Han if len(responses) == 0 { return } - writeRPCResponse(w, logger, responses...) + writeRPCResponse(w, responses...) } } diff --git a/sei-tendermint/rpc/jsonrpc/server/http_json_handler_test.go b/sei-tendermint/rpc/jsonrpc/server/http_json_handler_test.go index 6fd60fdcaa..e09dc3018c 100644 --- a/sei-tendermint/rpc/jsonrpc/server/http_json_handler_test.go +++ b/sei-tendermint/rpc/jsonrpc/server/http_json_handler_test.go @@ -10,11 +10,9 @@ import ( "strings" "testing" + rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) func testMux() *http.ServeMux { @@ -30,8 +28,8 @@ func testMux() *http.ServeMux { "block": NewRPCFunc(func(ctx context.Context, arg *blockArgs) (string, error) { return "block", nil }), } mux := http.NewServeMux() - logger := log.NewNopLogger() - RegisterRPCFuncs(mux, funcMap, logger) + + RegisterRPCFuncs(mux, funcMap) return mux } diff --git a/sei-tendermint/rpc/jsonrpc/server/http_server.go b/sei-tendermint/rpc/jsonrpc/server/http_server.go index 4f6922d77a..713e2f714f 100644 --- a/sei-tendermint/rpc/jsonrpc/server/http_server.go +++ b/sei-tendermint/rpc/jsonrpc/server/http_server.go @@ -12,12 +12,14 @@ import ( "strings" "time" + "github.com/sei-protocol/seilog" "golang.org/x/net/netutil" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) +var logger = seilog.NewLogger("tendermint", "rpc", "jsonrpc", "server") + // Config is a RPC server configuration. type Config struct { // The maximum number of connections that will be accepted by the listener. @@ -57,9 +59,9 @@ func DefaultConfig() *Config { // Serve creates a http.Server and calls Serve with the given listener. It // wraps handler to recover panics and limit the request body size. -func Serve(ctx context.Context, listener net.Listener, handler http.Handler, logger log.Logger, config *Config) error { - logger.Info(fmt.Sprintf("Starting RPC HTTP server on %s", listener.Addr())) - h := recoverAndLogHandler(MaxBytesHandler(handler, config.MaxBodyBytes), logger) +func Serve(ctx context.Context, listener net.Listener, handler http.Handler, config *Config) error { + logger.Info("starting RPC HTTP server", "addr", listener.Addr()) + h := recoverAndLogHandler(MaxBytesHandler(handler, config.MaxBodyBytes)) s := &http.Server{ Handler: h, ReadTimeout: config.ReadTimeout, @@ -88,14 +90,14 @@ func Serve(ctx context.Context, listener net.Listener, handler http.Handler, log // Serve creates a http.Server and calls ServeTLS with the given listener, // certFile and keyFile. It wraps handler to recover panics and limit the // request body size. -func ServeTLS(ctx context.Context, listener net.Listener, handler http.Handler, certFile, keyFile string, logger log.Logger, config *Config) error { +func ServeTLS(ctx context.Context, listener net.Listener, handler http.Handler, certFile, keyFile string, config *Config) error { logger.Info("Starting RPC HTTPS server", "listenterAddr", listener.Addr(), "certFile", certFile, "keyFile", keyFile) s := &http.Server{ - Handler: recoverAndLogHandler(MaxBytesHandler(handler, config.MaxBodyBytes), logger), + Handler: recoverAndLogHandler(MaxBytesHandler(handler, config.MaxBodyBytes)), ReadTimeout: config.ReadTimeout, WriteTimeout: config.WriteTimeout, MaxHeaderBytes: config.MaxHeaderBytes, @@ -132,7 +134,7 @@ func writeError(w http.ResponseWriter, statusCode int, err error) { // the response body is its error object; otherwise its responses is the result. // // Unless there is an error encoding the response, the status is 200 OK. -func writeHTTPResponse(w http.ResponseWriter, log log.Logger, rsp rpctypes.RPCResponse) { +func writeHTTPResponse(w http.ResponseWriter, rsp rpctypes.RPCResponse) { var body []byte var err error if rsp.Error != nil { @@ -141,7 +143,7 @@ func writeHTTPResponse(w http.ResponseWriter, log log.Logger, rsp rpctypes.RPCRe body = rsp.Result } if err != nil { - log.Error("Error encoding RPC response: %w", err) + logger.Error("Error encoding RPC response", "err", err) writeError(w, http.StatusInternalServerError, err) return } @@ -161,7 +163,7 @@ func writeHTTPResponse(w http.ResponseWriter, log log.Logger, rsp rpctypes.RPCRe // (array) of response objects. // // Unless there is an error encoding the responses, the status is 200 OK. -func writeRPCResponse(w http.ResponseWriter, log log.Logger, rsps ...rpctypes.RPCResponse) { +func writeRPCResponse(w http.ResponseWriter, rsps ...rpctypes.RPCResponse) { var body []byte var err error if len(rsps) == 1 { @@ -170,7 +172,7 @@ func writeRPCResponse(w http.ResponseWriter, log log.Logger, rsps ...rpctypes.RP body, err = json.Marshal(rsps) } if err != nil { - log.Error("Error encoding RPC response: %w", err) + logger.Error("Error encoding RPC response", "err", err) writeError(w, http.StatusInternalServerError, err) return } @@ -192,7 +194,7 @@ func writeRPCResponse(w http.ResponseWriter, log log.Logger, rsps ...rpctypes.RP // recoverAndLogHandler wraps an HTTP handler, adding error logging. If the // inner handler panics, the wrapper recovers, logs, sends an HTTP 500 error // response to the client. -func recoverAndLogHandler(handler http.Handler, logger log.Logger) http.Handler { +func recoverAndLogHandler(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Capture the HTTP status written by the handler. var httpStatus int diff --git a/sei-tendermint/rpc/jsonrpc/server/http_server_test.go b/sei-tendermint/rpc/jsonrpc/server/http_server_test.go index dd8fdfda94..a274889bde 100644 --- a/sei-tendermint/rpc/jsonrpc/server/http_server_test.go +++ b/sei-tendermint/rpc/jsonrpc/server/http_server_test.go @@ -13,11 +13,9 @@ import ( "time" "github.com/fortytw2/leaktest" + rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) type sampleResult struct { @@ -31,8 +29,6 @@ func TestMaxOpenConnections(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - // Start the server. var open int32 mux := http.NewServeMux() @@ -49,7 +45,7 @@ func TestMaxOpenConnections(t *testing.T) { require.NoError(t, err) defer l.Close() - go Serve(ctx, l, mux, logger, config) //nolint:errcheck // ignore for tests + go Serve(ctx, l, mux, config) //nolint:errcheck // ignore for tests // Make N GET calls to the server. attempts := max * 2 @@ -91,12 +87,10 @@ func TestServeTLS(t *testing.T) { ctx := t.Context() - logger := log.NewNopLogger() - chErr := make(chan error, 1) go func() { select { - case chErr <- ServeTLS(ctx, ln, mux, "test.crt", "test.key", logger, DefaultConfig()): + case chErr <- ServeTLS(ctx, ln, mux, "test.crt", "test.key", DefaultConfig()): case <-ctx.Done(): } }() @@ -129,8 +123,8 @@ func TestWriteRPCResponse(t *testing.T) { // one argument w := httptest.NewRecorder() - logger := log.NewNopLogger() - writeRPCResponse(w, logger, req.MakeResponse(&sampleResult{"hello"})) + + writeRPCResponse(w, req.MakeResponse(&sampleResult{"hello"})) resp := w.Result() body, err := io.ReadAll(resp.Body) require.NoError(t, resp.Body.Close()) @@ -142,7 +136,7 @@ func TestWriteRPCResponse(t *testing.T) { // multiple arguments w = httptest.NewRecorder() - writeRPCResponse(w, logger, + writeRPCResponse(w, req.MakeResponse(&sampleResult{"hello"}), req.MakeResponse(&sampleResult{"world"}), ) @@ -159,9 +153,9 @@ func TestWriteRPCResponse(t *testing.T) { func TestWriteHTTPResponse(t *testing.T) { w := httptest.NewRecorder() - logger := log.NewNopLogger() + req := rpctypes.NewRequest(-1) - writeHTTPResponse(w, logger, req.MakeErrorf(rpctypes.CodeInternalError, "foo")) + writeHTTPResponse(w, req.MakeErrorf(rpctypes.CodeInternalError, "foo")) resp := w.Result() body, err := io.ReadAll(resp.Body) require.NoError(t, resp.Body.Close()) diff --git a/sei-tendermint/rpc/jsonrpc/server/http_uri_handler.go b/sei-tendermint/rpc/jsonrpc/server/http_uri_handler.go index df4937f355..80cc8fb9f0 100644 --- a/sei-tendermint/rpc/jsonrpc/server/http_uri_handler.go +++ b/sei-tendermint/rpc/jsonrpc/server/http_uri_handler.go @@ -9,7 +9,6 @@ import ( "strconv" "strings" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) @@ -18,7 +17,7 @@ import ( const uriReqID = -1 // convert from a function name to the http handler -func makeHTTPHandler(rpcFunc *RPCFunc, logger log.Logger) func(http.ResponseWriter, *http.Request) { +func makeHTTPHandler(rpcFunc *RPCFunc) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { ctx := rpctypes.WithCallInfo(req.Context(), &rpctypes.CallInfo{ HTTPRequest: req, @@ -33,9 +32,9 @@ func makeHTTPHandler(rpcFunc *RPCFunc, logger log.Logger) func(http.ResponseWrit jreq := rpctypes.NewRequest(uriReqID) result, err := rpcFunc.Call(ctx, args) if err == nil { - writeHTTPResponse(w, logger, jreq.MakeResponse(result)) + writeHTTPResponse(w, jreq.MakeResponse(result)) } else { - writeHTTPResponse(w, logger, jreq.MakeError(result, err)) + writeHTTPResponse(w, jreq.MakeError(result, err)) } } } diff --git a/sei-tendermint/rpc/jsonrpc/server/rpc_func.go b/sei-tendermint/rpc/jsonrpc/server/rpc_func.go index d1bda854e2..22bb271b1e 100644 --- a/sei-tendermint/rpc/jsonrpc/server/rpc_func.go +++ b/sei-tendermint/rpc/jsonrpc/server/rpc_func.go @@ -11,7 +11,6 @@ import ( "strings" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) @@ -21,16 +20,16 @@ const DefaultRPCTimeout = 60 * time.Second // RegisterRPCFuncs adds a route to mux for each non-websocket function in the // funcMap, and also a root JSON-RPC POST handler. -func RegisterRPCFuncs(mux *http.ServeMux, funcMap map[string]*RPCFunc, logger log.Logger) { +func RegisterRPCFuncs(mux *http.ServeMux, funcMap map[string]*RPCFunc) { for name, fn := range funcMap { if fn.ws { continue // skip websocket endpoints, not usable via GET calls } - mux.HandleFunc("/"+name, ensureBodyClose(makeHTTPHandler(fn, logger))) + mux.HandleFunc("/"+name, ensureBodyClose(makeHTTPHandler(fn))) } // Endpoints for POST. - mux.HandleFunc("/", ensureBodyClose(handleInvalidJSONRPCPaths(makeJSONRPCHandler(funcMap, logger)))) + mux.HandleFunc("/", ensureBodyClose(handleInvalidJSONRPCPaths(makeJSONRPCHandler(funcMap)))) } // Function introspection diff --git a/sei-tendermint/rpc/jsonrpc/server/ws_handler.go b/sei-tendermint/rpc/jsonrpc/server/ws_handler.go index 534fc6e8bf..597300e114 100644 --- a/sei-tendermint/rpc/jsonrpc/server/ws_handler.go +++ b/sei-tendermint/rpc/jsonrpc/server/ws_handler.go @@ -10,7 +10,6 @@ import ( "github.com/gorilla/websocket" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) @@ -30,13 +29,12 @@ type WebsocketManager struct { websocket.Upgrader funcMap map[string]*RPCFunc - logger log.Logger wsConnOptions []func(*wsConnection) } // NewWebsocketManager returns a new WebsocketManager that passes a map of // functions, connection options and logger to new WS connections. -func NewWebsocketManager(logger log.Logger, funcMap map[string]*RPCFunc, wsConnOptions ...func(*wsConnection)) *WebsocketManager { +func NewWebsocketManager(funcMap map[string]*RPCFunc, wsConnOptions ...func(*wsConnection)) *WebsocketManager { return &WebsocketManager{ funcMap: funcMap, Upgrader: websocket.Upgrader{ @@ -53,7 +51,6 @@ func NewWebsocketManager(logger log.Logger, funcMap map[string]*RPCFunc, wsConnO return true }, }, - logger: logger, wsConnOptions: wsConnOptions, } } @@ -65,29 +62,29 @@ func (wm *WebsocketManager) WebsocketHandler(w http.ResponseWriter, r *http.Requ if err != nil { // The upgrader has already reported an HTTP error to the client, so we // need only log it. - wm.logger.Error("Failed to upgrade connection", "err", err) + logger.Error("Failed to upgrade connection", "err", err) return } defer func() { if err := wsConn.Close(); err != nil { - wm.logger.Error("Failed to close connection", "err", err) + logger.Error("Failed to close connection", "err", err) } }() // register connection - logger := wm.logger.With("remote", wsConn.RemoteAddr()) - conn := newWSConnection(wsConn, wm.funcMap, logger, wm.wsConnOptions...) - wm.logger.Info("New websocket connection", "remote", conn.remoteAddr) + logger := logger.With("remote", wsConn.RemoteAddr()) + conn := newWSConnection(wsConn, wm.funcMap, wm.wsConnOptions...) + logger.Info("New websocket connection", "remote", conn.remoteAddr) // starting the conn is blocking if err = conn.Start(r.Context()); err != nil { - wm.logger.Error("Failed to start connection", "err", err) + logger.Error("Failed to start connection", "err", err) writeError(w, http.StatusInternalServerError, err) return } if err := conn.Stop(); err != nil { - wm.logger.Error("error while stopping connection", "error", err) + logger.Error("error while stopping connection", "error", err) } } @@ -98,8 +95,6 @@ func (wm *WebsocketManager) WebsocketHandler(w http.ResponseWriter, r *http.Requ // // In case of an error, the connection is stopped. type wsConnection struct { - Logger log.Logger - remoteAddr string baseConn *websocket.Conn // writeChan is never closed, to allow WriteRPCResponse() to fail. @@ -133,9 +128,8 @@ type wsConnection struct { // description of how to configure ping period and pong wait time. NOTE: if the // write buffer is full, pongs may be dropped, which may cause clients to // disconnect. see https://github.com/gorilla/websocket/issues/97 -func newWSConnection(baseConn *websocket.Conn, funcMap map[string]*RPCFunc, logger log.Logger, options ...func(*wsConnection)) *wsConnection { +func newWSConnection(baseConn *websocket.Conn, funcMap map[string]*RPCFunc, options ...func(*wsConnection)) *wsConnection { wsc := &wsConnection{ - Logger: logger, remoteAddr: baseConn.RemoteAddr().String(), baseConn: baseConn, funcMap: funcMap, @@ -259,10 +253,10 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { err = fmt.Errorf("WSJSONRPC: %v", r) } req := rpctypes.NewRequest(uriReqID) - wsc.Logger.Error("Panic in WSJSONRPC handler", "err", err, "stack", string(debug.Stack())) + logger.Error("Panic in WSJSONRPC handler", "err", err, "stack", string(debug.Stack())) if err := wsc.WriteRPCResponse(writeCtx, req.MakeErrorf(rpctypes.CodeInternalError, "Panic in handler: %v", err)); err != nil { - wsc.Logger.Error("error writing RPC response", "err", err) + logger.Error("error writing RPC response", "err", err) } go wsc.readRoutine(ctx) } @@ -279,18 +273,18 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { default: // reset deadline for every type of message (control or data) if err := wsc.baseConn.SetReadDeadline(time.Now().Add(wsc.readWait)); err != nil { - wsc.Logger.Error("failed to set read deadline", "err", err) + logger.Error("failed to set read deadline", "err", err) } _, r, err := wsc.baseConn.NextReader() if err != nil { if websocket.IsCloseError(err, websocket.CloseNormalClosure) { - wsc.Logger.Info("Client closed the connection") + logger.Info("Client closed the connection") } else { - wsc.Logger.Error("Failed to read request", "err", err) + logger.Error("Failed to read request", "err", err) } if err := wsc.Stop(); err != nil { - wsc.Logger.Error("error closing websocket connection", "err", err) + logger.Error("error closing websocket connection", "err", err) } close(wsc.readRoutineQuit) return @@ -302,7 +296,7 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { if err != nil { if err := wsc.WriteRPCResponse(writeCtx, request.MakeErrorf(rpctypes.CodeParseError, "unmarshaling request: %v", err)); err != nil { - wsc.Logger.Error("error writing RPC response", "err", err) + logger.Error("error writing RPC response", "err", err) } continue } @@ -310,7 +304,7 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { // A Notification is a Request object without an "id" member. // The Server MUST NOT reply to a Notification, including those that are within a batch request. if request.IsNotification() { - wsc.Logger.Debug( + logger.Debug( "WSJSONRPC received a notification, skipping... (please send a non-empty ID if you want to call a method)", "req", request, ) @@ -322,7 +316,7 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { if rpcFunc == nil { if err := wsc.WriteRPCResponse(writeCtx, request.MakeErrorf(rpctypes.CodeMethodNotFound, "method %s not found", request.Method)); err != nil { - wsc.Logger.Error("error writing RPC response", "err", err) + logger.Error("error writing RPC response", "err", err) } continue } @@ -339,7 +333,7 @@ func (wsc *wsConnection) readRoutine(ctx context.Context) { resp = request.MakeError(result, err) } if err := wsc.WriteRPCResponse(writeCtx, resp); err != nil { - wsc.Logger.Error("error writing RPC response", "err", err) + logger.Error("error writing RPC response", "err", err) } } } @@ -369,22 +363,22 @@ func (wsc *wsConnection) writeRoutine(ctx context.Context) { case m := <-pongs: err := wsc.writeMessageWithDeadline(websocket.PongMessage, []byte(m)) if err != nil { - wsc.Logger.Info("Failed to write pong (client may disconnect)", "err", err) + logger.Info("Failed to write pong (client may disconnect)", "err", err) } case <-pingTicker.C: err := wsc.writeMessageWithDeadline(websocket.PingMessage, []byte{}) if err != nil { - wsc.Logger.Error("Failed to write ping", "err", err) + logger.Error("Failed to write ping", "err", err) return } case msg := <-wsc.writeChan: data, err := json.Marshal(msg) if err != nil { - wsc.Logger.Error("Failed to marshal RPCResponse to JSON", "msg", msg, "err", err) + logger.Error("Failed to marshal RPCResponse to JSON", "msg", msg, "err", err) continue } if err = wsc.writeMessageWithDeadline(websocket.TextMessage, data); err != nil { - wsc.Logger.Error("Failed to write response", "msg", msg, "err", err) + logger.Error("Failed to write response", "msg", msg, "err", err) return } } diff --git a/sei-tendermint/rpc/jsonrpc/server/ws_handler_test.go b/sei-tendermint/rpc/jsonrpc/server/ws_handler_test.go index 0f33313199..24df5a88a2 100644 --- a/sei-tendermint/rpc/jsonrpc/server/ws_handler_test.go +++ b/sei-tendermint/rpc/jsonrpc/server/ws_handler_test.go @@ -11,14 +11,12 @@ import ( "github.com/gorilla/websocket" "github.com/stretchr/testify/require" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) func TestWebsocketManagerHandler(t *testing.T) { - logger := log.NewNopLogger() - s := newWSServer(t, logger) + s := newWSServer(t) defer s.Close() t.Cleanup(leaktest.Check(t)) @@ -44,7 +42,7 @@ func TestWebsocketManagerHandler(t *testing.T) { dialResp.Body.Close() } -func newWSServer(t *testing.T, logger log.Logger) *httptest.Server { +func newWSServer(t *testing.T) *httptest.Server { type args struct { S string `json:"s"` I json.Number `json:"i"` @@ -52,7 +50,7 @@ func newWSServer(t *testing.T, logger log.Logger) *httptest.Server { funcMap := map[string]*RPCFunc{ "c": NewWSRPCFunc(func(context.Context, *args) (string, error) { return "foo", nil }), } - wm := NewWebsocketManager(logger, funcMap) + wm := NewWebsocketManager(funcMap) mux := http.NewServeMux() mux.HandleFunc("/websocket", wm.WebsocketHandler) diff --git a/sei-tendermint/rpc/jsonrpc/test/main.go b/sei-tendermint/rpc/jsonrpc/test/main.go index 7c21ff572a..2545cb1697 100644 --- a/sei-tendermint/rpc/jsonrpc/test/main.go +++ b/sei-tendermint/rpc/jsonrpc/test/main.go @@ -9,10 +9,12 @@ import ( "os/signal" "syscall" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpcserver "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "rpc", "jsonrpc", "test") + var routes = map[string]*rpcserver.RPCFunc{ "hello_world": rpcserver.NewRPCFunc(HelloWorld), } @@ -28,22 +30,17 @@ type Result struct { func main() { mux := http.NewServeMux() - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - stdlog.Fatalf("configuring logger: %v", err) - } - ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() - rpcserver.RegisterRPCFuncs(mux, routes, logger) + rpcserver.RegisterRPCFuncs(mux, routes) config := rpcserver.DefaultConfig() listener, err := rpcserver.Listen("tcp://127.0.0.1:8008", config.MaxOpenConnections) if err != nil { stdlog.Fatalf("rpc listening: %v", err) } - if err = rpcserver.Serve(ctx, listener, mux, logger, config); err != nil { + if err = rpcserver.Serve(ctx, listener, mux, config); err != nil { logger.Error("rpc serve", "err", err) } } diff --git a/sei-tendermint/rpc/test/helpers.go b/sei-tendermint/rpc/test/helpers.go index 7d8bcba7ca..79f738b196 100644 --- a/sei-tendermint/rpc/test/helpers.go +++ b/sei-tendermint/rpc/test/helpers.go @@ -9,7 +9,6 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/service" "github.com/sei-protocol/sei-chain/sei-tendermint/node" @@ -87,21 +86,9 @@ func StartTendermint( for _, opt := range opts { opt(nodeOpts) } - var logger log.Logger - if nodeOpts.suppressStdout { - logger = log.NewNopLogger() - } else { - var err error - logger, err = log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - return nil, func(_ context.Context) error { cancel(); return nil }, err - } - - } tmNode, err := node.New( ctx, conf, - logger, func() {}, app, nil, diff --git a/sei-tendermint/test/e2e/app/app.go b/sei-tendermint/test/e2e/app/app.go index 8b81829a3e..33939e0fbc 100644 --- a/sei-tendermint/test/e2e/app/app.go +++ b/sei-tendermint/test/e2e/app/app.go @@ -16,18 +16,19 @@ import ( abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/sei-tendermint/version" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "test", "e2e", "app") + // Application is an ABCI application for use by end-to-end tests. It is a // simple key/value store for strings, storing data in memory and persisting // to disk as JSON, taking state sync snapshots if requested. type Application struct { abci.BaseApplication mu sync.Mutex - logger log.Logger state *State snapshots *SnapshotStore cfg *Config @@ -101,13 +102,8 @@ func NewApplication(cfg *Config) (*Application, error) { if err != nil { return nil, err } - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - return nil, err - } return &Application{ - logger: logger, state: state, snapshots: snapshots, cfg: cfg, @@ -237,10 +233,10 @@ func (app *Application) Commit(_ context.Context) (*abci.ResponseCommit, error) if err != nil { panic(err) } - app.logger.Info("created state sync snapshot", "height", snapshot.Height) + logger.Info("created state sync snapshot", "height", snapshot.Height) err = app.snapshots.Prune(maxSnapshotCount) if err != nil { - app.logger.Error("failed to prune snapshots", "err", err) + logger.Error("failed to prune snapshots", "err", err) } } retainHeight := int64(0) @@ -361,7 +357,7 @@ func (app *Application) ProcessProposal(_ context.Context, req *abci.RequestProc for _, tx := range req.Txs { _, _, err := parseTx(tx) if err != nil { - app.logger.Error("malformed transaction in ProcessProposal", "tx", tx, "err", err) + logger.Error("malformed transaction in ProcessProposal", "tx", tx, "err", err) return &abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT}, nil } } diff --git a/sei-tendermint/test/e2e/generator/main.go b/sei-tendermint/test/e2e/generator/main.go index 723d12898f..5a353295c4 100644 --- a/sei-tendermint/test/e2e/generator/main.go +++ b/sei-tendermint/test/e2e/generator/main.go @@ -9,12 +9,14 @@ import ( "os" "path/filepath" + "github.com/sei-protocol/seilog" "github.com/spf13/cobra" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) +var logger = seilog.NewLogger("tendermint", "test", "e2e", "generator") + const ( randomSeed int64 = 4827085738 ) @@ -33,21 +35,13 @@ func main() { // CLI is the Cobra-based command-line interface. type CLI struct { - root *cobra.Command - opts Options - logger log.Logger + root *cobra.Command + opts Options } // NewCLI sets up the CLI. func NewCLI() (*CLI, error) { - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - return nil, err - } - - cli := &CLI{ - logger: logger, - } + var cli CLI cli.root = &cobra.Command{ Use: "generator", Short: "End-to-end testnet generator", @@ -67,7 +61,7 @@ func NewCLI() (*CLI, error) { cli.root.PersistentFlags().IntVarP(&cli.opts.MaxNetworkSize, "max-size", "", 0, "Maxmum network size (nodes), 0 is unlimited") - return cli, nil + return &cli, nil } // generate generates manifests in a directory. @@ -108,7 +102,7 @@ func (cli *CLI) generate() error { // Run runs the CLI. func (cli *CLI) Run(ctx context.Context) { if err := cli.root.ExecuteContext(ctx); err != nil { - cli.logger.Error(err.Error()) + logger.Error(err.Error()) os.Exit(1) } } diff --git a/sei-tendermint/test/e2e/node/main.go b/sei-tendermint/test/e2e/node/main.go index fb2b254069..e6ad43364b 100644 --- a/sei-tendermint/test/e2e/node/main.go +++ b/sei-tendermint/test/e2e/node/main.go @@ -7,10 +7,13 @@ import ( "net" "net/http" "os" + "os/signal" "path/filepath" "strings" + "syscall" "time" + "github.com/sei-protocol/seilog" "github.com/spf13/viper" "go.opentelemetry.io/otel/sdk/trace" "google.golang.org/grpc" @@ -18,7 +21,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/p2p" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmnet "github.com/sei-protocol/sei-chain/sei-tendermint/libs/net" "github.com/sei-protocol/sei-chain/sei-tendermint/light" lproxy "github.com/sei-protocol/sei-chain/sei-tendermint/light/proxy" @@ -33,12 +35,14 @@ import ( e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) +var logger = seilog.NewLogger("tendermint", "test", "e2e", "node") + const builtinProtocol = "builtin" // main is the binary entrypoint. func main() { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer stop() if len(os.Args) != 2 { fmt.Printf("Usage: %v ", os.Args[0]) @@ -52,6 +56,8 @@ func main() { if err := run(ctx, configFile); err != nil { os.Exit(1) } + <-ctx.Done() + logger.Info("Shutting down...") } // run runs the application - basically like main() with error handling. @@ -61,20 +67,12 @@ func run(ctx context.Context, configFile string) error { return err } - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - // have print here because we can't log (yet), use the logger - // everywhere else. - _, _ = fmt.Fprintln(os.Stderr, "ERROR:", err) - return err - } - if cfg.Mode == string(e2e.ModeLight) { - err = startLightNode(ctx, logger, cfg) + err = startLightNode(ctx, cfg) } else { // Start remote signer (must start before node if running builtin). if cfg.PrivValServer != "" { - if err = startSigner(ctx, logger, cfg); err != nil { + if err = startSigner(ctx, cfg); err != nil { logger.Error("starting signer", "server", cfg.PrivValServer, "err", err) @@ -105,11 +103,7 @@ func run(ctx context.Context, configFile string) error { "err", err) return err } - - // Apparently there's no way to wait for the server, so we just sleep - for { - time.Sleep(1 * time.Hour) - } + return nil } // startNode starts a Tendermint node running the application directly. It assumes the Tendermint @@ -122,7 +116,7 @@ func startNode(ctx context.Context, cfg *Config) error { return err } - tmcfg, nodeLogger, err := setupNode() + tmcfg, err := setupNode() if err != nil { return fmt.Errorf("failed to setup config: %w", err) } @@ -130,7 +124,6 @@ func startNode(ctx context.Context, cfg *Config) error { n, err := node.New( ctx, tmcfg, - nodeLogger, func() {}, app, nil, @@ -144,22 +137,22 @@ func startNode(ctx context.Context, cfg *Config) error { } func startSeedNode(ctx context.Context) error { - tmcfg, nodeLogger, err := setupNode() + tmcfg, err := setupNode() if err != nil { return fmt.Errorf("failed to setup config: %w", err) } tmcfg.Mode = config.ModeSeed - n, err := node.New(ctx, tmcfg, nodeLogger, func() {}, nil, nil, []trace.TracerProviderOption{}, nil) + n, err := node.New(ctx, tmcfg, func() {}, nil, nil, []trace.TracerProviderOption{}, nil) if err != nil { return err } return n.Start(ctx) } -func startLightNode(ctx context.Context, logger log.Logger, cfg *Config) error { - tmcfg, nodeLogger, err := setupNode() +func startLightNode(ctx context.Context, cfg *Config) error { + tmcfg, err := setupNode() if err != nil { return err } @@ -184,7 +177,6 @@ func startLightNode(ctx context.Context, logger log.Logger, cfg *Config) error { providers[1:], dbs.New(lightDB), 5*time.Minute, - light.Logger(nodeLogger), ) if err != nil { return err @@ -202,7 +194,7 @@ func startLightNode(ctx context.Context, logger log.Logger, cfg *Config) error { rpccfg.WriteTimeout = tmcfg.RPC.TimeoutBroadcastTxCommit + 1*time.Second } - p, err := lproxy.NewProxy(c, tmcfg.RPC.ListenAddress, providers[0], rpccfg, nodeLogger, + p, err := lproxy.NewProxy(c, tmcfg.RPC.ListenAddress, providers[0], rpccfg, lrpc.KeyPathFn(lrpc.DefaultMerkleKeyPathFn())) if err != nil { return err @@ -218,7 +210,7 @@ func startLightNode(ctx context.Context, logger log.Logger, cfg *Config) error { } // startSigner starts a signer server connecting to the given endpoint. -func startSigner(ctx context.Context, logger log.Logger, cfg *Config) error { +func startSigner(ctx context.Context, cfg *Config) error { filePV, err := privval.LoadFilePV(cfg.PrivValKey, cfg.PrivValState) if err != nil { return err @@ -237,7 +229,7 @@ func startSigner(ctx context.Context, logger log.Logger, cfg *Config) error { if err != nil { return err } - ss := grpcprivval.NewSignerServer(logger, cfg.ChainID, filePV) + ss := grpcprivval.NewSignerServer(cfg.ChainID, filePV) s := grpc.NewServer() @@ -258,7 +250,7 @@ func startSigner(ctx context.Context, logger log.Logger, cfg *Config) error { return fmt.Errorf("invalid privval protocol %q", protocol) } - endpoint := privval.NewSignerDialerEndpoint(logger, dialFn, + endpoint := privval.NewSignerDialerEndpoint(dialFn, privval.SignerDialerEndpointRetryWaitInterval(1*time.Second), privval.SignerDialerEndpointConnRetries(100)) @@ -267,43 +259,38 @@ func startSigner(ctx context.Context, logger log.Logger, cfg *Config) error { return err } - logger.Info(fmt.Sprintf("Remote signer connecting to %v", cfg.PrivValServer)) + logger.Info("remote signer connecting", "addr", cfg.PrivValServer) return nil } -func setupNode() (*config.Config, log.Logger, error) { +func setupNode() (*config.Config, error) { var tmcfg *config.Config home := os.Getenv("TMHOME") if home == "" { - return nil, nil, errors.New("TMHOME not set") + return nil, errors.New("TMHOME not set") } viper.AddConfigPath(filepath.Join(home, "config")) viper.SetConfigName("config") if err := viper.ReadInConfig(); err != nil { - return nil, nil, err + return nil, err } tmcfg = config.DefaultConfig() if err := viper.Unmarshal(tmcfg); err != nil { - return nil, nil, err + return nil, err } tmcfg.SetRoot(home) if err := tmcfg.ValidateBasic(); err != nil { - return nil, nil, fmt.Errorf("error in config file: %w", err) - } - - nodeLogger, err := log.NewDefaultLogger(tmcfg.LogFormat, tmcfg.LogLevel) - if err != nil { - return nil, nil, err + return nil, fmt.Errorf("error in config file: %w", err) } - return tmcfg, nodeLogger.With("module", "main"), nil + return tmcfg, nil } // rpcEndpoints takes a list of persistent peers and splits them into a list of rpc endpoints diff --git a/sei-tendermint/test/e2e/runner/benchmark.go b/sei-tendermint/test/e2e/runner/benchmark.go index 83edf6517c..06ac729fa0 100644 --- a/sei-tendermint/test/e2e/runner/benchmark.go +++ b/sei-tendermint/test/e2e/runner/benchmark.go @@ -8,11 +8,13 @@ import ( "path/filepath" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("tendermint", "test", "e2e", "runner") + // Benchmark is a simple function for fetching, calculating and printing // the following metrics: // 1. Average block production time @@ -22,7 +24,7 @@ import ( // // Metrics are based of the `benchmarkLength`, the amount of consecutive blocks // sampled from in the testnet -func Benchmark(ctx context.Context, logger log.Logger, testnet *e2e.Testnet, benchmarkLength int64) error { +func Benchmark(ctx context.Context, testnet *e2e.Testnet, benchmarkLength int64) error { block, err := getLatestBlock(ctx, testnet) if err != nil { return err @@ -225,10 +227,3 @@ func extractTestnetStats(intervals []time.Duration) testnetStats { min: min, } } - -func min(a, b int64) int64 { - if a > b { - return b - } - return a -} diff --git a/sei-tendermint/test/e2e/runner/cleanup.go b/sei-tendermint/test/e2e/runner/cleanup.go index 91767d5df2..3a953516fb 100644 --- a/sei-tendermint/test/e2e/runner/cleanup.go +++ b/sei-tendermint/test/e2e/runner/cleanup.go @@ -6,22 +6,21 @@ import ( "os" "path/filepath" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) // Cleanup removes the Docker Compose containers and testnet directory. -func Cleanup(logger log.Logger, testnet *e2e.Testnet) error { - err := cleanupDocker(logger) +func Cleanup(testnet *e2e.Testnet) error { + err := cleanupDocker() if err != nil { return err } - return cleanupDir(logger, testnet.Dir) + return cleanupDir(testnet.Dir) } // cleanupDocker removes all E2E resources (with label e2e=True), regardless // of testnet. -func cleanupDocker(logger log.Logger) error { +func cleanupDocker() error { logger.Info("Removing Docker containers and networks") // GNU xargs requires the -r flag to not run when input is empty, macOS @@ -39,7 +38,7 @@ func cleanupDocker(logger log.Logger) error { } // cleanupDir cleans up a testnet directory -func cleanupDir(logger log.Logger, dir string) error { +func cleanupDir(dir string) error { if dir == "" { return errors.New("no directory set") } @@ -51,7 +50,7 @@ func cleanupDir(logger log.Logger, dir string) error { return err } - logger.Info(fmt.Sprintf("Removing testnet directory %q", dir)) + logger.Info("removing testnet directory", "dir", dir) // On Linux, some local files in the volume will be owned by root since Tendermint // runs as root inside the container, so we need to clean them up from within a diff --git a/sei-tendermint/test/e2e/runner/evidence.go b/sei-tendermint/test/e2e/runner/evidence.go index 9088a2c745..e7882bba67 100644 --- a/sei-tendermint/test/e2e/runner/evidence.go +++ b/sei-tendermint/test/e2e/runner/evidence.go @@ -13,7 +13,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/test/factory" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" @@ -28,7 +27,7 @@ const lightClientEvidenceRatio = 4 // evidence and broadcasts it to a random node through the rpc endpoint `/broadcast_evidence`. // Evidence is random and can be a mixture of LightClientAttackEvidence and // DuplicateVoteEvidence. -func InjectEvidence(ctx context.Context, logger log.Logger, r *rand.Rand, testnet *e2e.Testnet, amount int) error { +func InjectEvidence(ctx context.Context, r *rand.Rand, testnet *e2e.Testnet, amount int) error { // select a random node var targetNode *e2e.Node @@ -43,7 +42,7 @@ func InjectEvidence(ctx context.Context, logger log.Logger, r *rand.Rand, testne return errors.New("could not find node to inject evidence into") } - logger.Info(fmt.Sprintf("Injecting evidence through %v (amount: %d)...", targetNode.Name, amount)) + logger.Info("injecting evidence", "node", targetNode.Name, "amount", amount) client, err := targetNode.Client() if err != nil { @@ -113,7 +112,7 @@ func InjectEvidence(ctx context.Context, logger log.Logger, r *rand.Rand, testne // wait for the node to make progress after submitting // evidence (3 (forged height) + 1 (progress)) - _, err = waitForNode(wctx, logger, targetNode, evidenceHeight+4) + _, err = waitForNode(wctx, targetNode, evidenceHeight+4) if err != nil { return err } diff --git a/sei-tendermint/test/e2e/runner/load.go b/sei-tendermint/test/e2e/runner/load.go index 1af29f3a6b..24575bd163 100644 --- a/sei-tendermint/test/e2e/runner/load.go +++ b/sei-tendermint/test/e2e/runner/load.go @@ -7,7 +7,6 @@ import ( "math/rand" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmrand "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" rpchttp "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" @@ -16,7 +15,7 @@ import ( // Load generates transactions against the network until the given context is // canceled. -func Load(ctx context.Context, logger log.Logger, r *rand.Rand, testnet *e2e.Testnet) error { +func Load(ctx context.Context, r *rand.Rand, testnet *e2e.Testnet) error { // Since transactions are executed across all nodes in the network, we need // to reduce transaction load for larger networks to avoid using too much // CPU. This gives high-throughput small networks and low-throughput large ones. diff --git a/sei-tendermint/test/e2e/runner/main.go b/sei-tendermint/test/e2e/runner/main.go index 658e6a0258..c4caba1cd4 100644 --- a/sei-tendermint/test/e2e/runner/main.go +++ b/sei-tendermint/test/e2e/runner/main.go @@ -3,7 +3,6 @@ package main import ( "context" "fmt" - stdlog "log" "math/rand" "os" "strconv" @@ -11,7 +10,6 @@ import ( "github.com/spf13/cobra" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) @@ -21,12 +19,7 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - logger, err := log.NewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo) - if err != nil { - stdlog.Fatal(err) - } - - NewCLI(logger).Run(ctx, logger) + NewCLI().Run(ctx) } // CLI is the Cobra-based command-line interface. @@ -37,7 +30,7 @@ type CLI struct { } // NewCLI sets up the CLI. -func NewCLI(logger log.Logger) *CLI { +func NewCLI() *CLI { cli := &CLI{} cli.root = &cobra.Command{ Use: "runner", @@ -58,7 +51,7 @@ func NewCLI(logger log.Logger) *CLI { return nil }, RunE: func(cmd *cobra.Command, args []string) (err error) { - if err = Cleanup(logger, cli.testnet); err != nil { + if err = Cleanup(cli.testnet); err != nil { return err } defer func() { @@ -67,11 +60,11 @@ func NewCLI(logger log.Logger) *CLI { } else if err != nil { logger.Info("Preserving testnet that encountered error", "err", err) - } else if err := Cleanup(logger, cli.testnet); err != nil { + } else if err := Cleanup(cli.testnet); err != nil { logger.Error("error cleaning up testnet contents", "err", err) } }() - if err = Setup(logger, cli.testnet); err != nil { + if err = Setup(cli.testnet); err != nil { return err } @@ -84,31 +77,31 @@ func NewCLI(logger log.Logger) *CLI { lctx, loadCancel := context.WithCancel(ctx) defer loadCancel() go func() { - chLoadResult <- Load(lctx, logger, r, cli.testnet) + chLoadResult <- Load(lctx, r, cli.testnet) }() startAt := time.Now() - if err = Start(ctx, logger, cli.testnet); err != nil { + if err = Start(ctx, cli.testnet); err != nil { return err } - if err = Wait(ctx, logger, cli.testnet, 5); err != nil { // allow some txs to go through + if err = Wait(ctx, cli.testnet, 5); err != nil { // allow some txs to go through return err } if cli.testnet.HasPerturbations() { - if err = Perturb(ctx, logger, cli.testnet); err != nil { + if err = Perturb(ctx, cli.testnet); err != nil { return err } - if err = Wait(ctx, logger, cli.testnet, 5); err != nil { // allow some txs to go through + if err = Wait(ctx, cli.testnet, 5); err != nil { // allow some txs to go through return err } } if cli.testnet.Evidence > 0 { - if err = InjectEvidence(ctx, logger, r, cli.testnet, cli.testnet.Evidence); err != nil { + if err = InjectEvidence(ctx, r, cli.testnet, cli.testnet.Evidence); err != nil { return err } - if err = Wait(ctx, logger, cli.testnet, 5); err != nil { // ensure chain progress + if err = Wait(ctx, cli.testnet, 5); err != nil { // ensure chain progress return err } } @@ -131,7 +124,7 @@ func NewCLI(logger log.Logger) *CLI { if err = <-chLoadResult; err != nil { return fmt.Errorf("transaction load failed: %w", err) } - if err = Wait(ctx, logger, cli.testnet, 5); err != nil { // wait for network to settle before tests + if err = Wait(ctx, cli.testnet, 5); err != nil { // wait for network to settle before tests return err } if err := Test(cli.testnet); err != nil { @@ -156,7 +149,7 @@ func NewCLI(logger log.Logger) *CLI { Use: "setup", Short: "Generates the testnet directory and configuration", RunE: func(cmd *cobra.Command, args []string) error { - return Setup(logger, cli.testnet) + return Setup(cli.testnet) }, }) @@ -166,12 +159,12 @@ func NewCLI(logger log.Logger) *CLI { RunE: func(cmd *cobra.Command, args []string) error { _, err := os.Stat(cli.testnet.Dir) if os.IsNotExist(err) { - err = Setup(logger, cli.testnet) + err = Setup(cli.testnet) } if err != nil { return err } - return Start(cmd.Context(), logger, cli.testnet) + return Start(cmd.Context(), cli.testnet) }, }) @@ -179,7 +172,7 @@ func NewCLI(logger log.Logger) *CLI { Use: "perturb", Short: "Perturbs the Docker testnet, e.g. by restarting or disconnecting nodes", RunE: func(cmd *cobra.Command, args []string) error { - return Perturb(cmd.Context(), logger, cli.testnet) + return Perturb(cmd.Context(), cli.testnet) }, }) @@ -187,7 +180,7 @@ func NewCLI(logger log.Logger) *CLI { Use: "wait", Short: "Waits for a few blocks to be produced and all nodes to catch up", RunE: func(cmd *cobra.Command, args []string) error { - return Wait(cmd.Context(), logger, cli.testnet, 5) + return Wait(cmd.Context(), cli.testnet, 5) }, }) @@ -224,7 +217,7 @@ func NewCLI(logger log.Logger) *CLI { RunE: func(cmd *cobra.Command, args []string) (err error) { return Load( cmd.Context(), - logger, + rand.New(rand.NewSource(randomSeed)), // nolint: gosec cli.testnet, ) @@ -247,7 +240,7 @@ func NewCLI(logger log.Logger) *CLI { return InjectEvidence( cmd.Context(), - logger, + rand.New(rand.NewSource(randomSeed)), // nolint: gosec cli.testnet, amount, @@ -267,7 +260,7 @@ func NewCLI(logger log.Logger) *CLI { Use: "cleanup", Short: "Removes the testnet directory", RunE: func(cmd *cobra.Command, args []string) error { - return Cleanup(logger, cli.testnet) + return Cleanup(cli.testnet) }, }) @@ -306,16 +299,16 @@ over a 100 block sampling period. Does not run any perbutations. `, RunE: func(cmd *cobra.Command, args []string) error { - if err := Cleanup(logger, cli.testnet); err != nil { + if err := Cleanup(cli.testnet); err != nil { return err } defer func() { - if err := Cleanup(logger, cli.testnet); err != nil { + if err := Cleanup(cli.testnet); err != nil { logger.Error("error cleaning up testnet contents", "err", err) } }() - if err := Setup(logger, cli.testnet); err != nil { + if err := Setup(cli.testnet); err != nil { return err } @@ -328,19 +321,19 @@ Does not run any perbutations. lctx, loadCancel := context.WithCancel(ctx) defer loadCancel() go func() { - chLoadResult <- Load(lctx, logger, r, cli.testnet) + chLoadResult <- Load(lctx, r, cli.testnet) }() - if err := Start(ctx, logger, cli.testnet); err != nil { + if err := Start(ctx, cli.testnet); err != nil { return err } - if err := Wait(ctx, logger, cli.testnet, 5); err != nil { // allow some txs to go through + if err := Wait(ctx, cli.testnet, 5); err != nil { // allow some txs to go through return err } // we benchmark performance over the next 100 blocks - if err := Benchmark(ctx, logger, cli.testnet, 100); err != nil { + if err := Benchmark(ctx, cli.testnet, 100); err != nil { return err } @@ -357,7 +350,7 @@ Does not run any perbutations. } // Run runs the CLI. -func (cli *CLI) Run(ctx context.Context, logger log.Logger) { +func (cli *CLI) Run(ctx context.Context) { if err := cli.root.ExecuteContext(ctx); err != nil { logger.Error(err.Error()) os.Exit(1) diff --git a/sei-tendermint/test/e2e/runner/perturb.go b/sei-tendermint/test/e2e/runner/perturb.go index 7d497315aa..aba0700dc4 100644 --- a/sei-tendermint/test/e2e/runner/perturb.go +++ b/sei-tendermint/test/e2e/runner/perturb.go @@ -5,13 +5,12 @@ import ( "fmt" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) // Perturbs a running testnet. -func Perturb(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error { +func Perturb(ctx context.Context, testnet *e2e.Testnet) error { timer := time.NewTimer(0) // first tick fires immediately; reset below defer timer.Stop() @@ -21,7 +20,7 @@ func Perturb(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error case <-ctx.Done(): return ctx.Err() case <-timer.C: - _, err := PerturbNode(ctx, logger, node, perturbation) + _, err := PerturbNode(ctx, node, perturbation) if err != nil { return err } @@ -36,11 +35,11 @@ func Perturb(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error // PerturbNode perturbs a node with a given perturbation, returning its status // after recovering. -func PerturbNode(ctx context.Context, logger log.Logger, node *e2e.Node, perturbation e2e.Perturbation) (*rpctypes.ResultStatus, error) { +func PerturbNode(ctx context.Context, node *e2e.Node, perturbation e2e.Perturbation) (*rpctypes.ResultStatus, error) { testnet := node.Testnet switch perturbation { case e2e.PerturbationDisconnect: - logger.Info(fmt.Sprintf("Disconnecting node %v...", node.Name)) + logger.Info("disconnecting node", "node", node.Name) if err := execDocker("network", "disconnect", testnet.Name+"_"+testnet.Name, node.Name); err != nil { return nil, err } @@ -50,7 +49,7 @@ func PerturbNode(ctx context.Context, logger log.Logger, node *e2e.Node, perturb } case e2e.PerturbationKill: - logger.Info(fmt.Sprintf("Killing node %v...", node.Name)) + logger.Info("killing node", "node", node.Name) if err := execCompose(testnet.Dir, "kill", "-s", "SIGKILL", node.Name); err != nil { return nil, err } @@ -60,7 +59,7 @@ func PerturbNode(ctx context.Context, logger log.Logger, node *e2e.Node, perturb } case e2e.PerturbationPause: - logger.Info(fmt.Sprintf("Pausing node %v...", node.Name)) + logger.Info("pausing node", "node", node.Name) if err := execCompose(testnet.Dir, "pause", node.Name); err != nil { return nil, err } @@ -70,7 +69,7 @@ func PerturbNode(ctx context.Context, logger log.Logger, node *e2e.Node, perturb } case e2e.PerturbationRestart: - logger.Info(fmt.Sprintf("Restarting node %v...", node.Name)) + logger.Info("restarting node", "node", node.Name) if err := execCompose(testnet.Dir, "kill", "-s", "SIGTERM", node.Name); err != nil { return nil, err } @@ -91,10 +90,10 @@ func PerturbNode(ctx context.Context, logger log.Logger, node *e2e.Node, perturb ctx, cancel := context.WithTimeout(ctx, 5*time.Minute) defer cancel() - status, err := waitForNode(ctx, logger, node, 0) + status, err := waitForNode(ctx, node, 0) if err != nil { return nil, err } - logger.Info(fmt.Sprintf("Node %v recovered at height %v", node.Name, status.SyncInfo.LatestBlockHeight)) + logger.Info("node recovered", "node", node.Name, "height", status.SyncInfo.LatestBlockHeight) return status, nil } diff --git a/sei-tendermint/test/e2e/runner/rpc.go b/sei-tendermint/test/e2e/runner/rpc.go index a385515940..4bb13a4c4a 100644 --- a/sei-tendermint/test/e2e/runner/rpc.go +++ b/sei-tendermint/test/e2e/runner/rpc.go @@ -6,7 +6,6 @@ import ( "fmt" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpchttp "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/client/http" rpctypes "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/coretypes" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" @@ -128,7 +127,7 @@ func waitForHeight(ctx context.Context, testnet *e2e.Testnet, height int64) (*ty } // waitForNode waits for a node to become available and catch up to the given block height. -func waitForNode(ctx context.Context, logger log.Logger, node *e2e.Node, height int64) (*rpctypes.ResultStatus, error) { +func waitForNode(ctx context.Context, node *e2e.Node, height int64) (*rpctypes.ResultStatus, error) { // If the node is the light client or seed note, we do not check for the last height. // The light client and seed note can be behind the full node and validator if node.Mode == e2e.ModeSeed { diff --git a/sei-tendermint/test/e2e/runner/setup.go b/sei-tendermint/test/e2e/runner/setup.go index c8ec00acea..2b4f17b12f 100644 --- a/sei-tendermint/test/e2e/runner/setup.go +++ b/sei-tendermint/test/e2e/runner/setup.go @@ -19,7 +19,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/privval" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" "github.com/sei-protocol/sei-chain/sei-tendermint/types" @@ -39,8 +38,8 @@ const ( ) // Setup sets up the testnet configuration. -func Setup(logger log.Logger, testnet *e2e.Testnet) error { - logger.Info(fmt.Sprintf("Generating testnet files in %q", testnet.Dir)) +func Setup(testnet *e2e.Testnet) error { + logger.Info("generating testnet files", "dir", testnet.Dir) err := os.MkdirAll(testnet.Dir, os.ModePerm) if err != nil { diff --git a/sei-tendermint/test/e2e/runner/start.go b/sei-tendermint/test/e2e/runner/start.go index 1643244030..4e4cd91783 100644 --- a/sei-tendermint/test/e2e/runner/start.go +++ b/sei-tendermint/test/e2e/runner/start.go @@ -6,11 +6,10 @@ import ( "sort" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) -func Start(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error { +func Start(ctx context.Context, testnet *e2e.Testnet) error { if len(testnet.Nodes) == 0 { return fmt.Errorf("no nodes in testnet") } @@ -52,13 +51,13 @@ func Start(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error { ctx, cancel := context.WithTimeout(ctx, time.Minute) defer cancel() - _, err := waitForNode(ctx, logger, node, 0) + _, err := waitForNode(ctx, node, 0) return err }(); err != nil { return err } node.HasStarted = true - logger.Info(fmt.Sprintf("Node %v up on http://127.0.0.1:%v", node.Name, node.ProxyPort)) + logger.Info("node up", "node", node.Name, "url", fmt.Sprintf("http://127.0.0.1:%v", node.ProxyPort)) } networkHeight := testnet.InitialHeight @@ -111,7 +110,7 @@ func Start(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error { } wctx, wcancel := context.WithTimeout(ctx, 8*time.Minute) - status, err := waitForNode(wctx, logger, node, node.StartAt) + status, err := waitForNode(wctx, node, node.StartAt) if err != nil { wcancel() return err @@ -128,8 +127,7 @@ func Start(ctx context.Context, logger log.Logger, testnet *e2e.Testnet) error { } else { lastNodeHeight = status.SyncInfo.LatestBlockHeight } - logger.Info(fmt.Sprintf("Node %v up on http://127.0.0.1:%v at height %v", - node.Name, node.ProxyPort, lastNodeHeight)) + logger.Info("node up", "node", node.Name, "url", fmt.Sprintf("http://127.0.0.1:%v", node.ProxyPort), "height", lastNodeHeight) } return nil diff --git a/sei-tendermint/test/e2e/runner/wait.go b/sei-tendermint/test/e2e/runner/wait.go index dc4fd71e57..0e6d14962d 100644 --- a/sei-tendermint/test/e2e/runner/wait.go +++ b/sei-tendermint/test/e2e/runner/wait.go @@ -2,25 +2,23 @@ package main import ( "context" - "fmt" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" e2e "github.com/sei-protocol/sei-chain/sei-tendermint/test/e2e/pkg" ) // Wait waits for a number of blocks to be produced, and for all nodes to catch // up with it. -func Wait(ctx context.Context, logger log.Logger, testnet *e2e.Testnet, blocks int64) error { +func Wait(ctx context.Context, testnet *e2e.Testnet, blocks int64) error { block, err := getLatestBlock(ctx, testnet) if err != nil { return err } - return WaitUntil(ctx, logger, testnet, block.Height+blocks) + return WaitUntil(ctx, testnet, block.Height+blocks) } // WaitUntil waits until a given height has been reached. -func WaitUntil(ctx context.Context, logger log.Logger, testnet *e2e.Testnet, height int64) error { - logger.Info(fmt.Sprintf("Waiting for all nodes to reach height %v...", height)) +func WaitUntil(ctx context.Context, testnet *e2e.Testnet, height int64) error { + logger.Info("waiting for all nodes to reach height", "height", height) _, _, err := waitForHeight(ctx, testnet, height) diff --git a/sei-tendermint/test/fuzz/tests/mempool_test.go b/sei-tendermint/test/fuzz/tests/mempool_test.go index a4c4bc254f..8696db3d10 100644 --- a/sei-tendermint/test/fuzz/tests/mempool_test.go +++ b/sei-tendermint/test/fuzz/tests/mempool_test.go @@ -8,7 +8,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-tendermint/abci/example/kvstore" "github.com/sei-protocol/sei-chain/sei-tendermint/config" "github.com/sei-protocol/sei-chain/sei-tendermint/internal/mempool" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/types" ) @@ -26,11 +25,11 @@ func (e *TestPeerEvictor) Evict(id types.NodeID, _ error) { func FuzzMempool(f *testing.F) { app := kvstore.NewApplication() - logger := log.NewNopLogger() + cfg := config.DefaultMempoolConfig() cfg.Broadcast = false - mp := mempool.NewTxMempool(logger, cfg, app, NewTestPeerEvictor()) + mp := mempool.NewTxMempool(cfg, app, NewTestPeerEvictor()) f.Fuzz(func(t *testing.T, data []byte) { _ = mp.CheckTx(t.Context(), data, nil, mempool.TxInfo{}) diff --git a/sei-tendermint/test/fuzz/tests/rpc_jsonrpc_server_test.go b/sei-tendermint/test/fuzz/tests/rpc_jsonrpc_server_test.go index d490c126d2..11dbad12bf 100644 --- a/sei-tendermint/test/fuzz/tests/rpc_jsonrpc_server_test.go +++ b/sei-tendermint/test/fuzz/tests/rpc_jsonrpc_server_test.go @@ -11,7 +11,6 @@ import ( "net/http/httptest" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" rpcserver "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/server" "github.com/sei-protocol/sei-chain/sei-tendermint/rpc/jsonrpc/types" ) @@ -28,7 +27,7 @@ func FuzzRPCJSONRPCServer(f *testing.F) { } mux := http.NewServeMux() - rpcserver.RegisterRPCFuncs(mux, rpcFuncMap, log.NewNopLogger()) + rpcserver.RegisterRPCFuncs(mux, rpcFuncMap) f.Fuzz(func(t *testing.T, data []byte) { if len(data) == 0 { return diff --git a/sei-wasmd/app/app.go b/sei-wasmd/app/app.go index 3cbd97c36b..3b49540726 100644 --- a/sei-wasmd/app/app.go +++ b/sei-wasmd/app/app.go @@ -94,12 +94,12 @@ import ( "github.com/sei-protocol/sei-chain/x/mint" mintkeeper "github.com/sei-protocol/sei-chain/x/mint/keeper" minttypes "github.com/sei-protocol/sei-chain/x/mint/types" + "github.com/sei-protocol/seilog" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmjson "github.com/sei-protocol/sei-chain/sei-tendermint/libs/json" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmos "github.com/sei-protocol/sei-chain/sei-tendermint/libs/os" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/spf13/cast" @@ -118,6 +118,8 @@ const appName = "WasmApp" // We pull these out so we can set them with LDFLAGS in the Makefile var ( + logger = seilog.NewLogger("wasmd", "app") + NodeDir = ".wasmd" Bech32Prefix = "wasm" @@ -274,7 +276,6 @@ type WasmApp struct { // NewWasmApp returns a reference to an initialized WasmApp. func NewWasmApp( - logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, @@ -291,7 +292,7 @@ func NewWasmApp( appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry - bApp := baseapp.NewBaseApp(appName, logger, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, baseAppOptions...) + bApp := baseapp.NewBaseApp(appName, db, encodingConfig.TxConfig.TxDecoder(), tmConfig, appOpts, baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetInterfaceRegistry(interfaceRegistry) diff --git a/sei-wasmd/app/app_test.go b/sei-wasmd/app/app_test.go index 5dab90b854..14a03f9082 100644 --- a/sei-wasmd/app/app_test.go +++ b/sei-wasmd/app/app_test.go @@ -3,10 +3,8 @@ package app import ( "context" "encoding/json" - "os" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" db "github.com/tendermint/tm-db" @@ -20,7 +18,7 @@ var emptyWasmOpts []wasm.Option = nil func TestWasmdExport(t *testing.T) { db := db.NewMemDB() - gapp := NewWasmApp(log.NewTMLogger(os.Stdout), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) + gapp := NewWasmApp(db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) genesisState := NewDefaultGenesisState() stateBytes, err := json.MarshalIndent(genesisState, "", " ") @@ -38,7 +36,7 @@ func TestWasmdExport(t *testing.T) { gapp.Commit(context.Background()) // Making a new app object with the db, so that initchain hasn't been called - newGapp := NewWasmApp(log.NewTMLogger(os.Stdout), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) + newGapp := NewWasmApp(db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) _, err = newGapp.ExportAppStateAndValidators(false, []string{}) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -46,7 +44,7 @@ func TestWasmdExport(t *testing.T) { // ensure that blocked addresses are properly set in bank keeper func TestBlockedAddrs(t *testing.T) { db := db.NewMemDB() - gapp := NewWasmApp(log.NewTMLogger(os.Stdout), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) + gapp := NewWasmApp(db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, emptyWasmOpts) for acc := range maccPerms { t.Run(acc, func(t *testing.T) { diff --git a/sei-wasmd/app/test_helpers.go b/sei-wasmd/app/test_helpers.go index f3e2a72171..3b8e76eb48 100644 --- a/sei-wasmd/app/test_helpers.go +++ b/sei-wasmd/app/test_helpers.go @@ -39,7 +39,6 @@ import ( stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" ibcclient "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/02-client" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" minttypes "github.com/sei-protocol/sei-chain/x/mint/types" @@ -78,7 +77,7 @@ func setup(t testing.TB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Opt require.NoError(t, err) baseAppOpts := []func(*bam.BaseApp){bam.SetSnapshotStore(snapshotStore), bam.SetSnapshotKeepRecent(2)} db := dbm.NewMemDB() - app := NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, nodeHome, invCheckPeriod, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts, baseAppOpts...) + app := NewWasmApp(db, nil, true, map[int64]bool{}, nodeHome, invCheckPeriod, nil, MakeEncodingConfig(), wasm.EnableAllProposals, EmptyBaseAppOptions{}, opts, baseAppOpts...) if withGenesis { return app, NewDefaultGenesisState() } diff --git a/sei-wasmd/x/wasm/client/cli/genesis_msg_test.go b/sei-wasmd/x/wasm/client/cli/genesis_msg_test.go index d9a7493bd1..fb553664e1 100644 --- a/sei-wasmd/x/wasm/client/cli/genesis_msg_test.go +++ b/sei-wasmd/x/wasm/client/cli/genesis_msg_test.go @@ -21,7 +21,6 @@ import ( genutiltest "github.com/sei-protocol/sei-chain/sei-cosmos/x/genutil/client/testutil" genutiltypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/genutil/types" stakingtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -695,11 +694,11 @@ func setupGenesis(t *testing.T, wasmGenesis types.GenesisState) string { } func executeCmdWithContext(t *testing.T, homeDir string, cmd *cobra.Command) error { - logger := log.NewNopLogger() + cfg, err := genutiltest.CreateDefaultTendermintConfig(homeDir) require.NoError(t, err) appCodec := keeper.MakeEncodingConfig(t).Marshaler - serverCtx := server.NewContext(viper.New(), cfg, logger) + serverCtx := server.NewContext(viper.New(), cfg) clientCtx := client.Context{}.WithCodec(appCodec).WithHomeDir(homeDir) ctx := context.Background() diff --git a/sei-wasmd/x/wasm/keeper/ante_test.go b/sei-wasmd/x/wasm/keeper/ante_test.go index a8b158be7b..48d41a74b2 100644 --- a/sei-wasmd/x/wasm/keeper/ante_test.go +++ b/sei-wasmd/x/wasm/keeper/ante_test.go @@ -8,7 +8,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/store" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -93,7 +92,7 @@ func TestCountTxDecorator(t *testing.T) { ctx := sdk.NewContext(ms.CacheMultiStore(), tmproto.Header{ Height: myCurrentBlockHeight, Time: time.Date(2021, time.September, 27, 12, 0, 0, 0, time.UTC), - }, false, log.NewNopLogger()) + }, false) spec.setupDB(t, ctx) var anyTx sdk.Tx diff --git a/sei-wasmd/x/wasm/keeper/genesis_test.go b/sei-wasmd/x/wasm/keeper/genesis_test.go index 7001be5b69..dadcce0200 100644 --- a/sei-wasmd/x/wasm/keeper/genesis_test.go +++ b/sei-wasmd/x/wasm/keeper/genesis_test.go @@ -24,7 +24,6 @@ import ( stakingkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/keeper" upgradekeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/keeper" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/crypto" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/stretchr/testify/assert" @@ -656,7 +655,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) { ctx := sdk.NewContext(ms, tmproto.Header{ Height: 1234567, Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), - }, false, log.NewNopLogger()) + }, false) encodingConfig := MakeEncodingConfig(t) // register an example extension. must be protobuf diff --git a/sei-wasmd/x/wasm/keeper/handler_plugin.go b/sei-wasmd/x/wasm/keeper/handler_plugin.go index e1c4f915fa..dd57702c7d 100644 --- a/sei-wasmd/x/wasm/keeper/handler_plugin.go +++ b/sei-wasmd/x/wasm/keeper/handler_plugin.go @@ -230,7 +230,7 @@ func NewBurnCoinMessageHandler(burner types.Burner) MessageHandlerFunc { if err := burner.BurnCoins(ctx, types.ModuleName, coins); err != nil { return nil, nil, sdkerrors.Wrap(err, "burn coins") } - moduleLogger(ctx).Info("Burned", "amount", coins) + logger.Info("Burned", "amount", coins) return nil, nil, nil } return nil, nil, types.ErrUnknownMsg diff --git a/sei-wasmd/x/wasm/keeper/keeper.go b/sei-wasmd/x/wasm/keeper/keeper.go index d51fdebc23..b3c29aac9b 100644 --- a/sei-wasmd/x/wasm/keeper/keeper.go +++ b/sei-wasmd/x/wasm/keeper/keeper.go @@ -21,7 +21,6 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" wasmvm "github.com/sei-protocol/sei-chain/sei-wasmvm" wasmvmtypes "github.com/sei-protocol/sei-chain/sei-wasmvm/types" @@ -250,7 +249,7 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, return 0, sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } codeID = k.autoIncrementID(ctx, types.KeyLastCodeID) - k.Logger(ctx).Debug("storing new contract", "features", report.RequiredFeatures, "code_id", codeID) + logger.Debug("storing new contract", "features", report.RequiredFeatures, "code_id", codeID) codeInfo := types.NewCodeInfo(checksum, creator, *instantiateAccess) k.storeCodeInfo(ctx, codeID, codeInfo) @@ -1188,15 +1187,6 @@ func (k Keeper) gasMeter(ctx sdk.Context) MultipliedGasMeter { return NewMultipliedGasMeter(ctx.GasMeter(), k.gasRegister) } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return moduleLogger(ctx) -} - -func moduleLogger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) -} - // Querier creates a new grpc querier instance func Querier(k *Keeper) *grpcQuerier { //nolint:revive return NewGrpcQuerier(k.cdc, k.storeKey, k, k.queryGasLimit, k.paramsKeeper) diff --git a/sei-wasmd/x/wasm/keeper/msg_dispatcher.go b/sei-wasmd/x/wasm/keeper/msg_dispatcher.go index f4f76f84d0..6142065776 100644 --- a/sei-wasmd/x/wasm/keeper/msg_dispatcher.go +++ b/sei-wasmd/x/wasm/keeper/msg_dispatcher.go @@ -57,7 +57,7 @@ func (d MessageDispatcher) dispatchMsgWithGasLimit(ctx sdk.Context, contractAddr // if it's not an OutOfGas error, raise it again if _, ok := r.(sdk.ErrorOutOfGas); !ok { // log it to get the original stack trace somewhere (as panic(r) keeps message but stacktrace to here - moduleLogger(ctx).Info("SubMsg rethrowing panic: %#v", r) + logger.Info("SubMsg rethrowing panic", "err", r) panic(r) } ctx.GasMeter().ConsumeGas(gasLimit, "Sub-Message OutOfGas panic") @@ -134,7 +134,7 @@ func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk } } else { // Issue #759 - we don't return error string for worries of non-determinism - moduleLogger(ctx).Info("Redacting submessage error", "cause", err) + logger.Info("Redacting submessage error", "cause", err) result = wasmvmtypes.SubMsgResult{ Err: redactError(err).Error(), } diff --git a/sei-wasmd/x/wasm/keeper/msg_dispatcher_test.go b/sei-wasmd/x/wasm/keeper/msg_dispatcher_test.go index bcfd77f1a1..abcf8b1a8c 100644 --- a/sei-wasmd/x/wasm/keeper/msg_dispatcher_test.go +++ b/sei-wasmd/x/wasm/keeper/msg_dispatcher_test.go @@ -5,8 +5,6 @@ import ( "fmt" "testing" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" wasmvmtypes "github.com/sei-protocol/sei-chain/sei-wasmvm/types" @@ -351,7 +349,7 @@ func TestDispatchSubmessages(t *testing.T) { em := sdk.NewEventManager() ctx := sdk.Context{}.WithMultiStore(&mockStore). WithGasMeter(sdk.NewGasMeter(100, 1, 1)). - WithEventManager(em).WithLogger(log.TestingLogger()) + WithEventManager(em) d := NewMessageDispatcher(spec.msgHandler, spec.replyer) gotData, gotErr := d.DispatchSubmessages(ctx, RandomAccountAddress(t), "any_port", spec.msgs, wasmvmtypes.MessageInfo{}, types.CodeInfo{}) if spec.expErr { diff --git a/sei-wasmd/x/wasm/keeper/querier.go b/sei-wasmd/x/wasm/keeper/querier.go index 1ded50d323..ca3f3e19bd 100644 --- a/sei-wasmd/x/wasm/keeper/querier.go +++ b/sei-wasmd/x/wasm/keeper/querier.go @@ -191,7 +191,7 @@ func (q grpcQuerier) SmartContractState(c context.Context, req *types.QuerySmart err = sdkerrors.ErrPanic } rsp = nil - moduleLogger(ctx). + logger. Debug("smart query contract", "error", "recovering panic", "contract-address", req.Address, diff --git a/sei-wasmd/x/wasm/keeper/querier_test.go b/sei-wasmd/x/wasm/keeper/querier_test.go index 96d5fc81b1..c2cc0a9f04 100644 --- a/sei-wasmd/x/wasm/keeper/querier_test.go +++ b/sei-wasmd/x/wasm/keeper/querier_test.go @@ -16,7 +16,6 @@ import ( sdkErrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" "github.com/sei-protocol/sei-chain/sei-cosmos/types/query" govtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/gov/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" wasmvm "github.com/sei-protocol/sei-chain/sei-wasmvm" wasmvmtypes "github.com/sei-protocol/sei-chain/sei-wasmvm/types" "github.com/stretchr/testify/assert" @@ -164,7 +163,7 @@ func TestQuerySmartContractPanics(t *testing.T) { CodeID: 1, Created: types.NewAbsoluteTxPosition(ctx), }) - ctx = ctx.WithGasMeter(sdk.NewGasMeterWithMultiplier(ctx, DefaultInstanceCost)).WithLogger(log.TestingLogger()) + ctx = ctx.WithGasMeter(sdk.NewGasMeterWithMultiplier(ctx, DefaultInstanceCost)) specs := map[string]struct { doInContract func() @@ -184,7 +183,7 @@ func TestQuerySmartContractPanics(t *testing.T) { }, } for msg, spec := range specs { - ctx = ctx.WithGasMeter(sdk.NewGasMeterWithMultiplier(ctx, DefaultInstanceCost)).WithLogger(log.TestingLogger()) + ctx = ctx.WithGasMeter(sdk.NewGasMeterWithMultiplier(ctx, DefaultInstanceCost)) t.Run(msg, func(t *testing.T) { keepers.WasmKeeper.wasmVM = &wasmtesting.MockWasmer{QueryFn: func(checksum wasmvm.Checksum, env wasmvmtypes.Env, queryMsg []byte, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) ([]byte, uint64, error) { spec.doInContract() diff --git a/sei-wasmd/x/wasm/keeper/snapshotter.go b/sei-wasmd/x/wasm/keeper/snapshotter.go index 7d4a1bc5ea..ce09c8de8e 100644 --- a/sei-wasmd/x/wasm/keeper/snapshotter.go +++ b/sei-wasmd/x/wasm/keeper/snapshotter.go @@ -11,14 +11,18 @@ import ( snapshot "github.com/sei-protocol/sei-chain/sei-cosmos/snapshots/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm/ioutils" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm/types" ) -var _ snapshot.ExtensionSnapshotter = &WasmSnapshotter{} +var ( + logger = seilog.NewLogger("wasmd", "x", "wasm", "keeper") + + _ snapshot.ExtensionSnapshotter = &WasmSnapshotter{} +) // SnapshotFormat format 1 is just gzipped wasm byte code for each item payload. No protobuf envelope, no metadata. const SnapshotFormat = 1 @@ -58,7 +62,7 @@ func (ws *WasmSnapshotter) Snapshot(height uint64, protoWriter protoio.Writer) e } defer cacheMS.Close() - ctx := sdk.NewContext(cacheMS, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cacheMS, tmproto.Header{}, false) seenBefore := make(map[string]bool) var rerr error @@ -116,7 +120,7 @@ func restoreV1(ctx sdk.Context, k *Keeper, compressedCode []byte, num int) error if err != nil { return sdkerrors.Wrap(types.ErrCreateFailed, err.Error()) } - ctx.Logger().Info(fmt.Sprintf("Restored %d WASM code with checksum %X", num, checkSum)) + logger.Info("Restored WASM code with checksum", "code", num, "checksum", checkSum) return nil } @@ -126,7 +130,7 @@ func finalizeV1(ctx sdk.Context, k *Keeper) error { _, err := k.GetByteCode(ctx, id) if err != nil { e := fmt.Sprintf("Could not find byte code for ID %d hash %X: %s", id, info.CodeHash, err) - ctx.Logger().Error(e) + logger.Error(e) errCheckingExistence = errors.New(e) } @@ -148,7 +152,7 @@ func (ws *WasmSnapshotter) processAllItems( return snapshot.SnapshotItem{}, sdkerrors.Wrapf(sdkerrors.ErrInvalidHeight, "height %d exceeds max int64", height) } // #nosec G115 -- height is bounds checked above - ctx := sdk.NewContext(ws.cms, tmproto.Header{Height: int64(height)}, false, log.NewNopLogger()) + ctx := sdk.NewContext(ws.cms, tmproto.Header{Height: int64(height)}, false) // keep the last item here... if we break, it will either be empty (if we hit io.EOF) // or contain the last item (if we hit payload == nil) diff --git a/sei-wasmd/x/wasm/keeper/test_common.go b/sei-wasmd/x/wasm/keeper/test_common.go index f11f5dc228..110388ef96 100644 --- a/sei-wasmd/x/wasm/keeper/test_common.go +++ b/sei-wasmd/x/wasm/keeper/test_common.go @@ -57,7 +57,6 @@ import ( ibckeeper "github.com/sei-protocol/sei-chain/sei-ibc-go/modules/core/keeper" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto" "github.com/sei-protocol/sei-chain/sei-tendermint/crypto/ed25519" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-tendermint/libs/rand" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/x/mint" @@ -230,7 +229,7 @@ func createTestInput( ctx := sdk.NewContext(ms, tmproto.Header{ Height: 1234567, Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), - }, isCheckTx, log.NewNopLogger()) + }, isCheckTx) ctx = types.WithTXCounter(ctx, 0) encodingConfig := MakeEncodingConfig(t) diff --git a/testutil/keeper/epoch.go b/testutil/keeper/epoch.go index e3ae8c3f18..ae5c1db588 100644 --- a/testutil/keeper/epoch.go +++ b/testutil/keeper/epoch.go @@ -10,7 +10,6 @@ import ( storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" typesparams "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/x/epoch/keeper" "github.com/sei-protocol/sei-chain/x/epoch/types" @@ -48,7 +47,7 @@ func EpochKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { paramsSubspace, ) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false) // Initialize params k.SetParams(ctx, types.DefaultParams()) diff --git a/testutil/network/network.go b/testutil/network/network.go index d382318f98..b9c30bae92 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -69,7 +69,7 @@ func DefaultConfig() network.Config { AccountRetriever: authtypes.AccountRetriever{}, AppConstructor: func(val network.Validator) servertypes.Application { return app.New( - val.Ctx.Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, false, + tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, false, nil, encoding, wasm.EnableAllProposals, diff --git a/tools/hash_verification/cmd/cmd.go b/tools/hash_verification/cmd/cmd.go index a450734485..a3aca7d05a 100644 --- a/tools/hash_verification/cmd/cmd.go +++ b/tools/hash_verification/cmd/cmd.go @@ -7,7 +7,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-db/config" sstypes "github.com/sei-protocol/sei-chain/sei-db/state_db/ss" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/tools/hash_verification/iavl" "github.com/sei-protocol/sei-chain/tools/hash_verification/pebbledb" dbm "github.com/tendermint/tm-db" @@ -54,7 +53,7 @@ func generatePebbleHash(cmd *cobra.Command, _ []string) { ssConfig := config.DefaultStateStoreConfig() ssConfig.Enable = true ssConfig.KeepRecent = 0 - stateStore, err := sstypes.NewStateStore(log.NewNopLogger(), homeDir, ssConfig) + stateStore, err := sstypes.NewStateStore(homeDir, ssConfig) if err != nil { panic(err) diff --git a/tools/migration/sc/migrator.go b/tools/migration/sc/migrator.go index c8e8540ecc..2597d88fae 100644 --- a/tools/migration/sc/migrator.go +++ b/tools/migration/sc/migrator.go @@ -3,7 +3,6 @@ package sc import ( "fmt" "io" - "os" "path/filepath" "github.com/sei-protocol/sei-chain/app/params" @@ -20,25 +19,25 @@ import ( stakingkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/staking/keeper" upgradekeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/upgrade/keeper" "github.com/sei-protocol/sei-chain/sei-db/config" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm" "github.com/sei-protocol/sei-chain/sei-wasmd/x/wasm/keeper" "github.com/sei-protocol/sei-chain/tools/utils" + "github.com/sei-protocol/seilog" dbm "github.com/tendermint/tm-db" ) +var logger = seilog.NewLogger("tools", "migration", "sc") + type Migrator struct { homeDir string - logger log.Logger storeV1 store.CommitMultiStore storeV2 store.CommitMultiStore } func NewMigrator(homeDir string, db dbm.DB) *Migrator { - logger := log.NewTMLogger(os.Stdout) // Creating CMS for store V1 - cmsV1 := rootmulti.NewStore(db, logger) + cmsV1 := rootmulti.NewStore(db) for _, key := range utils.ModuleKeys { cmsV1.MountStoreWithDB(key, sdk.StoreTypeIAVL, nil) } @@ -53,7 +52,7 @@ func NewMigrator(homeDir string, db dbm.DB) *Migrator { ssConfig := config.DefaultStateStoreConfig() ssConfig.Enable = true ssConfig.KeepRecent = 0 - cmsV2 := rootmulti2.NewStore(homeDir, logger, scConfig, ssConfig, []string{}) + cmsV2 := rootmulti2.NewStore(homeDir, scConfig, ssConfig, []string{}) for _, key := range utils.ModuleKeys { cmsV2.MountStoreWithDB(key, sdk.StoreTypeIAVL, db) } @@ -63,7 +62,6 @@ func NewMigrator(homeDir string, db dbm.DB) *Migrator { } return &Migrator{ homeDir: homeDir, - logger: logger, storeV1: cmsV1, storeV2: cmsV2, } @@ -83,6 +81,7 @@ func (m *Migrator) Migrate(version int64) error { if err != nil { return err } + defer func() { _ = streamReader.Close() }() fmt.Printf("Start restoring SC store for height: %d\n", version) next, _ := m.storeV2.Restore(height, types.CurrentFormat, streamReader) for next.Item != nil { @@ -107,7 +106,7 @@ func (m *Migrator) createSnapshot(height uint64, chunks chan<- io.ReadCloser) er defer func() { _ = streamWriter.Close() }() fmt.Printf("Start creating snapshot for height: %d\n", height) if err := m.storeV1.Snapshot(height, streamWriter); err != nil { - m.logger.Error("Snapshot creation failed", "err", err) + logger.Error("Snapshot creation failed", "err", err) streamWriter.CloseWithError(err) } diff --git a/utils/logging/time.go b/utils/logging/time.go index ba901bb0b4..c8fd5caa47 100644 --- a/utils/logging/time.go +++ b/utils/logging/time.go @@ -1,14 +1,15 @@ package logging import ( - "fmt" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/sei-protocol/sei-chain/utils/metrics" + "github.com/sei-protocol/seilog" ) -func LogIfNotDoneAfter[R any](logger log.Logger, task func() (R, error), after time.Duration, label string) (R, error) { +var logger = seilog.NewLogger("utils", "logging") + +func LogIfNotDoneAfter[R any](task func() (R, error), after time.Duration, label string) (R, error) { resultChan := make(chan R, 1) errChan := make(chan error, 1) panicChan := make(chan any, 1) @@ -37,7 +38,7 @@ func LogIfNotDoneAfter[R any](logger log.Logger, task func() (R, error), after t panic(err) case <-time.After(after): metrics.IncrLogIfNotDoneAfter(label) - logger.Error(fmt.Sprintf("%s still not finished after %s", label, after)) + logger.Error("operation still not finished", "label", label, "after", after) } } } diff --git a/utils/logging/time_test.go b/utils/logging/time_test.go index d600ec3993..eefb692b03 100644 --- a/utils/logging/time_test.go +++ b/utils/logging/time_test.go @@ -2,77 +2,55 @@ package logging import ( "errors" - "fmt" "testing" "time" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" "github.com/stretchr/testify/require" ) -type mockLogger struct { - lastError string -} - -func (l *mockLogger) Debug(msg string, keyVals ...interface{}) {} -func (l *mockLogger) Info(msg string, keyVals ...interface{}) {} -func (l *mockLogger) Error(msg string, keyVals ...interface{}) { - l.lastError = msg -} -func (l *mockLogger) With(keyVals ...interface{}) log.Logger { return l } - func TestFastReturn(t *testing.T) { - logger := mockLogger{} task := func() (bool, error) { return true, nil } after := 3 * time.Second - res, err := LogIfNotDoneAfter(&logger, task, after, "test") + res, err := LogIfNotDoneAfter(task, after, "test") require.Nil(t, err) require.True(t, res) - require.Empty(t, logger.lastError) } func TestFastError(t *testing.T) { - logger := mockLogger{} task := func() (bool, error) { return true, errors.New("test") } after := 3 * time.Second - res, err := LogIfNotDoneAfter(&logger, task, after, "test") + res, err := LogIfNotDoneAfter(task, after, "test") require.NotNil(t, err) require.Empty(t, res) - require.Empty(t, logger.lastError) } func TestSlowReturn(t *testing.T) { - logger := mockLogger{} task := func() (bool, error) { time.Sleep(2 * time.Second) return true, nil } after := 1 * time.Second - res, err := LogIfNotDoneAfter(&logger, task, after, "test") + res, err := LogIfNotDoneAfter(task, after, "test") require.Nil(t, err) require.True(t, res) - require.Equal(t, fmt.Sprintf("test still not finished after %s", after), logger.lastError) } func TestSlowError(t *testing.T) { - logger := mockLogger{} task := func() (bool, error) { time.Sleep(2 * time.Second) return true, errors.New("test") } after := 1 * time.Second - res, err := LogIfNotDoneAfter(&logger, task, after, "test") + res, err := LogIfNotDoneAfter(task, after, "test") require.NotNil(t, err) require.Empty(t, res) - require.Equal(t, fmt.Sprintf("test still not finished after %s", after), logger.lastError) } func TestPanic(t *testing.T) { - logger := mockLogger{} task := func() (bool, error) { panic("test") } @@ -82,8 +60,8 @@ func TestPanic(t *testing.T) { if err := recover(); err != nil { } }() - LogIfNotDoneAfter(&logger, task, after, "test") + LogIfNotDoneAfter(task, after, "test") } - require.Panics(t, func() { LogIfNotDoneAfter(&logger, task, after, "test") }) + require.Panics(t, func() { LogIfNotDoneAfter(task, after, "test") }) require.NotPanics(t, outer) } diff --git a/utils/panic.go b/utils/panic.go index 4669ed4f75..fcb173f2f8 100644 --- a/utils/panic.go +++ b/utils/panic.go @@ -8,8 +8,11 @@ import ( "github.com/armon/go-metrics" "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("utils") + const HardFailPrefix = "hard fail error occurred" func PanicHandler(recoverCallback func(any)) func() { @@ -28,12 +31,12 @@ func PanicHandler(recoverCallback func(any)) func() { func LogPanicCallback(ctx sdk.Context, r any) func(any) { return func(a any) { stackTrace := string(debug.Stack()) - ctx.Logger().Error("recovered panic", "recover_err", r, "recover_type", fmt.Sprintf("%T", r), "stack_trace", stackTrace) + logger.Error("recovered panic", "recover_err", r, "recover_type", fmt.Sprintf("%T", r), "stack_trace", stackTrace) } } func MetricsPanicCallback(err any, ctx sdk.Context, key string) { - ctx.Logger().Error(fmt.Sprintf("panic %s occurred during order matching for: %s", err, key)) + logger.Error("panic occurred during order matching for key", "key", key, "err", err) defer func() { if e := recover(); e != nil { return diff --git a/x/epoch/keeper/abci.go b/x/epoch/keeper/abci.go index 5efafcda91..7ed12bd74f 100644 --- a/x/epoch/keeper/abci.go +++ b/x/epoch/keeper/abci.go @@ -8,12 +8,15 @@ import ( sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/utils/metrics" "github.com/sei-protocol/sei-chain/x/epoch/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "epoch", "keeper") + func (k Keeper) BeginBlock(ctx sdk.Context) { defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) lastEpoch := k.GetEpoch(ctx) - ctx.Logger().Info(fmt.Sprintf("Current block time %s, last %s; duration %d", ctx.BlockTime().String(), lastEpoch.CurrentEpochStartTime.String(), lastEpoch.EpochDuration)) + logger.Info(" Block time", "current", ctx.BlockTime(), "last", lastEpoch.CurrentEpochStartTime, "epoch-duration", lastEpoch.EpochDuration) if ctx.BlockTime().Sub(lastEpoch.CurrentEpochStartTime) > lastEpoch.EpochDuration { k.AfterEpochEnd(ctx, lastEpoch) diff --git a/x/epoch/types/hooks_test.go b/x/epoch/types/hooks_test.go index bf51a17f7b..9b9c028032 100644 --- a/x/epoch/types/hooks_test.go +++ b/x/epoch/types/hooks_test.go @@ -59,7 +59,7 @@ func TestMultiHooks(t *testing.T) { db := tmdb.NewMemDB() ms := store.NewCommitMultiStore(db) - ctx := sdk.NewContext(ms, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(ms, tmproto.Header{}, false) epoch := types.Epoch{} multiHooks.AfterEpochEnd(ctx, epoch) @@ -83,7 +83,7 @@ func TestMultiHooks_Panic(t *testing.T) { db := tmdb.NewMemDB() ms := store.NewCommitMultiStore(db) - ctx := sdk.NewContext(ms, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(ms, tmproto.Header{}, false) epoch := types.Epoch{} multiHooks.AfterEpochEnd(ctx, epoch) diff --git a/x/evm/ante/preprocess.go b/x/evm/ante/preprocess.go index 29b73ec983..4ca9e8a3e6 100644 --- a/x/evm/ante/preprocess.go +++ b/x/evm/ante/preprocess.go @@ -2,7 +2,6 @@ package ante import ( "errors" - "fmt" "math/big" "github.com/sei-protocol/sei-chain/utils/helpers" @@ -271,21 +270,21 @@ func (p *EVMAddressDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bo } acc := p.accountKeeper.GetAccount(ctx, signer) if acc.GetPubKey() == nil { - ctx.Logger().Error(fmt.Sprintf("missing pubkey for %s", signer.String())) + logger.Error("missing pubkey for signer", "signer", signer) ctx.EventManager().EmitEvent(sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue } pk, err := btcec.ParsePubKey(acc.GetPubKey().Bytes()) if err != nil { - ctx.Logger().Debug(fmt.Sprintf("failed to parse pubkey for %s, likely due to the fact that it isn't on secp256k1 curve", acc.GetPubKey()), "err", err) + logger.Debug("failed to parse pubkey for account, likely due to the fact that it isn't on secp256k1 curve", "account", acc.GetPubKey(), "err", err) ctx.EventManager().EmitEvent(sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue } evmAddr, err := helpers.PubkeyToEVMAddress(pk.SerializeUncompressed()) if err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to get EVM address from pubkey due to %s", err)) + logger.Error("failed to get EVM address from pubkey", "err", err) ctx.EventManager().EmitEvent(sdk.NewEvent(evmtypes.EventTypeSigner, sdk.NewAttribute(evmtypes.AttributeKeySeiAddress, signer.String()))) continue @@ -296,7 +295,7 @@ func (p *EVMAddressDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bo p.evmKeeper.SetAddressMapping(ctx, signer, evmAddr) associationHelper := helpers.NewAssociationHelper(p.evmKeeper, p.evmKeeper.BankKeeper(), p.accountKeeper) if err := associationHelper.MigrateBalance(ctx, evmAddr, signer, false); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to migrate EVM address balance (%s) %s", evmAddr.Hex(), err)) + logger.Error("failed to migrate EVM address balance", "address", evmAddr, "err", err) return ctx, err } if evmtypes.IsTxMsgAssociate(tx) { diff --git a/x/evm/ante/sig.go b/x/evm/ante/sig.go index a8f76c7e3c..202a4739de 100644 --- a/x/evm/ante/sig.go +++ b/x/evm/ante/sig.go @@ -8,12 +8,15 @@ import ( sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" abci "github.com/sei-protocol/sei-chain/sei-tendermint/abci/types" tmtypes "github.com/sei-protocol/sei-chain/sei-tendermint/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/utils/metrics" evmkeeper "github.com/sei-protocol/sei-chain/x/evm/keeper" "github.com/sei-protocol/sei-chain/x/evm/types" ) +var logger = seilog.NewLogger("x", "evm", "ante") + type EVMSigVerifyDecorator struct { evmKeeper *evmkeeper.Keeper latestCtxGetter func() sdk.Context // should be read-only @@ -53,13 +56,13 @@ func (svd *EVMSigVerifyDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulat case ethtypes.LegacyTxType: // legacy either can have a zero or correct chain ID if txChainID.Cmp(big.NewInt(0)) != 0 && txChainID.Cmp(chainID) != 0 { - ctx.Logger().Debug("chainID mismatch", "txChainID", ethTx.ChainId(), "chainID", chainID) + logger.Debug("chainID mismatch", "txChainID", ethTx.ChainId(), "chainID", chainID) return ctx, sdkerrors.ErrInvalidChainID } default: // after legacy, all transactions must have the correct chain ID if txChainID.Cmp(chainID) != 0 { - ctx.Logger().Debug("chainID mismatch", "txChainID", ethTx.ChainId(), "chainID", chainID) + logger.Debug("chainID mismatch", "txChainID", ethTx.ChainId(), "chainID", chainID) return ctx, sdkerrors.ErrInvalidChainID } } diff --git a/x/evm/gov.go b/x/evm/gov.go index b053569b0f..80b203e524 100644 --- a/x/evm/gov.go +++ b/x/evm/gov.go @@ -10,8 +10,11 @@ import ( "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/x/evm/keeper" "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "evm") + func HandleAddERCNativePointerProposalV2(ctx sdk.Context, k *keeper.Keeper, p *types.AddERCNativePointerProposalV2) error { decimals := uint8(math.MaxUint8) if p.Decimals <= uint32(decimals) { @@ -30,7 +33,7 @@ func HandleAddERCNativePointerProposalV2(ctx sdk.Context, k *keeper.Keeper, p *t func logNativeV2Error(ctx sdk.Context, p *types.AddERCNativePointerProposalV2, step string, err string) { id := fmt.Sprintf("Title: %s, Description: %s, Token: %s", p.Title, p.Description, p.Token) - ctx.Logger().Error(fmt.Sprintf("proposal (%s) encountered error during (%s) due to (%s)", id, step, err)) + logger.Error("Proposal encountered error during step", "id", id, "step", step, "err", err) } func HandleAddERCNativePointerProposal(ctx sdk.Context, k *keeper.Keeper, p *types.AddERCNativePointerProposal) error { diff --git a/x/evm/keeper/abci.go b/x/evm/keeper/abci.go index 9db9285761..d1880e8e7b 100644 --- a/x/evm/keeper/abci.go +++ b/x/evm/keeper/abci.go @@ -1,7 +1,6 @@ package keeper import ( - "fmt" "math" "time" @@ -67,14 +66,14 @@ func (k *Keeper) EndBlock(ctx sdk.Context, height int64, blockGasUsed int64) { // Migrate legacy EVM receipts to receipt.db in small batches every N blocks if ctx.BlockHeight()%LegacyReceiptMigrationInterval == 0 { if migrated, err := k.MigrateLegacyReceiptsBatch(ctx, LegacyReceiptMigrationBatchSize); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed migrating legacy receipts: %s", err)) + logger.Error("failed migrating legacy receipts", "err", err) } else if migrated > 0 { - ctx.Logger().Info(fmt.Sprintf("migrated %d legacy EVM receipts to receipt.db", migrated)) + logger.Info("migrated legacy EVM receipts to receipt.db", "count", migrated) } } if scanned, deleted := k.PruneZeroStorageSlots(ctx, ZeroStorageCleanupBatchSize); deleted > 0 { - ctx.Logger().Info(fmt.Sprintf("pruned %d zero-value contract storage slots while scanning %d keys", deleted, scanned)) + logger.Info("pruned zero-value contract storage slots while scanning keys", "pruned-count", deleted, "key-count", scanned) } newBaseFee := k.AdjustDynamicBaseFeePerGas(ctx, uint64(blockGasUsed)) // nolint:gosec @@ -120,7 +119,7 @@ func (k *Keeper) EndBlock(ctx sdk.Context, height int64, blockGasUsed int64) { weiBalance := k.BankKeeper().GetWeiBalance(ctx, coinbaseAddress) if !balance.IsZero() || !weiBalance.IsZero() { if err := k.BankKeeper().SendCoinsAndWei(ctx, coinbaseAddress, coinbase, balance, weiBalance); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to send usei surplus from %s to coinbase account due to %s", coinbaseAddress.String(), err)) + logger.Error("failed to send usei surplus to coinbase account", "from", coinbaseAddress, "err", err) } } surplus = surplus.Add(deferredInfo.Surplus) @@ -129,12 +128,12 @@ func (k *Keeper) EndBlock(ctx sdk.Context, height int64, blockGasUsed int64) { surplusUsei, surplusWei := state.SplitUseiWeiAmount(surplus.BigInt()) if surplusUsei.GT(sdk.ZeroInt()) { if err := k.BankKeeper().AddCoins(ctx, k.AccountKeeper().GetModuleAddress(types.ModuleName), sdk.NewCoins(sdk.NewCoin(k.GetBaseDenom(ctx), surplusUsei)), true); err != nil { - ctx.Logger().Error("failed to send usei surplus of %s to EVM module account", surplusUsei) + logger.Error("failed to send usei surplus to EVM module account", "surplus", surplusUsei) } } if surplusWei.GT(sdk.ZeroInt()) { if err := k.BankKeeper().AddWei(ctx, k.AccountKeeper().GetModuleAddress(types.ModuleName), surplusWei); err != nil { - ctx.Logger().Error("failed to send wei surplus of %s to EVM module account", surplusWei) + logger.Error("failed to send wei surplus to EVM module account", "surplus", surplusWei) } } } diff --git a/x/evm/keeper/deferred.go b/x/evm/keeper/deferred.go index 15a9ef7129..832d293307 100644 --- a/x/evm/keeper/deferred.go +++ b/x/evm/keeper/deferred.go @@ -2,7 +2,6 @@ package keeper import ( "encoding/binary" - "fmt" "github.com/ethereum/go-ethereum/common" ethtypes "github.com/ethereum/go-ethereum/core/types" @@ -29,7 +28,7 @@ func (k *Keeper) GetAllEVMTxDeferredInfo(ctx sdk.Context) (res []*types.Deferred panic("etx is nil for EVM DeferredInfo msg.AsTransaction(). This should never happen.") } if txRes.Code == 0 { - ctx.Logger().Error(fmt.Sprintf("transaction %s has code 0 but no deferred info", etx.Hash().Hex())) + logger.Error("transaction has code 0 but no deferred info", "tx", etx.Hash()) } res = append(res, &types.DeferredInfo{ TxIndex: uint32(txIdx), //nolint:gosec @@ -88,7 +87,7 @@ func (k *Keeper) GetEVMTxDeferredInfo(ctx sdk.Context) (*types.DeferredInfo, boo return nil, false } if err := val.Unmarshal(bz); err != nil { - ctx.Logger().Error(fmt.Sprintf("failed to unmarshal EVM deferred info: %s", err)) + logger.Error("failed to unmarshal EVM deferred info", "err", err) return nil, false } return val, true diff --git a/x/evm/keeper/genesis.go b/x/evm/keeper/genesis.go index e619f501e8..618a471fee 100644 --- a/x/evm/keeper/genesis.go +++ b/x/evm/keeper/genesis.go @@ -39,7 +39,7 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { erc20CodeID, err := k.wasmKeeper.Create(ctx, k.accountKeeper.GetModuleAddress(types.ModuleName), erc20.GetBin(), nil) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error creating CWERC20 pointer code due to %s", err)) + logger.Error("error creating CWERC20 pointer code", "err", err) } else { prefix.NewStore(k.PrefixStore(ctx, types.PointerCWCodePrefix), types.PointerCW20ERC20Prefix).Set( artifactsutils.GetVersionBz(erc20.CurrentVersion), @@ -49,7 +49,7 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { erc721CodeID, err := k.wasmKeeper.Create(ctx, k.accountKeeper.GetModuleAddress(types.ModuleName), erc721.GetBin(), nil) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error creating CWERC721 pointer code due to %s", err)) + logger.Error("error creating CWERC721 pointer code", "err", err) } else { prefix.NewStore(k.PrefixStore(ctx, types.PointerCWCodePrefix), types.PointerCW721ERC721Prefix).Set( artifactsutils.GetVersionBz(erc721.CurrentVersion), @@ -59,7 +59,7 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { erc1155CodeID, err := k.wasmKeeper.Create(ctx, k.accountKeeper.GetModuleAddress(types.ModuleName), erc1155.GetBin(), nil) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error creating CWERC1155 pointer code due to %s", err)) + logger.Error("error creating CWERC1155 pointer code", "err", err) } else { prefix.NewStore(k.PrefixStore(ctx, types.PointerCWCodePrefix), types.PointerCW1155ERC1155Prefix).Set( artifactsutils.GetVersionBz(erc1155.CurrentVersion), diff --git a/x/evm/keeper/keeper.go b/x/evm/keeper/keeper.go index dddc16ce5b..cf9f741b91 100644 --- a/x/evm/keeper/keeper.go +++ b/x/evm/keeper/keeper.go @@ -308,7 +308,7 @@ func (k *Keeper) GetVMBlockContext(ctx sdk.Context, gp core.GasPool) (*vm.BlockC func (k *Keeper) GetHashFn(ctx sdk.Context) vm.GetHashFunc { return func(height uint64) common.Hash { if height > math.MaxInt64 { - ctx.Logger().Error("Sei block height is bounded by int64 range") + logger.Error("Sei block height is bounded by int64 range") return common.Hash{} } h := int64(height) diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index 3f32c617b2..d7f55a62d0 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -20,6 +20,7 @@ import ( occtypes "github.com/sei-protocol/sei-chain/sei-cosmos/types/occ" bankkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/keeper" banktypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/types" + "github.com/sei-protocol/seilog" "github.com/sei-protocol/sei-chain/precompiles/wasmd" "github.com/sei-protocol/sei-chain/utils" @@ -31,6 +32,8 @@ import ( "github.com/sei-protocol/sei-chain/x/evm/types" ) +var logger = seilog.NewLogger("x", "evm", "keeper") + type msgServer struct { *Keeper } @@ -78,13 +81,13 @@ func (server msgServer) EVMTransaction(goCtx context.Context, msg *types.MsgEVMT if pe := recover(); pe != nil { if !strings.Contains(fmt.Sprintf("%s", pe), occtypes.ErrReadEstimate.Error()) { debug.PrintStack() - ctx.Logger().Error(fmt.Sprintf("EVM PANIC: %s", pe)) + logger.Error("EVM PANIC", "err", pe) seimetrics.SafeTelemetryIncrCounter(1, types.ModuleName, "panics") } panic(pe) } if err != nil { - ctx.Logger().Error(fmt.Sprintf("Got EVM state transition error (not VM error): %s", err)) + logger.Error("Got EVM state transition error (not VM error)", "err", err) seimetrics.SafeTelemetryIncrCounterWithLabels( []string{types.ModuleName, "errors", "state_transition"}, @@ -99,7 +102,7 @@ func (server msgServer) EVMTransaction(goCtx context.Context, msg *types.MsgEVMT surplus, ferr := stateDB.Finalize() if ferr != nil { err = ferr - ctx.Logger().Error(fmt.Sprintf("failed to finalize EVM stateDB: %s", err)) + logger.Error("failed to finalize EVM stateDB", "err", err) seimetrics.SafeTelemetryIncrCounterWithLabels( []string{types.ModuleName, "errors", "stateDB_finalize"}, @@ -133,7 +136,7 @@ func (server msgServer) EVMTransaction(goCtx context.Context, msg *types.MsgEVMT receipt, rerr := server.WriteReceipt(ctx, stateDB, emsg, uint32(tx.Type()), tx.Hash(), serverRes.GasUsed, serverRes.VmError) if rerr != nil { err = rerr - ctx.Logger().Error(fmt.Sprintf("failed to write EVM receipt: %s", err)) + logger.Error("failed to write EVM receipt", "err", err) seimetrics.SafeTelemetryIncrCounterWithLabels( []string{types.ModuleName, "errors", "write_receipt"}, @@ -356,7 +359,7 @@ func (server msgServer) AssociateContractAddress(goCtx context.Context, msg *typ existingEvmAddr, ok := server.GetEVMAddress(ctx, addr) if ok { if existingEvmAddr.Cmp(evmAddr) != 0 { - ctx.Logger().Error(fmt.Sprintf("unexpected associated EVM address %s exists for contract %s: expecting %s", existingEvmAddr.Hex(), addr.String(), evmAddr.Hex())) + logger.Error("unexpected associated EVM address exists for contract", "existing", existingEvmAddr, "contract", addr, "expected", evmAddr) } return nil, errors.New("contract already has an associated address") } diff --git a/x/evm/keeper/receipt.go b/x/evm/keeper/receipt.go index 3db00dc6d9..9fc599e0a6 100644 --- a/x/evm/keeper/receipt.go +++ b/x/evm/keeper/receipt.go @@ -278,7 +278,7 @@ func (k *Keeper) WriteReceipt( if perr := stateDB.GetPrecompileError(); perr != nil { if receipt.Status > 0 { - ctx.Logger().Error(fmt.Sprintf("Transaction %s succeeded in execution but has precompile error %s", receipt.TxHashHex, perr.Error())) + logger.Error("Transaction succeeded in execution but has precompile error ", "tx", receipt.TxHashHex, "err", perr) } else { // append precompile error to VM error receipt.VmError = fmt.Sprintf("%s|%s", receipt.VmError, perr.Error()) diff --git a/x/evm/keeper/storage_cleanup.go b/x/evm/keeper/storage_cleanup.go index bc4f45e53f..acd709d0a9 100644 --- a/x/evm/keeper/storage_cleanup.go +++ b/x/evm/keeper/storage_cleanup.go @@ -90,7 +90,7 @@ func (k *Keeper) PruneZeroStorageSlots(ctx sdk.Context, limit int) (int, int) { if deleted > 0 { seimetrics.IncrEvmZeroStoragePrunedKeys(deletedMetric) seimetrics.IncrEvmZeroStoragePrunedBytes(bytesPruned) - ctx.Logger().Info("pruned zero storage slots", "processed", processed, "deleted", deleted, "bytes_saved", bytesPruned) + logger.Info("pruned zero storage slots", "processed", processed, "deleted", deleted, "bytes_saved", bytesPruned) } return processed, deleted } diff --git a/x/evm/keeper/view.go b/x/evm/keeper/view.go index 6028f4e555..4ddedefe50 100644 --- a/x/evm/keeper/view.go +++ b/x/evm/keeper/view.go @@ -1,8 +1,6 @@ package keeper import ( - "fmt" - "github.com/ethereum/go-ethereum/common" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/x/evm/artifacts" @@ -14,12 +12,12 @@ func (k *Keeper) QueryERCSingleOutput(ctx sdk.Context, typ string, addr common.A q, _ := artifacts.GetParsedABI(typ).Pack(query) r, err := k.StaticCallEVM(ctx, moduleAddr, &addr, q) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Error calling %s for %s due to %s, skipping", addr.Hex(), query, err)) + logger.Error("Error calling address for query, skipping", "address", addr, "query", query, "err", err) return nil, err } o, _ := artifacts.GetParsedABI(typ).Unpack(query, r) if len(o) != 1 { - ctx.Logger().Error(fmt.Sprintf("Getting %d outputs when %s for %s, skipping", len(o), addr.Hex(), query)) + logger.Error("Not getting exactly one outputs when querying address, skipping", "outputs", len(o), "address", addr, "query", query) return nil, err } return o[0], nil diff --git a/x/evm/migrations/fix_total_supply.go b/x/evm/migrations/fix_total_supply.go index 7da966ea00..f047063c7e 100644 --- a/x/evm/migrations/fix_total_supply.go +++ b/x/evm/migrations/fix_total_supply.go @@ -5,8 +5,11 @@ import ( bankkeeper "github.com/sei-protocol/sei-chain/sei-cosmos/x/bank/keeper" "github.com/sei-protocol/sei-chain/x/evm/keeper" "github.com/sei-protocol/sei-chain/x/evm/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "evm", "migrations") + // This migration is to fix total supply mismatch caused by mishandled // ante surplus func FixTotalSupply(ctx sdk.Context, k *keeper.Keeper) error { @@ -22,7 +25,7 @@ func FixTotalSupply(ctx sdk.Context, k *keeper.Keeper) error { }) weiInUsei, weiRemainder := bankkeeper.SplitUseiWeiAmount(totalWeiBalance) if !weiRemainder.IsZero() { - ctx.Logger().Error("wei total supply has been compromised as well; rounding up and adding to reserve") + logger.Error("wei total supply has been compromised as well; rounding up and adding to reserve") if err := k.BankKeeper().AddWei(ctx, k.AccountKeeper().GetModuleAddress(types.ModuleName), bankkeeper.OneUseiInWei.Sub(weiRemainder)); err != nil { return err } diff --git a/x/evm/migrations/migrate_all_pointers.go b/x/evm/migrations/migrate_all_pointers.go index 75df4373a6..dcb20c2793 100644 --- a/x/evm/migrations/migrate_all_pointers.go +++ b/x/evm/migrations/migrate_all_pointers.go @@ -2,7 +2,6 @@ package migrations import ( "encoding/json" - "fmt" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" @@ -26,17 +25,17 @@ func MigrateERCNativePointers(ctx sdk.Context, k *keeper.Keeper) error { addr := common.BytesToAddress(iter.Value()) oName, err := k.QueryERCSingleOutput(ctx, "native", addr, "name") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed name query: %s", token, err)) + logger.Error("Failed to upgrade pointer for token due to failed name query", "token", token, "err", err) continue } oSymbol, err := k.QueryERCSingleOutput(ctx, "native", addr, "symbol") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed symbol query: %s", token, err)) + logger.Error("Failed to upgrade pointer for token due to failed symbol query", "token", token, "err", err) continue } oDecimals, err := k.QueryERCSingleOutput(ctx, "native", addr, "decimals") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed decimal query: %s", token, err)) + logger.Error("Failed to upgrade pointer for token due to failed decimal query", "token", token, "err", err) continue } _ = k.RunWithOneOffEVMInstance(ctx, func(e *vm.EVM) error { @@ -47,7 +46,7 @@ func MigrateERCNativePointers(ctx sdk.Context, k *keeper.Keeper) error { }) return err }, func(s1, s2 string) { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s at step %s due to %s", token, s1, s2)) + logger.Error("Failed to upgrade pointer for token at step", "token", token, "from-step", s1, "to-step", s2) }) } return nil @@ -66,12 +65,12 @@ func MigrateERCCW20Pointers(ctx sdk.Context, k *keeper.Keeper) error { addr := common.BytesToAddress(iter.Value()) oName, err := k.QueryERCSingleOutput(ctx, "cw20", addr, "name") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed name query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed name query", "pointer", cwAddr, "err", err) continue } oSymbol, err := k.QueryERCSingleOutput(ctx, "cw20", addr, "symbol") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed symbol query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed symbol query", "pointer", cwAddr, "err", err) continue } _ = k.RunWithOneOffEVMInstance(ctx, func(e *vm.EVM) error { @@ -81,7 +80,7 @@ func MigrateERCCW20Pointers(ctx sdk.Context, k *keeper.Keeper) error { }) return err }, func(s1, s2 string) { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s at step %s due to %s", cwAddr, s1, s2)) + logger.Error("Failed to upgrade pointer at step", "pointer", cwAddr, "from-step", s1, "to-step", s2) }) } return nil @@ -100,12 +99,12 @@ func MigrateERCCW721Pointers(ctx sdk.Context, k *keeper.Keeper) error { addr := common.BytesToAddress(iter.Value()) oName, err := k.QueryERCSingleOutput(ctx, "cw721", addr, "name") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed name query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed name query", "pointer", cwAddr, "err", err) continue } oSymbol, err := k.QueryERCSingleOutput(ctx, "cw721", addr, "symbol") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed symbol query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed symbol query", "pointer", cwAddr, "err", err) continue } _ = k.RunWithOneOffEVMInstance(ctx, func(e *vm.EVM) error { @@ -115,7 +114,7 @@ func MigrateERCCW721Pointers(ctx sdk.Context, k *keeper.Keeper) error { }) return err }, func(s1, s2 string) { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s at step %s due to %s", cwAddr, s1, s2)) + logger.Error("Failed to upgrade pointer at step", "pointer", cwAddr, "from-step", s1, "to-step", s2) }) } return nil @@ -134,12 +133,12 @@ func MigrateERCCW1155Pointers(ctx sdk.Context, k *keeper.Keeper) error { addr := common.BytesToAddress(iter.Value()) oName, err := k.QueryERCSingleOutput(ctx, "cw1155", addr, "name") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed name query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed name query", "pointer", cwAddr, "err", err) continue } oSymbol, err := k.QueryERCSingleOutput(ctx, "cw1155", addr, "symbol") if err != nil { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s due to failed symbol query: %s", cwAddr, err)) + logger.Error("Failed to upgrade pointer due to failed symbol query", "pointer", cwAddr, "err", err) continue } _ = k.RunWithOneOffEVMInstance(ctx, func(e *vm.EVM) error { @@ -149,7 +148,7 @@ func MigrateERCCW1155Pointers(ctx sdk.Context, k *keeper.Keeper) error { }) return err }, func(s1, s2 string) { - ctx.Logger().Error(fmt.Sprintf("Failed to upgrade pointer for %s at step %s due to %s", cwAddr, s1, s2)) + logger.Error("Failed to upgrade pointer at step", "pointer", cwAddr, "from-step", s1, "to-step", s2) }) } return nil @@ -170,12 +169,12 @@ func MigrateCWERC20Pointers(ctx sdk.Context, k *keeper.Keeper) error { seen[evmAddr] = struct{}{} addr, err := sdk.AccAddressFromBech32(string(iter.Value())) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error parsing cw-erc20 pointer %s address %s", string(iter.Value()), err)) + logger.Error("error parsing cw-erc20 pointer address", "pointer", string(iter.Value()), "err", err) return err } _, err = k.WasmKeeper().Migrate(ctx, addr, moduleAcct, codeID, bz) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error migrating cw-erc20 pointer %s to code ID %d due to %s", addr.String(), codeID, err)) + logger.Error("error migrating cw-erc20 pointer to code ID", "pointer", addr, "code-id", codeID, "err", err) return err } } @@ -197,12 +196,12 @@ func MigrateCWERC721Pointers(ctx sdk.Context, k *keeper.Keeper) error { seen[evmAddr] = struct{}{} addr, err := sdk.AccAddressFromBech32(string(iter.Value())) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error parsing cw-erc721 pointer %s address %s", string(iter.Value()), err)) + logger.Error("error parsing cw-erc721 pointer address", "pointer", string(iter.Value()), "err", err) return err } _, err = k.WasmKeeper().Migrate(ctx, addr, moduleAcct, codeID, bz) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error migrating cw-erc721 pointer %s to code ID %d due to %s", addr.String(), codeID, err)) + logger.Error("error migrating cw-erc721 pointer to code ID", "pointer", addr, "code-id", codeID, "err", err) return err } } @@ -224,12 +223,12 @@ func MigrateCWERC1155Pointers(ctx sdk.Context, k *keeper.Keeper) error { seen[evmAddr] = struct{}{} addr, err := sdk.AccAddressFromBech32(string(iter.Value())) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error parsing cw-erc1155 pointer %s address %s", string(iter.Value()), err)) + logger.Error("error parsing cw-erc1155 pointer address", "pointer", string(iter.Value()), "err", err) return err } _, err = k.WasmKeeper().Migrate(ctx, addr, moduleAcct, codeID, bz) if err != nil { - ctx.Logger().Error(fmt.Sprintf("error migrating cw-erc1155 pointer %s to code ID %d due to %s", addr.String(), codeID, err)) + logger.Error("error migrating cw-erc1155 pointer to code ID", "pointer", addr, "code-id", codeID, "err", err) return err } } diff --git a/x/evm/migrations/migrate_cast_address_balances.go b/x/evm/migrations/migrate_cast_address_balances.go index df5c16dddf..e72e8e554a 100644 --- a/x/evm/migrations/migrate_cast_address_balances.go +++ b/x/evm/migrations/migrate_cast_address_balances.go @@ -1,8 +1,6 @@ package migrations import ( - "fmt" - "github.com/ethereum/go-ethereum/common" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/x/evm/keeper" @@ -13,14 +11,14 @@ func MigrateCastAddressBalances(ctx sdk.Context, k *keeper.Keeper) (rerr error) castAddr := sdk.AccAddress(evmAddr[:]) if balances := k.BankKeeper().SpendableCoins(ctx, castAddr); !balances.IsZero() { if err := k.BankKeeper().SendCoins(ctx, castAddr, seiAddr, balances); err != nil { - ctx.Logger().Error(fmt.Sprintf("error migrating balances from cast address to real address for %s due to %s", evmAddr.Hex(), err)) + logger.Error("error migrating balances from cast to real for address", "address", evmAddr, "err", err) rerr = err return true } } if wei := k.BankKeeper().GetWeiBalance(ctx, castAddr); !wei.IsZero() { if err := k.BankKeeper().SendCoinsAndWei(ctx, castAddr, seiAddr, sdk.ZeroInt(), wei); err != nil { - ctx.Logger().Error(fmt.Sprintf("error migrating wei from cast address to real address for %s due to %s", evmAddr.Hex(), err)) + logger.Error("error migrating wei from cast to real for address", "address", evmAddr, "err", err) rerr = err return true } diff --git a/x/evm/state/mock_balances.go b/x/evm/state/mock_balances.go index c04b2b0afa..3735cc6d20 100644 --- a/x/evm/state/mock_balances.go +++ b/x/evm/state/mock_balances.go @@ -16,8 +16,6 @@ package state import ( "math/big" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/ethereum/go-ethereum/common" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/x/evm/types" @@ -64,7 +62,7 @@ func (s *DBImpl) topOffAccount(seiAddr sdk.AccAddress, amt *big.Int) { // Mint and send (use NopLogger to suppress log spam) usei, wei := SplitUseiWeiAmount(amt) coinsAmt := sdk.NewCoins(sdk.NewCoin(s.k.GetBaseDenom(s.ctx), usei.Add(sdk.OneInt()))) - ctx := s.ctx.WithLogger(log.NewNopLogger()) + ctx := s.ctx if err := s.k.BankKeeper().MintCoins(ctx, types.ModuleName, coinsAmt); err != nil { return } diff --git a/x/evm/state/statedb.go b/x/evm/state/statedb.go index 62e9aab626..e99405735f 100644 --- a/x/evm/state/statedb.go +++ b/x/evm/state/statedb.go @@ -10,8 +10,11 @@ import ( ethutils "github.com/ethereum/go-ethereum/trie/utils" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/utils" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "evm", "state") + // Initialized for each transaction individually type DBImpl struct { ctx sdk.Context @@ -172,7 +175,7 @@ func (s *DBImpl) Copy() vm.StateDB { } func (s *DBImpl) Finalise(bool) { - s.ctx.Logger().Info("Finalise should only be called during simulation and will no-op") + logger.Info("Finalise should only be called during simulation and will no-op") } func (s *DBImpl) Commit(uint64, bool, bool) (common.Hash, error) { diff --git a/x/mint/keeper/hooks.go b/x/mint/keeper/hooks.go index e43406fe22..eabf518bf9 100644 --- a/x/mint/keeper/hooks.go +++ b/x/mint/keeper/hooks.go @@ -12,7 +12,7 @@ func (k Keeper) AfterEpochEnd(ctx sdk.Context, epoch epochTypes.Epoch) { coinsToMint := latestMinter.GetReleaseAmountToday(epoch.CurrentEpochStartTime.UTC()) if coinsToMint.IsZero() || latestMinter.GetRemainingMintAmount() == 0 { - k.Logger(ctx).Debug("No coins to mint", "minter", latestMinter) + logger.Debug("No coins to mint", "minter", latestMinter) return } @@ -28,7 +28,7 @@ func (k Keeper) AfterEpochEnd(ctx sdk.Context, epoch epochTypes.Epoch) { // Released Succssfully, decrement the remaining amount by the daily release amount and update minter amountMinted := coinsToMint.AmountOf(latestMinter.GetDenom()) latestMinter.RecordSuccessfulMint(ctx, epoch, amountMinted.Uint64()) - k.Logger(ctx).Info("Minted coins", "minter", latestMinter, "amount", coinsToMint.String()) + logger.Info("Minted coins", "minter", latestMinter, "amount", coinsToMint.String()) k.SetMinter(ctx, latestMinter) } diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go index f2a2e84a4e..e734a83229 100644 --- a/x/mint/keeper/keeper.go +++ b/x/mint/keeper/keeper.go @@ -7,7 +7,6 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" epochTypes "github.com/sei-protocol/sei-chain/x/epoch/types" "github.com/sei-protocol/sei-chain/x/mint/types" ) @@ -49,11 +48,6 @@ func NewKeeper( } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+types.ModuleName) -} - // Set the mint hooks. func (k *Keeper) SetHooks(h types.MintHooks) *Keeper { if k.hooks != nil { @@ -131,7 +125,7 @@ func (k Keeper) GetOrUpdateLatestMinter( // There's still an ongoing release (> 0 remaining amount or same start date) or there's no release scheduled if currentReleaseMinter.OngoingRelease() || nextScheduledRelease.GetStartDate() == currentReleaseMinter.GetStartDate() || nextScheduledRelease == nil { - k.Logger(ctx).Debug("Ongoing token release or no nextScheduledRelease", "minter", currentReleaseMinter) + logger.Debug("Ongoing token release or no nextScheduledRelease", "minter", currentReleaseMinter) return currentReleaseMinter } diff --git a/x/mint/keeper/migrations.go b/x/mint/keeper/migrations.go index 49eaf9c2af..77571bd18c 100644 --- a/x/mint/keeper/migrations.go +++ b/x/mint/keeper/migrations.go @@ -6,8 +6,11 @@ import ( "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/x/mint/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "mint", "keeper") + // Migrator is a struct for handling in-place store migrations. type Migrator struct { keeper Keeper @@ -45,7 +48,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { LastMintHeight: uint64(v2Minter.GetLastMintHeight()), //nolint:gosec LastMintAmount: v2Minter.LastMintAmount.RoundInt().Uint64(), } - ctx.Logger().Info("Migrating minter from v2 to v3", "v2Minter", v2Minter.String(), "v3Minter", v3Minter.String()) + logger.Info("Migrating minter from v2 to v3", "v2Minter", v2Minter, "v3Minter", v3Minter) m.keeper.SetMinter(ctx, v3Minter) // Migrate TokenReleaseSchedule @@ -63,7 +66,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { if err != nil { panic(fmt.Sprintf("Key not found or error: %s", err)) } - ctx.Logger().Info("Migrating mint params from v2 to v3", "v2TokenReleaseSchedules", v2TokenReleaseSchedules, "v2MintDenom", v2MintDenom) + logger.Info("Migrating mint params from v2 to v3", "v2TokenReleaseSchedules", v2TokenReleaseSchedules, "v2MintDenom", v2MintDenom) v3TokenReleaseSchedule := make([]types.ScheduledTokenRelease, 0, len(v2TokenReleaseSchedules)) for _, v2TokenReleaseSchedule := range v2TokenReleaseSchedules { @@ -79,7 +82,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { TokenReleaseSchedule: v3TokenReleaseSchedule, } m.keeper.SetParams(ctx, v3Params) - ctx.Logger().Info("Migrating mint module from v2 to v3", "v3Params", v3Params.String()) + logger.Info("Migrating mint module from v2 to v3", "v3Params", v3Params) return nil } diff --git a/x/mint/keeper/migrations_test.go b/x/mint/keeper/migrations_test.go index 76103edbe5..1970b416ed 100644 --- a/x/mint/keeper/migrations_test.go +++ b/x/mint/keeper/migrations_test.go @@ -11,7 +11,6 @@ import ( authtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/auth/types" paramtypes "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" typesparams "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/x/mint/keeper" "github.com/sei-protocol/sei-chain/x/mint/types" @@ -57,7 +56,7 @@ func TestMigrate2to3(t *testing.T) { memStoreKey, "MintParams", ) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false) if !paramsSubspace.HasKeyTable() { paramsSubspace = paramsSubspace.WithKeyTable(paramtypes.NewKeyTable().RegisterParamSet(&types.Version2Params{})) } diff --git a/x/oracle/ante_test.go b/x/oracle/ante_test.go index c61fc9f867..85510b64cd 100644 --- a/x/oracle/ante_test.go +++ b/x/oracle/ante_test.go @@ -35,7 +35,7 @@ func TestOracleVoteAloneAnteHandler(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - _, err := anteHandler(sdk.NewContext(nil, tmproto.Header{}, false, nil), tc.tx, false) + _, err := anteHandler(sdk.NewContext(nil, tmproto.Header{}, false), tc.tx, false) if tc.expErr { require.Error(t, err) } else { diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index 17ea04a58b..3a2ec47b82 100755 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -9,8 +9,6 @@ import ( "github.com/sei-protocol/sei-chain/utils/datastructures" "github.com/sei-protocol/sei-chain/utils/metrics" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" sdkerrors "github.com/sei-protocol/sei-chain/sei-cosmos/types/errors" @@ -67,11 +65,6 @@ func NewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, memKey sdk.StoreKey } } -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) -} - //----------------------------------- // ExchangeRate logic diff --git a/x/oracle/keeper/slash.go b/x/oracle/keeper/slash.go index 39b0a27ba5..1e4d3b81db 100755 --- a/x/oracle/keeper/slash.go +++ b/x/oracle/keeper/slash.go @@ -6,8 +6,11 @@ import ( cosmostelemetry "github.com/sei-protocol/sei-chain/sei-cosmos/telemetry" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" "github.com/sei-protocol/sei-chain/x/oracle/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "oracle", "keeper") + // SlashAndResetCounters do slash any operator who over criteria & clear all operators miss counter to zero func (k Keeper) SlashAndResetCounters(ctx sdk.Context) { height := ctx.BlockHeight() @@ -23,7 +26,7 @@ func (k Keeper) SlashAndResetCounters(ctx sdk.Context) { // as opposed to the one expected based on the number of vote period expected based on the ending slash window or vote period totalVotes := votePenaltyCounter.SuccessCount + votePenaltyCounter.AbstainCount + votePenaltyCounter.MissCount if totalVotes == 0 { - ctx.Logger().Error("zero votes in penalty counter, this should never happen") + logger.Error("zero votes in penalty counter, this should never happen") return false } validVoteRate := sdk.NewDecFromInt( diff --git a/x/oracle/keeper/testutils/test_utils.go b/x/oracle/keeper/testutils/test_utils.go index 3f5b6458dc..69d339c23f 100644 --- a/x/oracle/keeper/testutils/test_utils.go +++ b/x/oracle/keeper/testutils/test_utils.go @@ -12,7 +12,6 @@ import ( "github.com/sei-protocol/sei-chain/x/oracle/utils" "github.com/stretchr/testify/require" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -148,7 +147,7 @@ func CreateTestInput(t *testing.T) TestInput { db := dbm.NewMemDB() ms := store.NewCommitMultiStore(db) - ctx := sdk.NewContext(ms, tmproto.Header{Time: time.Now().UTC()}, false, log.NewNopLogger()) + ctx := sdk.NewContext(ms, tmproto.Header{Time: time.Now().UTC()}, false) encodingConfig := MakeEncodingConfig(t) appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino diff --git a/x/oracle/types/ballot_test.go b/x/oracle/types/ballot_test.go index fd8bf8c768..1f58124728 100755 --- a/x/oracle/types/ballot_test.go +++ b/x/oracle/types/ballot_test.go @@ -106,7 +106,7 @@ func TestSqrt(t *testing.T) { } func TestPBPower(t *testing.T) { - ctx := sdk.NewContext(nil, tmproto.Header{}, false, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, false) _, valAccAddrs, sk := GenerateRandomTestCase() pb := ExchangeRateBallot{} ballotPower := int64(0) diff --git a/x/tokenfactory/keeper/bankactions.go b/x/tokenfactory/keeper/bankactions.go index 9254c85424..18590f63e3 100644 --- a/x/tokenfactory/keeper/bankactions.go +++ b/x/tokenfactory/keeper/bankactions.go @@ -1,13 +1,13 @@ package keeper import ( - "fmt" - sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" - "github.com/sei-protocol/sei-chain/x/tokenfactory/types" + "github.com/sei-protocol/seilog" ) +var logger = seilog.NewLogger("x", "tokenfactory", "keeper") + func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error { // verify that denom is an x/tokenfactory denom _, _, err := types.DeconstructDenom(amount.Denom) @@ -15,7 +15,7 @@ func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error { return err } - ctx.Logger().Info(fmt.Sprintf("Minting amount=%s for module=%s", amount.String(), types.ModuleName)) + logger.Info("Minting amount for module", "amount", amount, "module", types.ModuleName) err = k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(amount)) if err != nil { return err @@ -26,7 +26,7 @@ func (k Keeper) mintTo(ctx sdk.Context, amount sdk.Coin, mintTo string) error { return err } - ctx.Logger().Info(fmt.Sprintf("Sending Minted amount=%s to addr=%s", amount.String(), addr.String())) + logger.Info("Sending minted amount to addr", "amount", amount, "addr", addr) return k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, addr, sdk.NewCoins(amount)) @@ -44,7 +44,7 @@ func (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string) erro return err } - ctx.Logger().Info(fmt.Sprintf("Sending amount=%s to module=%s from account=%s", amount.String(), types.ModuleName, addr.String())) + logger.Info("Sending amount to module from account", "amount", amount, "module", types.ModuleName, "account", addr) err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, addr, types.ModuleName, @@ -53,6 +53,6 @@ func (k Keeper) burnFrom(ctx sdk.Context, amount sdk.Coin, burnFrom string) erro return err } - ctx.Logger().Info(fmt.Sprintf("Burning amount=%s from module=%s", amount.String(), types.ModuleName)) + logger.Info("Burning amount from module", "amount", amount, "module", types.ModuleName) return k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(amount)) } diff --git a/x/tokenfactory/keeper/keeper.go b/x/tokenfactory/keeper/keeper.go index 78d7587028..bee3d12152 100644 --- a/x/tokenfactory/keeper/keeper.go +++ b/x/tokenfactory/keeper/keeper.go @@ -1,10 +1,6 @@ package keeper import ( - "fmt" - - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" - "github.com/sei-protocol/sei-chain/sei-cosmos/codec" "github.com/sei-protocol/sei-chain/sei-cosmos/store/prefix" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" @@ -50,11 +46,6 @@ func NewKeeper( } } -// Logger returns a logger for the x/tokenfactory module -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) -} - // GetDenomPrefixStore returns the substore for a specific denom func (k Keeper) GetDenomPrefixStore(ctx sdk.Context, denom string) sdk.KVStore { store := ctx.KVStore(k.storeKey) diff --git a/x/tokenfactory/keeper/migrations_test.go b/x/tokenfactory/keeper/migrations_test.go index 0408a5a463..b76f426f45 100644 --- a/x/tokenfactory/keeper/migrations_test.go +++ b/x/tokenfactory/keeper/migrations_test.go @@ -13,7 +13,6 @@ import ( storetypes "github.com/sei-protocol/sei-chain/sei-cosmos/store/types" sdk "github.com/sei-protocol/sei-chain/sei-cosmos/types" typesparams "github.com/sei-protocol/sei-chain/sei-cosmos/x/params/types" - "github.com/sei-protocol/sei-chain/sei-tendermint/libs/log" tmproto "github.com/sei-protocol/sei-chain/sei-tendermint/proto/tendermint/types" "github.com/sei-protocol/sei-chain/x/tokenfactory/types" "github.com/stretchr/testify/require" @@ -48,7 +47,7 @@ func TestMigrate2to3(t *testing.T) { oldCreateDenomFeeWhitelistPrefix := []byte(strings.Join([]string{oldCreateDenomFeeWhitelistKey, ""}, KeySeparator)) oldCreatorSpecificPrefix := []byte(strings.Join([]string{oldCreateDenomFeeWhitelistKey, "creator", ""}, KeySeparator)) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false) if !paramsSubspace.HasKeyTable() { paramsSubspace = paramsSubspace.WithKeyTable(types.ParamKeyTable()) } @@ -98,7 +97,7 @@ func TestMigrate3To4(t *testing.T) { func TestMigrate4To5(t *testing.T) { stateStore, keeper := getStoreAndKeeper(t) m := NewMigrator(keeper) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false) err := m.Migrate4to5(ctx) require.NoError(t, err) require.NotPanics(t, func() { m.keeper.GetParams(ctx) })