How to Integrate with the Solana Blockchain with Magic

How to Integrate with the Solana Blockchain with Magic

#Installation

Magic interacts with the Solana blockchain via Magic's extension NPM package @magic-ext/solana. The Solana extension also lets you interact with the blockchain using methods from Solana's Javascript SDK.

note

You can skip straight to our kitchen sink example directly:

👉 Solana Example

#NPM

Bash
01npm install --save @magic-ext/solana

#Yarn

Bash
01yarn add @magic-ext/solana

#Initializing Extension

#ES Modules/TypeScript

Typescript
01import { Magic } from 'magic-sdk';
02import { SolanaExtension } from '@magic-ext/solana';
03
04const magic = new Magic('YOUR_API_KEY', {
05  extensions: [
06    new SolanaExtension({
07      rpcUrl: 'SOLANA_RPC_NODE_URL',
08    }),
09  ],
10});

#CDN

Javascript
01<script src="https://auth.magic.link/sdk"></script>
02<script type="text/javascript" src="https://auth.magic.link/sdk/extension/solana"></script>
03
04<script>
05  const magic = new window.Magic("YOUR_API_KEY", {
06      extensions: [
07        new SolanaExtension({
08          rpcUrl: 'SOLANA_RPC_NODE_URL'
09        })
10      ]
11  });
12</script>

#Sign Transaction

Note that the Magic Solana extension follows the method names and conventions by Solana's Javascript SDK. To sign a standard Solana blockchain transaction, you can call the magic.solana.signTransaction method.

#ES Modules/TypeScript

Typescript
01import { Magic } from 'magic-sdk';
02import { SolanaExtension } from '@magic-ext/solana';
03
04import * as web3 from '@solana/web3.js';
05
06const rpcUrl = 'SOLANA_RPC_NODE_URL'
07
08const magic = new Magic('YOUR_API_KEY', {
09  extensions: [
10    new SolanaExtension({
11      rpcUrl
12    }),
13  ],
14});
15
16const metadata = await magic.user.getMetadata();
17const recipientPubKey = new web3.PublicKey(destinationAddress);
18const payer = new web3.PublicKey(metadata.publicAddress);
19const connection = new web3.Connection(rpcUrl);
20
21const hash = await connection.getRecentBlockhash();
22
23
24let transactionMagic = new web3.Transaction({
25  feePayer: payer,
26  recentBlockhash: hash.blockhash
27});
28
29const transaction = web3.SystemProgram.transfer({
30  fromPubkey: payer,
31  toPubkey: recipientPubKey,
32  lamports: sendAmount,
33});
34
35transactionMagic.add(...([transaction]));
36
37const serializeConfig = {
38  requireAllSignatures: false,
39  verifySignatures: true
40};
41
42const signedTransaction = await magic.solana.signTransaction(transactionMagic, serializeConfig);
43
44    console.log("Signed transaction", signedTransaction);

#Send Transaction

#ES Modules/TypeScript

Typescript
01import { Magic } from 'magic-sdk';
02import { SolanaExtension } from '@magic-ext/solana';
03
04import * as web3 from '@solana/web3.js';
05
06const magic = new Magic('YOUR_API_KEY', {
07  extensions: [
08    new SolanaExtension({
09      rpcUrl: 'SOLANA_RPC_NODE_URL',
10    }),
11  ],
12});
13
14const connection = new web3.Connection(rpcUrl);
15// `signedTransaction` comes from `magic.solana.signTransaction` above
16const tx = web3.Transaction.from(signedTransaction.rawTransaction); 
17const signature = await connection.sendRawTransaction(tx.serialize());
18
19
20console.log(signature);

Did you find what you were looking for?

How to Integrate with the Solana Blockchain with Magic

Did you find what you were looking for?