Skip to content

Commit

Permalink
refactor: use master edition transaction message for mcc
Browse files Browse the repository at this point in the history
  • Loading branch information
kespinola committed Jul 19, 2023
1 parent ee9e98a commit 8bb2982
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 70 deletions.
21 changes: 10 additions & 11 deletions api/src/blockchains/solana.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ use crate::proto::{
SolanaRetryCreateCollection, SolanaRetryDrop, SolanaRetryMintDrop,
SolanaRetryMintToCollection, SolanaTransferAsset, SolanaUpdateCollection, SolanaUpdateDrop,
},
MetaplexCertifiedCollectionTransaction, MetaplexMasterEditionTransaction,
MintMetaplexEditionTransaction, MintMetaplexMetadataTransaction, NftEventKey, NftEvents,
TransferMetaplexAssetTransaction,
MetaplexMasterEditionTransaction, MintMetaplexEditionTransaction,
MintMetaplexMetadataTransaction, NftEventKey, NftEvents, TransferMetaplexAssetTransaction,
};

#[derive(Clone)]
Expand All @@ -31,9 +30,9 @@ impl Solana {
MintMetaplexEditionTransaction,
MetaplexMasterEditionTransaction,
> + TransferEvent<TransferMetaplexAssetTransaction>
+ CollectionEvent<
MetaplexCertifiedCollectionTransaction,
MetaplexCertifiedCollectionTransaction,
+ CollectionEvent<
MetaplexMasterEditionTransaction,
MetaplexMasterEditionTransaction,
MintMetaplexMetadataTransaction,
> {
self.clone()
Expand Down Expand Up @@ -139,15 +138,15 @@ impl TransferEvent<TransferMetaplexAssetTransaction> for Solana {
#[async_trait::async_trait]
impl
CollectionEvent<
MetaplexCertifiedCollectionTransaction,
MetaplexCertifiedCollectionTransaction,
MetaplexMasterEditionTransaction,
MetaplexMasterEditionTransaction,
MintMetaplexMetadataTransaction,
> for Solana
{
async fn create_collection(
&self,
key: NftEventKey,
payload: MetaplexCertifiedCollectionTransaction,
payload: MetaplexMasterEditionTransaction,
) -> Result<()> {
let event = NftEvents {
event: Some(SolanaCreateCollection(payload)),
Expand All @@ -161,7 +160,7 @@ impl
async fn retry_create_collection(
&self,
key: NftEventKey,
payload: MetaplexCertifiedCollectionTransaction,
payload: MetaplexMasterEditionTransaction,
) -> Result<()> {
let event = NftEvents {
event: Some(SolanaRetryCreateCollection(payload)),
Expand All @@ -175,7 +174,7 @@ impl
async fn update_collection(
&self,
key: NftEventKey,
payload: MetaplexCertifiedCollectionTransaction,
payload: MetaplexMasterEditionTransaction,
) -> Result<()> {
let event = NftEvents {
event: Some(SolanaUpdateCollection(payload)),
Expand Down
138 changes: 79 additions & 59 deletions api/src/mutations/collection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ use crate::{
objects::{Collection as CollectionObject, Creator, MetadataJsonInput},
proto::{
nft_events::Event as NftEvent, CreationStatus as NftCreationStatus,
Creator as ProtoCreator, DropCreation, MetaplexCertifiedCollectionTransaction,
MetaplexMetadata, NftEventKey, NftEvents,
Creator as ProtoCreator, DropCreation, MasterEdition, MetaplexMasterEditionTransaction,
NftEventKey, NftEvents,
},
Actions, AppContext, NftStorageClient, OrganizationId, UserID,
};
Expand Down Expand Up @@ -101,35 +101,43 @@ impl Mutation {
BlockchainEnum::Solana => {
solana
.event()
.create_collection(event_key, MetaplexCertifiedCollectionTransaction {
metadata: Some(MetaplexMetadata {
owner_address,
name: metadata_json.name,
symbol: metadata_json.symbol,
metadata_uri: metadata_json.uri,
seller_fee_basis_points: 0,
creators: input
.creators
.into_iter()
.map(TryFrom::try_from)
.collect::<Result<_>>()?,
}),
})
.create_collection(
event_key,
MetaplexMasterEditionTransaction {
master_edition: Some(MasterEdition {
owner_address,
supply: Some(0),
name: metadata_json.name,
symbol: metadata_json.symbol,
metadata_uri: metadata_json.uri,
seller_fee_basis_points: 0,
creators: input
.creators
.into_iter()
.map(TryFrom::try_from)
.collect::<Result<_>>()?,
}),
},
)
.await?;
},
BlockchainEnum::Ethereum | BlockchainEnum::Polygon => {
return Err(Error::new("blockchain not supported as this time"));
},
};

submit_pending_deduction(credits, db, DeductionParams {
user_id,
org_id,
balance,
collection: collection.id,
blockchain: input.blockchain,
action: Actions::CreateDrop,
})
submit_pending_deduction(
credits,
db,
DeductionParams {
user_id,
org_id,
balance,
collection: collection.id,
blockchain: input.blockchain,
action: Actions::CreateDrop,
},
)
.await?;

// TODO: separate event for collection creation
Expand Down Expand Up @@ -214,38 +222,46 @@ impl Mutation {
BlockchainEnum::Solana => {
solana
.event()
.retry_create_collection(event_key, MetaplexCertifiedCollectionTransaction {
metadata: Some(MetaplexMetadata {
owner_address,
name: metadata_json.name,
symbol: metadata_json.symbol,
metadata_uri: metadata_json.uri,
seller_fee_basis_points: 0,
creators: creators
.into_iter()
.map(|c| ProtoCreator {
address: c.address,
verified: c.verified,
share: c.share,
})
.collect(),
}),
})
.retry_create_collection(
event_key,
MetaplexMasterEditionTransaction {
master_edition: Some(MasterEdition {
owner_address,
name: metadata_json.name,
symbol: metadata_json.symbol,
metadata_uri: metadata_json.uri,
seller_fee_basis_points: 0,
supply: Some(0),
creators: creators
.into_iter()
.map(|c| ProtoCreator {
address: c.address,
verified: c.verified,
share: c.share,
})
.collect(),
}),
},
)
.await?;
},
BlockchainEnum::Polygon | BlockchainEnum::Ethereum => {
return Err(Error::new("blockchain not supported as this time"));
},
};

submit_pending_deduction(credits, db, DeductionParams {
balance,
user_id,
org_id,
collection: collection.id,
blockchain: collection.blockchain,
action: Actions::RetryDrop,
})
submit_pending_deduction(
credits,
db,
DeductionParams {
balance,
user_id,
org_id,
collection: collection.id,
blockchain: collection.blockchain,
action: Actions::RetryDrop,
},
)
.await?;

Ok(CreateCollectionPayload {
Expand Down Expand Up @@ -367,16 +383,20 @@ impl Mutation {

solana
.event()
.update_collection(event_key, MetaplexCertifiedCollectionTransaction {
metadata: Some(MetaplexMetadata {
owner_address,
name: metadata_json_model.name,
symbol: metadata_json_model.symbol,
metadata_uri: metadata_json_model.uri,
seller_fee_basis_points: 0,
creators,
}),
})
.update_collection(
event_key,
MetaplexMasterEditionTransaction {
master_edition: Some(MasterEdition {
owner_address,
supply: Some(0),
name: metadata_json_model.name,
symbol: metadata_json_model.symbol,
metadata_uri: metadata_json_model.uri,
seller_fee_basis_points: 0,
creators,
}),
},
)
.await?;
},
BlockchainEnum::Polygon | BlockchainEnum::Ethereum => {
Expand Down

0 comments on commit 8bb2982

Please sign in to comment.