From 2ea63db52a7498784455675fb6d21ac91d121033 Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:16:45 -0800 Subject: [PATCH 1/6] Use Token Metadata and latest Bubblegum Rust clients, new blockbuster --- Cargo.toml | 6 +- das_api/Cargo.toml | 2 +- .../src/dao/generated/prelude.rs | 2 + digital_asset_types/src/json/chain_data.rs | 2 +- digital_asset_types/tests/common.rs | 2 +- digital_asset_types/tests/get_asset_by_id.rs | 2 +- .../tests/get_assets_by_authority.rs | 2 +- .../tests/get_assets_by_creator.rs | 2 +- .../tests/get_assets_by_group.rs | 2 +- .../tests/get_assets_by_owner.rs | 2 +- digital_asset_types/tests/json_parsing.rs | 2 +- .../src/program_transformers/bubblegum/db.rs | 2 - .../program_transformers/bubblegum/mint_v1.rs | 13 +- .../src/program_transformers/bubblegum/mod.rs | 13 +- .../bubblegum/update_metadata.rs | 10 +- .../token_metadata/master_edition.rs | 13 +- .../token_metadata/v1_asset.rs | 29 ++-- tools/acc_forwarder/src/main.rs | 4 +- tools/load_generation/src/main.rs | 131 +++++++++--------- 19 files changed, 121 insertions(+), 120 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 376aff9ae..b80a2977c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ anyhow = "1.0.75" async-std = "1.0.0" async-trait = "0.1.60" base64 = "0.21.0" -blockbuster = "=0.9.0-beta.5" +blockbuster = { version = "0.9.0-beta.5", git = "https://github.com/metaplex-foundation/blockbuster.git", rev = "421272e062461c054691e8bb587caa6e7a15fe71" } borsh = "~0.10.3" borsh-derive = "~0.10.3" bs58 = "0.4.0" @@ -54,10 +54,10 @@ lazy_static = "1.4.0" log = "0.4.17" metrics = "0.20.1" mime_guess = "2.0.4" -mpl-bubblegum = "=1.0.1-beta.4" +mpl-bubblegum = "1.2.0" mpl-candy-guard = "2.0.0" mpl-candy-machine-core = "2.0.1" -mpl-token-metadata = "=2.0.0-beta.1" +mpl-token-metadata = "4.0.1" nft_ingester = { path = "nft_ingester" } num-derive = "0.3.3" num-integer = { version = "0.1.44", default_features = false } diff --git a/das_api/Cargo.toml b/das_api/Cargo.toml index c56afe88f..b975e21dc 100644 --- a/das_api/Cargo.toml +++ b/das_api/Cargo.toml @@ -23,7 +23,7 @@ metrics = { workspace = true } mpl-bubblegum = { workspace = true } mpl-candy-guard = { workspace = true, features = ["no-entrypoint"] } mpl-candy-machine-core = { workspace = true, features = ["no-entrypoint"] } -mpl-token-metadata = { workspace = true, features = ["serde-feature"] } +mpl-token-metadata = { workspace = true, features = ["serde"] } open-rpc-derive = { workspace = true } open-rpc-schema = { workspace = true } schemars = { workspace = true } diff --git a/digital_asset_types/src/dao/generated/prelude.rs b/digital_asset_types/src/dao/generated/prelude.rs index 070ecee41..4eabcb4a7 100644 --- a/digital_asset_types/src/dao/generated/prelude.rs +++ b/digital_asset_types/src/dao/generated/prelude.rs @@ -1,5 +1,7 @@ //! SeaORM Entity. Generated by sea-orm-codegen 0.9.3 +#![allow(unused_imports)] + pub use super::asset::Entity as Asset; pub use super::asset_authority::Entity as AssetAuthority; pub use super::asset_creators::Entity as AssetCreators; diff --git a/digital_asset_types/src/json/chain_data.rs b/digital_asset_types/src/json/chain_data.rs index aebbb7383..f12fc0d6f 100644 --- a/digital_asset_types/src/json/chain_data.rs +++ b/digital_asset_types/src/json/chain_data.rs @@ -1,4 +1,4 @@ -use blockbuster::token_metadata::state::{TokenStandard, Uses}; +use blockbuster::token_metadata::types::{TokenStandard, Uses}; use serde::{Deserialize, Serialize}; pub enum ChainData { diff --git a/digital_asset_types/tests/common.rs b/digital_asset_types/tests/common.rs index e486ef289..83e3927ff 100644 --- a/digital_asset_types/tests/common.rs +++ b/digital_asset_types/tests/common.rs @@ -1,4 +1,4 @@ -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Collection, Creator, TokenStandard, Uses}; use digital_asset_types::dao::sea_orm_active_enums::{ SpecificationAssetClass, SpecificationVersions, }; diff --git a/digital_asset_types/tests/get_asset_by_id.rs b/digital_asset_types/tests/get_asset_by_id.rs index f20b443d9..7af4ecae0 100644 --- a/digital_asset_types/tests/get_asset_by_id.rs +++ b/digital_asset_types/tests/get_asset_by_id.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod common; -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Creator, TokenStandard}; use common::*; use digital_asset_types::dao::sea_orm_active_enums::*; use digital_asset_types::dao::{ diff --git a/digital_asset_types/tests/get_assets_by_authority.rs b/digital_asset_types/tests/get_assets_by_authority.rs index 5796c6c55..4735b9149 100644 --- a/digital_asset_types/tests/get_assets_by_authority.rs +++ b/digital_asset_types/tests/get_assets_by_authority.rs @@ -4,7 +4,7 @@ mod common; use sea_orm::{entity::prelude::*, DatabaseBackend, MockDatabase}; use solana_sdk::{signature::Keypair, signer::Signer}; -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Creator, TokenStandard}; use common::*; use digital_asset_types::dao::sea_orm_active_enums::*; use digital_asset_types::dao::{ diff --git a/digital_asset_types/tests/get_assets_by_creator.rs b/digital_asset_types/tests/get_assets_by_creator.rs index 6bcf85c9c..bbc4c0eea 100644 --- a/digital_asset_types/tests/get_assets_by_creator.rs +++ b/digital_asset_types/tests/get_assets_by_creator.rs @@ -6,7 +6,7 @@ use sea_orm::{ }; use solana_sdk::{signature::Keypair, signer::Signer}; -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Creator, TokenStandard}; use common::*; use digital_asset_types::dao::sea_orm_active_enums::*; use digital_asset_types::dao::{ diff --git a/digital_asset_types/tests/get_assets_by_group.rs b/digital_asset_types/tests/get_assets_by_group.rs index b8bdb35ad..2ff0ec7a8 100644 --- a/digital_asset_types/tests/get_assets_by_group.rs +++ b/digital_asset_types/tests/get_assets_by_group.rs @@ -6,7 +6,7 @@ use sea_orm::{ }; use solana_sdk::{signature::Keypair, signer::Signer}; -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Creator, TokenStandard}; use common::*; use digital_asset_types::dao::sea_orm_active_enums::*; use digital_asset_types::dao::{ diff --git a/digital_asset_types/tests/get_assets_by_owner.rs b/digital_asset_types/tests/get_assets_by_owner.rs index 5796c6c55..4735b9149 100644 --- a/digital_asset_types/tests/get_assets_by_owner.rs +++ b/digital_asset_types/tests/get_assets_by_owner.rs @@ -4,7 +4,7 @@ mod common; use sea_orm::{entity::prelude::*, DatabaseBackend, MockDatabase}; use solana_sdk::{signature::Keypair, signer::Signer}; -use blockbuster::token_metadata::state::*; +use blockbuster::token_metadata::types::{Creator, TokenStandard}; use common::*; use digital_asset_types::dao::sea_orm_active_enums::*; use digital_asset_types::dao::{ diff --git a/digital_asset_types/tests/json_parsing.rs b/digital_asset_types/tests/json_parsing.rs index 571bfc199..e630c91ff 100644 --- a/digital_asset_types/tests/json_parsing.rs +++ b/digital_asset_types/tests/json_parsing.rs @@ -1,5 +1,5 @@ #[cfg(test)] -use blockbuster::token_metadata::state::TokenStandard as TSBlockbuster; +use blockbuster::token_metadata::types::TokenStandard as TSBlockbuster; use digital_asset_types::dao::asset_data; use digital_asset_types::dao::sea_orm_active_enums::{ChainMutability, Mutability}; use digital_asset_types::dapi::common::v1_content_from_json; diff --git a/nft_ingester/src/program_transformers/bubblegum/db.rs b/nft_ingester/src/program_transformers/bubblegum/db.rs index 7e5aafc83..0a4bafa16 100644 --- a/nft_ingester/src/program_transformers/bubblegum/db.rs +++ b/nft_ingester/src/program_transformers/bubblegum/db.rs @@ -2,7 +2,6 @@ use crate::error::IngesterError; use digital_asset_types::dao::{ asset, asset_authority, asset_creators, asset_data, asset_grouping, backfill_items, cl_audits_v2, cl_items, - extensions::instruction::PascalCase, sea_orm_active_enums::{ ChainMutability, Instruction, Mutability, OwnerType, RoyaltyTargetType, SpecificationAssetClass, SpecificationVersions, @@ -14,7 +13,6 @@ use sea_orm::{ query::*, sea_query::OnConflict, ActiveValue::Set, ColumnTrait, DbBackend, EntityTrait, }; use spl_account_compression::events::ChangeLogEventV1; -use std::collections::HashSet; pub async fn save_changelog_event<'c, T>( change_log_event: &ChangeLogEventV1, diff --git a/nft_ingester/src/program_transformers/bubblegum/mint_v1.rs b/nft_ingester/src/program_transformers/bubblegum/mint_v1.rs index 25a69d472..5ea330cd8 100644 --- a/nft_ingester/src/program_transformers/bubblegum/mint_v1.rs +++ b/nft_ingester/src/program_transformers/bubblegum/mint_v1.rs @@ -1,17 +1,17 @@ use crate::{ error::IngesterError, program_transformers::bubblegum::{ - save_changelog_event, upsert_asset_authority, upsert_asset_base_info, - upsert_asset_creators, upsert_asset_data, upsert_asset_with_compression_info, - upsert_asset_with_leaf_info, upsert_asset_with_owner_and_delegate_info, - upsert_asset_with_seq, upsert_collection_info, + bgum_use_method_to_token_metadata_use_method, save_changelog_event, upsert_asset_authority, + upsert_asset_base_info, upsert_asset_creators, upsert_asset_data, + upsert_asset_with_compression_info, upsert_asset_with_leaf_info, + upsert_asset_with_owner_and_delegate_info, upsert_asset_with_seq, upsert_collection_info, }, tasks::{DownloadMetadata, IntoTaskData, TaskData}, }; use blockbuster::{ instruction::InstructionBundle, programs::bubblegum::{BubblegumInstruction, LeafSchema, Payload}, - token_metadata::state::{TokenStandard, UseMethod, Uses}, + token_metadata::types::{TokenStandard, Uses}, }; use chrono::Utc; use digital_asset_types::{ @@ -22,7 +22,6 @@ use digital_asset_types::{ json::ChainDataV1, }; use log::warn; -use num_traits::FromPrimitive; use sea_orm::{query::*, ConnectionTrait, JsonValue}; pub async fn mint_v1<'c, T>( @@ -72,7 +71,7 @@ where primary_sale_happened: metadata.primary_sale_happened, token_standard: Some(TokenStandard::NonFungible), uses: metadata.uses.clone().map(|u| Uses { - use_method: UseMethod::from_u8(u.use_method as u8).unwrap(), + use_method: bgum_use_method_to_token_metadata_use_method(u.use_method), remaining: u.remaining, total: u.total, }), diff --git a/nft_ingester/src/program_transformers/bubblegum/mod.rs b/nft_ingester/src/program_transformers/bubblegum/mod.rs index 4a4484f12..8e1522072 100644 --- a/nft_ingester/src/program_transformers/bubblegum/mod.rs +++ b/nft_ingester/src/program_transformers/bubblegum/mod.rs @@ -1,7 +1,8 @@ use blockbuster::{ self, instruction::InstructionBundle, - programs::bubblegum::{BubblegumInstruction, InstructionName}, + programs::bubblegum::{BubblegumInstruction, InstructionName, UseMethod as BubblegumUseMethod}, + token_metadata::types::UseMethod as TokenMetadataUseMethod, }; use log::{debug, info}; use sea_orm::{ConnectionTrait, TransactionTrait}; @@ -115,3 +116,13 @@ fn u32_to_u8_array(value: u32) -> [u8; 8] { result[..4].copy_from_slice(&bytes); result } + +const fn bgum_use_method_to_token_metadata_use_method( + bubblegum_use_method: BubblegumUseMethod, +) -> TokenMetadataUseMethod { + match bubblegum_use_method { + BubblegumUseMethod::Burn => TokenMetadataUseMethod::Burn, + BubblegumUseMethod::Multiple => TokenMetadataUseMethod::Multiple, + BubblegumUseMethod::Single => TokenMetadataUseMethod::Single, + } +} diff --git a/nft_ingester/src/program_transformers/bubblegum/update_metadata.rs b/nft_ingester/src/program_transformers/bubblegum/update_metadata.rs index 8d32c87e4..586a0a18d 100644 --- a/nft_ingester/src/program_transformers/bubblegum/update_metadata.rs +++ b/nft_ingester/src/program_transformers/bubblegum/update_metadata.rs @@ -1,15 +1,16 @@ use crate::{ error::IngesterError, program_transformers::bubblegum::{ - save_changelog_event, upsert_asset_base_info, upsert_asset_creators, upsert_asset_data, - upsert_asset_with_leaf_info, upsert_asset_with_seq, + bgum_use_method_to_token_metadata_use_method, save_changelog_event, upsert_asset_base_info, + upsert_asset_creators, upsert_asset_data, upsert_asset_with_leaf_info, + upsert_asset_with_seq, }, tasks::{DownloadMetadata, IntoTaskData, TaskData}, }; use blockbuster::{ instruction::InstructionBundle, programs::bubblegum::{BubblegumInstruction, LeafSchema, Payload}, - token_metadata::state::{TokenStandard, UseMethod, Uses}, + token_metadata::types::{TokenStandard, Uses}, }; use chrono::Utc; use digital_asset_types::{ @@ -20,7 +21,6 @@ use digital_asset_types::{ json::ChainDataV1, }; use log::warn; -use num_traits::FromPrimitive; use sea_orm::{query::*, ConnectionTrait, JsonValue}; pub async fn update_metadata<'c, T>( @@ -87,7 +87,7 @@ where primary_sale_happened, token_standard: Some(TokenStandard::NonFungible), uses: current_metadata.uses.clone().map(|u| Uses { - use_method: UseMethod::from_u8(u.use_method as u8).unwrap(), + use_method: bgum_use_method_to_token_metadata_use_method(u.use_method), remaining: u.remaining, total: u.total, }), diff --git a/nft_ingester/src/program_transformers/token_metadata/master_edition.rs b/nft_ingester/src/program_transformers/token_metadata/master_edition.rs index ebb3ad942..92cf75afe 100644 --- a/nft_ingester/src/program_transformers/token_metadata/master_edition.rs +++ b/nft_ingester/src/program_transformers/token_metadata/master_edition.rs @@ -1,5 +1,8 @@ use crate::error::IngesterError; -use blockbuster::token_metadata::state::{Key, MasterEditionV1, MasterEditionV2}; +use blockbuster::token_metadata::{ + accounts::{DeprecatedMasterEditionV1, MasterEdition}, + types::Key, +}; use digital_asset_types::dao::{ asset, asset_v1_account_attachments, extensions, sea_orm_active_enums::{SpecificationAssetClass, V1AccountAttachments}, @@ -13,7 +16,7 @@ use sea_orm::{ pub async fn save_v2_master_edition( id: FBPubkey, slot: u64, - me_data: &MasterEditionV2, + me_data: &MasterEdition, txn: &DatabaseTransaction, ) -> Result<(), IngesterError> { save_master_edition( @@ -29,10 +32,10 @@ pub async fn save_v2_master_edition( pub async fn save_v1_master_edition( id: FBPubkey, slot: u64, - me_data: &MasterEditionV1, + me_data: &DeprecatedMasterEditionV1, txn: &DatabaseTransaction, ) -> Result<(), IngesterError> { - let bridge = MasterEditionV2 { + let bridge = MasterEdition { supply: me_data.supply, max_supply: me_data.max_supply, key: Key::MasterEditionV1, // is this weird? @@ -50,7 +53,7 @@ pub async fn save_master_edition( _version: V1AccountAttachments, id: FBPubkey, slot: u64, - me_data: &MasterEditionV2, + me_data: &MasterEdition, txn: &DatabaseTransaction, ) -> Result<(), IngesterError> { let id_bytes = id.0.to_vec(); diff --git a/nft_ingester/src/program_transformers/token_metadata/v1_asset.rs b/nft_ingester/src/program_transformers/token_metadata/v1_asset.rs index 8533c8949..5983ee453 100644 --- a/nft_ingester/src/program_transformers/token_metadata/v1_asset.rs +++ b/nft_ingester/src/program_transformers/token_metadata/v1_asset.rs @@ -1,8 +1,8 @@ use crate::tasks::{DownloadMetadata, IntoTaskData}; use crate::{error::IngesterError, metric, tasks::TaskData}; use blockbuster::token_metadata::{ - pda::find_master_edition_account, - state::{Metadata, TokenStandard, UseMethod, Uses}, + accounts::{MasterEdition, Metadata}, + types::TokenStandard, }; use cadence_macros::{is_global_default_set, statsd_count}; use chrono::Utc; @@ -20,14 +20,12 @@ use digital_asset_types::{ }; use lazy_static::lazy_static; use log::warn; -use num_traits::FromPrimitive; use plerkle_serialization::Pubkey as FBPubkey; use sea_orm::{ entity::*, query::*, sea_query::OnConflict, ActiveValue::Set, ConnectionTrait, DbBackend, DbErr, EntityTrait, JsonValue, }; use solana_sdk::pubkey::Pubkey; -use std::collections::HashSet; use std::str::FromStr; use std::time::Duration; use tokio::time::sleep; @@ -73,16 +71,15 @@ pub async fn save_v1_asset( slot: u64, ) -> Result, IngesterError> { let metadata = metadata.clone(); - let data = metadata.data; let mint_pubkey = metadata.mint; let mint_pubkey_array = mint_pubkey.to_bytes(); let mint_pubkey_vec = mint_pubkey_array.to_vec(); - let (edition_attachment_address, _) = find_master_edition_account(&mint_pubkey); + let (edition_attachment_address, _) = MasterEdition::find_pda(&mint_pubkey); let authority = metadata.update_authority.to_bytes().to_vec(); let slot_i = slot as i64; - let uri = data.uri.trim().replace('\0', ""); + let uri = metadata.uri.trim().replace('\0', ""); let _spec = SpecificationVersions::V1; let mut class = match metadata.token_standard { Some(TokenStandard::NonFungible) => SpecificationAssetClass::Nft, @@ -179,19 +176,15 @@ pub async fn save_v1_asset( } }; - let name = data.name.clone().into_bytes(); - let symbol = data.symbol.clone().into_bytes(); + let name = metadata.name.clone().into_bytes(); + let symbol = metadata.symbol.clone().into_bytes(); let mut chain_data = ChainDataV1 { - name: data.name.clone(), - symbol: data.symbol.clone(), + name: metadata.name.clone(), + symbol: metadata.symbol.clone(), edition_nonce: metadata.edition_nonce, primary_sale_happened: metadata.primary_sale_happened, token_standard: metadata.token_standard, - uses: metadata.uses.map(|u| Uses { - use_method: UseMethod::from_u8(u.use_method as u8).unwrap(), - remaining: u.remaining, - total: u.total, - }), + uses: metadata.uses, }; chain_data.sanitize(); let chain_data_json = serde_json::to_value(chain_data) @@ -259,7 +252,7 @@ pub async fn save_v1_asset( compressible: Set(false), royalty_target_type: Set(RoyaltyTargetType::Creators), royalty_target: Set(None), - royalty_amount: Set(data.seller_fee_basis_points as i32), //basis points + royalty_amount: Set(metadata.seller_fee_basis_points as i32), //basis points asset_data: Set(Some(mint_pubkey_vec.clone())), slot_updated: Set(Some(slot_i)), burnt: Set(false), @@ -380,7 +373,7 @@ pub async fn save_v1_asset( .map_err(|db_err| IngesterError::AssetIndexError(db_err.to_string()))?; } - let creators = data + let creators = metadata .creators .unwrap_or_default() .iter() diff --git a/tools/acc_forwarder/src/main.rs b/tools/acc_forwarder/src/main.rs index f90655c16..3c7c96279 100644 --- a/tools/acc_forwarder/src/main.rs +++ b/tools/acc_forwarder/src/main.rs @@ -4,7 +4,7 @@ use { figment::{map, value::Value}, futures::{future::try_join_all, stream::StreamExt}, log::{info, warn}, - mpl_token_metadata::{pda::find_metadata_account, state::Metadata}, + mpl_token_metadata::accounts::Metadata, plerkle_messenger::{MessengerConfig, ACCOUNT_BACKFILL_STREAM}, plerkle_serialization::{ serializer::serialize_account, solana_geyser_plugin_interface_shims::ReplicaAccountInfoV2, @@ -150,7 +150,7 @@ async fn main() -> anyhow::Result<()> { Action::Mint { mint } => { let mint = Pubkey::from_str(&mint).with_context(|| format!("failed to parse mint {mint}"))?; - let metadata_account = find_metadata_account(&mint).0; + let metadata_account = Metadata::find_pda(&mint).0; let token_account = get_token_largest_account(&client, mint).await; match token_account { diff --git a/tools/load_generation/src/main.rs b/tools/load_generation/src/main.rs index d6bf340bf..c8f1e48c2 100644 --- a/tools/load_generation/src/main.rs +++ b/tools/load_generation/src/main.rs @@ -1,5 +1,12 @@ use { - mpl_token_metadata::state::Creator, + mpl_token_metadata::{ + accounts::{MasterEdition, Metadata}, + instructions::{ + CreateMasterEditionV3Builder, CreateMetadataAccountV3Builder, + SetAndVerifyCollectionBuilder, UpdateMetadataAccountV2Builder, + }, + types::{Creator, DataV2}, + }, solana_client::{ client_error::ClientError, nonblocking::rpc_client::RpcClient, rpc_request::RpcError::RpcRequestError, @@ -171,82 +178,70 @@ pub async fn make_a_nft_thing( 1, ) .await?; - let prg_uid = mpl_token_metadata::id(); - let _metadata_seeds = &[ - mpl_token_metadata::state::PREFIX.as_bytes(), - prg_uid.to_bytes().as_ref(), - mint.as_ref(), - ]; - let (pubkey, _) = mpl_token_metadata::pda::find_metadata_account(&mint); - let (edition_pubkey, _) = mpl_token_metadata::pda::find_master_edition_account(&mint); + let prg_uid = mpl_token_metadata::ID; + let _metadata_seeds = &[Metadata::PREFIX, prg_uid.to_bytes().as_ref(), mint.as_ref()]; + let (pubkey, _) = Metadata::find_pda(&mint); + let (edition_pubkey, _) = MasterEdition::find_pda(&mint); let tx = Transaction::new_signed_with_payer( - &[ - mpl_token_metadata::instruction::create_metadata_accounts_v3( - prg_uid, - pubkey, - mint, - payer.pubkey(), - payer.pubkey(), - payer.pubkey(), - "fake".to_string(), - "fake".to_string(), - "https://usd363wqbeq4xmuyddhbicmvm5yzegh4ulnsmp67jebxi6mqe45q.arweave.net/pIe_btAJIcuymBjOFAmVZ3GSGPyi2yY_30kDdHmQJzs".to_string(), - Some(vec![Creator { - address: payer.pubkey(), - verified: true, - share: 100, - }]), - 0, - true, - true, - None, - None, - None, - ), - mpl_token_metadata::instruction::create_master_edition_v3( - prg_uid, - edition_pubkey, - mint, - payer.pubkey(), - payer.pubkey(), - pubkey, - payer.pubkey(), - Some(0), - ), + &[CreateMetadataAccountV3Builder::new() + .metadata(pubkey) + .mint(mint) + .mint_authority(payer.pubkey()) + .payer(payer.pubkey()) + .update_authority(payer.pubkey(), true) + .data(DataV2 { + name: "fake".to_string(), + symbol: "fake".to_string(), + uri: "https://usd363wqbeq4xmuyddhbicmvm5yzegh4ulnsmp67jebxi6mqe45q.arweave.net/pIe_btAJIcuymBjOFAmVZ3GSGPyi2yY_30kDdHmQJzs".to_string(), + creators: Some(vec![Creator { + address: payer.pubkey(), + verified: true, + share: 100, + }]), + collection: None, + seller_fee_basis_points: 0, + uses: None, + }) + .is_mutable(true) + .instruction(), + + CreateMasterEditionV3Builder::new() + .edition(edition_pubkey) + .mint(mint) + .update_authority(payer.pubkey()) + .mint_authority(payer.pubkey()) + .metadata(pubkey) + .payer(payer.pubkey()) + .max_supply(0) + .instruction() ], Some(&payer.pubkey()), &[payer.as_ref()], solana_client.get_latest_blockhash().await?, ); solana_client.send_and_confirm_transaction(&tx).await?; - let mut ix = vec![ - mpl_token_metadata::instruction::update_metadata_accounts_v2( - prg_uid, - pubkey, - payer.pubkey(), - None, - None, - None, - Some(false), - ), - ]; + let mut ix = vec![UpdateMetadataAccountV2Builder::new() + .metadata(pubkey) + .update_authority(payer.pubkey()) + .is_mutable(false) + .instruction()]; if let Some(collection_mint) = collection_mint { - let (collection_metadata, _u8) = - mpl_token_metadata::pda::find_metadata_account(&collection_mint); - let (collection_master_edition, _u8) = - mpl_token_metadata::pda::find_master_edition_account(&collection_mint); - ix.push(mpl_token_metadata::instruction::set_and_verify_collection( - prg_uid, - pubkey, - payer.pubkey(), - payer.pubkey(), - payer.pubkey(), - collection_mint, - collection_metadata, - collection_master_edition, - None, - )); + let (collection_metadata, _u8) = Metadata::find_pda(&collection_mint); + let (collection_master_edition, _u8) = MasterEdition::find_pda(&collection_mint); + + ix.push( + SetAndVerifyCollectionBuilder::new() + .metadata(pubkey) + .collection_authority(payer.pubkey()) + .payer(payer.pubkey()) + .update_authority(payer.pubkey()) + .collection_mint(collection_mint) + .collection(collection_metadata) + .collection_master_edition_account(collection_master_edition) + .collection_authority_record(None) + .instruction(), + ); } let tx = Transaction::new_signed_with_payer( &ix, From bb65fb1b40ac295d4ecae549367afab173b3285e Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:25:51 -0800 Subject: [PATCH 2/6] Remove candy machine and candy guard --- Cargo.toml | 2 -- das_api/Cargo.toml | 2 -- 2 files changed, 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b80a2977c..1643420bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,8 +55,6 @@ log = "0.4.17" metrics = "0.20.1" mime_guess = "2.0.4" mpl-bubblegum = "1.2.0" -mpl-candy-guard = "2.0.0" -mpl-candy-machine-core = "2.0.1" mpl-token-metadata = "4.0.1" nft_ingester = { path = "nft_ingester" } num-derive = "0.3.3" diff --git a/das_api/Cargo.toml b/das_api/Cargo.toml index b975e21dc..b54152424 100644 --- a/das_api/Cargo.toml +++ b/das_api/Cargo.toml @@ -21,8 +21,6 @@ jsonrpsee-core = { workspace = true, features =["server"]} log = { workspace = true } metrics = { workspace = true } mpl-bubblegum = { workspace = true } -mpl-candy-guard = { workspace = true, features = ["no-entrypoint"] } -mpl-candy-machine-core = { workspace = true, features = ["no-entrypoint"] } mpl-token-metadata = { workspace = true, features = ["serde"] } open-rpc-derive = { workspace = true } open-rpc-schema = { workspace = true } From df525b787952f9f072eb7c70116efd4242dbd2ce Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:29:25 -0800 Subject: [PATCH 3/6] Update lock file --- Cargo.lock | 354 +++++++---------------------------------------------- 1 file changed, 45 insertions(+), 309 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7fe2160d5..d27f63696 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,7 +35,7 @@ dependencies = [ "solana-client", "solana-sdk", "solana-transaction-status", - "spl-token 4.0.0", + "spl-token", "tokio", "txn_forwarder", ] @@ -988,8 +988,7 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "blockbuster" version = "0.9.0-beta.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a32a0edd58b3aaaf55684bc9ad82e012b3345cb46a25fcae507b3b9034b83d44" +source = "git+https://github.com/metaplex-foundation/blockbuster.git?rev=421272e062461c054691e8bb587caa6e7a15fe71#421272e062461c054691e8bb587caa6e7a15fe71" dependencies = [ "anchor-lang", "async-trait", @@ -999,14 +998,12 @@ dependencies = [ "lazy_static", "log", "mpl-bubblegum", - "mpl-candy-guard", - "mpl-candy-machine-core", "mpl-token-metadata", "plerkle_serialization", "solana-sdk", "spl-account-compression", "spl-noop", - "spl-token 4.0.0", + "spl-token", "thiserror", ] @@ -1632,38 +1629,14 @@ dependencies = [ "zeroize", ] -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - [[package]] name = "darling" version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2 1.0.69", - "quote 1.0.33", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -1680,24 +1653,13 @@ dependencies = [ "syn 2.0.38", ] -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core 0.13.4", - "quote 1.0.33", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "darling_core 0.20.3", + "darling_core", "quote 1.0.33", "syn 2.0.38", ] @@ -1721,8 +1683,6 @@ dependencies = [ "log", "metrics", "mpl-bubblegum", - "mpl-candy-guard", - "mpl-candy-machine-core", "mpl-token-metadata", "open-rpc-derive", "open-rpc-schema", @@ -2761,6 +2721,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -2771,6 +2732,7 @@ checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", "hashbrown 0.14.1", + "serde", ] [[package]] @@ -3095,7 +3057,7 @@ dependencies = [ "solana-program", "solana-sdk", "spl-associated-token-account", - "spl-token 4.0.0", + "spl-token", "tokio", ] @@ -3270,9 +3232,9 @@ dependencies = [ [[package]] name = "mpl-bubblegum" -version = "1.0.1-beta.4" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e59d102fe6f8b063a06a226874ea815b269316390ce3bf991b29ea9c54ccc467" +checksum = "b3cbca5deb859e66a1a21ada94f2eaab3eb5caa4584c0c8ade0efac29a5414b8" dependencies = [ "borsh 0.10.3", "kaigan", @@ -3282,122 +3244,21 @@ dependencies = [ "thiserror", ] -[[package]] -name = "mpl-candy-guard" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c5c2ffb233226e0c531f1cf800909e46120e98722eeb53dae68b0996303a38" -dependencies = [ - "anchor-lang", - "arrayref", - "mpl-candy-guard-derive", - "mpl-candy-machine-core", - "mpl-token-auth-rules", - "mpl-token-metadata", - "solana-gateway", - "solana-program", - "spl-associated-token-account", - "spl-token 4.0.0", - "spl-token-2022 0.9.0", -] - -[[package]] -name = "mpl-candy-guard-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18e4d3002ea881e94a238798faf87a006a687297a24bd4b3f810fbb63611173d" -dependencies = [ - "quote 1.0.33", - "syn 1.0.109", -] - -[[package]] -name = "mpl-candy-machine-core" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4db99e1aac3bdebf907338aec5f1785701b8a82e6bdac5f42a270750d37c5264" -dependencies = [ - "anchor-lang", - "arrayref", - "mpl-token-auth-rules", - "mpl-token-metadata", - "solana-program", - "spl-associated-token-account", - "spl-token 4.0.0", -] - -[[package]] -name = "mpl-token-auth-rules" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b1ec5ee0570f688cc84ff4624c5c50732f1a2bfc789f6b34af5b563428d971" -dependencies = [ - "borsh 0.10.3", - "bytemuck", - "mpl-token-metadata-context-derive 0.2.1", - "num-derive 0.3.3", - "num-traits", - "rmp-serde", - "serde", - "shank", - "solana-program", - "solana-zk-token-sdk", - "thiserror", -] - [[package]] name = "mpl-token-metadata" -version = "2.0.0-beta.1" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3545bd5fe73416f6514cd93899612e0e138619e72df8bc7d19906a12688c69e" +checksum = "2149cabad4ad39d507ab4d210ecac06138f00a9afa17603f4b54af2c13f27499" dependencies = [ - "arrayref", "borsh 0.10.3", - "mpl-token-auth-rules", - "mpl-token-metadata-context-derive 0.3.0", - "mpl-utils", "num-derive 0.3.3", "num-traits", "serde", - "serde_with 1.14.0", - "shank", + "serde_with 3.6.0", "solana-program", - "spl-associated-token-account", - "spl-token 4.0.0", "thiserror", ] -[[package]] -name = "mpl-token-metadata-context-derive" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12989bc45715b0ee91944855130131479f9c772e198a910c3eb0ea327d5bffc3" -dependencies = [ - "quote 1.0.33", - "syn 1.0.109", -] - -[[package]] -name = "mpl-token-metadata-context-derive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a739019e11d93661a64ef5fe108ab17c79b35961e944442ff6efdd460ad01a" -dependencies = [ - "quote 1.0.33", - "syn 1.0.109", -] - -[[package]] -name = "mpl-utils" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f2e4f92aec317d5853c0cc4c03c55f5178511c45bb3dbb441aea63117bf3dc9" -dependencies = [ - "arrayref", - "solana-program", - "spl-token-2022 0.6.1", -] - [[package]] name = "native-tls" version = "0.2.11" @@ -3461,7 +3322,7 @@ dependencies = [ "solana-transaction-status", "spl-account-compression", "spl-concurrent-merkle-tree", - "spl-token 4.0.0", + "spl-token", "sqlx", "stretto", "thiserror", @@ -3626,15 +3487,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - [[package]] name = "num_enum" version = "0.6.1" @@ -3653,18 +3505,6 @@ dependencies = [ "num_enum_derive 0.7.0", ] -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2 1.0.69", - "quote 1.0.33", - "syn 1.0.109", -] - [[package]] name = "num_enum_derive" version = "0.6.1" @@ -4704,28 +4544,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "rmp" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20" -dependencies = [ - "byteorder", - "num-traits", - "paste", -] - -[[package]] -name = "rmp-serde" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - [[package]] name = "rpassword" version = "7.3.1" @@ -5267,43 +5085,50 @@ dependencies = [ [[package]] name = "serde_with" -version = "1.14.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ "serde", - "serde_with_macros 1.5.2", + "serde_with_macros 2.3.3", ] [[package]] name = "serde_with" -version = "2.3.3" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +checksum = "1b0ed1662c5a68664f45b76d18deb0e234aff37207086803165c961eb695e981" dependencies = [ + "base64 0.21.4", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.0.2", "serde", - "serde_with_macros 2.3.3", + "serde_json", + "serde_with_macros 3.6.0", + "time 0.3.29", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.13.4", + "darling", "proc-macro2 1.0.69", "quote 1.0.33", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "568577ff0ef47b879f736cd66740e022f3672788cdf002a05a4e609ea5a6fb15" dependencies = [ - "darling 0.20.3", + "darling", "proc-macro2 1.0.69", "quote 1.0.33", "syn 2.0.38", @@ -5409,40 +5234,6 @@ dependencies = [ "keccak", ] -[[package]] -name = "shank" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63e565b5e95ad88ab38f312e89444c749360641c509ef2de0093b49f55974a5" -dependencies = [ - "shank_macro", -] - -[[package]] -name = "shank_macro" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63927d22a1e8b74bda98cc6e151fcdf178b7abb0dc6c4f81e0bbf5ffe2fc4ec8" -dependencies = [ - "proc-macro2 1.0.69", - "quote 1.0.33", - "shank_macro_impl", - "syn 1.0.109", -] - -[[package]] -name = "shank_macro_impl" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce03403df682f80f4dc1efafa87a4d0cb89b03726d0565e6364bdca5b9a441" -dependencies = [ - "anyhow", - "proc-macro2 1.0.69", - "quote 1.0.33", - "serde", - "syn 1.0.109", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -5564,8 +5355,8 @@ dependencies = [ "solana-address-lookup-table-program", "solana-config-program", "solana-sdk", - "spl-token 4.0.0", - "spl-token-2022 0.9.0", + "spl-token", + "spl-token-2022", "spl-token-metadata-interface", "thiserror", "zstd", @@ -5723,19 +5514,6 @@ dependencies = [ "syn 2.0.38", ] -[[package]] -name = "solana-gateway" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d148eb75d0799f6825dc2a840b85c065e3d6d12212845add3e059163f98770e" -dependencies = [ - "borsh 0.10.3", - "num-derive 0.4.1", - "num-traits", - "solana-program", - "thiserror", -] - [[package]] name = "solana-geyser-plugin-interface" version = "1.16.16" @@ -6041,7 +5819,7 @@ dependencies = [ "solana-sdk", "solana-transaction-status", "solana-version", - "spl-token-2022 0.9.0", + "spl-token-2022", "thiserror", ] @@ -6217,9 +5995,9 @@ dependencies = [ "solana-address-lookup-table-program", "solana-sdk", "spl-associated-token-account", - "spl-memo 4.0.0", - "spl-token 4.0.0", - "spl-token-2022 0.9.0", + "spl-memo", + "spl-token", + "spl-token-2022", "thiserror", ] @@ -6369,8 +6147,8 @@ dependencies = [ "num-derive 0.4.1", "num-traits", "solana-program", - "spl-token 4.0.0", - "spl-token-2022 0.9.0", + "spl-token", + "spl-token-2022", "thiserror", ] @@ -6420,15 +6198,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-memo" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" -dependencies = [ - "solana-program", -] - [[package]] name = "spl-memo" version = "4.0.0" @@ -6499,21 +6268,6 @@ dependencies = [ "spl-type-length-value", ] -[[package]] -name = "spl-token" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.3.3", - "num-traits", - "num_enum 0.5.11", - "solana-program", - "thiserror", -] - [[package]] name = "spl-token" version = "4.0.0" @@ -6529,24 +6283,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-token-2022" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.3.3", - "num-traits", - "num_enum 0.5.11", - "solana-program", - "solana-zk-token-sdk", - "spl-memo 3.0.1", - "spl-token 3.5.0", - "thiserror", -] - [[package]] name = "spl-token-2022" version = "0.9.0" @@ -6560,9 +6296,9 @@ dependencies = [ "num_enum 0.7.0", "solana-program", "solana-zk-token-sdk", - "spl-memo 4.0.0", + "spl-memo", "spl-pod", - "spl-token 4.0.0", + "spl-token", "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", From 5ceff4477deb03f28e1ca25da0a2256768f91097 Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:38:16 -0800 Subject: [PATCH 4/6] Improve Master Edition V1 and V2 indexing --- .../program_transformers/token_metadata/master_edition.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nft_ingester/src/program_transformers/token_metadata/master_edition.rs b/nft_ingester/src/program_transformers/token_metadata/master_edition.rs index 92cf75afe..063703993 100644 --- a/nft_ingester/src/program_transformers/token_metadata/master_edition.rs +++ b/nft_ingester/src/program_transformers/token_metadata/master_edition.rs @@ -35,10 +35,12 @@ pub async fn save_v1_master_edition( me_data: &DeprecatedMasterEditionV1, txn: &DatabaseTransaction, ) -> Result<(), IngesterError> { + // This discards the deprecated `MasterEditionV1` fields + // but sets the `Key`` as `MasterEditionV1`. let bridge = MasterEdition { supply: me_data.supply, max_supply: me_data.max_supply, - key: Key::MasterEditionV1, // is this weird? + key: Key::MasterEditionV1, }; save_master_edition( V1AccountAttachments::MasterEditionV1, @@ -50,7 +52,7 @@ pub async fn save_v1_master_edition( .await } pub async fn save_master_edition( - _version: V1AccountAttachments, + version: V1AccountAttachments, id: FBPubkey, slot: u64, me_data: &MasterEdition, @@ -71,7 +73,7 @@ pub async fn save_master_edition( let model = asset_v1_account_attachments::ActiveModel { id: Set(id_bytes), - attachment_type: Set(V1AccountAttachments::MasterEditionV1), + attachment_type: Set(version), data: Set(Some(ser)), slot_updated: Set(slot as i64), ..Default::default() From ab93765d53226bdec24d45209e39fa3e165b1fcc Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:43:32 -0800 Subject: [PATCH 5/6] Update to use blockbuster published crate --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1643420bf..5b452eb57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ anyhow = "1.0.75" async-std = "1.0.0" async-trait = "0.1.60" base64 = "0.21.0" -blockbuster = { version = "0.9.0-beta.5", git = "https://github.com/metaplex-foundation/blockbuster.git", rev = "421272e062461c054691e8bb587caa6e7a15fe71" } +blockbuster = "1.0.0" borsh = "~0.10.3" borsh-derive = "~0.10.3" bs58 = "0.4.0" From 287776c9105b205c6bbdcba925bb7187c698a7ec Mon Sep 17 00:00:00 2001 From: Michael Danenberg <56533526+danenbm@users.noreply.github.com> Date: Fri, 2 Feb 2024 14:47:31 -0800 Subject: [PATCH 6/6] Update lock file --- Cargo.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d27f63696..71c8b1cdf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -987,8 +987,9 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "blockbuster" -version = "0.9.0-beta.5" -source = "git+https://github.com/metaplex-foundation/blockbuster.git?rev=421272e062461c054691e8bb587caa6e7a15fe71#421272e062461c054691e8bb587caa6e7a15fe71" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dafc426f22ebebe79dde9b33efe0e371802039f6f2b8b4d9ebf80feebe185e72" dependencies = [ "anchor-lang", "async-trait",