A comprehensive TypeScript SDK for interacting with Solana and EVM chains. Send transactions, interact with smart contracts, and build cross-chain applications with ease.
- ๐ Multi-Chain Support: Ethereum, Polygon, Arbitrum, Optimism, Base, and Solana
- ๐ Type-Safe: Full TypeScript support with excellent IDE experience
- โก Testnet Ready: Built-in support for all major testnets
- ๐ฏ Simple API: Clean, intuitive interface for common operations
- ๐ง Advanced Features: Atomic transactions, contract calls, Flashbots support
- ๐ฆ Modular: Install only what you need
npm install @pyro-labs/evm-sdk @pyro-labs/solana-sdk
# or
pnpm add @pyro-labs/evm-sdk @pyro-labs/solana-sdk
# or
yarn add @pyro-labs/evm-sdk @pyro-labs/solana-sdkimport { SolanaSDK } from "@pyro-labs/solana-sdk";
import { Keypair } from "@solana/web3.js";
// Initialize SDK
const sdk = new SolanaSDK({
network: "mainnet-beta", // or "testnet", "devnet"
});
const wallet = Keypair.generate();
// Send SOL
const result = await sdk.send(
wallet,
"RecipientAddress...",
1000000, // lamports
{ waitForConfirmation: true }
);import { EVMSDK } from "@pyro-labs/evm-sdk";
import { Wallet } from "ethers";
// Initialize SDK
const sdk = new EVMSDK({
network: "mainnet", // or "sepolia", "polygon", "arbitrum", etc.
});
const wallet = new Wallet("private-key");
// Send ETH
const result = await sdk.send(
wallet,
"0xRecipientAddress...",
"1000000000000000000", // 1 ETH in wei
{ waitForConfirmation: true, maxConfirmations: 3 }
);| Package | Description | Install |
|---|---|---|
@pyro-labs/evm-sdk |
EVM chain SDK (Ethereum, Polygon, Arbitrum, etc.) | npm install @pyro-labs/evm-sdk |
@pyro-labs/solana-sdk |
Solana SDK | npm install @pyro-labs/solana-sdk |
@pyro-labs/core |
Core types and interfaces | npm install @pyro-labs/core |
@pyro-labs/utils |
Utility functions and logger | npm install @pyro-labs/utils |
@pyro-labs/periphery |
Periphery utilities (fee wrapper, flashloans) | npm install @pyro-labs/periphery |
@pyro-labs/unoswap |
Unoswap quoter | npm install @pyro-labs/unoswap |
const result = await sdk.send(
wallet,
"RecipientAddress...",
BigInt("1000000"),
{ waitForConfirmation: true },
"TokenMintAddress..." // SPL token mint
);import { TransactionInstruction, SystemProgram } from "@solana/web3.js";
const instructions = [
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: new PublicKey("Address1..."),
lamports: 1000000,
}),
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: new PublicKey("Address2..."),
lamports: 2000000,
}),
];
// All succeed or all fail
const result = await sdk.sendAtomicTransaction(wallet, instructions);const result = await sdk.send(
wallet,
"0xRecipientAddress...",
"1000000000000000000",
{ waitForConfirmation: true },
"0xTokenContractAddress..." // ERC20 token
);const ERC20_ABI = [
"function transfer(address to, uint256 amount) returns (bool)",
];
// Write operation
const result = await sdk.callContractFunction(
wallet,
"0xTokenContractAddress...",
ERC20_ABI,
"transfer",
["0xRecipientAddress...", "1000000000000000000"],
{ waitForConfirmation: true }
);
// Read operation (no transaction)
const balance = await sdk.callContract(
"0xTokenContractAddress...",
ERC20_ABI,
"balanceOf",
["0xOwnerAddress..."]
);import { Transaction, SystemProgram } from "@solana/web3.js";
const transaction = new Transaction();
transaction.add(
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: new PublicKey("RecipientAddress..."),
lamports: 1000000,
})
);
const result = await sdk.sendTransaction(wallet, transaction);Mainnets:
- Ethereum (
mainnet) - Polygon (
polygon) - Arbitrum (
arbitrum) - Optimism (
optimism) - Base (
base)
Testnets:
- Sepolia (
sepolia) - Holesky (
holesky) - Mumbai (
mumbai) - Arbitrum Sepolia (
arbitrum-sepolia) - Optimism Sepolia (
optimism-sepolia) - Base Sepolia (
base-sepolia)
- Mainnet (
mainnet-beta) - Testnet (
testnet) - Devnet (
devnet)
- Node.js 18+
- TypeScript 5.0+ (recommended)
MIT