Skip to content

Instantly share code, notes, and snippets.

View NotoriousPyro's full-sized avatar

NotoriousPyro

View GitHub Profile
@NotoriousPyro
NotoriousPyro / jupiter-full-js-example.js
Last active July 21, 2025 21:40
Full example of how to swap tokens with jupiter
const { Connection, Keypair, VersionedTransaction } = require ('@solana/web3.js');
const bs58 = require ('bs58');
const axios = require('axios');
// It is recommended that you use your own RPC endpoint.
// This RPC endpoint is only for demonstration purposes so that this example will run.
const connection = new Connection('');
const keypair = Keypair.fromSecretKey(bs58.decode(''));
@NotoriousPyro
NotoriousPyro / BurnATAs.ts
Last active May 21, 2024 22:34
Burn your unwanted ATAs on Solana with this script
import { GetProgramAccountsFilter, PublicKey, TransactionMessage, VersionedTransaction } from "@solana/web3.js";
import { connection } from "../src/connection";
import config from "../src/lib/Config";
import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, createBurnCheckedInstruction, createCloseAccountInstruction, getAssociatedTokenAddressSync, unpackAccount, unpackMint } from "@solana/spl-token";
// Not really tested more than two but you can probably fit more in.
const maxMintsPerTx = 2;
// Replace this with your own keypair
const owningAccount = config.keypair;
// This creates a tx like this: https://solscan.io/tx/5PegaAnFzaEdVWYfzHFVTzJyZr8wHKRhijgtXyGhNzaQj4HfW5U8BqaaHNhGkCbZRDePns5cnFJAb18RCx4cuLqB
@NotoriousPyro
NotoriousPyro / solana-rewards.ts
Last active May 15, 2024 19:42
Solana Rewards distribution
import { PublicKey, Transaction, TransactionMessage, VersionedTransaction } from "@solana/web3.js";
import config from "../src/lib/Config";
import BigNumber from "bignumber.js";
import { createAssociatedTokenAccountIdempotentInstruction, createTransferCheckedInstruction, getAssociatedTokenAddress, getAssociatedTokenAddressSync } from "@solana/spl-token";
import { connection } from "../src/connection";
import { createComputeBudgetInstruction } from "../src/lib/TransactionBuilder";
/**
* Distributes rewards based on a a token amount a user has, e.g. staked or LP tokens.
*
@NotoriousPyro
NotoriousPyro / AccountBalanceManager.ts
Created May 6, 2024 17:20
AccountBalanceManager for Solana, can monitor the ATAs of various token balances in an account.
import { Account, Mint, TOKEN_PROGRAM_ID, getAssociatedTokenAddress, unpackAccount, unpackMint } from "@solana/spl-token";
import { AccountChangeCallback, AccountInfo, Connection, Keypair, PublicKey } from "@solana/web3.js";
import { WellKnownTokenMint } from "../../const";
import { ToDecimal } from "../../utils";
import { BigNumber } from "bignumber.js";
import { TradeQueueItem, TradeExecutor } from "./trade";
import BalanceQueue from "../queues/balance";
export type BalanceChangeCallback = (queue: BalanceQueue<TradeQueueItem, TradeExecutor>) => Promise<TradeExecutor>;
export type BalanceChangeParams = [callback: BalanceChangeCallback, args: BalanceQueue<TradeQueueItem, TradeExecutor>]
@NotoriousPyro
NotoriousPyro / nonce-accts.ts
Last active May 16, 2024 22:54
Create nonce accounts on solana example
import {
Connection,
CreateNonceAccountParams,
Keypair,
NONCE_ACCOUNT_LENGTH,
PublicKey,
SystemProgram,
Transaction,
TransactionMessage,
VersionedTransaction,
@NotoriousPyro
NotoriousPyro / AddressLookupTableDB.ts
Last active May 21, 2024 22:36
Example database for caching Solana AddressLookupTableAddresses in memory using lmdb.js
import { RootDatabaseOptionsWithPath, open } from 'lmdb';
import { addressLookupTableDBPath } from '../const';
const _dbOptions: RootDatabaseOptionsWithPath = {
path: addressLookupTableDBPath,
cache: { // https://github.com/kriszyp/weak-lru-cache#weaklrucacheoptions-constructor
cacheSize: 16777216, // 16MB - maximum
clearKeptInterval: 100,
txnStartThreshold: 3
@NotoriousPyro
NotoriousPyro / web3js-typescript-retry-fetcher.ts
Last active May 22, 2024 00:02
Example TypeScript web3.js with retry fetcher
import * as nodeFetch from 'node-fetch';
import fetch from 'fetch-retry'
import https from 'https';
const _fetch = fetch(nodeFetch.default);
type FetchFn = typeof nodeFetch.default;
export type Fetcher = (...args: Parameters<FetchFn>) => ReturnType<FetchFn>;
export type RetryFetcherWithCustomAgent = (agent: https.Agent) => Fetcher;
export const RetryFetcher: Fetcher = (...args) => {
const [url, init] = args;
@NotoriousPyro
NotoriousPyro / anchor-errors-example.ts
Last active May 13, 2024 16:34
Error handling with Anchor
// Here is a portion of the code used in sexbot.sol that handles errors when sending txs
/**
* Anchor can't handle all errors for some reason, so this exists to handle those cases
* @param logs
* @returns
*/
export const extractErrorDetailFromLogs = (
logs: string[]
@NotoriousPyro
NotoriousPyro / asynclogger.ts
Last active September 12, 2024 21:49
Asynchonrous Promise-based logger
// By Pyro @ www.sexonsol.com
import { Console } from "node:console";
type LogLevel = "INFO" | "ERROR" | "WARN" | "DEBUG" | "TRACE";
/** Asynchronous Promise-based logger */
export default class AsyncLogger extends Console {
public name: string;
constructor(name: string) {
super({
@NotoriousPyro
NotoriousPyro / jupiter-pricemgr.tests.ts
Last active April 2, 2024 03:21
Tests for a class implementing Jupiter's QuoteResponse for profitable quotes. Here is the test, you must implement the class... good luck!
// By Pyro @ www.sexonsol.com
// Price class, basic types and interface for PriceManager provided for you:
import { QuoteResponse } from '@jup-ag/api';
import { BigNumber } from 'bignumber.js';
enum WellKnownTokenMint {
USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
USDCet = "A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM",