Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion auction-server/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "auction-server"
version = "0.30.1"
version = "0.31.0"
edition = "2021"
license-file = "license.txt"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE bid_limo ADD COLUMN submission_time Nullable(DateTime64(6));
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE bid_swap ADD COLUMN submission_time Nullable(DateTime64(6));
12 changes: 11 additions & 1 deletion auction-server/src/auction/entities/bid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,13 @@ pub struct Bid {
pub id: BidId,
pub chain_id: ChainId,
pub initiation_time: OffsetDateTime,
pub profile_id: Option<ProfileId>,

pub profile_id: Option<ProfileId>,
pub opportunity_id: Option<OpportunityId>,

pub creation_time: OffsetDateTime,
pub conclusion_time: Option<OffsetDateTime>,
pub submission_time: Option<OffsetDateTime>,

pub amount: BidAmountSvm,
pub status: BidStatusSvm,
Expand Down Expand Up @@ -306,6 +309,13 @@ impl BidChainDataCreateSvm {
BidChainDataCreateSvm::Swap(data) => &data.transaction,
}
}

pub fn get_opportunity_id(&self) -> Option<OpportunityId> {
match self {
BidChainDataCreateSvm::OnChain(_) => None,
BidChainDataCreateSvm::Swap(data) => Some(data.opportunity_id),
}
}
}

