From 94c2abe6c9560f7726e4d68fc789efac1626f861 Mon Sep 17 00:00:00 2001 From: imabdulbasit Date: Fri, 6 Oct 2023 19:45:31 +0500 Subject: [PATCH] Support retry for failed compressed mint --- consumer/src/events.rs | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/consumer/src/events.rs b/consumer/src/events.rs index 22043ce..642ccda 100644 --- a/consumer/src/events.rs +++ b/consumer/src/events.rs @@ -546,11 +546,7 @@ impl Processor { self.process_nft( EventKind::RetryMintToCollection, &key, - self.retry_mint_to_collection( - &UncompressedRef(self.solana()), - &key, - payload, - ), + self.retry_mint_to_collection(&key, payload), ) .await }, @@ -625,11 +621,7 @@ impl Processor { self.process_nft( EventKind::RetryMintOpenDrop, &key, - self.retry_mint_to_collection( - &UncompressedRef(self.solana()), - &key, - payload, - ), + self.retry_mint_to_collection(&key, payload), ) .await }, @@ -1185,11 +1177,8 @@ impl Processor { Ok(tx.into()) } - async fn retry_mint_to_collection< - B: MintBackend, - >( + async fn retry_mint_to_collection( &self, - backend: &B, key: &SolanaNftEventKey, payload: MintMetaplexMetadataTransaction, ) -> ProcessResult { @@ -1202,6 +1191,31 @@ impl Processor { let collection = collection.ok_or(ProcessorErrorKind::RecordNotFound)?; + if payload.compressed { + let backend = &CompressedRef(self.solana()); + + let tx = backend + .mint(&collection, payload) + .map_err(ProcessorErrorKind::Solana)?; + + let leaf_model = CompressionLeaf::find_by_id(conn, id) + .await? + .ok_or(ProcessorErrorKind::RecordNotFound)?; + + let mut compression_leaf: compression_leafs::ActiveModel = leaf_model.into(); + + compression_leaf.merkle_tree = Set(tx.addresses.merkle_tree.to_string()); + compression_leaf.tree_authority = Set(tx.addresses.tree_authority.to_string()); + compression_leaf.tree_delegate = Set(tx.addresses.tree_delegate.to_string()); + compression_leaf.leaf_owner = Set(tx.addresses.leaf_owner.to_string()); + + compression_leaf.update(conn).await?; + + return Ok(tx.into()); + } + + let backend = &UncompressedRef(self.solana()); + let tx = backend .mint(&collection, payload) .map_err(ProcessorErrorKind::Solana)?;