# Solana Scripts
This is a library of Rust scripts for specific purposes:
- [Generate a new wallet](#new-wallet)
- [Create an SPL token](#create-an-spl-token)
- [Mint an SPL token](#mint-spl-tokens)
- [Get an associated token balance](#get-token-balance)
- [Get the creation date of an account](#get-account-creation-timestamp)
- [Get the owner of an NFT](#get-nft-owner)
- [List NFTs in wallet](#list-nfts-in-wallet)
- [Subscribe to events](#subscribe-to-events)
- [Fetch onchain Anchor IDL](#fetch-onchain-anchor-idl)
The scripts are found in the `src/bin` folder. They can be configured using environment variables, which are documented below.
[Open an issue](https://github.com/ronanyeah/solana-rust-examples/issues) if you have any requests or suggestions.
---
## New wallet
Generates a new wallet and prints the pubkey, Base58 private key, and JSON private key.
---
## Create an SPL token
Creates a new [SPL token](https://spl.solana.com/token) mint account.
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| SIGNER_KEYPAIR | Base58 encoded keypair, to pay for the transaction. |
| MINT_KEYPAIR | Base58 encoded keypair, representing the new mint account. |
---
## Mint SPL tokens
Mints 10,000 SPL tokens from a specified mint to the [associated token account](https://spl.solana.com/associated-token-account) of a specified wallet.
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| SIGNER_KEYPAIR | Base58 encoded keypair, which has mint authority. |
| MINT_ACCOUNT_PUBKEY | The pubkey address of the SPL Token mint account. |
| RECEIVER_PUBKEY | The pubkey address of the wallet you want to fund with the tokens. |
---
## Get token balance
Prints the balance of an [associated token account](https://spl.solana.com/associated-token-account), for a specified wallet and mint.
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| WALLET_PUBKEY | The pubkey address of the wallet that owns the tokens. |
| MINT_ACCOUNT_PUBKEY | The pubkey address of the SPL Token mint account. |
---
## Get account creation timestamp
Fetches and prints the creation timestamp of a specified [account](https://docs.solana.com/developing/programming-model/accounts).
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| ACCOUNT_PUBKEY | The pubkey address of the account you want to introspect. |
---
## Get NFT owner
Prints the wallet address that owns a specified NFT.
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| MINT_ACCOUNT_PUBKEY | The pubkey address of the SPL Token mint account. |
---
## List NFTs in wallet
Fetches and prints the mint pubkeys of every NFT in the specified wallet.
| RPC_URL | e.g. `https://api.mainnet-beta.solana.com` |
| WALLET_PUBKEY | The pubkey address of the wallet that owns the NFTs. |
---
## Subscribe to events
Listens to events from [`slotSubscribe`](https://solana.com/docs/rpc/websocket/slotsubscribe).
| WS_URL | e.g. `wss://api.mainnet-beta.solana.com` |
---
## Fetch onchain Anchor IDL
Fetches an [`Anchor IDL`](https://solana.com/docs/programs/anchor/idl) from a program address.
| WS_URL | e.g. `wss://api.mainnet-beta.solana.com` |
| PROGRAM_ID | The program address pubkey. e.g. `whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc` |