Alchemy hello world
'Create a minimal Alchemy Web3 example: get ETH balance, fetch NFTs, read token balances.From its SKILL.md
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill alchemy-hello-worldAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.7 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Alchemy Hello World
Overview
Minimal working examples with the real Alchemy SDK: get ETH balance, fetch NFTs for a wallet, read ERC-20 token balances, and subscribe to pending transactions.
Prerequisites
- Completed
alchemy-install-authsetup alchemy-sdkinstalled (npm install alchemy-sdk)- Valid API key configured
Instructions
Step 1: Get ETH Balance
// src/hello-world/get-balance.ts
import { Alchemy, Network, Utils } from 'alchemy-sdk';
const alchemy = new Alchemy({
apiKey: process.env.ALCHEMY_API_KEY,
network: Network.ETH_MAINNET,
});
async function getBalance(address: string) {
const balanceWei = await alchemy.core.getBalance(address);
const balanceEth = Utils.formatEther(balanceWei);
console.log(`Balance of ${address}: ${balanceEth} ETH`);
return balanceEth;
}
// Query Vitalik's address
getBalance('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045').catch(console.error);
Step 2: Fetch NFTs for a Wallet
// src/hello-world/get-nfts.ts
import { Alchemy, Network } from 'alchemy-sdk';
const alchemy = new Alchemy({
apiKey: process.env.ALCHEMY_API_KEY,
network: Network.ETH_MAINNET,
});
async function getNftsForOwner(owner: string) {
const nfts = await alchemy.nft.getNftsForOwner(owner);
console.log(`Total NFTs: ${nfts.totalCount}`);
for (const nft of nfts.ownedNfts.slice(0, 5)) {
console.log(` ${nft.contract.name} — ${nft.name || nft.tokenId}`);
console.log(` Contract: ${nft.contract.address}`);
console.log(` Token ID: ${nft.tokenId}`);
if (nft.image?.cachedUrl) {
console.log(` Image: ${nft.image.cachedUrl}`);
}
}
return nfts;
}
getNftsForOwner('vitalik.eth').catch(console.error);
Step 3: Get ERC-20 Token Balances
// src/hello-world/get-tokens.ts
import { Alchemy, Network } from 'alchemy-sdk';
const alchemy = new Alchemy({
apiKey: process.env.ALCHEMY_API_KEY,
network: Network.ETH_MAINNET,
});
async function getTokenBalances(address: string) {
const balances = await alchemy.core.getTokenBalances(address);
console.log(`Token balances for ${address}:`);
for (const token of balances.tokenBalances.slice(0, 10)) {
if (token.tokenBalance && token.tokenBalance !== '0x0') {
// Get token metadata for human-readable names
const metadata = await alchemy.core.getTokenMetadata(token.contractAddress);
const balance = parseInt(token.tokenBalance, 16) / Math.pow(10, metadata.decimals || 18);
console.log(` ${metadata.symbol}: ${balance.toFixed(4)}`);
}
}
}
getTokenBalances('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045').catch(console.error);
Step 4: Get Latest Block Info
// src/hello-world/get-block.ts
import { Alchemy, Network } from 'alchemy-sdk';
const alchemy = new Alchemy({
apiKey: process.env.ALCHEMY_API_KEY,
network: Network.ETH_MAINNET,
});
async function getLatestBlock() {
const blockNumber = await alchemy.core.getBlockNumber();
const block = await alchemy.core.getBlock(blockNumber);
console.log(`Block #${blockNumber}`);
console.log(` Hash: ${block.hash}`);
console.log(` Timestamp: ${new Date(block.timestamp * 1000).toISOString()}`);
console.log(` Transactions: ${block.transactions.length}`);
console.log(` Gas Used: ${block.gasUsed.toString()}`);
}
getLatestBlock().catch(console.error);
Output
- ETH balance query with Wei → ETH conversion
- NFT enumeration with metadata and images
- ERC-20 token balances with symbol resolution
- Block data with timestamp and gas usage
Error Handling
| Error | Cause | Solution |
|---|---|---|
Invalid address | Malformed Ethereum address | Use checksummed 0x-prefixed address |
429 Too Many Requests | Rate limit exceeded | Add delay between calls or upgrade plan |
ENS name not found | ENS not resolving | Verify ENS name exists on mainnet |
| Timeout | Slow node response | Increase timeout in SDK config |
Resources
- Alchemy SDK Reference
- Alchemy NFT API
- Alchemy Enhanced APIs
Next Steps
Proceed to alchemy-local-dev-loop for development workflow setup.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.