mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 23:35:19 +00:00
Display auction type and phase when querying auctions (#345)
* feat: differentiate auction types when queried * feat: display auction type * feat: add phase of collateral auctions * fix: set reverse phase directly * feat: revert base auction, use querying specifc structs * fix: pass auction as interface to handlers * set reverse phase on max bid (#348) * Revert "set reverse phase on max bid (#348)" (#351) This reverts commit 4b855250d529a4cbecb16d9d32b25ffeaffa3a68. * fix: missing return * fix: include collateral auction type * fix: always include phase field for queries Co-authored-by: Denali Marsh <denalimarsh@gmail.com>
This commit is contained in:
parent
84fa0ef51d
commit
55f0f8d980
@ -60,7 +60,8 @@ func QueryGetAuctionCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
||||
// Decode and print results
|
||||
var auction types.Auction
|
||||
cdc.MustUnmarshalJSON(res, &auction)
|
||||
return cliCtx.PrintOutput(auction)
|
||||
auctionWithPhase := types.NewAuctionWithPhase(auction)
|
||||
return cliCtx.PrintOutput(auctionWithPhase)
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -83,7 +84,12 @@ func QueryGetAuctionsCmd(queryRoute string, cdc *codec.Codec) *cobra.Command {
|
||||
// Decode and print results
|
||||
var auctions types.Auctions
|
||||
cdc.MustUnmarshalJSON(res, &auctions)
|
||||
return cliCtx.PrintOutput(auctions)
|
||||
|
||||
var auctionsWithPhase []types.AuctionWithPhase
|
||||
for _, a := range auctions {
|
||||
auctionsWithPhase = append(auctionsWithPhase, types.NewAuctionWithPhase(a))
|
||||
}
|
||||
return cliCtx.PrintOutput(auctionsWithPhase)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -51,10 +51,18 @@ func queryAuctionHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
|
||||
rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var auction types.Auction
|
||||
err = cliCtx.Codec.UnmarshalJSON(res, auction)
|
||||
if err != nil {
|
||||
rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
// Decode and return results
|
||||
cliCtx = cliCtx.WithHeight(height)
|
||||
rest.PostProcessResponse(w, cliCtx, res)
|
||||
|
||||
auctionWithPhase := types.NewAuctionWithPhase(auction)
|
||||
|
||||
rest.PostProcessResponse(w, cliCtx, cliCtx.Codec.MustMarshalJSON(auctionWithPhase))
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +81,20 @@ func queryAuctionsHandlerFn(cliCtx context.CLIContext) http.HandlerFunc {
|
||||
}
|
||||
// Return auctions
|
||||
cliCtx = cliCtx.WithHeight(height)
|
||||
rest.PostProcessResponse(w, cliCtx, res)
|
||||
|
||||
var auctions types.Auctions
|
||||
err = cliCtx.Codec.UnmarshalJSON(res, auctions)
|
||||
if err != nil {
|
||||
rest.WriteErrorResponse(w, http.StatusNotFound, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var auctionsWithPhase []types.AuctionWithPhase
|
||||
for _, a := range auctions {
|
||||
auctionsWithPhase = append(auctionsWithPhase, types.NewAuctionWithPhase(a))
|
||||
}
|
||||
|
||||
rest.PostProcessResponse(w, cliCtx, cliCtx.Codec.MustMarshalJSON(auctionsWithPhase))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ func (k Keeper) StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin
|
||||
sdk.NewEvent(
|
||||
types.EventTypeAuctionStart,
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionID, fmt.Sprintf("%d", auction.GetID())),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.Name()),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.GetType()),
|
||||
sdk.NewAttribute(types.AttributeKeyBidDenom, auction.Bid.Denom),
|
||||
sdk.NewAttribute(types.AttributeKeyLotDenom, auction.Lot.Denom),
|
||||
),
|
||||
@ -70,7 +70,7 @@ func (k Keeper) StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, in
|
||||
sdk.NewEvent(
|
||||
types.EventTypeAuctionStart,
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionID, fmt.Sprintf("%d", auction.GetID())),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.Name()),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.GetType()),
|
||||
sdk.NewAttribute(types.AttributeKeyBidDenom, auction.Bid.Denom),
|
||||
sdk.NewAttribute(types.AttributeKeyLotDenom, auction.Lot.Denom),
|
||||
),
|
||||
@ -111,7 +111,7 @@ func (k Keeper) StartCollateralAuction(ctx sdk.Context, seller string, lot sdk.C
|
||||
sdk.NewEvent(
|
||||
types.EventTypeAuctionStart,
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionID, fmt.Sprintf("%d", auction.GetID())),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.Name()),
|
||||
sdk.NewAttribute(types.AttributeKeyAuctionType, auction.GetType()),
|
||||
sdk.NewAttribute(types.AttributeKeyBidDenom, auction.Bid.Denom),
|
||||
sdk.NewAttribute(types.AttributeKeyLotDenom, auction.Lot.Denom),
|
||||
),
|
||||
@ -506,9 +506,8 @@ func (k Keeper) CloseExpiredAuctions(ctx sdk.Context) sdk.Error {
|
||||
func earliestTime(t1, t2 time.Time) time.Time {
|
||||
if t1.Before(t2) {
|
||||
return t1
|
||||
} else {
|
||||
return t2 // also returned if times are equal
|
||||
}
|
||||
return t2 // also returned if times are equal
|
||||
}
|
||||
|
||||
// splitCoinIntoWeightedBuckets divides up some amount of coins according to some weights.
|
||||
|
@ -22,6 +22,7 @@ type Auction interface {
|
||||
GetBidder() sdk.AccAddress
|
||||
GetBid() sdk.Coin
|
||||
GetEndTime() time.Time
|
||||
GetType() string
|
||||
}
|
||||
|
||||
// Auctions is a slice of auctions.
|
||||
@ -57,6 +58,9 @@ func (a BaseAuction) GetBid() sdk.Coin { return a.Bid }
|
||||
// GetEndTime is a getter for auction end time.
|
||||
func (a BaseAuction) GetEndTime() time.Time { return a.EndTime }
|
||||
|
||||
// GetType returns theauction type. Used to identify auctions in event attributes.
|
||||
func (a BaseAuction) GetType() string { return "base" }
|
||||
|
||||
// Validate verifies that the auction end time is before max end time
|
||||
func (a BaseAuction) Validate() error {
|
||||
if a.EndTime.After(a.MaxEndTime) {
|
||||
@ -82,14 +86,14 @@ func (a BaseAuction) String() string {
|
||||
// SurplusAuction is a forward auction that burns what it receives from bids.
|
||||
// It is normally used to sell off excess pegged asset acquired by the CDP system.
|
||||
type SurplusAuction struct {
|
||||
BaseAuction `json:"base_auction" yaml:"base_auction"`
|
||||
BaseAuction
|
||||
}
|
||||
|
||||
// WithID returns an auction with the ID set.
|
||||
func (a SurplusAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||
|
||||
// Name returns a name for this auction type. Used to identify auctions in event attributes.
|
||||
func (a SurplusAuction) Name() string { return "surplus" }
|
||||
// GetType returns the auction type. Used to identify auctions in event attributes.
|
||||
func (a SurplusAuction) GetType() string { return "surplus" }
|
||||
|
||||
// GetModuleAccountCoins returns the total number of coins held in the module account for this auction.
|
||||
// It is used in genesis initialize the module account correctly.
|
||||
@ -116,15 +120,16 @@ func NewSurplusAuction(seller string, lot sdk.Coin, bidDenom string, endTime tim
|
||||
// DebtAuction is a reverse auction that mints what it pays out.
|
||||
// It is normally used to acquire pegged asset to cover the CDP system's debts that were not covered by selling collateral.
|
||||
type DebtAuction struct {
|
||||
BaseAuction `json:"base_auction" yaml:"base_auction"`
|
||||
BaseAuction
|
||||
|
||||
CorrespondingDebt sdk.Coin `json:"corresponding_debt" yaml:"corresponding_debt"`
|
||||
}
|
||||
|
||||
// WithID returns an auction with the ID set.
|
||||
func (a DebtAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||
|
||||
// Name returns a name for this auction type. Used to identify auctions in event attributes.
|
||||
func (a DebtAuction) Name() string { return "debt" }
|
||||
// GetType returns the auction type. Used to identify auctions in event attributes.
|
||||
func (a DebtAuction) GetType() string { return "debt" }
|
||||
|
||||
// GetModuleAccountCoins returns the total number of coins held in the module account for this auction.
|
||||
// It is used in genesis initialize the module account correctly.
|
||||
@ -160,7 +165,8 @@ func NewDebtAuction(buyerModAccName string, bid sdk.Coin, initialLot sdk.Coin, e
|
||||
// Unsold Lot is sent to LotReturns, being divided among the addresses by weight.
|
||||
// Collateral auctions are normally used to sell off collateral seized from CDPs.
|
||||
type CollateralAuction struct {
|
||||
BaseAuction `json:"base_auction" yaml:"base_auction"`
|
||||
BaseAuction
|
||||
|
||||
CorrespondingDebt sdk.Coin `json:"corresponding_debt" yaml:"corresponding_debt"`
|
||||
MaxBid sdk.Coin `json:"max_bid" yaml:"max_bid"`
|
||||
LotReturns WeightedAddresses `json:"lot_returns" yaml:"lot_returns"`
|
||||
@ -169,8 +175,8 @@ type CollateralAuction struct {
|
||||
// WithID returns an auction with the ID set.
|
||||
func (a CollateralAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||
|
||||
// Name returns a name for this auction type. Used to identify auctions in event attributes.
|
||||
func (a CollateralAuction) Name() string { return "collateral" }
|
||||
// GetType returns the auction type. Used to identify auctions in event attributes.
|
||||
func (a CollateralAuction) GetType() string { return "collateral" }
|
||||
|
||||
// GetModuleAccountCoins returns the total number of coins held in the module account for this auction.
|
||||
// It is used in genesis initialize the module account correctly.
|
||||
@ -185,6 +191,14 @@ func (a CollateralAuction) IsReversePhase() bool {
|
||||
return a.Bid.IsEqual(a.MaxBid)
|
||||
}
|
||||
|
||||
// GetPhase returns the phase of a collateral auction
|
||||
func (a CollateralAuction) GetPhase() string {
|
||||
if a.IsReversePhase() {
|
||||
return "reverse"
|
||||
}
|
||||
return "forward"
|
||||
}
|
||||
|
||||
func (a CollateralAuction) String() string {
|
||||
return fmt.Sprintf(`Auction %d:
|
||||
Initiator: %s
|
||||
|
@ -3,9 +3,9 @@ package types
|
||||
const (
|
||||
// QueryGetAuction is the query path for querying one auction
|
||||
QueryGetAuction = "auction"
|
||||
// QueryGetAuction is the query path for querying all auctions
|
||||
// QueryGetAuctions is the query path for querying all auctions
|
||||
QueryGetAuctions = "auctions"
|
||||
// QueryGetAuction is the query path for querying the global auction params
|
||||
// QueryGetParams is the query path for querying the global auction params
|
||||
QueryGetParams = "params"
|
||||
)
|
||||
|
||||
@ -27,3 +27,28 @@ func NewQueryAllAuctionParams(page int, limit int) QueryAllAuctionParams {
|
||||
Limit: limit,
|
||||
}
|
||||
}
|
||||
|
||||
// AuctionWithPhase augmented type for collateral auctions which includes auction phase for querying
|
||||
type AuctionWithPhase struct {
|
||||
Auction Auction
|
||||
|
||||
Type string `json:"type" yaml:"type"`
|
||||
Phase string `json:"phase" yaml:"phase"`
|
||||
}
|
||||
|
||||
// NewAuctionWithPhase returns new AuctionWithPhase
|
||||
func NewAuctionWithPhase(a Auction) AuctionWithPhase {
|
||||
switch auc := a.(type) {
|
||||
case CollateralAuction:
|
||||
return AuctionWithPhase{
|
||||
Auction: auc,
|
||||
Type: auc.GetType(),
|
||||
Phase: auc.GetPhase(),
|
||||
}
|
||||
default:
|
||||
return AuctionWithPhase{
|
||||
Auction: auc,
|
||||
Type: auc.GetType(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user