From 381e5d0ec751336c47cbcbbaa9f1283bcb9e542c Mon Sep 17 00:00:00 2001 From: Jimii Date: Wed, 25 Sep 2024 13:51:24 +0300 Subject: [PATCH 1/4] feat: update course to use umi and bubblegum plugin --- .../state-compression/compressed-nfts.md | 1691 ++++++----------- .../unboxed/solana-explorer-cretae-tree.png | Bin 0 -> 95579 bytes ...na-explorer-showing-cnft-transfer-logs.png | Bin 0 -> 171868 bytes 3 files changed, 584 insertions(+), 1107 deletions(-) create mode 100644 public/assets/courses/unboxed/solana-explorer-cretae-tree.png create mode 100644 public/assets/courses/unboxed/solana-explorer-showing-cnft-transfer-logs.png diff --git a/content/courses/state-compression/compressed-nfts.md b/content/courses/state-compression/compressed-nfts.md index 461bec325..11434973b 100644 --- a/content/courses/state-compression/compressed-nfts.md +++ b/content/courses/state-compression/compressed-nfts.md @@ -2,26 +2,26 @@ title: Compressed NFTs objectives: - Create a compressed NFT collection using Metaplex’s Bubblegum program - - Mint compressed NFTs using the Bubblegum TS SDK - - Transfer compressed NFTs using the Bubblegum TS SDK + - Mint compressed NFTs using the Bubblegum program + - Transfer compressed NFTs using the Bubblegum program - Read compressed NFT data using the Read API description: "How to mint, transfer and read large-scale NFT collections using Metaplex's - Bubblegum SDK." + Bubblegum Program." --- ## Summary - **Compressed NFTs (cNFTs)** use **State Compression** to hash NFT data and store the hash onchain in an account using a **concurrent Merkle tree** - structure + structure. - The cNFT data hash can’t be used to infer the cNFT data, but it can be used to - **verify** if the cNFT data you’re seeing is correct + **verify** if the cNFT data you’re seeing is correct. - Supporting RPC providers **index** cNFT data offchain when the cNFT is minted so that you can use the **Read API** to access the data - The **Metaplex Bubblegum program** is an abstraction on top of the **State Compression** program that enables you to more simply create, mint, and manage - cNFT collections + cNFT collections. ## Lesson @@ -32,10 +32,10 @@ drastically reduces costs. Solana’s transaction costs are so cheap that most users never think about how expensive minting NFTs can be at scale. The cost to set up and mint 1 million -traditional NFTs is approximately 24,000 SOL. By comparison, cNFTs can be -structured to where the same setup and mint costs 10 SOL or less. That means -anyone using NFTs at scale could cut costs by more than 1000x by using cNFTs -over traditional NFTs. +traditional NFTs using the Token Metadata Program is approximately 24,000 SOL. +By comparison, cNFTs can be structured to where the same setup and mint costs 10 +SOL or less. That means anyone using NFTs at scale could cut costs by more than +1000x by using cNFTs over traditional NFTs. However, cNFTs can be tricky to work with. Eventually, the tooling required to work with them will be sufficiently abstracted from the underlying technology @@ -47,16 +47,15 @@ pieces, so let’s dig in! Most of the costs associated with traditional NFTs come down to account storage space. Compressed NFTs use a concept called State Compression to store data in -the blockchain’s cheaper **ledger state**, using more expensive account space -only to store a “fingerprint”, or **hash**, of the data. This hash allows you to +the blockchain’s **ledger state**, only using the account state to store a +“fingerprint”, or **hash**, of the data. This hash allows you to cryptographically verify that data has not been tampered with. To both store hashes and enable verification, we use a special binary tree structure known as a **concurrent Merkle tree**. This tree structure lets us hash data together in a deterministic way to compute a single, final hash that -gets stored onchain. This final hash is significantly smaller in size than all -the original data combined, hence the “compression.” The steps to this process -are: +gets stored onchain. This final hash is significantly smaller than all the +original data combined, hence the “compression.” The steps to this process are: 1. Take any piece of data 2. Create a hash of this data @@ -80,11 +79,11 @@ track and index this data as the transactions occur. This ensures there is an offchain “cache” of the data that anyone can access and subsequently verify against the onchain root hash. -This process is _very complex_. We’ll cover some of the key concepts below but -don’t worry if you don’t understand it right away. We’ll talk more theory in the -state compression lesson and focus primarily on application to NFTs in this -lesson. You’ll be able to work with cNFTs by the end of this lesson even if you -don’t fully understand every piece of the state compression puzzle. +This process is _very complex_. We’ll cover some key concepts below but don’t +worry if you don’t understand it right away. We’ll talk more theory in the state +compression lesson and focus primarily on application to NFTs in this lesson. +You’ll be able to work with cNFTs by the end of this lesson even if you don’t +fully understand every piece of the state compression puzzle. #### Concurrent Merkle trees @@ -130,9 +129,8 @@ node adds 32 bytes to a transaction, so large trees would quickly exceed the maximum transaction size limit without caching proof nodes onchain. Each of these three values, max depth, max buffer size, and canopy depth, comes -with a tradeoff. Increasing the value of any of these values increases the size -of the account used to store the tree, thus increasing the cost to create the -tree. +with a tradeoff. Increasing the value of these values increases the size of the +account used to store the tree, thus increasing the cost to create the tree. Choosing the max depth is fairly straightforward as it directly relates to the number of leafs and therefore the amount of data you can store. If you need @@ -183,7 +181,7 @@ the Noop instruction logs related to your data will vary based on the validator, but eventually you’ll lose access to it if you’re relying directly on instruction logs. -Technically, you _can_ replay transaction state back to the genesis block but +Technically, you _can_ replay transaction state back to the genesis block, but the average team isn’t going to do that, and it certainly won’t be performant. Instead, you should use an indexer that will observe the events sent to the Noop program and store the relevant data off chain. That way you don’t need to worry @@ -197,13 +195,8 @@ main point of this lesson: how to create a cNFT collection. Fortunately, you can use tools created by Solana Foundation, the Solana developer community, and Metaplex to simplify the process. Specifically, we’ll be using the `@solana/spl-account-compression` SDK, the Metaplex Bubblegum -program, and the Bubblegum program’s corresponding TS SDK -`@metaplex-foundation/mpl-bugglegum`. - - +program `@metaplex-foundation/mpl-bugglegum` through the Umi library from +Metaplex. #### Prepare metadata @@ -214,31 +207,30 @@ something like this: ```json { - "name": "12_217_47", - "symbol": "RGB", - "description": "Random RGB Color", - "seller_fee_basis_points": 0, - "image": "https://raw.githubusercontent.com/ZYJLiu/rgb-png-generator/master/assets/12_217_47/12_217_47.png", + "name": "My Collection", + "symbol": "MC", + "description": "My Collection description", + "image": "https://lvvg33dqzykc2mbfa4ifua75t73tchjnfjbcspp3n3baabugh6qq.arweave.net/XWpt7HDOFC0wJQcQWgP9n_cxHS0qQik9-27CAAaGP6E", "attributes": [ { - "trait_type": "R", - "value": "12" + "trait_type": "Background", + "value": "transparent" }, { - "trait_type": "G", - "value": "217" + "trait_type": "Shape", + "value": "sphere" }, { - "trait_type": "B", - "value": "47" + "trait_type": "Resolution", + "value": "1920x1920" } ] } ``` -Depending on your use case, you may be able to generate this dynamically or you +Depending on your use case, you may be able to generate this dynamically, or you might want to have a JSON file prepared for each cNFT beforehand. You’ll also -need any other assets referenced by the JSON, such as the `image` url shown in +need any other assets referenced by the JSON, such as the `image` URL shown in the example above. #### Create Collection NFT @@ -246,21 +238,23 @@ the example above. If you want your cNFTs to be part of a collection, you’ll need to create a Collection NFT **before** you start minting cNFTs. This is a traditional NFT that acts as the reference binding your cNFTs together into a single collection. -You can create this NFT using the `@metaplex-foundation/js` library. Just make -sure you set `isCollection` to `true`. +This will be a Token Metadata program NFT with the fields `isCollection` set to +`true` created using the `@metaplex-foundation/mpl-token-metadata` library. You +can check out more on this in the +[NFTs with Metaplex lesson](https://github.com/solana-foundation/developer-content/blob/main/content/courses/tokens-and-nfts/nfts-with-metaplex.md) + + ```typescript -const collectionNft = await metaplex.nfts().create({ - uri: someUri, - name: "Collection NFT", - sellerFeeBasisPoints: 0, - updateAuthority: somePublicKey, - mintAuthority: somePublicKey, - tokenStandard: 0, - symbol: "Collection", - isMutable: true, - isCollection: true, -}); +const collectionMint = generateSigner(umi); + +await createNft(umi, { + mint: collectionMint, + name: `My Collection`, + uri, + sellerFeeBasisPoints: percentAmount(0), + isCollection: true, // mint as collection NFT +}).sendAndConfirm(umi); ``` #### Create Merkle tree Account @@ -326,215 +320,152 @@ is 32 bytes it’s possible to max out transaction sizes very quickly. For example, if your tree has a very low canopy depth, an NFT marketplace may only be able to support simple NFTs transfers rather than support an onchain -bidding system for your cNFTs. The canopy effectively caches proof nodes onchain -so you don’t have to pass all of them into the transaction, allowing for more -complex transactions. +bidding system for your cNFTs. The canopy effectively caches proof nodes +onchain, so you don’t have to pass all of them into the transaction, allowing +for more complex transactions. Increasing any of these three values increases the size of the account, thereby increasing the cost associated with creating it. Weigh the benefits accordingly when choosing the values. -Once you know these values, you can use the `createAllocTreeIx` helper function -from the `@solana/spl-account-compression` TS SDK to create the instruction for -creating the empty account. +Once you know these values, you can use the `createTree` method from the +`@metaplex-foundation/mpl-bubblegum` package to create your tree. This +instruction creates and initializes two accounts -```typescript -import { createAllocTreeIx } from "@solana/spl-account-compression" +1. `Merkle Tree` account that holds the merkle hash and used to verify the + authenticity of data stored. +2. `Tree Config` account that holds additional data specific to compressed NFTs + such as the tree creator, whether the tree is public. Find mnore fileds about + the fields the account stores on the + [program source code.](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/state/mod.rs#L17) + +#### Setting up Umi + +The `mpl-bubblegum` package is a plugin and cannot be used without the Umi +library from Metaplex. Umi is a framework for making JS/TS clients for onchain +programs, that was created by Metaplex. -const treeKeypair = Keypair.generate() +Note that Umi has different implementations for many concepts than web3.js, +including Keypairs, PublicKeys, and Connections. However, it is easy to convert +from web3.js versions of these items to the Umi equivalents. -const allocTreeIx = await createAllocTreeIx( - connection, - treeKeypair.publicKey, - payer.publicKey, - { maxDepth: 20; maxBufferSize: 256 }, - canopyDepth -) +To get started, we need to create an Umi instance + +```typescript +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { clusterApiUrl } from "@solana/web3.js"; + +const umi = createUmi(clusterApiUrl("devnet")); ``` -Note that this is simply a helper function for calculating the size required by -the account and creating the instruction to send to the System Program for -allocating the account. This function doesn’t interact with any -compression-specific programs yet. +The above code initializes an empty Umi instance without any signer or plugin +attached to it. You can find the exhaustive list of the plugins available +[on this Metaplex docs page](https://developers.metaplex.com/umi/metaplex-umi-plugins) -#### Use Bubblegum to Initialize Your Tree +The nxt part is to add in our imports and attach a signer to our Umi instance. + +```typescript +import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; +import { createTree, mplBubblegum } from "@metaplex-foundation/mpl-bubblegum"; +import { keypairIdentity } from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { getKeypairFromFile } from "@solana-developers/helpers"; +import { clusterApiUrl } from "@solana/web3.js"; -With the empty tree account created, you then use the Bubblegum program to -initialize the tree. In addition to the Merkle tree account, Bubblegum creates a -tree config account to add cNFT-specific tracking and functionality. +const umi = createUmi(clusterApiUrl("devnet")); -Version 0.7 of the `@metaplex-foundation/mpl-bubblegum` TS SDK provides the -helper function `createCreateTreeInstruction` for calling the `create_tree` -instruction on the Bubblegum program. As part of the call, you’ll need to derive -the `treeAuthority` PDA expected by the program. This PDA uses the tree’s -address as a seed. +// load keypair from local file system +// See https://github.com/solana-developers/helpers?tab=readme-ov-file#get-a-keypair-from-a-keypair-file +const localKeypair = await getKeypairFromFile(); + +// convert to Umi compatible keypair +const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); + +// load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance +umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); + +console.log("everythying is fine"); +``` + +#### Use Bubblegum to Initialize Your Tree + +With Umi instantiated, we are ready to call the `createTree` method to +instantiate the Merkle tree and tree config accounts. ```typescript -import { - createAllocTreeIx, - SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - SPL_NOOP_PROGRAM_ID, -} from "@solana/spl-account-compression" -import { - PROGRAM_ID as BUBBLEGUM_PROGRAM_ID, - createCreateTreeInstruction, -} from "@metaplex-foundation/mpl-bubblegum" - -... - -const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeKeypair.publicKey.toBuffer()], - BUBBLEGUM_PROGRAM_ID -) - -const createTreeIx = createCreateTreeInstruction( - { - treeAuthority, - merkleTree: treeKeypair.publicKey, - payer: payer.publicKey, - treeCreator: payer.publicKey, - logWrapper: SPL_NOOP_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - }, - { - maxBufferSize: 256, - maxDepth: 20, - public: false, - }, - BUBBLEGUM_PROGRAM_ID -) +const merkleTree = generateSigner(umi); +const builder = await createTree(umi, { + merkleTree, + maxDepth: 14, + maxBufferSize: 64, +}); +await builder.sendAndConfirm(umi); ``` -The list below shows the required input for this helper function: - -- `accounts` - An object representing the accounts required by the instruction. - This includes: - - `treeAuthority` - Bubblegum expects this to be a PDA derived using the - Merkle tree address as a seed - - `merkleTree` - The Merkle tree account - - `payer` - The address paying for transaction fees, rent, etc. - - `treeCreator` - The address to list as the tree creator - - `logWrapper` - The program to use to expose the data to indexers through - logs; this should be the address of the SPL Noop program unless you have - some other custom implementation - - `compressionProgram` - The compression program to use for initializing the - Merkle tree; this should be the address of the SPL State Compression program - unless you have some other custom implementation -- `args` - An object representing additional arguments required by the - instruction. This includes: - - `maxBufferSize` - The max buffer size of the Merkle tree - - `maxDepth` - The max depth of the Merkle tree - - `public` - When set to `true`, anyone will be able to mint cNFTs from the - tree; when set to `false`, only the tree creator or tree delegate will be - able to min cNFTs from the tree - -When submitted, this will invoke the `create_tree` instruction on the Bubblegum -program. This instruction does three things: - -1. Creates the tree config PDA account -2. Initializes the tree config account with appropriate initial values -3. Issues a CPI to the State Compression program to initialize the empty Merkle - tree account - -Feel free to take a look at the program code -[here](https://github.com/metaplex-foundation/mpl-bubblegum/blob/main/programs/bubblegum/program/src/lib.rs#L887). +The three values supplied i.e the `merkleTree`, `maxDepth` and `maxBufferSize` +are required in order to create the tree while the rest are optional. For +example, the`tree creator` defaults to the Umi instance identity, while the +`public field to false. + +When set to true, `public` allows anyone to mint from the initialized tree and +if false, only the tree creator will be able to mint from the tree. + +Feel free to take a look at the program code for the +[accounts](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L20) +and the +[arguments](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L40) +the instruction takes. #### Mint cNFTs With the Merkle tree account and its corresponding Bubblegum tree config account -initialized, it’s possible to mint cNFTs to the tree. The Bubblegum instruction -to use will be either `mint_v1` or `mint_to_collection_v1`, depending on whether -or not you want to the minted cNFT to be part of a collection. +initialized, it’s possible to mint cNFTs to the tree. The Bubblegum library, +provides two instruction we can make use of depending on whether the minted +asset will belong to a collection. -Version 0.7 of the `@metaplex-foundation/mpl-bubblegum` TS SDK provides helper -functions `createMintV1Instruction` and `createMintToCollectionV1Instruction` to -make it easier for you to create the instructions. +The two instructions are -Both functions will require you to pass in the NFT metadata and a list of -accounts required to mint the cNFT. Below is an example of minting to a -collection: +1. **MintV1** ```typescript -const mintWithCollectionIx = createMintToCollectionV1Instruction( - { - payer: payer.publicKey, - merkleTree: treeAddress, - treeAuthority, - treeDelegate: payer.publicKey, - leafOwner: destination, - leafDelegate: destination, - collectionAuthority: payer.publicKey, - collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, - collectionMint: collectionDetails.mint, - collectionMetadata: collectionDetails.metadata, - editionAccount: collectionDetails.masterEditionAccount, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - logWrapper: SPL_NOOP_PROGRAM_ID, - bubblegumSigner, - tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, - }, - { - metadataArgs: Object.assign(nftMetadata, { - collection: { key: collectionDetails.mint, verified: false }, - }), +await mintV1(umi, { + leafOwner, + merkleTree, + metadata: { + name: "My Compressed NFT", + uri: "https://example.com/my-cnft.json", + sellerFeeBasisPoints: 0, // 0% + collection: none(), + creators: [ + { address: umi.identity.publicKey, verified: false, share: 100 }, + ], }, -); +}).sendAndConfirm(umi); ``` -Notice that there are two arguments for the helper function: `accounts` and -`args`. The `args` parameter is simply the NFT metadata, while `accounts` is an -object listing the accounts required by the instruction. There are admittedly a -lot of them: - -- `payer` - the account that will pay for the transaction fees, rent, etc. -- `merkleTree` - the Merkle tree account -- `treeAuthority` - the tree authority; should be the same PDA you derived - previously -- `treeDelegate` - the tree delegate; this is usually the same as the tree - creator -- `leafOwner` - the desired owner of the compressed NFT being minted -- `leafDelegate` - the desired delegate of the compressed NFT being minted; this - is usually the same as the leaf owner -- `collectionAuthority` - the authority of the collection NFT -- `collectionAuthorityRecordPda` - optional collection authority record PDA; - there typically is none, in which case you should put the Bubblegum program - address -- `collectionMint` - the mint account for the collection NFT -- `collectionMetadata` - the metadata account for the collection NFT -- `editionAccount` - the master edition account of the collection NFT -- `compressionProgram` - the compression program to use; this should be the - address of the SPL State Compression program unless you have some other custom - implementation -- `logWrapper` - the program to use to expose the data to indexers through logs; - this should be the address of the SPL Noop program unless you have some other - custom implementation -- `bubblegumSigner` - a PDA used by the Bubblegrum program to handle collection - verification -- `tokenMetadataProgram` - the token metadata program that was used for the - collection NFT; this is usually always the Metaplex Token Metadata program - -Minting without a collection requires fewer accounts, none of which are -exclusive to minting without a collection. You can take a look at the example -below. +2. **mintToCollectionV1** ```typescript -const mintWithoutCollectionIx = createMintV1Instruction( - { - payer: payer.publicKey, - merkleTree: treeAddress, - treeAuthority, - treeDelegate: payer.publicKey, - leafOwner: destination, - leafDelegate: destination, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - logWrapper: SPL_NOOP_PROGRAM_ID, - }, - { - message: nftMetadata, +await mintToCollectionV1(umi, { + leafOwner, + merkleTree, + collectionMint, + metadata: { + name: "My Compressed NFT", + uri: "https://example.com/my-cnft.json", + sellerFeeBasisPoints: 0, // 0% + collection: { key: collectionMint, verified: false }, + creators: [ + { address: umi.identity.publicKey, verified: false, share: 100 }, + ], }, -); +}).sendAndConfirm(umi); ``` +Both functions will require you to pass in the NFT metadata and a list of +accounts required to mint the cNFT such as the `leafOwner`, `merkleTree` account +e.t.c + ### Interact with cNFTs It’s important to note that cNFTs _are not_ SPL tokens. That means your code @@ -544,15 +475,25 @@ fetching, querying, transferring, etc. #### Fetch cNFT data The simplest way to fetch data from an existing cNFT is to use the -[Digital Asset Standard Read API](https://solana.com/developers/guides/javascript/compressed-nfts#reading-compressed-nfts-metadata) -(Read API). Note that this is separate from the standard JSON RPC. To use the -Read API, you’ll need to use a supporting RPC Provider. Metaplex maintains a -(likely non-exhaustive) -[list of RPC providers](https://developers.metaplex.com/bubblegum/rpcs) that -support the Read API. In this lesson we’ll be using +[Digital Asset Standard Read API](https://developers.metaplex.com/das-api) (Read +API). Note that this is separate from the standard JSON RPC. To use the Read +API, you’ll need to use a supporting RPC Provider. Metaplex maintains a (likely +non-exhaustive) +[list of RPC providers](https://developers.metaplex.com/rpc-providers#rpcs-with-das-support) +that support the Read API. + +In this lesson we’ll be using [Helius](https://docs.helius.dev/compression-and-das-api/digital-asset-standard-das-api) as they have free support for Devnet. +You might need to update your RPC connection endpoint in the Umi instantiation + +```typescript +const umi = createUmi( + "https://devnet.helius-rpc.com/?api-key=YOUR-HELIUS-API-KEY", +); +``` + To use the Read API to fetch a specific cNFT, you need to have the cNFT’s asset ID. However, after minting cNFTs, you’ll have at most two pieces of information: @@ -584,27 +525,27 @@ happen and stores the cNFT metadata that was hashed and stored in the Merkle tree. This enables them to surface that data when requested. This asset id is what the indexer uses to identify the particular asset. -For simplicity, you can just use the `getLeafAssetId` helper function from the -Bubblegum SDK. With the asset ID, fetching the cNFT is fairly straightforward. -Simply use the `getAsset` method provided by the supporting RPC provider: +For simplicity, you can just use the `findLeafAssetIdPda` helper function from +the bubblegum library. ```typescript -const assetId = await getLeafAssetId(treeAddress, new BN(leafIndex)); -const response = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAsset", - params: { - id: assetId, - }, - }), +const [assetId, bump] = await findLeafAssetIdPda(umi, { + merkleTree, + leafIndex, +}); +``` + +With the asset ID, fetching the cNFT is fairly straightforward. Simply use the +`getAsset` method provided by the supporting RPC provider and the `dasApi` +library: + +```typescript +const [assetId, bump] = await findLeafAssetIdPda(umi, { + merkleTree, + leafIndex, }); -const { result } = await response.json(); -console.log(JSON.stringify(result, null, 2)); +const rpcAsset = await umi.rpc.getAsset(assetId); ``` This will return a JSON object that is comprehensive of what a traditional NFT’s @@ -662,138 +603,17 @@ In broad terms, this involves a five step process: 4. Prepare the asset proof as a list of `AccountMeta` objects 5. Build and send the Bubblegum transfer instruction -The first two steps are very similar. Using your supporting RPC provider, use -the `getAsset` and `getAssetProof` methods to fetch the asset data and proof, -respectively. +Fortunately, we can make use of the `transfer` method which takes care of all +these steps. ```typescript -const assetDataResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAsset", - params: { - id: assetId, - }, - }), -}); -const assetData = (await assetDataResponse.json()).result; - -const assetProofResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAssetProof", - params: { - id: assetId, - }, - }), -}); -const assetProof = (await assetProofResponse.json()).result; -``` - -The third step is to fetch the Merkle tree account. The simplest way to do this -is using the `ConcurrentMerkleTreeAccount` type from -`@solana/spl-account-compression`: - -```typescript -const treePublicKey = new PublicKey(assetData.compression.tree); +const assetWithProof = await getAssetWithProof(umi, assetId); -const treeAccount = await ConcurrentMerkleTreeAccount.fromAccountAddress( - connection, - treePublicKey, -); -``` - -Step four is the most conceptually challenging step. Using the three pieces of -information gathered, you’ll need to assemble the proof path for the cNFT’s -corresponding leaf. The proof path is represented as accounts passed to the -program instruction. The program uses each of the account addresses as proof -nodes to prove the leaf data is what you say it is. - -The full proof is provided by the indexer as shown above in `assetProof`. -However, you can exclude the same number of tail-end accounts from the proof as -the depth of the canopy. - -```typescript -const canopyDepth = treeAccount.getCanopyDepth() || 0; - -const proofPath: AccountMeta[] = assetProof.proof - .map((node: string) => ({ - pubkey: new PublicKey(node), - isSigner: false, - isWritable: false, - })) - .slice(0, assetProof.proof.length - canopyDepth); -``` - -Finally, you can assemble the transfer instruction. The instruction helper -function, `createTransferInstruction`, requires the following arguments: - -- `accounts` - a list of instruction accounts, as expected; they are as follows: - - `merkleTree` - the Merkle tree account - - `treeAuthority` - the Merkle tree authority - - `leafOwner` - the owner of the leaf (cNFT) in question - - `leafDelegate` - the delegate of the leaf (cNFT) in question; if no delegate - has been added then this should be the same as `leafOwner` - - `newLeafOwner` - the address of the new owner post-transfer - - `logWrapper` - the program to use to expose the data to indexers through - logs; this should be the address of the SPL Noop program unless you have - some other custom implementation - - `compressionProgram` - the compression program to use; this should be the - address of the SPL State Compression program unless you have some other - custom implementation - - `anchorRemainingAccounts` - this is where you add the proof path -- `args` - additional arguments required by the instruction; they are: - - `root` - the root Merkle tree node from the asset proof; this is provided by - the indexer as a string and must be converted to bytes first - - `dataHash` - the hash of the asset data retrieved from the indexer; this is - provided by the indexer as a string and must be converted to bytes first - - `creatorHash` - the hash of the cNFT creator as retrieved from the indexer; - this is provided by the indexer as a string and must be converted to bytes - first - - `nonce` - used to ensure that no two leafs have the same hash; this value - should be the same as `index` - - `index` - the index where the cNFT’s leaf is located on the Merkle tree - -An example of this is shown below. Note that the first 3 lines of code grab -additional information nested in the objects shown previously so they are ready -to go when assembling the instruction itself. - -```typescript -const treeAuthority = treeAccount.getAuthority(); -const leafOwner = new PublicKey(assetData.ownership.owner); -const leafDelegate = assetData.ownership.delegate - ? new PublicKey(assetData.ownership.delegate) - : leafOwner; - -const transferIx = createTransferInstruction( - { - merkleTree: treePublicKey, - treeAuthority, - leafOwner, - leafDelegate, - newLeafOwner: receiver, - logWrapper: SPL_NOOP_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - anchorRemainingAccounts: proofPath, - }, - { - root: [...new PublicKey(assetProof.root.trim()).toBytes()], - dataHash: [ - ...new PublicKey(assetData.compression.data_hash.trim()).toBytes(), - ], - creatorHash: [ - ...new PublicKey(assetData.compression.creator_hash.trim()).toBytes(), - ], - nonce: assetData.compression.leaf_id, - index: assetData.compression.leaf_id, - }, -); +await transfer(umi, { + ...assetWithProof, + leafOwner: currentLeafOwner, + newLeafOwner: newLeafOwner.publicKey, +}).sendAndConfirm(umi); ``` ### Conclusion @@ -803,14 +623,8 @@ fully comprehensive. You can also use Bubblegum to do things like burn, verify, delegate, and more. We won’t go through these, but these instructions are similar to the mint and transfer process. If you need this additional functionality, take a look at the -[Bubblegum client source code](https://github.com/metaplex-foundation/mpl-bubblegum/tree/main/clients/js-solita) -and leverage the helper functions it provides. - -Keep in mind that compression is fairly new. Available tooling will evolve -rapidly but the principles you’ve learned in this lesson will likely remain the -same. These principles can also be broadened to arbitrary state compression, so -be sure to master them here so you’re ready for more fun stuff in future -lessons! +[Bubblegum docs](https://developers.metaplex.com/bubblegum) on how to leverage +the helper functions it provides. ## Lab @@ -820,540 +634,391 @@ from a Merkle tree. #### 1. Get the starter code -First things first, clone the starter code from the `starter` branch of our -[cNFT lab repository](https://github.com/Unboxed-Software/solana-cnft-demo). +To begin create and initialize an empty NPM project. + +```bash +mkdir cnft-demo && npm init -y +``` + +Install all the required dependencies + +```bash +npm i @solana/web3.js npm i @solana-developers/helpers@2.5.2 npm i @metaplex-foundation/mpl-token-metadata npm i @metaplex-foundation/mpl-bubblegum @metaplex-foundation/digital-asset-standard-api npm i @metaplex-foundation/umi-bundle-defaults && npm i --save-dev esrun +``` -`git clone https://github.com/Unboxed-Software/solana-cnft-demo.git` +In this first script, we will learn about creating a tree, hence let's create +the file `create-tree.ts` -`cd solana-cnft-demo` +```bash +mkdir src && touch src/create-tree.ts +``` -`npm install` +This Umi instantiation code will be repated in a lot of files, so feel free to +create a wrapper file to instantiate if, -Take some time to familiarize yourself with the starter code provided. Most -important are the helper functions provided in `utils.ts` and the URIs provided -in `uri.ts`. +```typescript +import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; +import { createTree, mplBubblegum } from "@metaplex-foundation/mpl-bubblegum"; +import { generateSigner, keypairIdentity } from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { + getExplorerLink, + getKeypairFromFile, +} from "@solana-developers/helpers"; +import { clusterApiUrl } from "@solana/web3.js"; -The `uri.ts` file provides 10k URIs that you can use for the offchain portion of -your NFT metadata. You can, of course, create your own metadata. But this lesson -isn’t explicitly about preparing metadata so we’ve provided some for you. +const umi = createUmi(clusterApiUrl("devnet")); -The `utils.ts` file has a few helper functions to keep you from writing more -unnecessary boilerplate than you need to. They are as follows: +// load keypair from local file system +// See https://github.com/solana-developers/helpers?tab=readme-ov-file#get-a-keypair-from-a-keypair-file +const localKeypair = await getKeypairFromFile(); -- `getOrCreateKeypair` will create a new keypair for you and save it to a `.env` - file, or if there’s already a private key in the `.env` file it will - initialize a keypair from that. -- `airdropSolIfNeeded` will airdrop some Devnet SOL to a specified address if - that address’s balance is below 1 SOL. -- `createNftMetadata` will create the NFT metadata for a given creator public - key and index. The metadata it’s getting is just dummy metadata using the URI - corresponding to the provided index from the `uri.ts` list of URIs. -- `getOrCreateCollectionNFT` will fetch the collection NFT from the address - specified in `.env` or if there is none it will create a new one and add the - address to `.env`. +// convert to Umi compatible keypair +const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); -Finally, there’s some boilerplate in `index.ts` that calls creates a new Devnet -connection, calls `getOrCreateKeypair` to initialize a “wallet,” and calls -`airdropSolIfNeeded` to fund the wallet if its balance is low. +// load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance +umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); +``` -We will be writing all of our code in the `index.ts`. +In the code above, we load the user's keypair wallet from the system wallet +located at `.config/solana/id.json`, instantiate a new Umi instance and assign +the keypair to it. We also assign the Bubblegum and dasApi plugins to it as +well. #### 2. Create the Merkle tree account -We’ll start by creating the Merkle tree account. Let’s encapsulate this in a -function that will eventually create _and_ initialize the account. We’ll put it -below our `main` function in `index.ts`. Let’s call it -`createAndInitializeTree`. For this function to work, it will need the following -parameters: - -- `connection` - a `Connection` to use for interacting with the network. -- `payer` - a `Keypair` that will pay for transactions. -- `maxDepthSizePair` - a `ValidDepthSizePair`. This type comes from - `@solana/spl-account-compression`. It’s a simple object with properties - `maxDepth` and `maxBufferSize` that enforces a valid combination of the two - values. -- `canopyDepth` - a number for the canopy depth In the body of the function, - we’ll generate a new address for the tree, then create the instruction for - allocating a new Merkle tree account by calling `createAllocTreeIx` from - `@solana/spl-account-compression`. +We’ll start by creating the Merkle tree account. To do this we will use the +`createTree` method from Metaplex Bubblegum program. + +This function takes in three default values + +- `merkleTree` - The Merkle tree account address +- `maxDepth` - Determines the max number of leaves the tree will hold and + therefore the max no. of cNFTs that the tree can contain. +- `maxBufferSize` - Determines how many concurrent changes can occur in the tree + in parallel. + +You can also supply in optional fields such as + +- `treeCreator` - The address of the tree authority, defaults to current + `umi.identity` instance. +- `public` - Determines whether anyone else apart from the tree creator will be + able to mint cNFTs from the tree. ```typescript -async function createAndInitializeTree( - connection: Connection, - payer: Keypair, - maxDepthSizePair: ValidDepthSizePair, - canopyDepth: number, -) { - const treeKeypair = Keypair.generate(); - - const allocTreeIx = await createAllocTreeIx( - connection, - treeKeypair.publicKey, - payer.publicKey, - maxDepthSizePair, - canopyDepth, - ); -} +const merkleTree = generateSigner(umi); +const builder = await createTree(umi, { + merkleTree, + maxDepth: 14, + maxBufferSize: 64, +}); +await builder.sendAndConfirm(umi); + +let explorerLink = getExplorerLink("address", merkleTree.publicKey, "devnet"); +console.log(`explorer link: ${explorerLink}`); +console.log("Merkle tree address is :", merkleTree.publicKey); +console.log("✅ Finished successfully!"); ``` -#### 3. Use Bubblegum to initialize the Merkle tree and create the tree config account - -With the instruction for creating the tree ready to go, we can create an -instruction for invoking `create_tree` on the Bubblegum program. This will -initialize the Merkle tree account _and_ create a new tree config account on the -Bubblegum program. - -This instruction needs us to provide the following: - -- `accounts` - an object of required accounts; this includes: - - `treeAuthority` - this should be a PDA derived with the Merkle tree address - and the Bubblegum program - - `merkleTree` - the address of the Merkle tree - - `payer` - the transaction fee payer - - `treeCreator` - the address of the tree creator; we’ll make this the same as - `payer` - - `logWrapper` - make this the `SPL_NOOP_PROGRAM_ID` - - `compressionProgram` - make this the `SPL_ACCOUNT_COMPRESSION_PROGRAM_ID` -- `args` - a list of instruction arguments; this includes: - - `maxBufferSize` - the buffer size from our function’s `maxDepthSizePair` - parameter - - `maxDepth` - the max depth from our function’s `maxDepthSizePair` parameter - - `public` - whether or no the tree should be public; we’ll set this to - `false` - -Finally, we can add both instructions to a transaction and submit the -transaction. Keep in mind that the transaction needs to be signed by both the -`payer` and the `treeKeypair`. +Run the `create-tree.ts` script using esrun -```typescript -async function createAndInitializeTree( - connection: Connection, - payer: Keypair, - maxDepthSizePair: ValidDepthSizePair, - canopyDepth: number, -) { - const treeKeypair = Keypair.generate(); - - const allocTreeIx = await createAllocTreeIx( - connection, - treeKeypair.publicKey, - payer.publicKey, - maxDepthSizePair, - canopyDepth, - ); - - const [treeAuthority, _bump] = PublicKey.findProgramAddressSync( - [treeKeypair.publicKey.toBuffer()], - BUBBLEGUM_PROGRAM_ID, - ); - - const createTreeIx = createCreateTreeInstruction( - { - treeAuthority, - merkleTree: treeKeypair.publicKey, - payer: payer.publicKey, - treeCreator: payer.publicKey, - logWrapper: SPL_NOOP_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - }, - { - maxBufferSize: maxDepthSizePair.maxBufferSize, - maxDepth: maxDepthSizePair.maxDepth, - public: false, - }, - ); - - const tx = new Transaction().add(allocTreeIx, createTreeIx); - tx.feePayer = payer.publicKey; - - try { - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - [treeKeypair, payer], - { - commitment: "confirmed", - skipPreflight: true, - }, - ); - - console.log(`https://explorer.solana.com/tx/${txSignature}?cluster=devnet`); - - console.log("Tree Address:", treeKeypair.publicKey.toBase58()); - - return treeKeypair.publicKey; - } catch (err: any) { - console.error("\nFailed to create Merkle tree:", err); - throw err; - } -} +```bash +npx esrun create-tree.ts ``` -If you want to test what you have so far, feel free to call -`createAndInitializeTree` from `main` and provide small values for the max depth -and max buffer size. +Make sure to remember the Merkle tree address as we will be using it in the next +step when minting compressed NFTs. -```typescript -async function main() { - const connection = new Connection(clusterApiUrl("devnet"), "confirmed"); - const wallet = await getOrCreateKeypair("Wallet_1"); - await airdropSolIfNeeded(wallet.publicKey); - - const maxDepthSizePair: ValidDepthSizePair = { - maxDepth: 3, - maxBufferSize: 8, - }; - - const canopyDepth = 0; - - const treeAddress = await createAndInitializeTree( - connection, - wallet, - maxDepthSizePair, - canopyDepth, - ); -} +Your output will be similar to this + +```bash +explorer link: https://explorer.solana.com/address/ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h?cluster=devnet +Merkle tree address is : ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h +✅ Finished successfully! ``` -Keep in mind that Devnet SOL is throttled so if you test too many times you -might run out of Devnet SOL before we get to minting. To test, in your terminal -run the following: +Congratulations! You've created a Bubblegum tree. Follow the explorer link to +make sure that the process finished successfully, -`npm run start` +![Solana Explorer with details about created Merkle tree](/public/assets/courses/unboxed/solana-explorer-cretae-tree.png) -#### 4. Mint cNFTs to your tree +#### 3. Mint cNFTs to your tree Believe it or not, that’s all you needed to do to set up your tree to compressed NFTs! Now let’s turn our attention to minting. -First, let’s declare a function called `mintCompressedNftToCollection`. It will -need the following parameters: - -- `connection` - a `Connection` to use for interacting with the network. -- `payer` - a `Keypair` that will pay for transactions. -- `treeAddress` - the Merkle tree’s address -- `collectionDetails` - the details of the collection as type - `CollectionDetails` from `utils.ts` -- `amount` - the number of cNFTs to mint - -The body of this function will do the following: - -1. Derive the tree authority just like before. Again, this is a PDA derived from - the Merkle tree address and the Bubblegum program. -2. Derive the `bubblegumSigner`. This is a PDA derived from the string - `"collection_cpi"` and the Bubblegum program and is essential for minting to - a collection. -3. Create the cNFT metadata by calling `createNftMetadata` from our `utils.ts` - file. -4. Create the mint instruction by calling `createMintToCollectionV1Instruction` - from the Bubblegum SDK. -5. Build and send a transaction with the mint instruction -6. Repeat steps 3-6 `amount` number of times - -The `createMintToCollectionV1Instruction` takes two arguments: `accounts` and -`args`. The latter is simply the NFT metadata. As with all complex instructions, -the primary hurdle is knowing which accounts to provide. So let’s go through -them real quick: - -- `payer` - the account that will pay for the transaction fees, rent, etc. -- `merkleTree` - the Merkle tree account -- `treeAuthority` - the tree authority; should be the same PDA you derived - previously -- `treeDelegate` - the tree delegate; this is usually the same as the tree - creator -- `leafOwner` - the desired owner of the compressed NFT being minted -- `leafDelegate` - the desired delegate of the compressed NFT being minted; this - is usually the same as the leaf owner -- `collectionAuthority` - the authority of the collection NFT -- `collectionAuthorityRecordPda` - optional collection authority record PDA; - there typically is none, in which case you should put the Bubblegum program - address -- `collectionMint` - the mint account for the collection NFT -- `collectionMetadata` - the metadata account for the collection NFT -- `editionAccount` - the master edition account of the collection NFT -- `compressionProgram` - the compression program to use; this should be the - address of the SPL State Compression program unless you have some other custom - implementation -- `logWrapper` - the program to use to expose the data to indexers through logs; - this should be the address of the SPL Noop program unless you have some other - custom implementation -- `bubblegumSigner` - a PDA used by the Bubblegrum program to handle collection - verification -- `tokenMetadataProgram` - the token metadata program that was used for the - collection NFT; this is usually always the Metaplex Token Metadata program - -When you put it all together, this is what it’ll look like: +First, let's create a new file called `mint-compressed-nft-to-collection.ts`, +add our imports and instantiate Umi ```typescript -async function mintCompressedNftToCollection( - connection: Connection, - payer: Keypair, - treeAddress: PublicKey, - collectionDetails: CollectionDetails, - amount: number, -) { - // Derive the tree authority PDA ('TreeConfig' account for the tree account) - const [treeAuthority] = PublicKey.findProgramAddressSync( - [treeAddress.toBuffer()], - BUBBLEGUM_PROGRAM_ID, - ); - - // Derive the bubblegum signer, used by the Bubblegum program to handle "collection verification" - // Only used for `createMintToCollectionV1` instruction - const [bubblegumSigner] = PublicKey.findProgramAddressSync( - [Buffer.from("collection_cpi", "utf8")], - BUBBLEGUM_PROGRAM_ID, - ); - - for (let i = 0; i < amount; i++) { - // Compressed NFT Metadata - const compressedNFTMetadata = createNftMetadata(payer.publicKey, i); - - // Create the instruction to "mint" the compressed NFT to the tree - const mintIx = createMintToCollectionV1Instruction( - { - payer: payer.publicKey, // The account that will pay for the transaction - merkleTree: treeAddress, // The address of the tree account - treeAuthority, // The authority of the tree account, should be a PDA derived from the tree account address - treeDelegate: payer.publicKey, // The delegate of the tree account, should be the same as the tree creator by default - leafOwner: payer.publicKey, // The owner of the compressed NFT being minted to the tree - leafDelegate: payer.publicKey, // The delegate of the compressed NFT being minted to the tree - collectionAuthority: payer.publicKey, // The authority of the "collection" NFT - collectionAuthorityRecordPda: BUBBLEGUM_PROGRAM_ID, // Must be the Bubblegum program id - collectionMint: collectionDetails.mint, // The mint of the "collection" NFT - collectionMetadata: collectionDetails.metadata, // The metadata of the "collection" NFT - editionAccount: collectionDetails.masterEditionAccount, // The master edition of the "collection" NFT - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - logWrapper: SPL_NOOP_PROGRAM_ID, - bubblegumSigner, - tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, - }, - { - metadataArgs: Object.assign(compressedNFTMetadata, { - collection: { key: collectionDetails.mint, verified: false }, - }), - }, - ); - - try { - // Create new transaction and add the instruction - const tx = new Transaction().add(mintIx); - - // Set the fee payer for the transaction - tx.feePayer = payer.publicKey; - - // Send the transaction - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - [payer], - { commitment: "confirmed", skipPreflight: true }, - ); - - console.log( - `https://explorer.solana.com/tx/${txSignature}?cluster=devnet`, - ); - } catch (err) { - console.error("\nFailed to mint compressed NFT:", err); - throw err; +import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; +import { + findLeafAssetIdPda, + LeafSchema, + mintToCollectionV1, + mplBubblegum, + parseLeafFromMintToCollectionV1Transaction, +} from "@metaplex-foundation/mpl-bubblegum"; +import { + keypairIdentity, + publicKey as UMIPublicKey, +} from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { getKeypairFromFile } from "@solana-developers/helpers"; +import { clusterApiUrl } from "@solana/web3.js"; + +const umi = createUmi(clusterApiUrl("devnet")); + +// load keypair from local file system +// See https://github.com/solana-developers/helpers?tab=readme-ov-file#get-a-keypair-from-a-keypair-file +const localKeypair = await getKeypairFromFile(); + +// convert to Umi compatible keypair +const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); + +// load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance +umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); +``` + +I am going to be +[recycling a Collection NFT](https://explorer.solana.com/address/D2zi1QQmtZR5fk7wpA1Fmf6hTY2xy8xVMyNgfq6LsKy1?cluster=devnet) +I already created in the NFTs with Metaplex lesson, but if you'd like to create +a new collection for this lesson, check out the code +[on this repo](https://github.com/solana-developers/professional-education/blob/main/labs/metaplex-umi/create-collection.ts) + + + +To mint a compressed NFT to a collection we will need + +- `leafOwner` - The recipient of the compressed NFT + +- `merkleTree` - The Merkle tree address we created in the previous step + +- `collection` - The collection our cNFT will belong to. This is not required + and you can leave it out if your cNFT doesn't belong to a collection. + +- `metadata` - Your off-chain metadata. This lesson won't focus onto how to + prepare your metadata but you can check out the + [recommended structure from Metaplex](https://developers.metaplex.com/token-metadata/token-standard#the-non-fungible-standard). + +Our cNFT will use this structure we already prepared earlier. + +```json +{ + "name": "My NFT", + "symbol": "MN", + "description": "My NFT Description", + "image": "https://lycozm33rkk5ozjqldiuzc6drazmdp5d5g3g7foh3gz6rz5zp7va.arweave.net/XgTss3uKlddlMFjRTIvDiDLBv6Pptm-Vx9mz6Oe5f-o", + "attributes": [ + { + "trait_type": "Background", + "value": "transparent" + }, + { + "trait_type": "Shape", + "value": "sphere" } - } + ] } ``` -This is a great point to test with a small tree. Simply update `main` to call -`getOrCreateCollectionNFT` then `mintCompressedNftToCollection`: +Putting it all into code, we will have ```typescript -async function main() { - const connection = new Connection(clusterApiUrl("devnet"), "confirmed"); - const wallet = await getOrCreateKeypair("Wallet_1"); - await airdropSolIfNeeded(wallet.publicKey); - - const maxDepthSizePair: ValidDepthSizePair = { - maxDepth: 3, - maxBufferSize: 8, - }; - - const canopyDepth = 0; - - const treeAddress = await createAndInitializeTree( - connection, - wallet, - maxDepthSizePair, - canopyDepth, - ); - - const collectionNft = await getOrCreateCollectionNFT(connection, wallet); - - await mintCompressedNftToCollection( - connection, - wallet, - treeAddress, - collectionNft, - 2 ** maxDepthSizePair.maxDepth, - ); -} +const merkleTree = UMIPublicKey("ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h"); + +const collectionMint = UMIPublicKey( + "D2zi1QQmtZR5fk7wpA1Fmf6hTY2xy8xVMyNgfq6LsKy1", +); + +const uintSig = await( + await mintToCollectionV1(umi, { + leafOwner: umi.identity.publicKey, + merkleTree, + collectionMint, + metadata: { + name: "My NFT", + uri: "https://chocolate-wet-narwhal-846.mypinata.cloud/ipfs/QmeBRVEmASS3pyK9YZDkRUtAham74JBUZQE3WD4u4Hibv9", + sellerFeeBasisPoints: 0, // 0% + collection: { key: collectionMint, verified: false }, + creators: [ + { + address: umi.identity.publicKey, + verified: false, + share: 100, + }, + ], + }, + }).sendAndConfirm(umi), +).signature; + +const b64Sig = base58.deserialize(uintSig); +console.log(b64Sig); ``` -Again, to run, in your terminal type: `npm run start` +The difference between the first statement is that we are returning the byte +array representing the transaction signature. -#### 5. Read existing cNFT data +We need this has in order to be able to get the leaf schema and with this schema +derive the asset ID. -Now that we’ve written code to mint cNFTs, let’s see if we can actually fetch -their data. This is tricky because the onchain data is just the Merkle tree -account, the data from which can be used to verify existing information as -accurate but is useless in conveying what the information is. +```typescript +const leaf: LeafSchema = await parseLeafFromMintToCollectionV1Transaction( + umi, + uintSig, +); +const assetId = findLeafAssetIdPda(umi, { + merkleTree, + leafIndex: leaf.nonce, +})[0]; +``` -Let’s start by declaring a function `logNftDetails` that takes as parameters -`treeAddress` and `nftsMinted`. +With everything in place, we can now run our script +`mint-compressed-nft-to-collection.ts` -At this point we don’t actually have a direct identifier of any kind that points -to our cNFT. To get that, we’ll need to know the leaf index that was used when -we minted our cNFT. We can then use that to derive the asset ID used by the Read -API and subsequently use the Read API to fetch our cNFT data. +```bash +npx esrun mint-compressed-nft-to-collection.ts +``` + +Your output should resemble + +```bash +asset id: D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS +✅ Finished successfully! +``` + +We aren't returning the explorer link because this address won't exists on the +Solana state but is indexed by RPCs that support the DAS API. -In our case, we created a non-public tree and minted 8 cNFTs, so we know that -the leaf indexes used were 0-7. With this, we can use the `getLeafAssetId` -function from `@metaplex-foundation/mpl-bubblegum` to get the asset ID. +In the next step we will query this address to fetch out cNFT details. -Finally, we can use an RPC that supports the -[Read API](https://solana.com/developers/guides/javascript/compressed-nfts) to -fetch the asset. We’ll be using -[Helius](https://docs.helius.dev/compression-and-das-api/digital-asset-standard-das-api), -but feel free to choose your own RPC provider. To use Helius, you’ll need to get -a free API Key from [the Helius website](https://dev.helius.xyz/). Then add your -`RPC_URL` to your `.env` file. For example: +#### 4. Read existing cNFT data + +Now that we’ve written code to mint cNFTs, let’s see if we can actually fetch +their data. + +Create a new file `fetch-cnft-details.ts` ```bash -## Add this -RPC_URL=https://devnet.helius-rpc.com/?api-key=YOUR_API_KEY +fetch-cnft-details.ts ``` -Then simply issue a POST request to your provided RPC URL and put the `getAsset` -information in the body: +Import our packages and instantiate Umi. Here we will finally make use of the +`umi.use(dasApi())` we've been importing. + +In the instantiation of Umi, we are going to make a change to our connection +endpoint and use an RPC that supports the DAS API. + +Be sure to update this with your Helius API keys which you can get from the +[developer dashboard page](https://dashboard.helius.dev/signup?redirectTo=onboarding) ```typescript -async function logNftDetails(treeAddress: PublicKey, nftsMinted: number) { - for (let i = 0; i < nftsMinted; i++) { - const assetId = await getLeafAssetId(treeAddress, new BN(i)); - console.log("Asset ID:", assetId.toBase58()); - const response = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAsset", - params: { - id: assetId, - }, - }), - }); - const { result } = await response.json(); - console.log(JSON.stringify(result, null, 2)); - } -} +import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; +import { mplBubblegum } from "@metaplex-foundation/mpl-bubblegum"; +import { + keypairIdentity, + publicKey as UMIPublicKey, +} from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { getKeypairFromFile } from "@solana-developers/helpers"; + +const umi = createUmi( + "https://devnet.helius-rpc.com/?api-key=YOUR-HELIUS-API-KEY", +); + +// load keypair from local file system +// See https://github.com/solana-developers/helpers?tab=readme-ov-file#get-a-keypair-from-a-keypair-file +const localKeypair = await getKeypairFromFile(); + +// convert to Umi compatible keypair +const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); + +// load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance +umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); ``` -Helius essentially observes transaction logs as they happen and stores the NFT -metadata that was hashed and stored in the Merkle tree. This enables them to -surface that data when requested. +Fetching a compressed NFT details is as simple as calling the `getAsset` method +with the `assetId` from the previous step. + +```typescript +const assetId = UMIPublicKey("D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS"); + +// @ts-ignore +const rpcAsset = await umi.rpc.getAsset(assetId); +console.log(rpcAsset); +``` + +Let’s start by declaring a function `logNftDetails` that takes as parameters +`treeAddress` and `nftsMinted`. -If we add a call to this function at the end of `main` and re-run your script, -the data we get back in the console is very comprehensive. It includes all of -the data you’d expect in both the onchain and offchain portion of a traditional -NFT. You can find the cNFT’s attributes, files, ownership and creator -information, and more. +The output of our console.log would output ```json { - "interface": "V1_NFT", - "id": "48Bw561h1fGFK4JGPXnmksHp2fpniEL7hefEc6uLZPWN", - "content": { - "$schema": "https://schema.metaplex.com/nft1.0.json", - "json_uri": "https://raw.githubusercontent.com/Unboxed-Software/rgb-png-generator/master/assets/183_89_78/183_89_78.json", - "files": [ - { - "uri": "https://raw.githubusercontent.com/Unboxed-Software/rgb-png-generator/master/assets/183_89_78/183_89_78.png", - "cdn_uri": "https://cdn.helius-rpc.com/cdn-cgi/image//https://raw.githubusercontent.com/Unboxed-Software/rgb-png-generator/master/assets/183_89_78/183_89_78.png", - "mime": "image/png" - } - ], - "metadata": { - "attributes": [ - { - "value": "183", - "trait_type": "R" - }, - { - "value": "89", - "trait_type": "G" - }, - { - "value": "78", - "trait_type": "B" - } - ], - "description": "Random RGB Color", - "name": "CNFT", - "symbol": "CNFT" + interface: 'V1_NFT', + id: 'D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS', + content: { + '$schema': 'https://schema.metaplex.com/nft1.0.json', + json_uri: 'https://chocolate-wet-narwhal-846.mypinata.cloud/ipfs/QmeBRVEmASS3pyK9YZDkRUtAham74JBUZQE3WD4u4Hibv9', + files: [ [Object] ], + metadata: { + attributes: [Array], + description: 'My NFT Description', + name: 'My NFT', + symbol: '', + token_standard: 'NonFungible' }, - "links": { - "image": "https://raw.githubusercontent.com/Unboxed-Software/rgb-png-generator/master/assets/183_89_78/183_89_78.png" + links: { + image: 'https://lycozm33rkk5ozjqldiuzc6drazmdp5d5g3g7foh3gz6rz5zp7va.arweave.net/XgTss3uKlddlMFjRTIvDiDLBv6Pptm-Vx9mz6Oe5f-o' } }, - "authorities": [ + authorities: [ { - "address": "DeogHav5T2UV1zf5XuH4DTwwE5fZZt7Z4evytUUtDtHd", - "scopes": ["full"] + address: '4sk8Ds1T4bYnN4j23sMbVyHYABBXQ53NoyzVrXGd3ja4', + scopes: [Array] } ], - "compression": { - "eligible": false, - "compressed": true, - "data_hash": "3RsXHMBDpUPojPLZuMyKgZ1kbhW81YSY3PYmPZhbAx8K", - "creator_hash": "Di6ufEixhht76sxutC9528H7PaWuPz9hqTaCiQxoFdr", - "asset_hash": "2TwWjQPdGc5oVripPRCazGBpAyC5Ar1cia8YKUERDepE", - "tree": "7Ge8nhDv2FcmnpyfvuWPnawxquS6gSidum38oq91Q7vE", - "seq": 8, - "leaf_id": 7 + compression: { + eligible: false, + compressed: true, + data_hash: '2UgKwnTkguefRg3P5J33UPkNebunNMFLZTuqvnBErqhr', + creator_hash: '4zKvSQgcRhJFqjQTeCjxuGjWydmWTBVfCB5eK4YkRTfm', + asset_hash: '2DwKkMFYJHDSgTECiycuBApMt65f3N1ZwEbRugRZymwJ', + tree: 'ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h', + seq: 4, + leaf_id: 3 }, - "grouping": [ + grouping: [ { - "group_key": "collection", - "group_value": "9p2RqBUAadMznAFiBEawMJnKR9EkFV98wKgwAz8nxLmj" + group_key: 'collection', + group_value: 'D2zi1QQmtZR5fk7wpA1Fmf6hTY2xy8xVMyNgfq6LsKy1' } ], - "royalty": { - "royalty_model": "creators", - "target": null, - "percent": 0, - "basis_points": 0, - "primary_sale_happened": false, - "locked": false + royalty: { + royalty_model: 'creators', + target: null, + percent: 0, + basis_points: 0, + primary_sale_happened: false, + locked: false }, - "creators": [ + creators: [ { - "address": "HASk3AoTPAvC1KnXSo6Qm73zpkEtEhbmjLpXLgvyKBkR", - "share": 100, - "verified": false + address: '4kg8oh3jdNtn7j2wcS7TrUua31AgbLzDVkBZgTAe44aF', + share: 100, + verified: false } ], - "ownership": { - "frozen": false, - "delegated": false, - "delegate": null, - "ownership_model": "single", - "owner": "HASk3AoTPAvC1KnXSo6Qm73zpkEtEhbmjLpXLgvyKBkR" - }, - "supply": { - "print_max_supply": 0, - "print_current_supply": 0, - "edition_nonce": 0 + ownership: { + frozen: false, + delegated: false, + delegate: null, + ownership_model: 'single', + owner: '4kg8oh3jdNtn7j2wcS7TrUua31AgbLzDVkBZgTAe44aF' }, - "mutable": false, - "burnt": false + supply: { print_max_supply: 0, print_current_supply: 0, edition_nonce: null }, + mutable: true, + burnt: false } ``` @@ -1362,274 +1027,89 @@ owner, creator, etc., and more. Be sure to look through the [Helius docs](https://docs.helius.dev/compression-and-das-api/digital-asset-standard-das-api) to see what’s available. -#### 6. Transfer a cNFT +#### 5. Transfer a cNFT The last thing we’re going to add to our script is a cNFT transfer. Just as with a standard SPL token transfer, security is paramount. Unlike with a standard SPL token transfer, however, to build a secure transfer with state compression of any kind, the program performing the transfer needs the entire asset data. -The program, Bubblegum in this case, needs to be provided with the entire data -that was hashed and stored on the corresponding leaf _and_ needs to be given the -“proof path” for the leaf in question. That makes cNFT transfers a bit trickier -than SPL token transfers. +Fortunately for us can get the asset data with the `getAssetWithProof` method. -Remember, the general steps are: +Le't first create a new file `transfer-asset.ts`, and populate it with the code +for instantiating a new Umi client. -1. Fetch the cNFT's asset data from the indexer -2. Fetch the cNFT's proof from the indexer -3. Fetch the Merkle tree account from the Solana blockchain -4. Prepare the asset proof as a list of `AccountMeta` objects -5. Build and send the Bubblegum transfer instruction +```bash +touch transfer-asset.ts +``` -Let’s start by declaring a `transferNft` function that takes the following: +```typescript +import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; +import { + getAssetWithProof, + mplBubblegum, + transfer, +} from "@metaplex-foundation/mpl-bubblegum"; +import { + keypairIdentity, + publicKey as UMIPublicKey, +} from "@metaplex-foundation/umi"; +import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; +import { base58 } from "@metaplex-foundation/umi/serializers"; +import { + getExplorerLink, + getKeypairFromFile, +} from "@solana-developers/helpers"; +import { clusterApiUrl } from "@solana/web3.js"; -- `connection` - a `Connection` object -- `assetId` - a `PublicKey` object -- `sender` - a `Keypair` object so we can sign the transaction -- `receiver` - a `PublicKey` object representing the new owner +const umi = createUmi(clusterApiUrl("devnet")); -Inside that function, let’s fetch the asset data again then also fetch the asset -proof. For good measure, let’s wrap everything in a `try catch`. +// load keypair from local file system +// See https://github.com/solana-developers/helpers?tab=readme-ov-file#get-a-keypair-from-a-keypair-file +const localKeypair = await getKeypairFromFile(); -```typescript -async function transferNft( - connection: Connection, - assetId: PublicKey, - sender: Keypair, - receiver: PublicKey, -) { - try { - const assetDataResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAsset", - params: { - id: assetId, - }, - }), - }); - const assetData = (await assetDataResponse.json()).result; - - const assetProofResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAssetProof", - params: { - id: assetId, - }, - }), - }); - const assetProof = (await assetProofResponse.json()).result; - } catch (err: any) { - console.error("\nFailed to transfer nft:", err); - throw err; - } -} +// convert to Umi compatible keypair +const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); + +// load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance +umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); ``` -Next, let’s fetch the Merkle tree account from the chain, get the canopy depth, -and assemble the proof path. We do this by mapping the asset proof we got from -Helius to a list of `AccountMeta` objects, then removing any proof nodes at the -end that are already cached onchain in the canopy. +We are not ready to transfer our asset. Using the `assetId` for our cNFT, we can +call the `transfer` method from the Bubblegum library ```typescript -async function transferNft( - connection: Connection, - assetId: PublicKey, - sender: Keypair, - receiver: PublicKey -) { - try { - ... - - const treePublicKey = new PublicKey(assetData.compression.tree) - - const treeAccount = await ConcurrentMerkleTreeAccount.fromAccountAddress( - connection, - treePublicKey - ) - - const canopyDepth = treeAccount.getCanopyDepth() || 0 - - const proofPath: AccountMeta[] = assetProof.proof - .map((node: string) => ({ - pubkey: new PublicKey(node), - isSigner: false, - isWritable: false, - })) - .slice(0, assetProof.proof.length - canopyDepth) - } catch (err: any) { - console.error("\nFailed to transfer nft:", err) - throw err - } -} -``` +const assetId = UMIPublicKey("D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS"); -Finally, we build the instruction using `createTransferInstruction`, add it to a -transaction, then sign and send the transaction. This is what the entire -`transferNft` function looks like when finished: +//@ts-ignore +const assetWithProof = await getAssetWithProof(umi, assetId); -```typescript -async function transferNft( - connection: Connection, - assetId: PublicKey, - sender: Keypair, - receiver: PublicKey, -) { - try { - const assetDataResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAsset", - params: { - id: assetId, - }, - }), - }); - const assetData = (await assetDataResponse.json()).result; - - const assetProofResponse = await fetch(process.env.RPC_URL, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - jsonrpc: "2.0", - id: "my-id", - method: "getAssetProof", - params: { - id: assetId, - }, - }), - }); - const assetProof = (await assetProofResponse.json()).result; - - const treePublicKey = new PublicKey(assetData.compression.tree); - - const treeAccount = await ConcurrentMerkleTreeAccount.fromAccountAddress( - connection, - treePublicKey, - ); - - const canopyDepth = treeAccount.getCanopyDepth() || 0; - - const proofPath: AccountMeta[] = assetProof.proof - .map((node: string) => ({ - pubkey: new PublicKey(node), - isSigner: false, - isWritable: false, - })) - .slice(0, assetProof.proof.length - canopyDepth); - - const treeAuthority = treeAccount.getAuthority(); - const leafOwner = new PublicKey(assetData.ownership.owner); - const leafDelegate = assetData.ownership.delegate - ? new PublicKey(assetData.ownership.delegate) - : leafOwner; - - const transferIx = createTransferInstruction( - { - merkleTree: treePublicKey, - treeAuthority, - leafOwner, - leafDelegate, - newLeafOwner: receiver, - logWrapper: SPL_NOOP_PROGRAM_ID, - compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, - anchorRemainingAccounts: proofPath, - }, - { - root: [...new PublicKey(assetProof.root.trim()).toBytes()], - dataHash: [ - ...new PublicKey(assetData.compression.data_hash.trim()).toBytes(), - ], - creatorHash: [ - ...new PublicKey(assetData.compression.creator_hash.trim()).toBytes(), - ], - nonce: assetData.compression.leaf_id, - index: assetData.compression.leaf_id, - }, - ); - - const tx = new Transaction().add(transferIx); - tx.feePayer = sender.publicKey; - const txSignature = await sendAndConfirmTransaction( - connection, - tx, - [sender], - { - commitment: "confirmed", - skipPreflight: true, - }, - ); - console.log(`https://explorer.solana.com/tx/${txSignature}?cluster=devnet`); - } catch (err: any) { - console.error("\nFailed to transfer nft:", err); - throw err; - } -} +let uintSig = await( + await transfer(umi, { + ...assetWithProof, + leafOwner: umi.identity.publicKey, + newLeafOwner: UMIPublicKey("J63YroB8AwjDVjKuxjcYFKypVM3aBeQrfrVmNBxfmThB"), + }).sendAndConfirm(umi), +).signature; + +const b64sig = base58.deserialize(uintSig); + +let explorerLink = getExplorerLink("transaction", b64sig, "devnet"); +console.log(`explorer link: ${explorerLink}`); +console.log("✅ Finished successfully!"); ``` -Lets transfer our first compressed NFT at index 0 to someone else. First we’ll -need to spin up another wallet with some funds, then grab the assetID at index 0 -using `getLeafAssetId`. Then we’ll do the transfer. Finally, we’ll print out the -entire collection using our function `logNftDetails`. You’ll note that the NFT -at index zero will now belong to our new wallet in the `ownership` field. +Running our script with `npx esrun transfer-asset.ts`, should output something +similar to this if successful: -```typescript -async function main() { - const connection = new Connection(clusterApiUrl("devnet"), "confirmed"); - const wallet = await getOrCreateKeypair("Wallet_1"); - await airdropSolIfNeeded(wallet.publicKey); - - const maxDepthSizePair: ValidDepthSizePair = { - maxDepth: 3, - maxBufferSize: 8, - }; - - const canopyDepth = 0; - - const treeAddress = await createAndInitializeTree( - connection, - wallet, - maxDepthSizePair, - canopyDepth, - ); - - const collectionNft = await getOrCreateCollectionNFT(connection, wallet); - - await mintCompressedNftToCollection( - connection, - wallet, - treeAddress, - collectionNft, - 2 ** maxDepthSizePair.maxDepth, - ); - - const recieverWallet = await getOrCreateKeypair("Wallet_2"); - const assetId = await getLeafAssetId(treeAddress, new BN(0)); - await airdropSolIfNeeded(recieverWallet.publicKey); - - console.log( - `Transfering ${assetId.toString()} from ${wallet.publicKey.toString()} to ${recieverWallet.publicKey.toString()}`, - ); - - await transferNft(connection, assetId, wallet, recieverWallet.publicKey); - - await logNftDetails(treeAddress, 8); -} +```bash +explorer link: https://explorer.solana.com/tx/3sNgN7Gnh5FqcJ7ZuUEXFDw5WeojpwkDjdfvTNWy68YCEJUF8frpnUJdHhHFXAtoopsytzkKewh39Rf7phFQ2hCF?cluster=devnet +✅ Finished successfully! ``` -Go ahead and run your script. The whole thing should execute without failing, -and all for close to 0.01 SOL! +Open the explorer link, and scroll to the bottom to observer your tx logs, + +![Solana Explorer showing logs of the transfer cnft instruction](/public/assets/courses/unboxed/solana-explorer-showing-cnft-transfer-logs.png) Congratulations! Now you know how to mint, read, and transfer cNFTs. If you wanted, you could update the max depth, max buffer size, and canopy depth to @@ -1637,12 +1117,9 @@ larger values and as long as you have enough Devnet SOL, this script will let you mint up to 10k cNFTs for a small fraction of what it would cost to mint 10k traditional NFTs. -If you plan to mint a large amount of NFTs you might want -to try and batch these instructions for fewer total transactions. - -If you need more time with this lab, feel free to go through it again and/or -take a look at the solution code on the `solution` branch of the -[lab repo](https://github.com/Unboxed-Software/solana-cnft-demo/tree/solution). +Inspect the updated NFT on Solana Explorer! Just like previously, if you have +any issues, you should fix them yourself, but if needed the +[solution code]() is available. ### Challenge diff --git a/public/assets/courses/unboxed/solana-explorer-cretae-tree.png b/public/assets/courses/unboxed/solana-explorer-cretae-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..cfe10dff553127d1530749b942bc949bb0b78075 GIT binary patch literal 95579 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 literal 0 HcmV?d00001 diff --git a/public/assets/courses/unboxed/solana-explorer-showing-cnft-transfer-logs.png b/public/assets/courses/unboxed/solana-explorer-showing-cnft-transfer-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf699e0ba5b7678776a92bad0b333307ced1104 GIT binary patch literal 171868 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�HIk%`m3Tr-_V-r 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 literal 0 HcmV?d00001 From 6ad3f7030244bbccc68f906ad8a201a92b961919 Mon Sep 17 00:00:00 2001 From: Jimii <30603522+jim4067@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:41:31 +0300 Subject: [PATCH 2/4] Update content/courses/state-compression/compressed-nfts.md Co-authored-by: Mike MacCana --- content/courses/state-compression/compressed-nfts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/courses/state-compression/compressed-nfts.md b/content/courses/state-compression/compressed-nfts.md index 11434973b..95713a614 100644 --- a/content/courses/state-compression/compressed-nfts.md +++ b/content/courses/state-compression/compressed-nfts.md @@ -129,7 +129,7 @@ node adds 32 bytes to a transaction, so large trees would quickly exceed the maximum transaction size limit without caching proof nodes onchain. Each of these three values, max depth, max buffer size, and canopy depth, comes -with a tradeoff. Increasing the value of these values increases the size of the +with a tradeoff. Increasing any of these values increases the size of the account used to store the tree, thus increasing the cost to create the tree. Choosing the max depth is fairly straightforward as it directly relates to the From 899fd4172444c9e5e1177493b5f0338cf9dff6a2 Mon Sep 17 00:00:00 2001 From: Jimii Date: Wed, 2 Oct 2024 21:33:41 +0300 Subject: [PATCH 3/4] feat: resolve requested changes --- .../state-compression/compressed-nfts.md | 137 +++++++++--------- ...ee.png => solana-explorer-create-tree.png} | Bin 2 files changed, 70 insertions(+), 67 deletions(-) rename public/assets/courses/unboxed/{solana-explorer-cretae-tree.png => solana-explorer-create-tree.png} (100%) diff --git a/content/courses/state-compression/compressed-nfts.md b/content/courses/state-compression/compressed-nfts.md index 95713a614..6fba7851c 100644 --- a/content/courses/state-compression/compressed-nfts.md +++ b/content/courses/state-compression/compressed-nfts.md @@ -195,7 +195,7 @@ main point of this lesson: how to create a cNFT collection. Fortunately, you can use tools created by Solana Foundation, the Solana developer community, and Metaplex to simplify the process. Specifically, we’ll be using the `@solana/spl-account-compression` SDK, the Metaplex Bubblegum -program `@metaplex-foundation/mpl-bugglegum` through the Umi library from +program `@metaplex-foundation/mpl-bubblegum` through the Umi library from Metaplex. #### Prepare metadata @@ -235,15 +235,17 @@ the example above. #### Create Collection NFT -If you want your cNFTs to be part of a collection, you’ll need to create a -Collection NFT **before** you start minting cNFTs. This is a traditional NFT -that acts as the reference binding your cNFTs together into a single collection. -This will be a Token Metadata program NFT with the fields `isCollection` set to -`true` created using the `@metaplex-foundation/mpl-token-metadata` library. You -can check out more on this in the -[NFTs with Metaplex lesson](https://github.com/solana-foundation/developer-content/blob/main/content/courses/tokens-and-nfts/nfts-with-metaplex.md) +NFTs are intrinsically unique, compared to fungible tokens which have a supply. +However, it is important to bind NFTs produced by the same series together, +using a Collection. Collections allow people to discover other NFTs in the same +collection, and verify that individual NFTs are actually members of the +Collection (and not look-alikes produced by someone else). - +To have your cNFTs to be part of a collection, you’ll need to create a +Collection NFT **before** you start minting cNFTs. This is a traditional Token +Metadata Program NFT that acts as the reference binding your cNFTs together into +a single collection. The procedure to create this NFT is outlined in our +[NFTs with Metaplex lesson](https://solana.com/developers/courses/tokens-and-nfts/nfts-with-metaplex#add-the-nft-to-a-collection) ```typescript const collectionMint = generateSigner(umi); @@ -330,20 +332,20 @@ when choosing the values. Once you know these values, you can use the `createTree` method from the `@metaplex-foundation/mpl-bubblegum` package to create your tree. This -instruction creates and initializes two accounts +instruction creates and initializes two accounts: -1. `Merkle Tree` account that holds the merkle hash and used to verify the - authenticity of data stored. -2. `Tree Config` account that holds additional data specific to compressed NFTs - such as the tree creator, whether the tree is public. Find mnore fileds about - the fields the account stores on the - [program source code.](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/state/mod.rs#L17) +1. A `Merkle Tree` account - this holds the merkle hash and is used to verify + the authenticity of data stored. + +2. A `Tree Config` account - this holds additional data specific to compressed + NFTs such as the tree creator, whether the tree is public, and + [other fields - see the Bubblehum program source](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/state/mod.rs#L17). #### Setting up Umi The `mpl-bubblegum` package is a plugin and cannot be used without the Umi library from Metaplex. Umi is a framework for making JS/TS clients for onchain -programs, that was created by Metaplex. +programs that was created by Metaplex. Note that Umi has different implementations for many concepts than web3.js, including Keypairs, PublicKeys, and Connections. However, it is easy to convert @@ -362,7 +364,7 @@ The above code initializes an empty Umi instance without any signer or plugin attached to it. You can find the exhaustive list of the plugins available [on this Metaplex docs page](https://developers.metaplex.com/umi/metaplex-umi-plugins) -The nxt part is to add in our imports and attach a signer to our Umi instance. +The next part is to add in our imports and attach a signer to our Umi instance. ```typescript import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; @@ -384,7 +386,7 @@ const umiKeypair = umi.eddsa.createKeypairFromSecretKey(localKeypair.secretKey); // load the MPL Bubblegum program, dasApi plugin and assign a signer to our umi instance umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); -console.log("everythying is fine"); +console.log("Loaded UMI with Bubblegum"); ``` #### Use Bubblegum to Initialize Your Tree @@ -402,7 +404,7 @@ const builder = await createTree(umi, { await builder.sendAndConfirm(umi); ``` -The three values supplied i.e the `merkleTree`, `maxDepth` and `maxBufferSize` +The three values supplied i.e. the `merkleTree`, `maxDepth` and `maxBufferSize` are required in order to create the tree while the rest are optional. For example, the`tree creator` defaults to the Umi instance identity, while the `public field to false. @@ -410,17 +412,16 @@ example, the`tree creator` defaults to the Umi instance identity, while the When set to true, `public` allows anyone to mint from the initialized tree and if false, only the tree creator will be able to mint from the tree. -Feel free to take a look at the program code for the -[accounts](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L20) -and the -[arguments](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L40) -the instruction takes. +Feel free to look at the code for the +[create_tree instruction handler](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L40) +and +[create_tree's expected accounts](https://github.com/metaplex-foundation/mpl-bubblegum/blob/42ffed35da6b2a673efacd63030a360eac3ae64e/programs/bubblegum/program/src/processor/create_tree.rs#L20). #### Mint cNFTs With the Merkle tree account and its corresponding Bubblegum tree config account initialized, it’s possible to mint cNFTs to the tree. The Bubblegum library, -provides two instruction we can make use of depending on whether the minted +provides two instructions we can make use of depending on whether the minted asset will belong to a collection. The two instructions are @@ -464,7 +465,7 @@ await mintToCollectionV1(umi, { Both functions will require you to pass in the NFT metadata and a list of accounts required to mint the cNFT such as the `leafOwner`, `merkleTree` account -e.t.c +etc. ### Interact with cNFTs @@ -479,8 +480,7 @@ The simplest way to fetch data from an existing cNFT is to use the API). Note that this is separate from the standard JSON RPC. To use the Read API, you’ll need to use a supporting RPC Provider. Metaplex maintains a (likely non-exhaustive) -[list of RPC providers](https://developers.metaplex.com/rpc-providers#rpcs-with-das-support) -that support the Read API. +[list of RPC providers that support the DAS Read API](https://developers.metaplex.com/rpc-providers#rpcs-with-das-support). In this lesson we’ll be using [Helius](https://docs.helius.dev/compression-and-das-api/digital-asset-standard-das-api) @@ -503,7 +503,7 @@ ID. However, after minting cNFTs, you’ll have at most two pieces of informatio The only real guarantee is that you’ll have the transaction signature. It is **possible** to locate the leaf index from there, but it involves some fairly complex parsing. The short story is you must retrieve the relevant instruction -logs from the Noop program and parse them to find the leaf index. We’ll cover +logs from the `Noop program` and parse them to find the leaf index. We’ll cover this more in depth in a future lesson. For now, we’ll assume you know the leaf index. @@ -520,13 +520,13 @@ ID and the following seeds: 2. The Merkle tree address 3. The leaf index -The indexer essentially observes transaction logs from the Noop program as they -happen and stores the cNFT metadata that was hashed and stored in the Merkle -tree. This enables them to surface that data when requested. This asset id is -what the indexer uses to identify the particular asset. +The indexer essentially observes transaction logs from the `Noop program` as +they happen and stores the cNFT metadata that was hashed and stored in the +Merkle tree. This enables them to surface that data when requested. This asset +ID is what the indexer uses to identify the particular asset. For simplicity, you can just use the `findLeafAssetIdPda` helper function from -the bubblegum library. +the Bubblegum library. ```typescript const [assetId, bump] = await findLeafAssetIdPda(umi, { @@ -634,16 +634,21 @@ from a Merkle tree. #### 1. Get the starter code -To begin create and initialize an empty NPM project. +To begin create and initialize an empty NPM project and change directory into +it. ```bash -mkdir cnft-demo && npm init -y +mkdir cnft-demo +npm init -y +cd cnft-demo ``` Install all the required dependencies ```bash -npm i @solana/web3.js npm i @solana-developers/helpers@2.5.2 npm i @metaplex-foundation/mpl-token-metadata npm i @metaplex-foundation/mpl-bubblegum @metaplex-foundation/digital-asset-standard-api npm i @metaplex-foundation/umi-bundle-defaults && npm i --save-dev esrun +npm i @solana/web3.js @solana-developers/helpers@2.5.2 @metaplex-foundation/mpl-token-metadata @metaplex-foundation/mpl-bubblegum @metaplex-foundation/digital-asset-standard-api @metaplex-foundation/umi-bundle-defaults + +npm i --save-dev esrun ``` In this first script, we will learn about creating a tree, hence let's create @@ -654,9 +659,9 @@ mkdir src && touch src/create-tree.ts ``` This Umi instantiation code will be repated in a lot of files, so feel free to -create a wrapper file to instantiate if, +create a wrapper file to instantiate it: -```typescript +```typescript filename="crate-tree.ts" import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; import { createTree, mplBubblegum } from "@metaplex-foundation/mpl-bubblegum"; import { generateSigner, keypairIdentity } from "@metaplex-foundation/umi"; @@ -694,7 +699,7 @@ This function takes in three default values - `merkleTree` - The Merkle tree account address - `maxDepth` - Determines the max number of leaves the tree will hold and - therefore the max no. of cNFTs that the tree can contain. + therefore the max number of cNFTs that the tree can contain. - `maxBufferSize` - Determines how many concurrent changes can occur in the tree in parallel. @@ -705,7 +710,7 @@ You can also supply in optional fields such as - `public` - Determines whether anyone else apart from the tree creator will be able to mint cNFTs from the tree. -```typescript +```typescript filename="crate-tree.ts" const merkleTree = generateSigner(umi); const builder = await createTree(umi, { merkleTree, @@ -715,7 +720,7 @@ const builder = await createTree(umi, { await builder.sendAndConfirm(umi); let explorerLink = getExplorerLink("address", merkleTree.publicKey, "devnet"); -console.log(`explorer link: ${explorerLink}`); +console.log(`Explorer link: ${explorerLink}`); console.log("Merkle tree address is :", merkleTree.publicKey); console.log("✅ Finished successfully!"); ``` @@ -732,15 +737,15 @@ step when minting compressed NFTs. Your output will be similar to this ```bash -explorer link: https://explorer.solana.com/address/ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h?cluster=devnet +Explorer link: https://explorer.solana.com/address/ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h?cluster=devnet Merkle tree address is : ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h ✅ Finished successfully! ``` -Congratulations! You've created a Bubblegum tree. Follow the explorer link to +Congratulations! You've created a Bubblegum tree. Follow the Explorer link to make sure that the process finished successfully, -![Solana Explorer with details about created Merkle tree](/public/assets/courses/unboxed/solana-explorer-cretae-tree.png) +![Solana Explorer with details about created Merkle tree](/public/assets/courses/unboxed/solana-explorer-create-tree.png) #### 3. Mint cNFTs to your tree @@ -750,7 +755,7 @@ NFTs! Now let’s turn our attention to minting. First, let's create a new file called `mint-compressed-nft-to-collection.ts`, add our imports and instantiate Umi -```typescript +```typescript filename="mint-compressed-nft-to-collection.ts" import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; import { findLeafAssetIdPda, @@ -786,7 +791,9 @@ I already created in the NFTs with Metaplex lesson, but if you'd like to create a new collection for this lesson, check out the code [on this repo](https://github.com/solana-developers/professional-education/blob/main/labs/metaplex-umi/create-collection.ts) - + +Find the code to create a Metaplex Collection NFT in our [NFTs with Metaplex lesson](https://solana.com/developers/courses/tokens-and-nfts/nfts-with-metaplex#add-the-nft-to-a-collection). + To mint a compressed NFT to a collection we will need @@ -794,16 +801,16 @@ To mint a compressed NFT to a collection we will need - `merkleTree` - The Merkle tree address we created in the previous step -- `collection` - The collection our cNFT will belong to. This is not required +- `collection` - The collection our cNFT will belong to. This is not required, and you can leave it out if your cNFT doesn't belong to a collection. -- `metadata` - Your off-chain metadata. This lesson won't focus onto how to - prepare your metadata but you can check out the +- `metadata` - Your offchain metadata. This lesson won't focus onto how to + prepare your metadata, but you can check out the [recommended structure from Metaplex](https://developers.metaplex.com/token-metadata/token-standard#the-non-fungible-standard). Our cNFT will use this structure we already prepared earlier. -```json +```json filename="nft.json" { "name": "My NFT", "symbol": "MN", @@ -824,7 +831,7 @@ Our cNFT will use this structure we already prepared earlier. Putting it all into code, we will have -```typescript +```typescript filename="mint-compressed-nft-to-collection.ts" const merkleTree = UMIPublicKey("ZwzNxXw83PUmWSypXmqRH669gD3hF9rEjHWPpVghr5h"); const collectionMint = UMIPublicKey( @@ -862,7 +869,7 @@ array representing the transaction signature. We need this has in order to be able to get the leaf schema and with this schema derive the asset ID. -```typescript +```typescript filename="mint-compressed-nft-to-collection.ts" const leaf: LeafSchema = await parseLeafFromMintToCollectionV1Transaction( umi, uintSig, @@ -887,7 +894,7 @@ asset id: D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS ✅ Finished successfully! ``` -We aren't returning the explorer link because this address won't exists on the +We aren't returning the Explorer link because this address won't exists on the Solana state but is indexed by RPCs that support the DAS API. In the next step we will query this address to fetch out cNFT details. @@ -912,7 +919,7 @@ endpoint and use an RPC that supports the DAS API. Be sure to update this with your Helius API keys which you can get from the [developer dashboard page](https://dashboard.helius.dev/signup?redirectTo=onboarding) -```typescript +```typescript filename="fetch-cnft-details.ts" import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; import { mplBubblegum } from "@metaplex-foundation/mpl-bubblegum"; import { @@ -940,7 +947,7 @@ umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); Fetching a compressed NFT details is as simple as calling the `getAsset` method with the `assetId` from the previous step. -```typescript +```typescript filename="fetch-cnft-details.ts" const assetId = UMIPublicKey("D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS"); // @ts-ignore @@ -1039,11 +1046,7 @@ Fortunately for us can get the asset data with the `getAssetWithProof` method. Le't first create a new file `transfer-asset.ts`, and populate it with the code for instantiating a new Umi client. -```bash -touch transfer-asset.ts -``` - -```typescript +```typescript filename="transfer-asset.ts" import { dasApi } from "@metaplex-foundation/digital-asset-standard-api"; import { getAssetWithProof, @@ -1078,7 +1081,7 @@ umi.use(keypairIdentity(umiKeypair)).use(mplBubblegum()).use(dasApi()); We are not ready to transfer our asset. Using the `assetId` for our cNFT, we can call the `transfer` method from the Bubblegum library -```typescript +```typescript filename="transfer-asset.ts" const assetId = UMIPublicKey("D4A8TYkKE5NzkqBQ4mPybgFbAUDN53fwJ64b8HwEEuUS"); //@ts-ignore @@ -1095,7 +1098,7 @@ let uintSig = await( const b64sig = base58.deserialize(uintSig); let explorerLink = getExplorerLink("transaction", b64sig, "devnet"); -console.log(`explorer link: ${explorerLink}`); +console.log(`Explorer link: ${explorerLink}`); console.log("✅ Finished successfully!"); ``` @@ -1103,7 +1106,7 @@ Running our script with `npx esrun transfer-asset.ts`, should output something similar to this if successful: ```bash -explorer link: https://explorer.solana.com/tx/3sNgN7Gnh5FqcJ7ZuUEXFDw5WeojpwkDjdfvTNWy68YCEJUF8frpnUJdHhHFXAtoopsytzkKewh39Rf7phFQ2hCF?cluster=devnet +Explorer link: https://explorer.solana.com/tx/3sNgN7Gnh5FqcJ7ZuUEXFDw5WeojpwkDjdfvTNWy68YCEJUF8frpnUJdHhHFXAtoopsytzkKewh39Rf7phFQ2hCF?cluster=devnet ✅ Finished successfully! ``` @@ -1117,8 +1120,8 @@ larger values and as long as you have enough Devnet SOL, this script will let you mint up to 10k cNFTs for a small fraction of what it would cost to mint 10k traditional NFTs. -Inspect the updated NFT on Solana Explorer! Just like previously, if you have -any issues, you should fix them yourself, but if needed the +Inspect the cNFT on Solana Explorer! Just like previously, if you have any +issues, you should fix them yourself, but if needed the [solution code]() is available. ### Challenge diff --git a/public/assets/courses/unboxed/solana-explorer-cretae-tree.png b/public/assets/courses/unboxed/solana-explorer-create-tree.png similarity index 100% rename from public/assets/courses/unboxed/solana-explorer-cretae-tree.png rename to public/assets/courses/unboxed/solana-explorer-create-tree.png From e14883e75fa5295481a1d352b40d304f1aaeea10 Mon Sep 17 00:00:00 2001 From: Mike MacCana Date: Thu, 3 Oct 2024 12:19:22 +1000 Subject: [PATCH 4/4] Update content/courses/state-compression/compressed-nfts.md --- content/courses/state-compression/compressed-nfts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/courses/state-compression/compressed-nfts.md b/content/courses/state-compression/compressed-nfts.md index 73030eba6..63927fe34 100644 --- a/content/courses/state-compression/compressed-nfts.md +++ b/content/courses/state-compression/compressed-nfts.md @@ -1124,7 +1124,7 @@ traditional NFTs. Inspect the cNFT on Solana Explorer! Just like previously, if you have any issues, you should fix them yourself, but if needed the -[solution code]() is available. +[solution code](https://github.com/solana-foundation/compressed-nfts) is available. ### Challenge