Solana
Solana
#Installation
To get started, install the following dependencies for your project:
01npm install @magic-ext/solana @solana/web3.js magic-sdk
#Initialization
The Magic class is the entry-point to the Magic SDK. It must be instantiated with a Magic publishable key.
#ES Modules/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
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>
#Common Methods
Note that the Magic Solana extension follows the method names and conventions by Solana's Javascript SDK.
#Sign and Send Transaction
#ES Modules/TypeScript
To sign a standard Solana blockchain transaction, call the magic.solana.signTransaction
method. Note that you must sign with the Magic SDK method but send the transaction using the @solana/web3.js
method connection.sendRawTransaction
.
01import {
02 clusterApiUrl,
03 Keypair,
04 LAMPORTS_PER_SOL,
05 PublicKey,
06 SystemProgram,
07 Transaction,
08} from "@solana/web3.js"
09
10// Ensure you have Magic initialized with the Solana extension
11// Ensure that user is already authenticated
12
13const connection = new Connection(clusterApiUrl("devnet"))
14
15const metadata = await magic.user.getMetadata();
16const userPublicKey = new web3.PublicKey(metadata.publicAddress);
17const recipientPubkey = Keypair.generate().publicKey
18
19const blockhash = await connection?.getLatestBlockhash()
20if (!blockhash) return
21
22const transaction = new Transaction({
23 ...blockhash,
24 feePayer: userPublicKey,
25})
26
27const transferIx = SystemProgram.transfer({
28 fromPubkey: userPublicKey,
29 toPubkey: recipientPubkey,
30 lamports: 0.01 * LAMPORTS_PER_SOL,
31})
32
33transaction.add(transferIx)
34
35const signedTransaction = await magic?.solana.signTransaction(
36 transaction,
37 {
38 requireAllSignatures: false,
39 verifySignatures: true,
40 }
41)
42
43const signature = await connection?.sendRawTransaction(
44 Buffer.from(signedTransaction?.rawTransaction as string, "base64")
45)
46
47console.log(signature);
#Sign Message
#ES Modules/TypeScript
01// Ensure you have Magic initialized with the Solana extension
02// Ensure that user is already authenticated
03
04const signedMessage = await magic?.solana.signMessage("Hello World") console.log(signedMessage)