Skip to content

[Refactor] Migrate SP Registry from ethers to viem #55

@timfong888

Description

@timfong888

Summary

Migrate lib/sp-registry/hooks.ts from ethers.js to viem for reduced bundle size and better TypeScript support.

Background

Current State

  • ethers v6.16.0 used only for SP Registry contract calls
  • viem v2.44.0 already bundled via wagmi (transitive dependency)

Bundle Impact

Library Bundle Size Status
ethers v6 ~130KB Explicit dependency
viem ~35KB Already bundled via wagmi
Net savings ~95KB Remove ethers entirely

File to Migrate

lib/sp-registry/hooks.ts

Current ethers Usage

import { Contract, JsonRpcProvider } from 'ethers';

const provider = new JsonRpcProvider(FILECOIN_RPC_URL);
registryContract = new Contract(SP_REGISTRY_ADDRESS, SP_REGISTRY_ABI, provider);

// Contract calls
result = await contract.getProviderByAddress(address);
productResult = await contract.getProviderWithProduct(providerId, PRODUCT_TYPE_PDP);

Target viem Implementation

import { createPublicClient, http, getContract } from 'viem';
import { filecoin } from 'viem/chains';

const client = createPublicClient({
  chain: filecoin,
  transport: http(FILECOIN_RPC_URL),
});

const contract = getContract({
  address: SP_REGISTRY_ADDRESS,
  abi: SP_REGISTRY_ABI,
  client,
});

// Contract calls (slightly different syntax)
result = await contract.read.getProviderByAddress([address]);
productResult = await contract.read.getProviderWithProduct([providerId, PRODUCT_TYPE_PDP]);

Why Migrate

  1. Bundle size: Save ~95KB (viem is already bundled)
  2. TypeScript: Better type inference with viem
  3. Ecosystem: viem is the modern standard (wagmi, rainbowkit)
  4. Maintenance: One less library to maintain

Testing Plan

  1. Run existing SP Registry unit tests
  2. Verify SP enrichment data on Payee detail pages
  3. Test with known registered SPs
  4. Verify unregistered addresses return isRegistered: false

Acceptance Criteria

  • ethers removed from package.json
  • lib/sp-registry/hooks.ts uses viem
  • All existing tests pass
  • SP data displays correctly on Payee pages
  • Bundle size reduced (measure before/after)

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions