Getting set up with the Magic Router SDK
npm install magic-router-sdk
import { prepareMagicTransaction, sendMagicTransaction, getClosestValidator, getWritableAccounts } from 'magic-router-sdk'; import { Connection, Transaction } from '@solana/web3.js';
const connection = new Connection("https://devnet-router.magicblock.app", "confirmed");
prepareMagicTransaction
import { prepareMagicTransaction } from 'magic-router-sdk'; // Build your transaction as usual const transaction = await program.methods .myInstruction() .accounts({ user: userPublicKey, // ... other accounts }) .transaction(); // Prepare the transaction with correct blockhash const preparedTransaction = await prepareMagicTransaction( connection, transaction ); // Sign with wallet (e.g., Phantom, Solflare) const signedTransaction = await wallet.signTransaction(preparedTransaction); // Send the signed transaction const signature = await connection.sendRawTransaction( signedTransaction.serialize() );
sendMagicTransaction
import { sendMagicTransaction } from 'magic-router-sdk'; // Build your transaction const transaction = await program.methods .myInstruction() .accounts({ user: userKeypair.publicKey, // ... other accounts }) .transaction(); // Send transaction with automatic preparation and signing const signature = await sendMagicTransaction( connection, transaction, [userKeypair] // Array of signers ); console.log("Transaction signature:", signature);
import { getClosestValidator } from 'magic-router-sdk'; const closestValidatorPubkey = await getClosestValidator(connection); console.log("Closest validator:", closestValidatorPubkey.toBase58());
import { sendMagicTransaction, getClosestValidator } from 'magic-router-sdk'; async function delegateAccountToValidator(program, userKeypair, connection) { // Get the closest validator for optimal performance const validatorKey = await getClosestValidator(connection); // Create delegation transaction const delegationTx = await program.methods .delegate({ commitFrequencyMs: 30000, // Commit every 30 seconds validator: validatorKey, }) .accounts({ payer: userKeypair.publicKey, }) .transaction(); // Send the delegation transaction const signature = await sendMagicTransaction( connection, delegationTx, [userKeypair] ); console.log("✅ Account delegated to validator:", validatorKey.toBase58()); console.log("Delegation signature:", signature); return signature; } // Example usage await delegateAccountToValidator(myProgram, userKeypair, connection);
import { Connection, Keypair, Transaction, TransactionInstruction, PublicKey } from '@solana/web3.js'; import { sendMagicTransaction, getWritableAccounts, getClosestValidator } from 'magic-router-sdk'; async function executeGameMove() { // Connect to Magic Router const connection = new Connection("https://devnet-router.magicblock.app", "confirmed"); // Get optimal validator const validator = await getClosestValidator(connection); console.log(`Using validator: ${validator.toBase58()}`); // Build game transaction const transaction = await gameProgram.methods .makeMove({ x: 3, y: 4 }) .accounts({ gameState: gameStatePda, player: playerKeypair.publicKey, }) .transaction(); // Analyze accounts that will be modified const writableAccounts = getWritableAccounts(transaction); console.log("Modifying accounts:", writableAccounts); // Execute transaction with automatic routing const signature = await sendMagicTransaction( connection, transaction, [playerKeypair] ); console.log("Move executed:", signature); }
Was this page helpful?