瀏覽代碼

Merge branch 'main' into leo/umi-overview-rework

Leonardo Donatacci 1 年之前
父節點
當前提交
f8fb22de97

+ 11 - 0
src/components/products/guides/index.js

@@ -120,6 +120,17 @@ export const guides = {
 
           ],
         },
+        {
+          title: 'Translated Guides',
+          links: [
+            {
+              title: 'Japanese 日本語',
+              href: '/guides/translated/japanese',
+              created: '2024-08-14',
+              updated: null, // null means it's never been updated
+            },
+          ],
+        },
       ],
     },
   ],

+ 7 - 3
src/components/products/umi/index.js

@@ -33,7 +33,7 @@ export const umi = {
               title: 'Metaplex Umi Plugins',
               href: '/umi/metaplex-umi-plugins',
             },
-            { title: 'Web3js Differences', href: '/umi/web3js-differences' },
+            { title: 'Web3js Differences and Adapters', href: '/umi/web3js-differences-and-adapters' },
           ],
         },
         {
@@ -55,7 +55,6 @@ export const umi = {
             { title: 'Serializers', href: '/umi/serializers' },
             { title: 'Storage', href: '/umi/storage' },
             { title: 'Transactions', href: '/umi/transactions' },
-            { title: 'Web3Js Adapters', href: '/umi/web3js-adapters' },
           ],
         },
       ],
@@ -66,7 +65,12 @@ export const umi = {
         {
           title: 'Guides',
           links: [
-            { title: 'Watch this space!', href: '' },
+            {
+              title: 'Serializing and Deserializing Transactions',
+              href: '/umi/guides/serializing-and-deserializing-transactions',
+              created: '2024-08-04',
+              updated: null, // null means it's never been updated
+            },
           ],
         },
       ],

+ 13 - 3
src/pages/core-candy-machine/create.md

@@ -241,9 +241,13 @@ If your Asset's have a naming structure of `Example Asset #1` then your prefix w
 
 #### nameLength
 
-The lengh of your prefixName.
+The maximum length for the name of each inserted item excluding the name prefix
 
-If your Asset's prefix name is `Example Asset #` then the length would be `15`
+For Example given...
+- a candy machine containing `1000` items.
+- The name of each item is `Example Asset #X` where X is the item’s index starting from 1.
+
+... would result in 19 characters that would need to be stored. 15 characters for “My NFT Project #” and 4 characters for the highest number which is “1000”. When using the `prefixName` the `nameLength` instead can be reduced to 4.
 
 #### prefixUri
 
@@ -253,7 +257,13 @@ If your Asset's will have a metadata URI of `https://example.com/metadata/0.json
 
 #### uriLength
 
-If your prefixUri is `https://example.com/metadata/` this would have a length of `29`
+The maximum lengths of your URIs excluding the `prefixUri`.
+
+For Example given...
+- a base URI ` https://arweave.net/` with 20 characters.
+- and a unique unifier with a maximum length of 43 characters
+
+... without prefix would result in 63 required characters to store. When using the `prefixUri` the `uriLength` can be reduced by 20 characters for `https://arweave.net/` to the 43 characters for the unique identifier.
 
 #### isSequential
 

+ 1 - 1
src/pages/core/guides/print-editions.md

