# Messages

## Bidding

Users can bid on auctions using the `MsgPlaceBid` message type. All auction types can be bid on using the same message type.

```go
// MsgPlaceBid is the message type used to place a bid on any type of auction.
type MsgPlaceBid struct {
	AuctionID uint64
	Bidder    sdk.AccAddress
	Amount    sdk.Coin
}
```

**State Modifications:**

* Update bidder if different than previous bidder
* For Surplus auctions:
  * Update Bid to msg.Amount
  * Return bid coins to previous bidder
  * Burn coins equal to the increment in the bid (CurrentBid - PreviousBid)
* For Debt auctions:
  * Update Lot amount to msg.Amount
  * Return bid coins to previous bidder
* For Collateral auctions:
  * Return bid coins to previous bidder
  * If in forward phase:
    * Update Bid amount to msg.Amount
  * If in reverse phase:
    * Update Lot amount to msg.Amount
* Extend auction by `BidDuration`, up to `MaxEndTime`