Para SDK Setup Required
Installation
- @solana/web3.js
- @solana/kit
- Anchor
Copy
Ask AI
npm install @getpara/solana-web3.js-v1-integration @solana/web3.js --save-exact
Copy
Ask AI
npm install @getpara/solana-signers-v2-integration @solana/kit --save-exact
Copy
Ask AI
npm install @getpara/solana-web3.js-v1-integration @solana/web3.js @project-serum/anchor --save-exact
Library Setup
- Custom Hook
- Direct Usage
- @solana/web3.js
- @solana/kit
- Anchor
hooks/useParaSolana.ts
Copy
Ask AI
import { useMemo } from 'react';
import { useClient, useAccount } from '@getpara/react-sdk';
import { ParaSolanaWeb3Signer } from '@getpara/solana-web3.js-v1-integration';
import { Connection, clusterApiUrl } from '@solana/web3.js';
export function useParaSolana() {
const para = useClient();
const { isConnected } = useAccount();
const { connection, signer } = useMemo(() => {
const connection = new Connection(clusterApiUrl('mainnet-beta'));
if (!para || !isConnected) {
return { connection, signer: null };
}
const wallets = para.getWalletsByType({ type: 'Solana' });
if (!wallets || wallets.length === 0) {
return { connection, signer: null };
}
const signer = new ParaSolanaWeb3Signer(para, connection);
return { connection, signer };
}, [para, isConnected]);
return { connection, signer };
}
hooks/useParaSolanaKit.ts
Copy
Ask AI
import { useMemo } from 'react';
import { useClient, useAccount } from '@getpara/react-sdk';
import { createParaSolanaSigner } from '@getpara/solana-signers-v2-integration';
import { createSolanaRpc } from '@solana/kit';
export function useParaSolanaKit() {
const para = useClient();
const { isConnected } = useAccount();
const { rpc, signer } = useMemo(() => {
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
if (!para || !isConnected) {
return { rpc, signer: null };
}
const wallets = para.getWalletsByType({ type: 'Solana' });
if (!wallets || wallets.length === 0) {
return { rpc, signer: null };
}
const signer = createParaSolanaSigner({ para, rpc });
return { rpc, signer };
}, [para, isConnected]);
return { rpc, signer };
}
hooks/useParaAnchor.ts
Copy
Ask AI
import { useMemo } from 'react';
import { useClient, useAccount } from '@getpara/react-sdk';
import { ParaSolanaWeb3Signer } from '@getpara/solana-web3.js-v1-integration';
import { Connection, clusterApiUrl, Transaction, VersionedTransaction, SystemProgram } from '@solana/web3.js';
import * as anchor from '@project-serum/anchor';
export function useParaAnchor() {
const para = useClient();
const { isConnected } = useAccount();
const provider = useMemo(() => {
const connection = new Connection(clusterApiUrl('mainnet-beta'));
if (!para || !isConnected) {
const readOnlyWallet = {
publicKey: SystemProgram.programId,
signTransaction: async <T extends Transaction | VersionedTransaction>(tx: T): Promise<T> => {
throw new Error('Read-only provider: Authenticate to sign transactions.');
},
signAllTransactions: async <T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]> => {
throw new Error('Read-only provider: Authenticate to sign transactions.');
},
};
return new anchor.AnchorProvider(connection, readOnlyWallet, { commitment: 'confirmed' });
}
const wallets = para.getWalletsByType({ type: 'Solana' });
if (!wallets || wallets.length === 0) {
const readOnlyWallet = {
publicKey: SystemProgram.programId,
signTransaction: async <T extends Transaction | VersionedTransaction>(tx: T): Promise<T> => {
throw new Error('No Solana wallet available');
},
signAllTransactions: async <T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]> => {
throw new Error('No Solana wallet available');
},
};
return new anchor.AnchorProvider(connection, readOnlyWallet, { commitment: 'confirmed' });
}
const signer = new ParaSolanaWeb3Signer(para, connection);
const wallet = {
publicKey: signer.sender,
signTransaction: async <T extends Transaction | VersionedTransaction>(tx: T): Promise<T> => {
return await signer.signTransaction(tx);
},
signAllTransactions: async <T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]> => {
return await Promise.all(txs.map((tx) => signer.signTransaction(tx)));
},
};
return new anchor.AnchorProvider(connection, wallet, { commitment: 'confirmed' });
}, [para, isConnected]);
return provider;
}
- @solana/web3.js
- @solana/kit
- Anchor
Copy
Ask AI
import { ParaSolanaWeb3Signer } from '@getpara/solana-web3.js-v1-integration';
import { Connection, clusterApiUrl } from '@solana/web3.js';
import { para } from './para';
const connection = new Connection(clusterApiUrl('mainnet-beta'));
const signer = new ParaSolanaWeb3Signer(para, connection);
Copy
Ask AI
import { createParaSolanaSigner } from '@getpara/solana-signers-v2-integration';
import { createSolanaRpc } from '@solana/kit';
import { para } from './para';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const signer = createParaSolanaSigner({ para, rpc });
Copy
Ask AI
import { ParaSolanaWeb3Signer } from '@getpara/solana-web3.js-v1-integration';
import { Connection, clusterApiUrl, Transaction, VersionedTransaction } from '@solana/web3.js';
import * as anchor from '@project-serum/anchor';
import { para } from './para';
const connection = new Connection(clusterApiUrl('mainnet-beta'));
const signer = new ParaSolanaWeb3Signer(para, connection);
const wallet = {
publicKey: signer.sender,
signTransaction: async <T extends Transaction | VersionedTransaction>(tx: T): Promise<T> => {
return await signer.signTransaction(tx);
},
signAllTransactions: async <T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]> => {
return await Promise.all(txs.map((tx) => signer.signTransaction(tx)));
},
};
const provider = new anchor.AnchorProvider(connection, wallet, { commitment: 'confirmed' });
anchor.setProvider(provider);