Claude-code-plugins-plus-skills alchemy-upgrade-migration
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/alchemy-pack/skills/alchemy-upgrade-migration" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-alchemy-upgrade-migration && rm -rf "$T"
manifest:
plugins/saas-packs/alchemy-pack/skills/alchemy-upgrade-migration/SKILL.mdsource content
Alchemy Upgrade & Migration
Overview
Migration guide for Alchemy SDK upgrades and deprecated package transitions. The
alchemy-web3 package is deprecated — migrate to alchemy-sdk.
Migration Paths
| From | To | Complexity |
|---|---|---|
| | High (different API surface) |
v2 → v3 | v3 | Medium (some breaking changes) |
| Direct JSON-RPC | | Low (SDK wraps same methods) |
Instructions
Step 1: Migrate from alchemy-web3 to alchemy-sdk
// BEFORE: alchemy-web3 (DEPRECATED) // import { createAlchemyWeb3 } from '@alch/alchemy-web3'; // const web3 = createAlchemyWeb3(`https://eth-mainnet.g.alchemy.com/v2/${apiKey}`); // const balance = await web3.eth.getBalance(address); // const nfts = await web3.alchemy.getNfts({ owner }); // AFTER: alchemy-sdk import { Alchemy, Network } from 'alchemy-sdk'; const alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_MAINNET, }); // Core methods — same JSON-RPC, different API const balance = await alchemy.core.getBalance(address); // Enhanced APIs — reorganized under namespaces const nfts = await alchemy.nft.getNftsForOwner(owner); // WebSockets — now under alchemy.ws alchemy.ws.on({ method: 'eth_subscribe', params: ['newHeads'] }, (block) => { console.log('New block:', block); });
Step 2: API Surface Changes
// Key namespace changes in alchemy-sdk: // Core (JSON-RPC wrapper) alchemy.core.getBlockNumber(); alchemy.core.getBalance(address); alchemy.core.getTokenBalances(address); alchemy.core.getTokenMetadata(contractAddress); alchemy.core.getAssetTransfers({ fromAddress, category }); // NFT (dedicated namespace) alchemy.nft.getNftsForOwner(owner); alchemy.nft.getNftsForContract(contract); alchemy.nft.getContractMetadata(contract); alchemy.nft.getNftMetadataBatch(tokens); alchemy.nft.getOwnersForNft(contract, tokenId); // WebSocket (real-time) alchemy.ws.on(filter, callback); alchemy.ws.once(filter, callback); alchemy.ws.removeAllListeners(); // Notify (webhooks — requires authToken) alchemy.notify.getAllWebhooks(); alchemy.notify.createWebhook(config);
Step 3: Dependency Cleanup
# Remove deprecated packages npm uninstall @alch/alchemy-web3 alchemy-web3 # Install current SDK npm install alchemy-sdk # Check for leftover imports grep -rn "alchemy-web3\|@alch/alchemy" src/ --include='*.ts' --include='*.js' # Update ethers if needed (alchemy-sdk works with ethers v5 and v6) npm install ethers@6
Step 4: Test Migration
// tests/migration.test.ts import { describe, it, expect } from 'vitest'; import { Alchemy, Network } from 'alchemy-sdk'; describe('Alchemy SDK Migration', () => { const alchemy = new Alchemy({ apiKey: process.env.ALCHEMY_API_KEY, network: Network.ETH_SEPOLIA, }); it('should get block number via core namespace', async () => { const block = await alchemy.core.getBlockNumber(); expect(block).toBeGreaterThan(0); }); it('should get NFTs via nft namespace', async () => { const nfts = await alchemy.nft.getNftsForOwner('0x0000000000000000000000000000000000000000'); expect(nfts.totalCount).toBeDefined(); }); });
Output
- Migrated from
toalchemy-web3alchemy-sdk - All namespace changes applied (core, nft, ws, notify)
- Deprecated packages removed
- Migration tests passing
Resources
Next Steps
For CI/CD setup, see
alchemy-ci-integration.