Skip to content

Commit

Permalink
fix(sana): correct buyer/seller address mapping in sale events
Browse files Browse the repository at this point in the history
  • Loading branch information
remiroyc committed Dec 17, 2024
1 parent 4239572 commit 8d95efa
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 16 deletions.
51 changes: 35 additions & 16 deletions crates/sana/src/managers/event_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,39 @@ impl<S: Storage> EventManager<S> {
return Err(anyhow!("Can't find event data into this event"));
}

let maker_address = event
let order_type = event
.keys
.get(3)
.ok_or_else(|| anyhow!("Maker address not found"))?;
.get(2)
.ok_or_else(|| anyhow!("Order type not found"))?;

let type_1 = FieldElement::from_hex_be("0x1")?;
let type_3 = FieldElement::from_hex_be("0x3")?;
let is_basic_order = order_type == &type_1 || order_type == &type_3;

let (from_address, to_address) = if is_basic_order {
(
event
.keys
.get(3)
.ok_or_else(|| anyhow!("From address not found"))?,
event
.data
.first()
.ok_or_else(|| anyhow!("To address not found"))?,
)
} else {
(
event
.data
.first()
.ok_or_else(|| anyhow!("Taker address not found"))?,
event
.keys
.get(3)
.ok_or_else(|| anyhow!("Maker address not found"))?,
)
};

let taker_address = event
.data
.first()
.ok_or_else(|| anyhow!("Taker address not found"))?;
let currency_address = event
.data
.get(1)
Expand Down Expand Up @@ -202,21 +226,16 @@ impl<S: Storage> EventManager<S> {
.map_err(|_| anyhow!("Failed to parse token id high"))?,
};

let event_id = Self::get_event_id(
&token_id,
maker_address,
taker_address,
block_timestamp,
event,
);
let event_id =
Self::get_event_id(&token_id, from_address, to_address, block_timestamp, event);

Ok(TokenSaleEvent {
token_event_id: to_hex_str(&event_id),
event_type: EventType::Sale,
block_number: event.block_number,
block_timestamp,
from_address: to_hex_str(maker_address),
to_address: to_hex_str(taker_address),
from_address: to_hex_str(from_address),
to_address: to_hex_str(to_address),
nft_contract_address: to_hex_str(nft_contract_address),
nft_type: None,
transaction_hash: to_hex_str(&event.transaction_hash),
Expand Down
20 changes: 20 additions & 0 deletions crates/sana/src/storage/sqlx/default_storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,26 @@ impl Storage for PostgresStorage {
"Updated existing transfer event: {:?}",
event.token_event_id
);

let update_query = "UPDATE token t
SET current_owner = (
SELECT te.to_address
FROM token_event te
WHERE te.contract_address = t.contract_address
AND te.token_id = t.token_id
AND te.chain_id = t.chain_id
AND te.event_type IN ('Transfer', 'Burn', 'Mint')
ORDER BY te.block_timestamp DESC
LIMIT 1
), updated_timestamp = EXTRACT(epoch FROM now())::bigint
WHERE t.contract_address = $1 AND t.token_id = $2 AND t.chain_id = $3";

let _current_owner = sqlx::query(update_query)
.bind(event.contract_address.clone())
.bind(event.token_id.clone())
.bind(event.chain_id.clone())
.execute(&self.pool)
.await?;
} else {
let insert_query = "INSERT INTO token_event (token_event_id, contract_address, chain_id, token_id, token_id_hex, event_type, block_timestamp, transaction_hash, to_address, from_address)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) ON CONFLICT (token_event_id) DO NOTHING";
Expand Down

0 comments on commit 8d95efa

Please sign in to comment.