From a16586458c8ecfc90fee2a1c7e41db000c51a6a4 Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Tue, 27 Feb 2024 17:35:12 +0530 Subject: [PATCH] Improve logging for auction module --- scripts/init.sh | 1 + x/auction/keeper/keeper.go | 62 +++++++++++++++++------------- x/registry/keeper/record_keeper.go | 3 +- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/scripts/init.sh b/scripts/init.sh index 0f9a788a..abde54cd 100755 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -3,6 +3,7 @@ rm -r ~/.laconic2d || true LACONIC2D_BIN=$(which laconic2d) # configure laconic2d +$LACONIC2D_BIN config set config log_level "*:error,p2p:info,state:info,auction:info,bond:info,registry:info" --skip-validate $LACONIC2D_BIN config set client chain-id demo $LACONIC2D_BIN config set client keyring-backend test $LACONIC2D_BIN keys add alice diff --git a/x/auction/keeper/keeper.go b/x/auction/keeper/keeper.go index 969d890b..edcb72ba 100644 --- a/x/auction/keeper/keeper.go +++ b/x/auction/keeper/keeper.go @@ -11,6 +11,7 @@ import ( "cosmossdk.io/collections/indexes" storetypes "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -108,6 +109,15 @@ func NewKeeper( return &k } +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return logger(ctx) +} + +func logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", auctiontypes.ModuleName) +} + func (k *Keeper) SetUsageKeepers(usageKeepers []auctiontypes.AuctionUsageKeeper) { if k.usageKeepers != nil { panic("cannot set auction hooks twice") @@ -546,7 +556,7 @@ func (k Keeper) processAuctionPhases(ctx sdk.Context) error { return err } - ctx.Logger().Info(fmt.Sprintf("Moved auction %s to reveal phase.", auction.Id)) + k.Logger(ctx).Info(fmt.Sprintf("Moved auction %s to reveal phase.", auction.Id)) } // Reveal -> Expired state. @@ -556,7 +566,7 @@ func (k Keeper) processAuctionPhases(ctx sdk.Context) error { return err } - ctx.Logger().Info(fmt.Sprintf("Moved auction %s to expired state.", auction.Id)) + k.Logger(ctx).Info(fmt.Sprintf("Moved auction %s to expired state.", auction.Id)) } // If auction has expired, pick a winner from revealed bids. @@ -581,7 +591,7 @@ func (k Keeper) deleteCompletedAuctions(ctx sdk.Context) error { } for _, auction := range auctions { - ctx.Logger().Info(fmt.Sprintf("Deleting completed auction %s after timeout.", auction.Id)) + k.Logger(ctx).Info(fmt.Sprintf("Deleting completed auction %s after timeout.", auction.Id)) if err := k.DeleteAuction(ctx, *auction); err != nil { return err } @@ -591,7 +601,7 @@ func (k Keeper) deleteCompletedAuctions(ctx sdk.Context) error { } func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction) error { - ctx.Logger().Info(fmt.Sprintf("Picking auction %s winner.", auction.Id)) + k.Logger(ctx).Info(fmt.Sprintf("Picking auction %s winner.", auction.Id)) var highestBid *auctiontypes.Bid var secondHighestBid *auctiontypes.Bid @@ -602,38 +612,38 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction } for _, bid := range bids { - ctx.Logger().Info(fmt.Sprintf("Processing bid %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Processing bid %s %s", bid.BidderAddress, bid.BidAmount.String())) // Only consider revealed bids. if bid.Status != auctiontypes.BidStatusRevealed { - ctx.Logger().Info(fmt.Sprintf("Ignoring unrevealed bid %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Ignoring unrevealed bid %s %s", bid.BidderAddress, bid.BidAmount.String())) continue } // Init highest bid. if highestBid == nil { highestBid = bid - ctx.Logger().Info(fmt.Sprintf("Initializing 1st bid %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Initializing 1st bid %s %s", bid.BidderAddress, bid.BidAmount.String())) continue } //nolint: all if highestBid.BidAmount.IsLT(bid.BidAmount) { - ctx.Logger().Info(fmt.Sprintf("New highest bid %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("New highest bid %s %s", bid.BidderAddress, bid.BidAmount.String())) secondHighestBid = highestBid highestBid = bid - ctx.Logger().Info(fmt.Sprintf("Updated 1st bid %s %s", highestBid.BidderAddress, highestBid.BidAmount.String())) - ctx.Logger().Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Updated 1st bid %s %s", highestBid.BidderAddress, highestBid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String())) } else if secondHighestBid == nil || secondHighestBid.BidAmount.IsLT(bid.BidAmount) { - ctx.Logger().Info(fmt.Sprintf("New 2nd highest bid %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("New 2nd highest bid %s %s", bid.BidderAddress, bid.BidAmount.String())) secondHighestBid = bid - ctx.Logger().Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String())) } else { - ctx.Logger().Info(fmt.Sprintf("Ignoring bid as it doesn't affect 1st/2nd price %s %s", bid.BidderAddress, bid.BidAmount.String())) + k.Logger(ctx).Info(fmt.Sprintf("Ignoring bid as it doesn't affect 1st/2nd price %s %s", bid.BidderAddress, bid.BidAmount.String())) } } @@ -649,11 +659,11 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction if secondHighestBid != nil { auction.WinningPrice = secondHighestBid.BidAmount } - ctx.Logger().Info(fmt.Sprintf("Auction %s winner %s.", auction.Id, auction.WinnerAddress)) - ctx.Logger().Info(fmt.Sprintf("Auction %s winner bid %s.", auction.Id, auction.WinningBid.String())) - ctx.Logger().Info(fmt.Sprintf("Auction %s winner price %s.", auction.Id, auction.WinningPrice.String())) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner %s.", auction.Id, auction.WinnerAddress)) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner bid %s.", auction.Id, auction.WinningBid.String())) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner price %s.", auction.Id, auction.WinningPrice.String())) } else { - ctx.Logger().Info(fmt.Sprintf("Auction %s has no valid revealed bids (no winner).", auction.Id)) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s has no valid revealed bids (no winner).", auction.Id)) } if err := k.SaveAuction(ctx, auction); err != nil { @@ -663,7 +673,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction for _, bid := range bids { bidderAddress, err := sdk.AccAddressFromBech32(bid.BidderAddress) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Invalid bidderAddress address. %v", err)) + k.Logger(ctx).Error(fmt.Sprintf("Invalid bidderAddress address. %v", err)) panic("Invalid bidder address.") } @@ -671,7 +681,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction // Send reveal fee back to bidders that've revealed the bid. sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.RevealFee)) if sdkErr != nil { - ctx.Logger().Error(fmt.Sprintf("Auction error returning reveal fee: %v", sdkErr)) + k.Logger(ctx).Error(fmt.Sprintf("Auction error returning reveal fee: %v", sdkErr)) panic(sdkErr) } } @@ -679,7 +689,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction // Send back locked bid amount to all bidders. sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.BidAmount)) if sdkErr != nil { - ctx.Logger().Error(fmt.Sprintf("Auction error returning bid amount: %v", sdkErr)) + k.Logger(ctx).Error(fmt.Sprintf("Auction error returning bid amount: %v", sdkErr)) panic(sdkErr) } } @@ -688,36 +698,36 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction if auction.WinnerAddress != "" { winnerAddress, err := sdk.AccAddressFromBech32(auction.WinnerAddress) if err != nil { - ctx.Logger().Error(fmt.Sprintf("Invalid winner address. %v", err)) + k.Logger(ctx).Error(fmt.Sprintf("Invalid winner address. %v", err)) panic("Invalid winner address.") } // Take 2nd price from winner. sdkErr := k.bankKeeper.SendCoinsFromAccountToModule(ctx, winnerAddress, auctiontypes.ModuleName, sdk.NewCoins(auction.WinningPrice)) if sdkErr != nil { - ctx.Logger().Error(fmt.Sprintf("Auction error taking funds from winner: %v", sdkErr)) + k.Logger(ctx).Error(fmt.Sprintf("Auction error taking funds from winner: %v", sdkErr)) panic(sdkErr) } // Burn anything over the min. bid amount. amountToBurn := auction.WinningPrice.Sub(auction.MinimumBid) if amountToBurn.IsNegative() { - ctx.Logger().Error("Auction coins to burn cannot be negative.") + k.Logger(ctx).Error("Auction coins to burn cannot be negative.") panic("Auction coins to burn cannot be negative.") } // Use auction burn module account instead of actually burning coins to better keep track of supply. sdkErr = k.bankKeeper.SendCoinsFromModuleToModule(ctx, auctiontypes.ModuleName, auctiontypes.AuctionBurnModuleAccountName, sdk.NewCoins(amountToBurn)) if sdkErr != nil { - ctx.Logger().Error(fmt.Sprintf("Auction error burning coins: %v", sdkErr)) + k.Logger(ctx).Error(fmt.Sprintf("Auction error burning coins: %v", sdkErr)) panic(sdkErr) } } // Notify other modules (hook). - ctx.Logger().Info(fmt.Sprintf("Auction %s notifying %d modules.", auction.Id, len(k.usageKeepers))) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s notifying %d modules.", auction.Id, len(k.usageKeepers))) for _, keeper := range k.usageKeepers { - ctx.Logger().Info(fmt.Sprintf("Auction %s notifying module %s.", auction.Id, keeper.ModuleName())) + k.Logger(ctx).Info(fmt.Sprintf("Auction %s notifying module %s.", auction.Id, keeper.ModuleName())) keeper.OnAuctionWinnerSelected(ctx, auction.Id) } diff --git a/x/registry/keeper/record_keeper.go b/x/registry/keeper/record_keeper.go index bec6f04a..f0c9c643 100644 --- a/x/registry/keeper/record_keeper.go +++ b/x/registry/keeper/record_keeper.go @@ -13,13 +13,14 @@ import ( auctiontypes "git.vdb.to/cerc-io/laconic2d/x/auction" auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper" + bondtypes "git.vdb.to/cerc-io/laconic2d/x/bond" registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry" ) // Record keeper implements the bond usage keeper interface. var ( _ auctiontypes.AuctionUsageKeeper = RecordKeeper{} - // _ bondtypes.BondUsageKeeper = (*RecordKeeper)(nil) + _ bondtypes.BondUsageKeeper = RecordKeeper{} ) // RecordKeeper exposes the bare minimal read-only API for other modules.