mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-26 00:05:18 +00:00
update doc comments
This commit is contained in:
parent
fecfee5077
commit
2537928ee7
@ -4,7 +4,7 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// InitGenesis - initializes the store state from genesis data
|
// InitGenesis initializes the store state from genesis data.
|
||||||
func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) {
|
func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) {
|
||||||
keeper.SetNextAuctionID(ctx, data.NextAuctionID)
|
keeper.SetNextAuctionID(ctx, data.NextAuctionID)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
"github.com/kava-labs/kava/x/auction/types"
|
"github.com/kava-labs/kava/x/auction/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// StartSurplusAuction starts a normal auction that mints the sold coins.
|
// StartSurplusAuction starts a new surplus (forward) auction.
|
||||||
func (k Keeper) StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin, bidDenom string) (uint64, sdk.Error) {
|
func (k Keeper) StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin, bidDenom string) (uint64, sdk.Error) {
|
||||||
// create auction
|
// create auction
|
||||||
auction := types.NewSurplusAuction(seller, lot, bidDenom, ctx.BlockTime().Add(types.DefaultMaxAuctionDuration))
|
auction := types.NewSurplusAuction(seller, lot, bidDenom, ctx.BlockTime().Add(types.DefaultMaxAuctionDuration))
|
||||||
@ -27,7 +27,7 @@ func (k Keeper) StartSurplusAuction(ctx sdk.Context, seller string, lot sdk.Coin
|
|||||||
return auctionID, nil
|
return auctionID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartDebtAuction starts an auction where sellers compete by offering decreasing prices.
|
// StartDebtAuction starts a new debt (reverse) auction.
|
||||||
func (k Keeper) StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, initialLot sdk.Coin) (uint64, sdk.Error) {
|
func (k Keeper) StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, initialLot sdk.Coin) (uint64, sdk.Error) {
|
||||||
// create auction
|
// create auction
|
||||||
auction := types.NewDebtAuction(buyer, bid, initialLot, ctx.BlockTime().Add(types.DefaultMaxAuctionDuration))
|
auction := types.NewDebtAuction(buyer, bid, initialLot, ctx.BlockTime().Add(types.DefaultMaxAuctionDuration))
|
||||||
@ -45,7 +45,7 @@ func (k Keeper) StartDebtAuction(ctx sdk.Context, buyer string, bid sdk.Coin, in
|
|||||||
return auctionID, nil
|
return auctionID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartCollateralAuction starts an auction where bidders bid up to a maxBid, then switch to bidding down on price.
|
// StartCollateralAuction starts a new collateral (2-phase) auction where bidders bid up to a maxBid, then switch to bidding down on the Lot.
|
||||||
func (k Keeper) StartCollateralAuction(ctx sdk.Context, seller string, lot sdk.Coin, maxBid sdk.Coin, lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdk.Int) (uint64, sdk.Error) {
|
func (k Keeper) StartCollateralAuction(ctx sdk.Context, seller string, lot sdk.Coin, maxBid sdk.Coin, lotReturnAddrs []sdk.AccAddress, lotReturnWeights []sdk.Int) (uint64, sdk.Error) {
|
||||||
// create auction
|
// create auction
|
||||||
weightedAddresses, err := types.NewWeightedAddresses(lotReturnAddrs, lotReturnWeights)
|
weightedAddresses, err := types.NewWeightedAddresses(lotReturnAddrs, lotReturnWeights)
|
||||||
@ -111,6 +111,7 @@ func (k Keeper) PlaceBid(ctx sdk.Context, auctionID uint64, bidder sdk.AccAddres
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlaceBidSurplus places a forward bid on a surplus auction, moving coins and returning the updated auction.
|
||||||
func (k Keeper) PlaceBidSurplus(ctx sdk.Context, a types.SurplusAuction, bidder sdk.AccAddress, bid sdk.Coin) (types.SurplusAuction, sdk.Error) {
|
func (k Keeper) PlaceBidSurplus(ctx sdk.Context, a types.SurplusAuction, bidder sdk.AccAddress, bid sdk.Coin) (types.SurplusAuction, sdk.Error) {
|
||||||
// Validate New Bid
|
// Validate New Bid
|
||||||
if bid.Denom != a.Bid.Denom {
|
if bid.Denom != a.Bid.Denom {
|
||||||
@ -151,6 +152,7 @@ func (k Keeper) PlaceBidSurplus(ctx sdk.Context, a types.SurplusAuction, bidder
|
|||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlaceForwardBidCollateral places a forward bid on a collateral auction, moving coins and returning the updated auction.
|
||||||
func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, a types.CollateralAuction, bidder sdk.AccAddress, bid sdk.Coin) (types.CollateralAuction, sdk.Error) {
|
func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, a types.CollateralAuction, bidder sdk.AccAddress, bid sdk.Coin) (types.CollateralAuction, sdk.Error) {
|
||||||
// Validate new bid
|
// Validate new bid
|
||||||
if bid.Denom != a.Bid.Denom {
|
if bid.Denom != a.Bid.Denom {
|
||||||
@ -192,6 +194,7 @@ func (k Keeper) PlaceForwardBidCollateral(ctx sdk.Context, a types.CollateralAuc
|
|||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlaceReverseBidCollateral places a reverse bid on a collateral auction, moving coins and returning the updated auction.
|
||||||
func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, a types.CollateralAuction, bidder sdk.AccAddress, lot sdk.Coin) (types.CollateralAuction, sdk.Error) {
|
func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, a types.CollateralAuction, bidder sdk.AccAddress, lot sdk.Coin) (types.CollateralAuction, sdk.Error) {
|
||||||
// Validate bid
|
// Validate bid
|
||||||
if lot.Denom != a.Lot.Denom {
|
if lot.Denom != a.Lot.Denom {
|
||||||
@ -239,6 +242,7 @@ func (k Keeper) PlaceReverseBidCollateral(ctx sdk.Context, a types.CollateralAuc
|
|||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PlaceBidDebt places a reverse bid on a debt auction, moving coins and returning the updated auction.
|
||||||
func (k Keeper) PlaceBidDebt(ctx sdk.Context, a types.DebtAuction, bidder sdk.AccAddress, lot sdk.Coin) (types.DebtAuction, sdk.Error) {
|
func (k Keeper) PlaceBidDebt(ctx sdk.Context, a types.DebtAuction, bidder sdk.AccAddress, lot sdk.Coin) (types.DebtAuction, sdk.Error) {
|
||||||
// Validate New Bid
|
// Validate New Bid
|
||||||
if lot.Denom != a.Lot.Denom {
|
if lot.Denom != a.Lot.Denom {
|
||||||
@ -307,6 +311,7 @@ func (k Keeper) CloseAuction(ctx sdk.Context, auctionID uint64) sdk.Error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PayoutDebtAuction pays out the proceeds for a debt auction, first minting the coins.
|
||||||
func (k Keeper) PayoutDebtAuction(ctx sdk.Context, a types.DebtAuction) sdk.Error {
|
func (k Keeper) PayoutDebtAuction(ctx sdk.Context, a types.DebtAuction) sdk.Error {
|
||||||
err := k.supplyKeeper.MintCoins(ctx, a.Initiator, sdk.NewCoins(a.Lot))
|
err := k.supplyKeeper.MintCoins(ctx, a.Initiator, sdk.NewCoins(a.Lot))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -319,6 +324,7 @@ func (k Keeper) PayoutDebtAuction(ctx sdk.Context, a types.DebtAuction) sdk.Erro
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PayoutSurplusAuction pays out the proceeds for a surplus auction.
|
||||||
func (k Keeper) PayoutSurplusAuction(ctx sdk.Context, a types.SurplusAuction) sdk.Error {
|
func (k Keeper) PayoutSurplusAuction(ctx sdk.Context, a types.SurplusAuction) sdk.Error {
|
||||||
err := k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, a.Bidder, sdk.NewCoins(a.Lot))
|
err := k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, a.Bidder, sdk.NewCoins(a.Lot))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -327,6 +333,7 @@ func (k Keeper) PayoutSurplusAuction(ctx sdk.Context, a types.SurplusAuction) sd
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PayoutCollateralAuction pays out the proceeds for a collateral auction.
|
||||||
func (k Keeper) PayoutCollateralAuction(ctx sdk.Context, a types.CollateralAuction) sdk.Error {
|
func (k Keeper) PayoutCollateralAuction(ctx sdk.Context, a types.CollateralAuction) sdk.Error {
|
||||||
err := k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, a.Bidder, sdk.NewCoins(a.Lot))
|
err := k.supplyKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, a.Bidder, sdk.NewCoins(a.Lot))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -344,6 +351,7 @@ func earliestTime(t1, t2 time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// splitCoinIntoWeightedBuckets divides up some amount of coins according to some weights.
|
||||||
func splitCoinIntoWeightedBuckets(coin sdk.Coin, buckets []sdk.Int) ([]sdk.Coin, sdk.Error) {
|
func splitCoinIntoWeightedBuckets(coin sdk.Coin, buckets []sdk.Int) ([]sdk.Coin, sdk.Error) {
|
||||||
for _, bucket := range buckets {
|
for _, bucket := range buckets {
|
||||||
if bucket.IsNegative() {
|
if bucket.IsNegative() {
|
||||||
|
@ -47,7 +47,7 @@ func (k Keeper) GetNextAuctionID(ctx sdk.Context) (uint64, sdk.Error) {
|
|||||||
return types.Uint64FromBytes(bz), nil
|
return types.Uint64FromBytes(bz), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// incrementNextAuctionID increments the global ID in the store by 1
|
// IncrementNextAuctionID increments the next auction ID in the store by 1.
|
||||||
func (k Keeper) IncrementNextAuctionID(ctx sdk.Context) sdk.Error {
|
func (k Keeper) IncrementNextAuctionID(ctx sdk.Context) sdk.Error {
|
||||||
id, err := k.GetNextAuctionID(ctx)
|
id, err := k.GetNextAuctionID(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -74,13 +74,12 @@ func (k Keeper) StoreNewAuction(ctx sdk.Context, auction types.Auction) (uint64,
|
|||||||
return newAuctionID, nil
|
return newAuctionID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetAuction puts the auction into the database and adds it to the queue
|
// SetAuction puts the auction into the store, and updates any indexes.
|
||||||
// it overwrites any pre-existing auction with same ID
|
|
||||||
func (k Keeper) SetAuction(ctx sdk.Context, auction types.Auction) {
|
func (k Keeper) SetAuction(ctx sdk.Context, auction types.Auction) {
|
||||||
// remove the auction from the byTime index if it is already in there
|
// remove the auction from the byTime index if it is already in there
|
||||||
existingAuction, found := k.GetAuction(ctx, auction.GetID())
|
existingAuction, found := k.GetAuction(ctx, auction.GetID())
|
||||||
if found {
|
if found {
|
||||||
k.RemoveFromIndex(ctx, existingAuction.GetEndTime(), existingAuction.GetID())
|
k.removeFromIndex(ctx, existingAuction.GetEndTime(), existingAuction.GetID())
|
||||||
}
|
}
|
||||||
|
|
||||||
// store auction
|
// store auction
|
||||||
@ -89,10 +88,10 @@ func (k Keeper) SetAuction(ctx sdk.Context, auction types.Auction) {
|
|||||||
store.Set(types.GetAuctionKey(auction.GetID()), bz)
|
store.Set(types.GetAuctionKey(auction.GetID()), bz)
|
||||||
|
|
||||||
// add to index
|
// add to index
|
||||||
k.InsertIntoIndex(ctx, auction.GetEndTime(), auction.GetID())
|
k.insertIntoIndex(ctx, auction.GetEndTime(), auction.GetID())
|
||||||
}
|
}
|
||||||
|
|
||||||
// getAuction gets an auction from the store by auctionID
|
// GetAuction gets an auction from the store.
|
||||||
func (k Keeper) GetAuction(ctx sdk.Context, auctionID uint64) (types.Auction, bool) {
|
func (k Keeper) GetAuction(ctx sdk.Context, auctionID uint64) (types.Auction, bool) {
|
||||||
var auction types.Auction
|
var auction types.Auction
|
||||||
|
|
||||||
@ -106,12 +105,12 @@ func (k Keeper) GetAuction(ctx sdk.Context, auctionID uint64) (types.Auction, bo
|
|||||||
return auction, true
|
return auction, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteAuction removes an auction from the store without any validation
|
// DeleteAuction removes an auction from the store, and any indexes.
|
||||||
func (k Keeper) DeleteAuction(ctx sdk.Context, auctionID uint64) {
|
func (k Keeper) DeleteAuction(ctx sdk.Context, auctionID uint64) {
|
||||||
// remove from index
|
// remove from index
|
||||||
auction, found := k.GetAuction(ctx, auctionID)
|
auction, found := k.GetAuction(ctx, auctionID)
|
||||||
if found {
|
if found {
|
||||||
k.RemoveFromIndex(ctx, auction.GetEndTime(), auctionID)
|
k.removeFromIndex(ctx, auction.GetEndTime(), auctionID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete auction
|
// delete auction
|
||||||
@ -119,14 +118,14 @@ func (k Keeper) DeleteAuction(ctx sdk.Context, auctionID uint64) {
|
|||||||
store.Delete(types.GetAuctionKey(auctionID))
|
store.Delete(types.GetAuctionKey(auctionID))
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertIntoIndex adds an auction ID and end time into the byTime index
|
// insertIntoIndex adds an auction ID and end time into the byTime index.
|
||||||
func (k Keeper) InsertIntoIndex(ctx sdk.Context, endTime time.Time, auctionID uint64) {
|
func (k Keeper) insertIntoIndex(ctx sdk.Context, endTime time.Time, auctionID uint64) {
|
||||||
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AuctionByTimeKeyPrefix)
|
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AuctionByTimeKeyPrefix)
|
||||||
store.Set(types.GetAuctionByTimeKey(endTime, auctionID), types.Uint64ToBytes(auctionID)) // TODO
|
store.Set(types.GetAuctionByTimeKey(endTime, auctionID), types.Uint64ToBytes(auctionID))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveFromIndex removes an auction ID and end time from the byTime index
|
// removeFromIndex removes an auction ID and end time from the byTime index.
|
||||||
func (k Keeper) RemoveFromIndex(ctx sdk.Context, endTime time.Time, auctionID uint64) {
|
func (k Keeper) removeFromIndex(ctx sdk.Context, endTime time.Time, auctionID uint64) {
|
||||||
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AuctionByTimeKeyPrefix)
|
store := prefix.NewStore(ctx.KVStore(k.storeKey), types.AuctionByTimeKeyPrefix)
|
||||||
store.Delete(types.GetAuctionByTimeKey(endTime, auctionID))
|
store.Delete(types.GetAuctionByTimeKey(endTime, auctionID))
|
||||||
}
|
}
|
||||||
@ -143,7 +142,7 @@ func (k Keeper) IterateAuctionsByTime(ctx sdk.Context, inclusiveCutoffTime time.
|
|||||||
|
|
||||||
defer iterator.Close()
|
defer iterator.Close()
|
||||||
for ; iterator.Valid(); iterator.Next() {
|
for ; iterator.Valid(); iterator.Next() {
|
||||||
// TODO get the auction ID - either read from store, or extract from key
|
|
||||||
auctionID := types.Uint64FromBytes(iterator.Value())
|
auctionID := types.Uint64FromBytes(iterator.Value())
|
||||||
|
|
||||||
if cb(auctionID) {
|
if cb(auctionID) {
|
||||||
|
@ -5,12 +5,10 @@ import (
|
|||||||
"github.com/kava-labs/kava/x/auction/types"
|
"github.com/kava-labs/kava/x/auction/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetParams sets the auth module's parameters.
|
|
||||||
func (k Keeper) SetParams(ctx sdk.Context, params types.Params) {
|
func (k Keeper) SetParams(ctx sdk.Context, params types.Params) {
|
||||||
k.paramSubspace.SetParamSet(ctx, ¶ms)
|
k.paramSubspace.SetParamSet(ctx, ¶ms)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetParams gets the auth module's parameters.
|
|
||||||
func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) {
|
func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) {
|
||||||
k.paramSubspace.GetParamSet(ctx, ¶ms)
|
k.paramSubspace.GetParamSet(ctx, ¶ms)
|
||||||
return
|
return
|
||||||
|
@ -21,20 +21,20 @@ var (
|
|||||||
_ module.AppModuleBasic = AppModuleBasic{}
|
_ module.AppModuleBasic = AppModuleBasic{}
|
||||||
)
|
)
|
||||||
|
|
||||||
// AppModuleBasic app module basics object
|
// AppModuleBasic implements the sdk.AppModuleBasic interface.
|
||||||
type AppModuleBasic struct{}
|
type AppModuleBasic struct{}
|
||||||
|
|
||||||
// Name get module name
|
// Name returns the module name.
|
||||||
func (AppModuleBasic) Name() string {
|
func (AppModuleBasic) Name() string {
|
||||||
return ModuleName
|
return ModuleName
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterCodec register module codec
|
// RegisterCodec registers the module codec.
|
||||||
func (AppModuleBasic) RegisterCodec(cdc *codec.Codec) {
|
func (AppModuleBasic) RegisterCodec(cdc *codec.Codec) {
|
||||||
RegisterCodec(cdc)
|
RegisterCodec(cdc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultGenesis default genesis state
|
// DefaultGenesis returns the default genesis state.
|
||||||
func (AppModuleBasic) DefaultGenesis() json.RawMessage {
|
func (AppModuleBasic) DefaultGenesis() json.RawMessage {
|
||||||
return ModuleCdc.MustMarshalJSON(DefaultGenesisState())
|
return ModuleCdc.MustMarshalJSON(DefaultGenesisState())
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command {
|
|||||||
return cli.GetQueryCmd(StoreKey, cdc)
|
return cli.GetQueryCmd(StoreKey, cdc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AppModule app module type
|
// AppModule implements the sdk.AppModule interface.
|
||||||
type AppModule struct {
|
type AppModule struct {
|
||||||
AppModuleBasic
|
AppModuleBasic
|
||||||
keeper Keeper
|
keeper Keeper
|
||||||
@ -78,11 +78,6 @@ func NewAppModule(keeper Keeper) AppModule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Name module name
|
|
||||||
func (AppModule) Name() string {
|
|
||||||
return ModuleName
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterInvariants performs a no-op.
|
// RegisterInvariants performs a no-op.
|
||||||
func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}
|
func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}
|
||||||
|
|
||||||
|
@ -8,28 +8,28 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/supply"
|
"github.com/cosmos/cosmos-sdk/x/supply"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Auction is an interface to several types of auction.
|
// Auction is an interface for handling common actions on auctions.
|
||||||
type Auction interface {
|
type Auction interface {
|
||||||
GetID() uint64
|
GetID() uint64
|
||||||
WithID(uint64) Auction
|
WithID(uint64) Auction
|
||||||
GetEndTime() time.Time
|
GetEndTime() time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
// BaseAuction type shared by all Auctions
|
// BaseAuction is a common type shared by all Auctions.
|
||||||
type BaseAuction struct {
|
type BaseAuction struct {
|
||||||
ID uint64
|
ID uint64
|
||||||
Initiator string // Module that starts the auction. Giving away Lot (aka seller in a forward auction). Restricted to being a module account name rather than any account.
|
Initiator string // Module name that starts the auction. Pays out Lot.
|
||||||
Lot sdk.Coin // Amount of coins up being given by initiator (FA - amount for sale by seller, RA - cost of good by buyer (bid))
|
Lot sdk.Coin // Coins that will paid out by Initiator to the winning bidder.
|
||||||
Bidder sdk.AccAddress // Person who bids in the auction. Receiver of Lot. (aka buyer in forward auction, seller in RA)
|
Bidder sdk.AccAddress // Latest bidder. Receiver of Lot.
|
||||||
Bid sdk.Coin // Amount of coins being given by the bidder (FA - bid, RA - amount being sold)
|
Bid sdk.Coin // Coins paid into the auction the bidder.
|
||||||
EndTime time.Time // Auction closing time. Triggers at the end of the block with time ≥ endTime (bids placed in that block are valid) // TODO ensure everything is consistent with this
|
EndTime time.Time // Current auction closing time. Triggers at the end of the block with time ≥ EndTime.
|
||||||
MaxEndTime time.Time // Maximum closing time. Auctions can close before this but never after.
|
MaxEndTime time.Time // Maximum closing time. Auctions can close before this but never after.
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetID getter for auction ID
|
// GetID is a getter for auction ID.
|
||||||
func (a BaseAuction) GetID() uint64 { return a.ID }
|
func (a BaseAuction) GetID() uint64 { return a.ID }
|
||||||
|
|
||||||
// GetEndTime getter for auction end time
|
// GetEndTime is a getter for auction end time.
|
||||||
func (a BaseAuction) GetEndTime() time.Time { return a.EndTime }
|
func (a BaseAuction) GetEndTime() time.Time { return a.EndTime }
|
||||||
|
|
||||||
func (a BaseAuction) String() string {
|
func (a BaseAuction) String() string {
|
||||||
@ -46,15 +46,15 @@ func (a BaseAuction) String() string {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SurplusAuction type for forward auctions
|
// SurplusAuction is a forward auction that burns what it receives as bids.
|
||||||
type SurplusAuction struct {
|
type SurplusAuction struct {
|
||||||
BaseAuction
|
BaseAuction
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithID returns an auction with the ID set
|
// WithID returns an auction with the ID set.
|
||||||
func (a SurplusAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
func (a SurplusAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||||
|
|
||||||
// NewSurplusAuction creates a new forward auction
|
// NewSurplusAuction returns a new surplus auction.
|
||||||
func NewSurplusAuction(seller string, lot sdk.Coin, bidDenom string, endTime time.Time) SurplusAuction {
|
func NewSurplusAuction(seller string, lot sdk.Coin, bidDenom string, endTime time.Time) SurplusAuction {
|
||||||
auction := SurplusAuction{BaseAuction{
|
auction := SurplusAuction{BaseAuction{
|
||||||
// no ID
|
// no ID
|
||||||
@ -68,15 +68,15 @@ func NewSurplusAuction(seller string, lot sdk.Coin, bidDenom string, endTime tim
|
|||||||
return auction
|
return auction
|
||||||
}
|
}
|
||||||
|
|
||||||
// DebtAuction type for reverse auctions
|
// DebtAuction is a reverse auction that mints what it pays out.
|
||||||
type DebtAuction struct {
|
type DebtAuction struct {
|
||||||
BaseAuction
|
BaseAuction
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithID returns an auction with the ID set
|
// WithID returns an auction with the ID set.
|
||||||
func (a DebtAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
func (a DebtAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||||
|
|
||||||
// NewDebtAuction creates a new reverse auction
|
// NewDebtAuction returns a new debt auction.
|
||||||
func NewDebtAuction(buyerModAccName string, bid sdk.Coin, initialLot sdk.Coin, EndTime time.Time) DebtAuction {
|
func NewDebtAuction(buyerModAccName string, bid sdk.Coin, initialLot sdk.Coin, EndTime time.Time) DebtAuction {
|
||||||
// Note: Bidder is set to the initiator's module account address instead of module name. (when the first bid is placed, it is paid out to the initiator)
|
// Note: Bidder is set to the initiator's module account address instead of module name. (when the first bid is placed, it is paid out to the initiator)
|
||||||
// Setting to the module account address bypasses calling supply.SendCoinsFromModuleToModule, instead calls SendCoinsFromModuleToAccount.
|
// Setting to the module account address bypasses calling supply.SendCoinsFromModuleToModule, instead calls SendCoinsFromModuleToAccount.
|
||||||
@ -93,16 +93,21 @@ func NewDebtAuction(buyerModAccName string, bid sdk.Coin, initialLot sdk.Coin, E
|
|||||||
return auction
|
return auction
|
||||||
}
|
}
|
||||||
|
|
||||||
// CollateralAuction type for forward reverse auction
|
// CollateralAuction is a two phase auction.
|
||||||
|
// Initially, in forward auction phase, bids can be placed up to a max bid.
|
||||||
|
// Then it switches to a reverse auction phase, where the initial amount up for auction is bidded down.
|
||||||
|
// Unsold Lot is sent to LotReturns, being divided among the addresses by weight.
|
||||||
type CollateralAuction struct {
|
type CollateralAuction struct {
|
||||||
BaseAuction
|
BaseAuction
|
||||||
MaxBid sdk.Coin
|
MaxBid sdk.Coin
|
||||||
LotReturns WeightedAddresses // return addresses to pay out reductions in the lot amount to. Lot is bid down during reverse phase.
|
LotReturns WeightedAddresses
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithID returns an auction with the ID set
|
// WithID returns an auction with the ID set.
|
||||||
func (a CollateralAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
func (a CollateralAuction) WithID(id uint64) Auction { a.ID = id; return a }
|
||||||
|
|
||||||
|
// IsReversePhase returns whether the auction has switched over to reverse phase or not.
|
||||||
|
// Auction initially start in forward phase.
|
||||||
func (a CollateralAuction) IsReversePhase() bool {
|
func (a CollateralAuction) IsReversePhase() bool {
|
||||||
return a.Bid.IsEqual(a.MaxBid)
|
return a.Bid.IsEqual(a.MaxBid)
|
||||||
}
|
}
|
||||||
@ -123,7 +128,7 @@ func (a CollateralAuction) String() string {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCollateralAuction creates a new forward reverse auction
|
// NewCollateralAuction returns a new collateral auction.
|
||||||
func NewCollateralAuction(seller string, lot sdk.Coin, EndTime time.Time, maxBid sdk.Coin, lotReturns WeightedAddresses) CollateralAuction {
|
func NewCollateralAuction(seller string, lot sdk.Coin, EndTime time.Time, maxBid sdk.Coin, lotReturns WeightedAddresses) CollateralAuction {
|
||||||
auction := CollateralAuction{
|
auction := CollateralAuction{
|
||||||
BaseAuction: BaseAuction{
|
BaseAuction: BaseAuction{
|
||||||
@ -140,12 +145,13 @@ func NewCollateralAuction(seller string, lot sdk.Coin, EndTime time.Time, maxBid
|
|||||||
return auction
|
return auction
|
||||||
}
|
}
|
||||||
|
|
||||||
// WeightedAddresses type for storing an address and its associated weight
|
// WeightedAddresses is a type for storing some addresses and associated weights.
|
||||||
type WeightedAddresses struct {
|
type WeightedAddresses struct {
|
||||||
Addresses []sdk.AccAddress
|
Addresses []sdk.AccAddress
|
||||||
Weights []sdk.Int
|
Weights []sdk.Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewWeightedAddresses returns a new list addresses with weights.
|
||||||
func NewWeightedAddresses(addrs []sdk.AccAddress, weights []sdk.Int) (WeightedAddresses, sdk.Error) {
|
func NewWeightedAddresses(addrs []sdk.AccAddress, weights []sdk.Int) (WeightedAddresses, sdk.Error) {
|
||||||
if len(addrs) != len(weights) {
|
if len(addrs) != len(weights) {
|
||||||
return WeightedAddresses{}, sdk.ErrInternal("number of addresses doesn't match number of weights")
|
return WeightedAddresses{}, sdk.ErrInternal("number of addresses doesn't match number of weights")
|
||||||
|
@ -15,7 +15,6 @@ func init() {
|
|||||||
func RegisterCodec(cdc *codec.Codec) {
|
func RegisterCodec(cdc *codec.Codec) {
|
||||||
cdc.RegisterConcrete(MsgPlaceBid{}, "auction/MsgPlaceBid", nil)
|
cdc.RegisterConcrete(MsgPlaceBid{}, "auction/MsgPlaceBid", nil)
|
||||||
|
|
||||||
// Register the Auction interface and concrete types
|
|
||||||
cdc.RegisterInterface((*Auction)(nil), nil)
|
cdc.RegisterInterface((*Auction)(nil), nil)
|
||||||
cdc.RegisterConcrete(SurplusAuction{}, "auction/SurplusAuction", nil)
|
cdc.RegisterConcrete(SurplusAuction{}, "auction/SurplusAuction", nil)
|
||||||
cdc.RegisterConcrete(DebtAuction{}, "auction/DebtAuction", nil)
|
cdc.RegisterConcrete(DebtAuction{}, "auction/DebtAuction", nil)
|
||||||
|
@ -7,9 +7,6 @@ import (
|
|||||||
|
|
||||||
// SupplyKeeper defines the expected supply Keeper
|
// SupplyKeeper defines the expected supply Keeper
|
||||||
type SupplyKeeper interface {
|
type SupplyKeeper interface {
|
||||||
//GetSupply(ctx sdk.Context) supplyexported.SupplyI
|
|
||||||
|
|
||||||
//GetModuleAddress(name string) sdk.AccAddress
|
|
||||||
GetModuleAccount(ctx sdk.Context, moduleName string) supplyexported.ModuleAccountI
|
GetModuleAccount(ctx sdk.Context, moduleName string) supplyexported.ModuleAccountI
|
||||||
|
|
||||||
SendCoinsFromModuleToModule(ctx sdk.Context, sender, recipient string, amt sdk.Coins) sdk.Error
|
SendCoinsFromModuleToModule(ctx sdk.Context, sender, recipient string, amt sdk.Coins) sdk.Error
|
||||||
|
@ -4,17 +4,17 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Auctions type for an array of auctions
|
// Auctions is a slice of auctions.
|
||||||
type Auctions []Auction
|
type Auctions []Auction
|
||||||
|
|
||||||
// GenesisState - auction state that must be provided at genesis
|
// GenesisState is auction state that must be provided at chain genesis.
|
||||||
type GenesisState struct {
|
type GenesisState struct {
|
||||||
NextAuctionID uint64 `json:"next_auction_id" yaml:"next_auction_id"`
|
NextAuctionID uint64 `json:"next_auction_id" yaml:"next_auction_id"`
|
||||||
Params Params `json:"auction_params" yaml:"auction_params"`
|
Params Params `json:"auction_params" yaml:"auction_params"`
|
||||||
Auctions Auctions `json:"genesis_auctions" yaml:"genesis_auctions"`
|
Auctions Auctions `json:"genesis_auctions" yaml:"genesis_auctions"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewGenesisState returns a new genesis state object for auctions module
|
// NewGenesisState returns a new genesis state object for auctions module.
|
||||||
func NewGenesisState(nextID uint64, ap Params, ga Auctions) GenesisState {
|
func NewGenesisState(nextID uint64, ap Params, ga Auctions) GenesisState {
|
||||||
return GenesisState{
|
return GenesisState{
|
||||||
NextAuctionID: nextID,
|
NextAuctionID: nextID,
|
||||||
@ -23,24 +23,24 @@ func NewGenesisState(nextID uint64, ap Params, ga Auctions) GenesisState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultGenesisState defines default genesis state for auction module
|
// DefaultGenesisState returns the default genesis state for auction module.
|
||||||
func DefaultGenesisState() GenesisState {
|
func DefaultGenesisState() GenesisState {
|
||||||
return NewGenesisState(0, DefaultParams(), Auctions{})
|
return NewGenesisState(0, DefaultParams(), Auctions{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal checks whether two GenesisState structs are equivalent
|
// Equal checks whether two GenesisState structs are equivalent.
|
||||||
func (data GenesisState) Equal(data2 GenesisState) bool {
|
func (data GenesisState) Equal(data2 GenesisState) bool {
|
||||||
b1 := ModuleCdc.MustMarshalBinaryBare(data)
|
b1 := ModuleCdc.MustMarshalBinaryBare(data)
|
||||||
b2 := ModuleCdc.MustMarshalBinaryBare(data2)
|
b2 := ModuleCdc.MustMarshalBinaryBare(data2)
|
||||||
return bytes.Equal(b1, b2)
|
return bytes.Equal(b1, b2)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsEmpty returns true if a GenesisState is empty
|
// IsEmpty returns true if a GenesisState is empty.
|
||||||
func (data GenesisState) IsEmpty() bool {
|
func (data GenesisState) IsEmpty() bool {
|
||||||
return data.Equal(GenesisState{})
|
return data.Equal(GenesisState{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateGenesis validates genesis inputs. Returns error if validation of any input fails.
|
// ValidateGenesis validates genesis inputs. It returns error if validation of any input fails.
|
||||||
func ValidateGenesis(data GenesisState) error {
|
func ValidateGenesis(data GenesisState) error {
|
||||||
if err := data.Params.Validate(); err != nil {
|
if err := data.Params.Validate(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -26,7 +26,7 @@ var (
|
|||||||
AuctionKeyPrefix = []byte{0x00} // prefix for keys that store auctions
|
AuctionKeyPrefix = []byte{0x00} // prefix for keys that store auctions
|
||||||
AuctionByTimeKeyPrefix = []byte{0x01} // prefix for keys that are part of the auctionsByTime index
|
AuctionByTimeKeyPrefix = []byte{0x01} // prefix for keys that are part of the auctionsByTime index
|
||||||
|
|
||||||
NextAuctionIDKey = []byte{0x02}
|
NextAuctionIDKey = []byte{0x02} // key for the next auction id
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetAuctionKey(auctionID uint64) []byte {
|
func GetAuctionKey(auctionID uint64) []byte {
|
||||||
@ -37,12 +37,14 @@ func GetAuctionByTimeKey(endTime time.Time, auctionID uint64) []byte {
|
|||||||
return append(sdk.FormatTimeBytes(endTime), Uint64ToBytes(auctionID)...)
|
return append(sdk.FormatTimeBytes(endTime), Uint64ToBytes(auctionID)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uint64FromBytes converts some fixed length bytes back into a uint64.
|
||||||
func Uint64FromBytes(bz []byte) uint64 {
|
func Uint64FromBytes(bz []byte) uint64 {
|
||||||
return binary.BigEndian.Uint64(bz)
|
return binary.BigEndian.Uint64(bz)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uint64ToBytes converts a uint64 into fixed length bytes for use in store keys.
|
||||||
func Uint64ToBytes(id uint64) []byte {
|
func Uint64ToBytes(id uint64) []byte {
|
||||||
bz := make([]byte, 8)
|
bz := make([]byte, 8)
|
||||||
binary.BigEndian.PutUint64(bz, uint64(id))
|
binary.BigEndian.PutUint64(bz, uint64(id))
|
||||||
return bz
|
return bz
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@ var _ sdk.Msg = &MsgPlaceBid{}
|
|||||||
// MsgPlaceBid is the message type used to place a bid on any type of auction.
|
// MsgPlaceBid is the message type used to place a bid on any type of auction.
|
||||||
type MsgPlaceBid struct {
|
type MsgPlaceBid struct {
|
||||||
AuctionID uint64
|
AuctionID uint64
|
||||||
Bidder sdk.AccAddress // This can be a buyer (who increments bid), or a seller (who decrements lot) TODO rename to be clearer?
|
Bidder sdk.AccAddress
|
||||||
Amount sdk.Coin // The new bid or lot to set on the auction
|
Amount sdk.Coin // The new bid or lot to be set on the auction.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMsgPlaceBid returns a new MsgPlaceBid.
|
// NewMsgPlaceBid returns a new MsgPlaceBid.
|
||||||
|
@ -25,13 +25,13 @@ var (
|
|||||||
|
|
||||||
var _ subspace.ParamSet = &Params{}
|
var _ subspace.ParamSet = &Params{}
|
||||||
|
|
||||||
// Params governance parameters for auction module
|
// Params is the governance parameters for the auction module.
|
||||||
type Params struct {
|
type Params struct {
|
||||||
MaxAuctionDuration time.Duration `json:"max_auction_duration" yaml:"max_auction_duration"` // max length of auction
|
MaxAuctionDuration time.Duration `json:"max_auction_duration" yaml:"max_auction_duration"` // max length of auction
|
||||||
MaxBidDuration time.Duration `json:"max_bid_duration" yaml:"max_bid_duration"` // additional time added to the auction end time after each bid, capped by the expiry.
|
MaxBidDuration time.Duration `json:"max_bid_duration" yaml:"max_bid_duration"` // additional time added to the auction end time after each bid, capped by the expiry.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewParams creates a new Params object
|
// NewParams returns a new Params object.
|
||||||
func NewParams(maxAuctionDuration time.Duration, bidDuration time.Duration) Params {
|
func NewParams(maxAuctionDuration time.Duration, bidDuration time.Duration) Params {
|
||||||
return Params{
|
return Params{
|
||||||
MaxAuctionDuration: maxAuctionDuration,
|
MaxAuctionDuration: maxAuctionDuration,
|
||||||
@ -39,7 +39,7 @@ func NewParams(maxAuctionDuration time.Duration, bidDuration time.Duration) Para
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultParams default parameters for auctions
|
// DefaultParams returns the default parameters for auctions.
|
||||||
func DefaultParams() Params {
|
func DefaultParams() Params {
|
||||||
return NewParams(
|
return NewParams(
|
||||||
DefaultMaxAuctionDuration,
|
DefaultMaxAuctionDuration,
|
||||||
@ -52,8 +52,7 @@ func ParamKeyTable() subspace.KeyTable {
|
|||||||
return subspace.NewKeyTable().RegisterParamSet(&Params{})
|
return subspace.NewKeyTable().RegisterParamSet(&Params{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParamSetPairs implements the ParamSet interface and returns all the key/value pairs
|
// ParamSetPairs implements the ParamSet interface and returns all the key/value pairs.
|
||||||
// pairs of auth module's parameters.
|
|
||||||
// nolint
|
// nolint
|
||||||
func (ap *Params) ParamSetPairs() subspace.ParamSetPairs {
|
func (ap *Params) ParamSetPairs() subspace.ParamSetPairs {
|
||||||
return subspace.ParamSetPairs{
|
return subspace.ParamSetPairs{
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
// Go doesn't have a built in min function for integers :(
|
|
||||||
func min(a, b int64) int64 {
|
|
||||||
if a < b {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
return b
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user