The @dynamic-labs/solana-extension
integrates your application with the @solana/web3.js
library, providing a Connection
and Signer
to interact with the Solana blockchain.
Installation
To install the Solana extension, run the following command:
npm install @dynamic-labs/solana-extension@alpha
Setup
Incorporate the Solana extension into your client using the extend method to add getSigner and getConnection methods:
import { createClient } from '@dynamic-labs/client'
import { SolanaExtension } from '@dynamic-labs/solana-extension'
* Creates and extends the client with Solana blockchain functionality.
*/
export const dynamicClient = createClient({
environmentId: 'YOUR-ENVIRONMENT-ID',
}).extend(SolanaExtension())
Polyfils
Your React Native project might require polyfills for certain global objects. Install the necessary polyfills and set them up as follows
Installation
npm install text-encoding react-native-get-random-values buffer
Include the following code in your project’s entry point to set up the polyfills:
import { Buffer } from 'buffer'
import 'react-native-get-random-values'
global.TextEncoder = require('text-encoding').TextEncoder
global.Buffer = Buffer
Usage
After setup, you can interact with the Solana blockchain. Below is an example of a component that sends 1 SOL to a specified wallet address:
import { Button } from 'react-native'
import { FC } from 'react'
import { dynamicClient } from '<path to client file>'
import {
LAMPORTS_PER_SOL,
PublicKey,
SystemProgram,
TransactionMessage,
VersionedTransaction,
} from '@solana/web3.js'
interface Send1SolButtonProps {
destinationAddress: string
}
* Renders a button that sends 1 SOL to a given address.
*/
const Send1SolButton: FC<Send1SolButtonProps> = ({ destinationAddress }) => {
const send = async () => {
const wallet = dynamicClient.wallets.primary
if (!wallet) return
const connection = dynamicClient.solana.getConnection({
commitment: 'singleGossip',
})
const signer = dynamicClient.solana.getSigner({ wallet })
const { blockhash } = await connection.getLatestBlockhash()
const amountInLamports = 1 * LAMPORTS_PER_SOL
const fromKey = new PublicKey(wallet.address)
const toKey = new PublicKey(destinationAddress)
const instructions = [
SystemProgram.transfer({
fromPubkey: fromKey,
lamports: amountInLamports,
toPubkey: toKey,
}),
]
const messageV0 = new TransactionMessage({
instructions,
payerKey: fromKey,
recentBlockhash: blockhash,
}).compileToV0Message()
const transaction = new VersionedTransaction(messageV0)
const { signature } = await signer.signAndSendTransaction(transaction)
console.log('Successful transaction signature:', signature)
}
return <Button title="Send" onPress={send} />
}