Solana CookbookDevelopment
Load a local json file keypair
When running your local project may sometimes want to use local keypair. The
default keypair path generated by the Solana CLI is ~/.config/solana/id.json.
You can generate a custom keypair using the Solana CLI command
solana-keygen grind --starts-with hi:1. This will generate a keypair
with a public key starting with "hi" and output the keypair to a json file. You
can then load this keypair using the helper function below.
export async function loadKeypairFromFile(filePath: string): Promise<KeyPairSigner<string>> {// This is here so you can also load the default keypair from the file system.const resolvedPath = path.resolve(filePath.startsWith("~") ? filePath.replace("~", os.homedir()) : filePath);const loadedKeyBytes = Uint8Array.from(JSON.parse(fs.readFileSync(resolvedPath, "utf8")));// Here you can also set the second parameter to true in case you need to extract your private key.const keypairSigner = await createKeyPairSignerFromBytes(loadedKeyBytes);return keypairSigner;}const keypairSigner = await loadKeypairFromFile("~/.config/solana/id.json");console.log(keypairSigner.address);export async function loadDefaultKeypairWithAirdrop(cluster: stringconst keypairSigner2 = await loadDefaultKeypairWithAirdrop("devnet");console.log(keypairSigner2.address);
Gill
import { airdropFactory, createSolanaClient, lamports } from "gill";import { loadKeypairSignerFromFile } from "gill/node";const keypairSigner = await loadKeypairSignerFromFile();console.log(keypairSigner.address);export async function loadDefaultKeypairWithAirdrop(cluster: string): Promise<KeyPairSigner<string>> {const keypair = await loadKeypairSignerFromFile();const { rpc, rpcSubscriptions } = createSolanaClient({urlOrMoniker: cluster});try {const result = await rpc.getBalance(keypair.address).send();console.log(`Balance: ${result.value} lamports`);if (result.value < lamports(500_000n)) {console.log(`Balance low requesting airdrop`);const airdrop = airdropFactory({ rpc, rpcSubscriptions });await airdrop({commitment: "confirmed",lamports: lamports(1_000_000_000n),recipientAddress: keypair.address});}} catch (err) {console.error("Error fetching balance:", err);}return keypair;}const keypairSigner2 = await loadDefaultKeypairWithAirdrop("devnet");console.log(keypairSigner2.address);
Is this page helpful?