@@ -349,6 +349,6 @@ pub async fn create_asset_with_plugin() {
 {% /dialect-switcher %}
 
 ## Further Reading
-- Mint from Candy Machine
+- [Mint from Candy Machine](/core-candy-machine/mint)
 - [Master Edition Plugin](/core/plugins/master-edition)
 - [Edition Plugin](/core/plugins/edition)

+ 19 - 0
src/pages/guides/translated/japanese.md

@@ -0,0 +1,19 @@
+---
+title: Japanese 日本語
+metaTitle: Japanese 日本語 | Guides
+description: A selection of guides translated into Japanese.
+---
+
+## Guides
+
+### How to Create an SPL Token On Solana
+[Solanaでトークン(SPL Token)を作成する方法](https://note.com/metaplex_japan/n/nc993285321a7)
+
+### How to Create NFTs with Solana
+[SolanaでNFTを作成する方法](https://note.com/metaplex_japan/n/n12fc1d251b34)
+
+### How to Create a Core NFT Asset
+[Core NFT Assetを作成する方法](https://note.com/metaplex_japan/n/nb24289e3bba6)
+
+### How to create an NFT with Token Metadata
+[「Token Metadata」でNFTを作成する方法](https://note.com/metaplex_japan/n/n7786dcb5ad69)

+ 22 - 22
src/pages/token-metadata/faq.md

@@ -65,35 +65,35 @@ Therefore, splitting the data into onchain and off-chain data allows us to get t
 
 ## Are there any costs to using Token Metadata?
 
-Token Metadata currently charges very small fees ranging between 0.001 SOL and 0.01 SOL to the caller of certain instructions. More details can be found on the Protocol Fees page.
+Token Metadata currently charges very small fees ranging between 0.001 SOL and 0.01 SOL to the caller of certain instructions. More details can be found on the [Protocol Fees page](/protocol-fees).
 
 ## Where can I find the deprecated instructions?
 
 Some of the instructions of the Token Metadata program have been through a few iterations and have been deprecated in favour of newer ones. The deprecated instructions are still available in the program but they are not documented on the Developer Hub as they are no longer the recommended way to interact with the program. That being said, if you are looking for the deprecated instructions, you can find them in the Token Metadata program repository. Here is a list of them:
 
-- [CreateMetadataAccountV3](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L448)
-- [UpdateMetadataAccountV2](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L241)
+- [CreateMetadataAccountV3](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L448) has been replaced with [CreateV1](/token-metadata/mint#creating-mint-and-metadata-accounts).
+- [UpdateMetadataAccountV2](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L241) has been replaced with [CreateV1](/token-metadata/mint#creating-mint-and-metadata-accounts).
 - [UpdatePrimarySaleHappenedViaToken](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L112)
-- [SignMetadata](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L146)
-- [RemoveCreatorVerification](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L388)
-- [CreateMasterEditionV3](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L267)
-- [MintNewEditionFromMasterEditionViaToken](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L202)
+- [SignMetadata](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L146) use [Verify](/token-metadata/collections) instead.
+- [RemoveCreatorVerification](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L388)  use [Unverify](/token-metadata/collections#unverify) instead.
+- [CreateMasterEditionV3](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L267)  has been replaced with [CreateV1](/token-metadata/mint#creating-mint-and-metadata-accounts).
+- [MintNewEditionFromMasterEditionViaToken](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L202)  has been replaced with [CreateV1](/token-metadata/mint#creating-mint-and-metadata-accounts).
 - [ConvertMasterEditionV1ToV2](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L210)
 - [PuffMetadata](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L236)
-- [VerifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L278)
-- [SetAndVerifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L367)
-- [UnverifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L334)
-- [Utilize](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L296)
-- [ApproveUseAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L311)
-- [RevokeUseAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L324)
-- [ApproveCollectionAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L346)
-- [RevokeCollectionAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L354)
+- [VerifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L278) use [Verify](/token-metadata/collections) instead.
+- [SetAndVerifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L367)  use [Verify](/token-metadata/collections) instead.
+- [UnverifyCollection](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L334)  use [Unverify](/token-metadata/collections#unverify) instead.
+- [Utilize](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L296) - the use feature has been deprecated.
+- [ApproveUseAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L311) - the use feature has been deprecated.
+- [RevokeUseAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L324) - the use feature has been deprecated.
+- [ApproveCollectionAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L346) use [Delegate](/token-metadata/delegates) instead.
+- [RevokeCollectionAuthority](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L354) use [Revoke](/token-metadata/delegates) instead.
 - [FreezeDelegatedAccount](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L375)
 - [ThawDelegatedAccount](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L383)
-- [BurnNft](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L383)
-- [BurnEditionNft](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L487)
-- [VerifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L411)
-- [SetAndVerifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L437)
-- [UnverifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L423)
-- [SetCollectionSize](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L456)
-- [SetTokenStandard](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L464)
+- [BurnNft](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L383) has been replaced by [Burn](https://developers.metaplex.com/token-metadata/burn).
+- [BurnEditionNft](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L487) has been replaced by [Burn](https://developers.metaplex.com/token-metadata/burn).
+- [VerifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L411)  Sized collections have been deprecated.
+- [SetAndVerifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L437)  Sized collections have been deprecated.
+- [UnverifySizedCollectionItem](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L423) Sized collections have been deprecated.
+- [SetCollectionSize](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L456) Sized collections have been deprecated.
+- [SetTokenStandard](https://github.com/metaplex-foundation/mpl-token-metadata/blob/d1a13273cb23c033bda97b4d47b9731b51ef5a2f/programs/token-metadata/program/src/instruction/mod.rs#L464) the TokenStandard is automatically set now.

+ 6 - 1
src/pages/token-metadata/mint.md

@@ -58,7 +58,7 @@ Now that we have our **URI**, we can move on to the next step.
 The next steps show how to create accounts and mint the tokens in two steps. At the [bottom of the page](#create-helpers) there are **code examples** for helpers that combine those steps and make creating different token types easier.
 {% /callout %}
 
-## Creating accounts
+## Creating Mint and Metadata accounts
 
 To create all the onchain accounts required by the Token Standard of your choice, you may simply use the **Create V1** instruction. It will adapt to the requested Token Standard and create the right accounts accordingly.
 
@@ -141,6 +141,11 @@ This instruction accepts a variety of parameters and our SDKs do their best to p
 - **Name**, **URI**, **Seller Fee Basis Points**, **Creators**, etc.: The data of the asset to store on the **Metadata** account.
 - **Token Standard**: The Token Standard of the asset.
 
+{% callout %}
+`createV1` is a helper function that can initialize the Mint Account and create the Metadata Account. If the mint exists already it will only create the metadata Account. If you are looking on how to use [`createMetadataAccountV3`](https://mpl-token-metadata-js-docs.vercel.app/functions/createMetadataAccountV3.html) you should be using this function instead.
+
+{% /callout %}
+
 {% dialect-switcher title="Create onchain Accounts" %}
 {% dialect title="JavaScript" id="js" %}
 

+ 5 - 3
src/pages/umi/guides/index.md

@@ -4,8 +4,10 @@ metaTitle: Guides | Umi Guides
 description: How-to guides for Metaplex's Umi client wrapper and RPC client.
 ---
 
-# Coming Soon! Like VERY soon!
+The following Guides for Umi are currently available:
 
-We are currently writing loads of guides to help you bring you ideas to life on the Solana blockchain.
+{% quick-links %}
 
-If you have any guides you would like to see please to feel free to get in contact and lets us know.
+{% quick-link title="Serializing and Deserializing Transactions" icon="CodeBracketSquare" href="/umi/guides/serializing-and-deserializing-transactions" description="Learn how to Serialize and Deserialize Transactions to move them across different environments while using the Metaplex Umi client." /%}  
+
+{% /quick-links %}

+ 281 - 35
src/pages/umi/guides/serializing-and-deserializing-transactions.md

@@ -1,57 +1,303 @@
 ---
-title: Serializing and Deserializing Transactions
-metaTitle: Serializing and Deserializing Transactions | Umi Guides
-description: How-to guides for Metaplex's Umi product.
+title: Serializing, Deserializing, and sending Transactions
+metaTitle: Umi - Serializing, Deserializing, and sending Transactions
+description: Learn how to Serialize and Deserialize Transactions to move them across different environments while using the Metaplex Umi client.
+created: '08-15-2024'
+updated: '08-15-2024'
 ---
 
-## Passing Transactions from Backend to Frontend (and vice versa)
+**In this guide we're going to talk about:**
+- Serializing and Deserializing Transaction
+- Noop Signer
+- Partially signed transactions
+- Passing transactions from different environments
 
-When passing a transaction from backend to Frontend or vice versa you will need to serialize the transaction in order to transport it between locations. This can also be performed the same way in reverse.
+## Introduction
 
-#### Backend
+Transactions are usually serialized to facilitate movement across different environments. But the reasons could be different:
+- You may require signatures from different authorities stored in separate environments.
+- You may wish to create a transaction on the frontend, but then send and validate it on the backend before storing it to a database.
+
+For example, when creating NFTs, you may need to sign the transaction with the `collectionAutority` keypair to authorize the NFT into the Collection. To safely sign it, without exposing your keypair, you could first create the transaction in the backend, partially sign the transaction with the `collectionAutority` without having to expose the keypair in a non secure environment, serialize the transaction and then send it. You can then safely deserialize the transactions and sign it with the `Buyer` wallet.
+
+**Note**: When using the Candy Machine, you don't need the `collectionAutority` signature 
+
+## Initial Setup
+
+### Required Packages and Imports
+
+We're going to use the following packages: 
+
+{% packagesUsed packages=["umi", "umiDefaults", "core"] type="npm" /%}
+
+To install them, use the following commands:
+
+```
+npm i @metaplex-foundation/umi 
+```
+
+```
+npm i @metaplex-foundation/umi-bundle-defaults 
+```
+
+```
+npm i @metaplex-foundation/mpl-core
+```
+
+These are all the imports that we're going to use for this guide.  
 
 ```ts
-const backendSigner = generateSigner(umi)
-// Create a noop signer that allows you to sign later
-const frontEndSigner = createNoopSigner(
-  'tst24HZ6pbcnraCv4r8acexfgXvyQwMSRgZRCg9gEX1'
+import { generateSigner, signerIdentity, createNoopSigner } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { fetchCollection, create, mplCore } from '@metaplex-foundation/mpl-core'
+import { base64 } from '@metaplex-foundation/umi/serializers';
+```
+
+## Setting up Umi
+
+While setting up Umi you can use or generate keypairs/wallets from different sources. You create a new wallet for testing, import an existing wallet from the filesystem, or use `walletAdapter` if you are creating a website/dApp.  
+
+{% totem %}
+
+{% totem-accordion title="With a New Wallet" %}
+
+```ts
+const umi = createUmi('https://api.devnet.solana.com')
+  .use(mplCore())
+
+// Generate a new keypair signer.
+const signer = generateSigner(umi)
+
+// Tell Umi to use the new signer.
+umi.use(signerIdentity(signer))
+```
+
+{% /totem-accordion %}
+
+{% totem-accordion title="With an Existing Wallet" %}
+
+```ts
+import * as fs from "fs";
+import * as path from "path";
+
+const umi = createUmi('https://api.devnet.solana.com')
+  .use(mplCore())
+
+// Use fs to navigate the filesystem till you reach
+// the wallet you wish to use via relative pathing.
+const walletFile = fs.readFileSync(
+  path.join(__dirname, './keypair.json')
 )
 
-const ix = createNft(umi, {
-  mint,
+// Usually Keypairs are saved as Uint8Array, so you  
+// need to transform it into a usable keypair.  
+let keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(walletFile));
+
+// Before Umi can use this Keypair you need to generate 
+// a Signer type with it.  
+const signer = createSignerFromKeypair(umi, keyair);
+
+// Tell Umi to use the new signer.
+umi.use(signerIdentity(walletFile))
+```
+
+{% /totem-accordion %}
+
+{% totem-accordion title="With the Wallet Adapter" %}
+
+```ts
+import { walletAdapterIdentity } from '@metaplex-foundation/umi-signer-wallet-adapters'
+import { useWallet } from '@solana/wallet-adapter-react'
+
+const wallet = useWallet()
+
+const umi = createUmi('https://api.devnet.solana.com')
+.use(mplCore())
+// Register Wallet Adapter to Umi
+.use(walletAdapterIdentity(wallet))
+```
+
+{% /totem-accordion %}
+
+{% /totem %}
+
+## Serialization
+
+Serialization of a transaction is the process of converting the transaction object into a series of bytes or string that saves the state of the transction in an easily transmittable form. This allows it to be passed through the likes of a http request.  
+
+Within the serialization example we're going to:  
+- Use the `NoopSigner` to add the `Payer` as `Signer` in the instruction
+- Create a Versioned Transaction and sign it with the `collectionAutority` and the `Asset`
+- Serialize it so all the details are preserved and can be accurately reconstructed by the frontend
+- And send it as a String, instead of a u8, so it can be passed through a request
+
+### Noop Signer
+
+Partially signing transactions to then serialize them, is only possible because of the `NoopSigner`. 
+
+Umi instructions can take `Signer` types by default that are often generated from local keypair files or `walletAdapter` signers. Sometimes you may not have access to a certain signer yet and will need to sign with said signer at a later point in time. This is where the Noop Signer comes into play.
+
+The **Noop Signer** takes a publicKey and generates a special `Signer` type which allows Umi to build instructions without needing the Noop Signer to be present or to sign the transaction at the current point in time.
+
+Instructions and transactions built with  *Noop Signers* will be expecting them to sign at some point before sending off the transaction to the chain and will cause a "missing signature" error if not present.
+
+The way to use it is: 
+```ts
+createNoopSigner(publickey('11111111111111111111111111111111'))
+```
+
+### Using Strings instead of Binary data
+
+The decision to turn Serialized Transactions into Strings before passing them between environment is rooted in: 
+- Formats like Base64 are universally recognized and can be safely transmitted over HTTP without the risk of data corruption or misinterpretation.
+- Using strings aligns with standard practices for web communication. Most APIs and web services expect data in JSON or other string-based formats
+
+The way to do it is to use the `base64` function present in the `@metaplex-foundation/umi/serializers` package.
+
+**Note**: you don't need to install the package since it's included in the `@metaplex-foundation/umi` package
+
+```ts 
+// Using the base64.deserialize and passing in a serializedTx 
+const serializedTxAsString = base64.deserialize(serializedTx)[0];
+
+// Using the base64.serialize and passing in the serializedTxAsString
+const deserializedTxAsU8 = base64.serialize(serializedTxAsString);
+```
+
+### Code Example
+
+```ts
+// Use the Collection Authority Keypair
+const collectionAuthority = generateSigner(umi)
+umi.use(signerIdentity(collectionAuthority))
+
+// Create a noop signer that allows you to sign later
+const frontendPubkey = publickey('11111111111111111111111111111111')
+const frontEndSigner = createNoopSigner(frontendPubkey)
+
+// Create the Asset Keypair
+const asset = generateSigner(umi);
+
+// Fetch the Collection
+const collection = await fetchCollection(umi, publickey(`11111111111111111111111111111111`)); 
+
+// Create the createAssetIx
+const createAssetTx = await create(umi, {
+  asset: asset,
+  collection: collection,
+  authority: collectionAuthority,
+  payer: frontEndSigner,
+  owner: frontendPubkey,
   name: 'My NFT',
   uri: 'https://example.com/my-nft.json',
-  sellerFeeBasisPoints: percentAmount(5.5),
-  tokenOwner: newOwner.publicKey,
-  token: newOwnerTokenAccount,
-}).getInstructions()
-
-const blockhash = await umi.rpc.getLatestBlockhash()
-
-const tx = umi.transactions.create({
-  version: 0,
-  payer: umi.identity.publicKey,
-  instructions: ix,
-  blockhash: blockhash.blockhash,
 })
+  .useV0()
+  .setBlockhash(await umi.rpc.getLatestBlockhash())
+  .buildAndSign(umi);
 
-backendSigner.signTransaction(tx)
+// Serialize the Transaction
+const serializedCreateAssetTx = umi.transactions.serialize(createAssetTx)
 
-const serialized = umi.transactions.serialize(tx)
+// Encode Uint8Array to String and Return the Transaction to the Frontend
+const serializedCreateAssetTxAsString = base64.deserialize(serializedCreateAssetTx)[0];
 
-// Return the transaction to your front end as you see fit.
-return { status: 200, tx: serialized }
+return serializedCreateAssetTxAsString
 ```
 
-#### Front End
+## Deserialization
+
+In the deserialization example we're going to:
+- Transform the Transaction that we received through the request back to a Uint8Array
+- Deserialize it so we can operate on it from the point we left
+- Sign it with the `Payer` keypair since we used it through the `NoopSigner` in the other environment
+- Send it
+
+### Code Example
 
 ```ts
-// On the front end deserialize the transaction
-const deserialized = umi.transactions.deserialize(serialized)
+// Decode the String to Uint8Array to make it usable
+const deserializedCreateAssetTxAsU8 = base64.serialize(serializedCreateAssetTxAsString);
+
+// Deserialize the Transaction returned by the Backend
+const deserializedCreateAssetTx = umi.transactions.deserialize(deserializedCreateAssetTxAsU8)
 
-// Get the user to sign the transaction
-await umi.identity.signTransaction(deserialized)
+// Sign the Transaction with the Keypair that we got from the walletAdapter
+const signedDeserializedCreateAssetTx = await umi.identity.signTransaction(deserializedCreateAssetTx)
 
-// Send the transaction
-await umi.rpc.sendTransaction(deserialized)
+// Send the Transaction
+await umi.rpc.sendTransaction(signedDeserializedCreateAssetTx)
 ```
+
+## Full Code Example
+
+Naturally, to have a fully reproducible example of the instructions in action, we need to include additional steps, such as handling the frontend signer and creating a collection. 
+
+Don't worry if everything isn't identical; the backend and frontend portions remain consistent.
+
+```ts
+import { generateSigner, createSignerFromKeypair, signerIdentity, sol, createNoopSigner, transactionBuilder } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { base58 } from '@metaplex-foundation/umi/serializers';
+import { createCollection, create, fetchCollection } from '@metaplex-foundation/mpl-core'
+
+const umi = createUmi("https://api.devnet.solana.com", "finalized")
+
+const collectionAuthority = generateSigner(umi);
+umi.use(signerIdentity(collectionAuthority));
+
+const frontEndSigner = generateSigner(umi);
+
+(async () => {
+  
+  // Airdrop Tokens inside of the wallets
+  await umi.rpc.airdrop(umi.identity.publicKey, sol(1));
+  await umi.rpc.airdrop(frontEndSigner.publicKey, sol(1));
+
+  // Generate the Collection KeyPair
+  const collectionAddress = generateSigner(umi)
+  console.log("\nCollection Address: ", collectionAddress.publicKey.toString())
+
+  // Generate the collection
+  let createCollectionTx = await createCollection(umi, {
+    collection: collectionAddress,
+    name: 'My Collection',
+    uri: 'https://example.com/my-collection.json',
+  }).sendAndConfirm(umi)
+
+  const createCollectionSignature = base58.deserialize(createCollectionTx.signature)[0]
+  console.log(`\nCollection Created: https://solana.fm/tx/${createCollectionSignature}?cluster=devnet-alpha`);
+
+  // Serialize
+  
+  const asset = generateSigner(umi);
+  console.log("\nAsset Address: ", asset.publicKey.toString());
+
+  const collection = await fetchCollection(umi, collectionAddress.publicKey); 
+
+  let createAssetIx = await create(umi, {
+    asset: asset,
+    collection: collection,
+    authority: collectionAuthority,
+    payer: createNoopSigner(frontEndSigner.publicKey),
+    owner: frontEndSigner.publicKey,
+    name: 'My NFT',
+    uri: 'https://example.com/my-nft.json',
+  })
+    .useV0()
+    .setBlockhash(await umi.rpc.getLatestBlockhash())
+    .buildAndSign(umi);
+
+
+  const serializedCreateAssetTx = umi.transactions.serialize(createAssetTx)
+  const serializedCreateAssetTxAsString = base64.deserialize(serializedCreateAssetTx)[0];
+
+  // Deserialize
+
+  const deserializedCreateAssetTxAsU8 = base64.serialize(serializedCreateAssetTxAsString);
+  const deserializedCreateAssetTx = umi.transactions.deserialize(deserializedCreateAssetTxAsU8)
+  const signedDeserializedCreateAssetTx = await frontEndSigner.signTransaction(deserializedCreateAssetTx)
+
+  const createAssetSignature = base58.deserialize(await umi.rpc.sendTransaction(signedDeserializedCreateAssetTx))[0]
+  console.log(`\nAsset Created: https://solana.fm/tx/${createAssetSignature}}?cluster=devnet-alpha`);
+})();
+```

+ 4 - 0
src/pages/umi/public-keys-and-signers.md

@@ -9,6 +9,10 @@ The [EdDSA interface](https://umi.typedoc.metaplex.com/interfaces/umi.EddsaInter
 
 Let's tackle this on a per-use case basis.
 
+{% callout type="note" %}
+Looking for a snippet to use the Wallet Adapter or a Filesystem wallet? Check out the [Getting Started Page](/umi/getting-started)!
+{% /callout %}
+
 ## Public keys
 
 In Umi, a public key is a simple base58 `string` representing a 32-byte array. We use an opaque type to tell TypeScript that the given public key has been verified and is valid. We also use a type parameter to offer more granular type safety.

+ 0 - 80
src/pages/umi/web3js-adapters.md

@@ -1,80 +0,0 @@
----
-title: Web3.js adapters
-metaTitle: Web3.js adapters | Umi
-description: Adapters to make Metaplex Umi work with Solana web3js.
----
-The `@solana/web3.js` library is currently widely used in the Solana ecosystem and defines its own types for public keys, transactions, instructions, etc.
-
-When creating Umi, we wanted to move away from the class-based types defined in `@solana/web3.js` and instead use a more functional approach by relying only on TypeScript types. This unfortunately means that not all types from `@solana/web3.js` are compatible with the ones provided by Umi and vice versa.
-
-To help with this issue, Umi provides a set of adapters that allows us to parse types to and from their Web3.js counterparts.
-
-To use them, you will first need to install the [`@metaplex-foundation/umi-web3js-adapters`](https://github.com/metaplex-foundation/umi/tree/main/packages/umi-web3js-adapters) package.
-
-```sh
-npm install @metaplex-foundation/umi-web3js-adapters
-```
-
-Then, you will have access to a bunch of helper methods to convert to and from Web3.js types.
-
-```ts
-// For public keys.
-fromWeb3JsPublicKey(myWeb3JsPublicKey)
-toWeb3JsPublicKey(myUmiPublicKey)
-
-// For keypairs.
-fromWeb3JsKeypair(myWeb3JsKeypair)
-toWeb3JsKeypair(myUmiKeypair)
-
-// For transactions.
-fromWeb3JsTransaction(myWeb3JsTransaction)
-toWeb3JsTransaction(myUmiTransaction)
-fromWeb3JsLegacyTransaction(myLegacyWeb3JsTransaction)
-toWeb3JsLegacyTransaction(myUmiTransaction)
-
-// For transaction messages.
-fromWeb3JsMessage(myWeb3JsTransactionMessage)
-toWeb3JsMessage(myUmiTransactionMessage)
-toWeb3JsMessageFromInput(myUmiTransactionInput)
-
-// For instructions.
-fromWeb3JsInstruction(myWeb3JsInstruction)
-toWeb3JsInstruction(myUmiInstruction)
-```
-
-Let's take a look at an example. Say you want to issue a vanilla token using the `@identity.com/solana-gateway-ts` library which relies on `@solana/web3.js`. It offers an `issueVanilla` function that creates an instruction but this isn't compatible with Umi.
-
-To go around this, you could create a wrapper function that converts the `issueVanilla` function into a Umi-compatible one. Precisely, this means we need to convert the returned instruction using `fromWeb3JsInstruction` and convert any public key passed into the function using `toWeb3JsPublicKey`.
-
-```ts
-import { issueVanilla as baseIssueVanilla } from '@identity.com/solana-gateway-ts'
-import {
-  fromWeb3JsInstruction,
-  toWeb3JsPublicKey,
-} from '@metaplex-foundation/umi-web3js-adapters'
-
-export const issueVanilla = (
-  gatewayTokenAccount: PublicKey,
-  payer: Signer,
-  gatekeeperAccount: PublicKey,
-  owner: PublicKey,
-  gatekeeperAuthority: Signer,
-  gatekeeperNetwork: PublicKey
-) =>
-  transactionBuilder([
-    {
-      instruction: fromWeb3JsInstruction(
-        baseIssueVanilla(
-          toWeb3JsPublicKey(gatewayTokenAccount),
-          toWeb3JsPublicKey(payer.publicKey),
-          toWeb3JsPublicKey(gatekeeperAccount),
-          toWeb3JsPublicKey(owner),
-          toWeb3JsPublicKey(gatekeeperAuthority.publicKey),
-          toWeb3JsPublicKey(gatekeeperNetwork)
-        )
-      ),
-      signers: [payer, gatekeeperAuthority],
-      bytesCreatedOnChain: 0,
-    },
-  ])
-```

+ 373 - 0
src/pages/umi/web3js-differences-and-adapters.md

@@ -0,0 +1,373 @@
+---
+title: Web3.js Differences and Adapters
+metaTitle: Umi - Web3.js Differences and Adapters
+description: Difference and Adapters to make Metaplex Umi work with Solana web3js.
+---
+
+The `@solana/web3.js` library is currently widely used in the Solana ecosystem and defines its own types for `Publickeys`, `Transactions`, `Instructions`, etc. 
+
+When creating `Umi`, we wanted to move away from the class-based types defined in `@solana/web3.js`. This unfortunately means that, although having the same or similar import names, not all types from `@solana/web3.js` are compatible with the ones provided by `Umi` and vice versa.
+
+To help with this issue, `Umi` provides a set of adapters that allows to parse types to and from their `Web3.js` counterparts and they can be found in the [`@metaplex-foundation/umi-web3js-adapters`](https://www.npmjs.com/package/@metaplex-foundation/umi-web3js-adapters) package.
+
+## Required Package and Imports
+
+The `umi-web3js-adapters` package includes all the helper methods needed to convert between Umi and Web3.js types. 
+
+While it's already included when you install the `@metaplex-foundation/umi` package, you can also install it separately using the following command:
+
+```
+npm i @metaplex-foundation/umi-web3js-adapters
+```
+
+**Here are the imports you’ll have access to:**
+
+```ts
+import { 
+  // Keypairs
+  fromWeb3JsKeypair, toWeb3JsKeypair,
+  // Publickey
+  fromWeb3JsPublicKey, toWeb3JsPublicKey,
+  // Instructions
+  fromWeb3JsInstruction, toWeb3JsInstruction,
+  // Legacy Transactions
+  fromWeb3JsLegacyTransaction, toWeb3JsLegacyTransaction,
+  // Versioned Transactions
+  fromWeb3JsTransaction, toWeb3JsTransaction, 
+  // Messages
+  fromWeb3JsMessage, toWeb3JsMessage, toWeb3JsMessageFromInput
+} from '@metaplex-foundation/umi-web3js-adapters';
+```
+
+## Publickeys
+
+Generating publickeys might seem similar at first sight, but there are some subtle differences between the packages. **Web3Js** uses a capital `P` and requires `new`, while the **Umi** version uses a lowercase `p`.
+
+### Umi
+```ts
+import { publicKey } from '@metaplex-foundation/umi';
+
+// Generate a new Umi Publickey
+const umiPublicKey = publicKey("11111111111111111111111111111111");
+```
+
+### Web3Js
+```ts
+import { PublicKey } from '@solana/web3.js';
+
+// Generate a new Web3Js Publickey
+const web3jsPublickey = new PublicKey("1111111111111111111111111111111111111111");
+```
+
+Next, let's look into how to use the adapters.
+
+### From Web3Js to Umi
+```ts
+import { PublicKey } from '@solana/web3.js';
+import { fromWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Publickey
+const web3jsPublickey = new PublicKey("1111111111111111111111111111111111111111");
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiPublicKey = fromWeb3JsPublicKey(web3jsPublickey);
+```
+
+### From Umi to Web3Js
+```ts
+import { publicKey } from '@metaplex-foundation/umi';
+import { toWeb3JsPublicKey } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Publickey
+const umiPublicKey = publicKey("11111111111111111111111111111111");
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsPublickey = toWeb3JsPublicKey(umiPublicKey);
+```
+
+## Keypairs
+
+Generating keypairs is where the difference from Web3Js and Umi increase. With **Web3Js**, you can simply use `Keypair.generate()`, however, in **Umi**, you first need to create an Umi instance, which you'll use for most Umi and Metaplex-related operations.
+
+### Umi
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { generateSigner, createSignerFromKeypair } from '@metaplex-foundation/umi'
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com')
+
+// Generate a new Umi keypair
+const umiKeypair = generateSigner(umi)
+
+// Or use an existing one
+const umiKeypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(walletFile));
+```
+
+### Web3Js
+```ts
+import { Keypair } from '@solana/web3.js';
+
+// Generate a new Web3Js keypair
+const web3jsKeypair = Keypair.generate();
+
+// Or use an existing one
+const web3jsKeypair = Keypair.fromSecretKey(new Uint8Array(walletFile));
+```
+
+Next, let's look into how to use the adapters.
+
+### From Umi to Web3Js
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { generateSigner } from '@metaplex-foundation/umi'
+import { toWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com')
+
+// Generate a new keypair
+const umiKeypair = generateSigner(umi)
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsKeypair = toWeb3JsKeypair(umiKeypair);
+```
+
+### From Web3Js to Umi
+```ts
+import { Keypair } from '@solana/web3.js';
+import { fromWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new keypair
+const web3jsKeypair = Keypair.generate();
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiKeypair = fromWeb3JsKeypair(web3jsKeypair);
+```
+
+## Instructions
+
+When creating instructions, the key difference with Umi is that you must first create an Umi instance (as with `Keypairs`). Additionally, `getInstructions()` returns an array of instructions instead of a single one.
+
+For most use cases, handling individual instructions isn't necessary anyway, as this can be simplified using other helpers and transaction builders.
+
+### Umi
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { transferSol } from '@metaplex-foundation/mpl-toolbox';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new instruction (like a core nft transfer)
+// get instructions will give you an Array of instructions
+const umiInstructions = transferSol(umi, {...TransferParams}).getInstructions();
+```
+
+### Web3Js
+```ts
+import { SystemProgram } from '@solana/web3.js';
+
+// Create a new instruction (like a lamport transfer)
+const web3jsInstruction = SystemProgram.transfer({...TransferParams})
+```
+
+Next, let's look into how to use the adapters.
+
+### From Umi to Web3Js
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { transferSol } from '@metaplex-foundation/mpl-toolbox';
+import { toWeb3JsInstruction } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new instruction (like a core nft transfer)
+const umiInstruction = transferSol(umi, {...TransferParams}).getInstructions();
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsInstruction = umiInstruction.map(toWeb3JsInstruction);
+```
+
+### From Web3Js to Umi
+```ts
+import { SystemProgram } from '@solana/web3.js';
+import { fromWeb3JsInstruction } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com')
+
+// Create a new instruction (like a lamport transfer)
+const web3jsInstruction = SystemProgram.transfer({...TransferParams})
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiInstruction = fromWeb3JsInstruction(web3jsInstruction);
+```
+
+## Transactions
+
+The Solana runtime supports two transaction versions:
+- Legacy Transaction: Older transaction format with no additional benefit
+- 0 / Versioned Transaction: Added support for Address Lookup Tables
+
+**Note**: if you're not familiar with the concept of Versioned Transactions, read more about it [here](https://solana.com/en/docs/advanced/versions)
+
+For `umi` and `umi-web3js-adapters` we added support for both transaction types! 
+
+### Umi
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { transferSol } from '@metaplex-foundation/mpl-toolbox';
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new Umi Legacy Transaction
+const umiTransaction = transferSol(umi, {...TransferParams}).useLegacyVersion();
+
+// Create a new Umi Versioned Transaction
+const umiVersionedTransaction = transferSol(umi, {...TransferParams}).useV0().build(umi)
+```
+
+### Web3Js
+```ts
+import { Transaction, VersionedTransaction, TransactionMessage, Connection, clusterApiUrl, SystemProgram } from '@solana/web3.js';
+
+// Create a new Web3Js Legacy Transaction
+const web3jsTransaction = new Transaction().add(SystemProgram.transfer({...TransferParams}));
+
+// Create a new Web3Js Versioned Transaction
+const instructions = [SystemProgram.transfer({...TransferParams})];
+
+const connection = new Connection(clusterApiUrl("devnet"));
+const blockhash = await connection.getLatestBlockhash().then(res => res.blockhash);
+
+const messageV0 = new TransactionMessage({
+  payerKey: payer.publicKey,
+  recentBlockhash: blockhash,
+  instructions,
+}).compileToV0Message();
+
+const web3jsVersionedTransaction = new VersionedTransaction(messageV0);
+```
+
+Next, let's look into how to use the adapters.
+
+### From Umi to Web3Js
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { transferSol } from '@metaplex-foundation/mpl-toolbox';
+import { toWeb3JsLegacyTransaction, toWeb3JsTransaction } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new Legacy Transaction
+const umiTransaction = transferSol(umi, {...TransferParams}).useLegacyVersion();
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsTransaction = toWeb3JsTransaction(umiTransaction);
+
+/// Versioned Transactions ///
+
+// Create a new Versioned Transaction
+const umiVersionedTransaction = transferSol(umi, {...TransferParams}).useV0().build(umi)
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsVersionedTransaction = toWeb3JsTransaction(umiVersionedTransaction);
+```
+
+### From Web3Js to Umi
+```ts
+import { Transaction, VersionedTransaction, TransactionMessage, Connection, clusterApiUrl, SystemProgram } from '@solana/web3.js';
+import { fromWeb3JsLegacyTransaction, fromWeb3JsTransaction } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Create a new Legacy Transaction
+const web3jsTransaction = new Transaction().add(SystemProgram.transfer({...TransferParams}));
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiTransaction = fromWeb3JsLegacyTransaction(web3jsTransaction);
+
+/// Versioned Transactions ///
+
+// Create a new Versioned Transaction
+const web3jsVersionedTransaction = new VersionedTransaction(...messageV0Params);
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiVersionedTransaction = fromWeb3JsTransaction(web3jsVersionedTransaction);
+```
+
+
+## Messages 
+
+We've already covered creating messages during versioned transaction creation. Let's review it again.
+
+### Umi
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { transfer, mplCore } from '@metaplex-foundation/mpl-core'
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new Umi Message
+const blockhash = await umi.rpc.getLatestBlockhash()
+
+const instructions = transfer(umi, {...TransferParams}).getInstructions()
+
+const umiVersionedTransaction = umi.transactions.create({
+  version: 0,
+  payer: frontEndSigner.publicKey,
+  instructions,
+  blockhash: blockhash.blockhash,
+});
+
+const umiMessage = umiVersionedTransaction.message
+```
+
+### Web3Js
+```ts
+import { TransactionMessage, Connection, clusterApiUrl, SystemProgram } from '@solana/web3.js';
+
+// Create a new Web3Js Message
+const connection = new Connection(clusterApiUrl("devnet"));
+const minRent = await connection.getMinimumBalanceForRentExemption(0);
+const blockhash = await connection.getLatestBlockhash().then(res => res.blockhash);
+
+const instructions = [SystemProgram.transfer({...TransferParams})];
+
+const Web3JsMessage = new TransactionMessage({
+  payerKey: payer.publicKey,
+  recentBlockhash: blockhash,
+  instructions,
+}).compileToV0Message();
+```
+
+Next, let's look into how to use the adapters.
+
+### From Umi to Web3Js
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { toWeb3JMessage } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Generate a new Umi instance
+const umi = createUmi('https://api.devnet.solana.com').use(mplCore())
+
+// Create a new Versioned Transaction
+const umiMessage = umi.transactions.create({...createParams}).message;
+
+// Convert it using the UmiWeb3jsAdapters Package
+const web3jsMessage = toWeb3JMessage(umiMessage);
+```
+
+### From Web3Js to Umi
+```ts
+import { TransactionMessage } from '@solana/web3.js';
+import { fromWeb3JMessage } from '@metaplex-foundation/umi-web3js-adapters';
+
+// Create a new Versioned Transaction
+const Web3JsMessage = new TransactionMessage({...createMessageParams}).compileToV0Message();
+
+// Convert it using the UmiWeb3jsAdapters Package
+const umiMessage = fromWeb3JMessage(Web3JsMessage);
+```

+ 0 - 103
src/pages/umi/web3js-differences.md

@@ -1,103 +0,0 @@
----
-title: Umi and Web3js Differences
-metaTitle: Umi and Web3js Differences | Umi
-description: Differences between Metaplex Umi and Solana web3js.
----
-
-## Differences
-
-When using Umi you may come across some differences between Umi and solana web3js.
-
-Although having the same or similar import names these function differently and are not compatible between the two librarys out the box.
-
-### PublicKeys
-
-{% dialect-switcher title="Umi PublicKey" %}
-{% dialect title="JavaScript" id="js" %}
-```ts
-import { publicKey } from '@metaplex-foundation/umi'
-const publicKey = publicKey('tst24HZ6pbcnraCv4r8acexfgXvyQwMSRgZRCg9gEX1')
-```
-{% /dialect %}
-{% /dialect-switcher %}
-{% seperator h="6" /%}
-{% dialect-switcher title="Solana Web3js PublicKey" %}
-{% dialect title="JavaScript" id="js" %}
-```js
-import { PublicKey } from '@solana/web3js'
-const publicKey = new PublicKey('tst24HZ6pbcnraCv4r8acexfgXvyQwMSRgZRCg9gEX1')
-```
-{% /dialect %}
-{% /dialect-switcher %}
-
-These are just basic examples. To learn more about Umi's keypairs check out [PublicKeys and Signers](/umi/public-keys-and-signers). There are also converters between both Umi and web3js [Web3Js Adapters](/umi/web3js-adapters)
-
-### Keypairs
-
-{% dialect-switcher title="Umi Keypair" %}
-{% dialect title="JavaScript" id="js" %}
-```js
-const umi = createUmi(...)
-const keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(secretKey))
-
-```
-{% /dialect %}
-{% /dialect-switcher %}
-
-{% seperator h="6" /%}
-
-{% dialect-switcher title="Web3js Keypair" %}
-{% dialect title="JavaScript" id="js" %}
-```js
-import { Keypair } from '@solana/web3js'
-const publicKey = Keypair.fromSecretKey(new Uint8Array(JSON.parse(Wallet.DEV1)))
-```
-{% /dialect %}
-{% /dialect-switcher %}
-
-These are just basic examples. To learn more about Umi's keypairs check out [PublicKeys and Signers](/umi/public-keys-and-signers). There are also converters between both Umi and web3js keypair types [Web3Js Adapters](/umi/web3js-adapters)
-
-### Transactions
-
-{% dialect-switcher title="Umi Transaction" %}
-{% dialect title="JavaScript" id="js" %}
-```js
-const blockhash = await umi.rpc.getLatestBlockhash()
-
-const transaction = const tx = umi.transactions.create({
-    version: 0,
-    payer: umi.identity.publicKey,
-    instructions: ix,
-    blockhash: blockhash.blockhash,
-  });
-
-await umi.rpc.sendTransaction(tx)
-```
-{% /dialect %}
-{% /dialect-switcher %}
-
-{% seperator h="6" /%}
-
-{% dialect-switcher title="Web3js Transaction" %}
-{% dialect title="JavaScript" id="js" %}
-
-```js
-const wallet = useWallet()
-
-const messageV0 = new TransactionMessage({
-  payerKey: SIGNER_WALLET.publicKey,
-  recentBlockhash: latestBlockhash.blockhash,
-  instructions: txInstructions,
-}).compileToV0Message()
-
-const tx = new VersionedTransaction(messageV0)
-
-// send via useWallet hook
-await wallet.sendTransaction(tx)
-//or send via connection
-await connection.sendTransaction(tx)
-```
-{% /dialect %}
-{% /dialect-switcher %}
-
-These are just basic examples. To learn more about Umi's Transiactions check out [Transactions](/umi/transactions). There are also converters between both Umi and web3js Transaction types [Web3Js Adapters](/umi/web3js-adapters)