Skillshub alchemy-hello-world
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/jeremylongshore/claude-code-plugins-plus-skills/alchemy-hello-world" ~/.claude/skills/comeonoliver-skillshub-alchemy-hello-world && rm -rf "$T"
manifest:
skills/jeremylongshore/claude-code-plugins-plus-skills/alchemy-hello-world/SKILL.mdsource content
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
setupalchemy-install-auth
installed (alchemy-sdk
)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 |
|---|---|---|
| Malformed Ethereum address | Use checksummed 0x-prefixed address |
| Rate limit exceeded | Add delay between calls or upgrade plan |
| ENS not resolving | Verify ENS name exists on mainnet |
| Timeout | Slow node response | Increase timeout in SDK config |
Resources
Next Steps
Proceed to
alchemy-local-dev-loop for development workflow setup.