Skip to content

Instantly share code, notes, and snippets.

@calintje
calintje / orcaWhirlpools_parseSwapInstruction.ts
Last active March 16, 2025 01:02
Decode an Orca Swap Instruction
import { getSwapInstructionDataDecoder } from "@orca-so/whirlpools-client";
import { createSolanaRpc, signature } from "@solana/kit";
import bs58 from "bs58";
import assert from "assert";
const rpc = createSolanaRpc("RPC_URL");
const tx = await rpc.getTransaction(
signature("TX_SIGNATURE"),
{ maxSupportedTransactionVersion: 0 }).send();
@calintje
calintje / orcaWhirlpools_getPositionBalance.ts
Last active March 13, 2025 14:36
Get token balance of a Whirlpool position on Orca
import { fetchPosition, fetchWhirlpool, getPositionAddress } from "@orca-so/whirlpools-client";
import { decreaseLiquidityQuote } from "@orca-so/whirlpools-core";
import { address, createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("<RPC_URL>");
const positionMintAddress = address("<POSITION_MINT_ADDRESS>")
const slippageToleranceBps = 0;
const positionAddress = (await getPositionAddress(positionMintAddress))[0]
const position = await fetchPosition(rpc, positionAddress)
@calintje
calintje / solanaKit_createTokenWithMetadataExtension.ts
Last active March 13, 2025 14:38
Create a Token 2022 Program token with Metadata Extension using Solana Kit
import {
getCreateAccountInstruction
} from "@solana-program/system";
import {
getCreateAssociatedTokenInstruction,
findAssociatedTokenPda,
TOKEN_2022_PROGRAM_ADDRESS,
getMintToCheckedInstruction,
getMintSize,
getInitializeMetadataPointerInstruction,
@calintje
calintje / solanaKit_loadWallet.ts
Last active March 13, 2025 14:36
Load a wallet from private key or json file using Solana Kit
import { createKeyPairSignerFromBytes, KeyPairSigner } from '@solana/kit';
import fs from 'fs';
import bs58 from 'bs58';
export async function loadWalletFromJsonFile(path: string): Promise<KeyPairSigner> {
const keyPairBytes = new Uint8Array(JSON.parse(fs.readFileSync(path, 'utf8')));
return await createKeyPairSignerFromBytes(keyPairBytes);
}
export async function loadWalletFromPrivateKey(privateKey: string): Promise<KeyPairSigner> {
@calintje
calintje / solanaKit_sendTransaction.ts
Last active March 13, 2025 14:38
Send and land transactions on Solana using Solana Kit using prioritization fees and client-side retry
import {
getSetComputeUnitLimitInstruction,
getSetComputeUnitPriceInstruction
} from '@solana-program/compute-budget';
import {
appendTransactionMessageInstructions,
createTransactionMessage,
getBase64EncodedWireTransaction,
getComputeUnitEstimateForTransactionMessageFactory,
IInstruction,