pub type BidAmountSvm = u64;
Expand Down
2 changes: 1 addition & 1 deletion auction-server/src/auction/repository/add_bid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl Repository {
amount: &entities::BidAmountSvm,
) -> Result<entities::Bid, RestError> {
let bid_model = Bid::new(bid_create.clone(), amount, chain_data);
let bid = bid_model.get_bid_entity(None).map_err(|e| {
let bid = bid_model.get_bid_entity(None, bid_create.chain_data.get_opportunity_id()).map_err(|e| {
tracing::error!(error = e.to_string(), bid_create = ?bid_create, "Failed to convert bid to entity");
RestError::TemporarilyUnavailable
})?;
Expand Down
5 changes: 3 additions & 2 deletions auction-server/src/auction/repository/add_bid_analytics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ impl Repository {
bid_amount: bid.amount,

auction_id: bid.status.get_auction_id(),
submission_time: bid.submission_time,
conclusion_time: bid.conclusion_time,

status: serde_json::to_string(&Svm::convert_bid_status(&bid.status))?,
Expand Down Expand Up @@ -105,14 +106,14 @@ impl Repository {
id: bid.id,
creation_time: bid.creation_time,
initiation_time: bid.initiation_time,
submission_time: bid.submission_time,
permission_key: bid.chain_data.get_permission_key().to_string(),
chain_id: bid.chain_id,
transaction,
bid_amount: bid.amount,

auction_id: bid.status.get_auction_id(),
// TODO Fill this in
opportunity_id: None,
opportunity_id: bid.opportunity_id,
conclusion_time: bid.conclusion_time,

searcher_token_mint: mint_searcher.to_string(),
Expand Down
2 changes: 1 addition & 1 deletion auction-server/src/auction/repository/get_bid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ impl Repository {
None => None,
};

bid.get_bid_entity(auction).map_err(|e| {
bid.get_bid_entity(auction, None).map_err(|e| {
tracing::error!(error = e.to_string(), bid = ?bid, "Failed to convert bid to entity");
RestError::TemporarilyUnavailable
})
Expand Down
2 changes: 1 addition & 1 deletion auction-server/src/auction/repository/get_bids.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ impl Repository {
Some(auction_id) => auctions.clone().into_iter().find(|a| a.id == auction_id),
None => None,
};
b.get_bid_entity(auction.clone())
b.get_bid_entity(auction.clone(), None)
.map_err(|e| {
tracing::error!(
error = e.to_string(),
Expand Down
31 changes: 24 additions & 7 deletions auction-server/src/auction/repository/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -521,19 +521,32 @@ impl Bid {
}
}

pub fn get_bid_entity(&self, auction: Option<Auction>) -> anyhow::Result<entities::Bid> {
pub fn get_bid_entity(
&self,
auction: Option<Auction>,
opportunity_id: Option<crate::opportunity::entities::OpportunityId>,
) -> anyhow::Result<entities::Bid> {
let submission_time = auction
.as_ref()
.and_then(|a| a.submission_time)
.map(|t| t.assume_offset(UtcOffset::UTC));

Ok(entities::Bid {
id: self.id,
chain_id: self.chain_id.clone(),
id: self.id,
chain_id: self.chain_id.clone(),

initiation_time: self.initiation_time.assume_offset(UtcOffset::UTC),
creation_time: self.creation_time.assume_offset(UtcOffset::UTC),
creation_time: self.creation_time.assume_offset(UtcOffset::UTC),
conclusion_time: self
.conclusion_time
.map(|t| t.assume_offset(UtcOffset::UTC)),
profile_id: self.profile_id,
submission_time,

amount: Svm::get_bid_amount_entity(self)?,
status: Svm::get_bid_status_entity(self, auction)?,
profile_id: self.profile_id,
opportunity_id,

amount: Svm::get_bid_amount_entity(self)?,
status: Svm::get_bid_status_entity(self, auction)?,
chain_data: Svm::get_chain_data_entity(self)?,
})
}
Expand Down Expand Up @@ -844,6 +857,8 @@ pub struct BidAnalyticsSwap {

#[serde(with = "clickhouse::serde::uuid::option")]
pub auction_id: Option<Uuid>,
#[serde(with = "clickhouse::serde::time::datetime64::micros::option")]
pub submission_time: Option<OffsetDateTime>,
#[serde(with = "clickhouse::serde::uuid::option")]
pub opportunity_id: Option<Uuid>,
#[serde(with = "clickhouse::serde::time::datetime64::micros::option")]
Expand Down Expand Up @@ -890,6 +905,8 @@ pub struct BidAnalyticsLimo {
#[serde(with = "clickhouse::serde::uuid::option")]
pub auction_id: Option<Uuid>,
#[serde(with = "clickhouse::serde::time::datetime64::micros::option")]
pub submission_time: Option<OffsetDateTime>,
#[serde(with = "clickhouse::serde::time::datetime64::micros::option")]
pub conclusion_time: Option<OffsetDateTime>,

pub status: String,
Expand Down
10 changes: 9 additions & 1 deletion auction-server/src/auction/repository/submit_auction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,19 @@ impl Repository {
&self,
auction: entities::Auction,
transaction_hash: Signature,
winner_bid_ids: Vec<entities::BidId>,
) -> anyhow::Result<entities::Auction> {
tracing::Span::current().record("auction_id", auction.id.to_string());
tracing::Span::current().record("tx_hash", format!("{:?}", transaction_hash));

if let Some(updated_auction) = self.db.submit_auction(&auction, &transaction_hash).await? {
if let Some(mut updated_auction) =
self.db.submit_auction(&auction, &transaction_hash).await?
{
for bid in &mut updated_auction.bids {
if winner_bid_ids.contains(&bid.id) {
bid.submission_time = updated_auction.submission_time;
}
}
self.update_in_memory_auction(updated_auction.clone()).await;
Ok(updated_auction)
} else {
Expand Down
5 changes: 4 additions & 1 deletion auction-server/src/auction/service/handle_auction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,10 @@ impl Service {
{
Ok(tx_hash) => {
tracing::debug!(tx_hash = ?tx_hash, "Submitted transaction");
let auction = self.repo.submit_auction(auction, tx_hash).await?;
let auction = self
.repo
.submit_auction(auction, tx_hash, winner_bids.iter().map(|b| b.id).collect())
.await?;
join_all(auction.bids.iter().map(|bid| {
self.update_bid_status(UpdateBidStatusInput {
new_status: Service::get_new_status(
Expand Down
9 changes: 7 additions & 2 deletions auction-server/src/auction/service/submit_quote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ use {
signature::Signature,
transaction::VersionedTransaction,
},
std::vec,
time::OffsetDateTime,
};

Expand Down Expand Up @@ -69,7 +70,11 @@ impl Service {
RestError::TemporarilyUnavailable
})?;
self.repo
.submit_auction(auction, bid.chain_data.transaction.signatures[0])
.submit_auction(
auction,
bid.chain_data.transaction.signatures[0],
vec![bid.id],
)
.await
.map_err(|e| {
tracing::error!(error = ?e, "Error repo submitting auction");
Expand Down Expand Up @@ -134,7 +139,7 @@ impl Service {
let tx_hash = signed_bid.chain_data.transaction.signatures[0];
let auction = self
.repo
.submit_auction(auction, tx_hash)
.submit_auction(auction, tx_hash, vec![signed_bid.id])
.await
.map_err(|e| {
tracing::error!(error = ?e, "Error repo submitting auction");
Expand Down
2 changes: 2 additions & 0 deletions auction-server/src/opportunity/service/get_quote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -804,7 +804,9 @@ mod tests {
initiation_time: OffsetDateTime::from_unix_timestamp(1200).unwrap(),
creation_time: OffsetDateTime::from_unix_timestamp(1199).unwrap(),
conclusion_time: None,
submission_time: None,
profile_id: None,
opportunity_id: None,
amount: amount.unwrap_or(100),
status: BidStatusSvm::Pending,
chain_data: BidChainDataSvm {
Expand Down
Loading