Skip to content

[Tracking] Migrate FOC off filecoinpin.contact, use cid.contact only #664

Description

@BigLep

This is about migrating FOC as a whole from using filecoinpin.contact (not just filecoin-pin affordances). The tracking issue needs to live somewhere, and this seemed like the best repo to house it.

Intended solution

Details
  • Curio SPs advertise only to cid.contact (no longer to filecoinpin.contact).
  • Curio SPs confirm indexing themselves: since Curio already knows the advertisement CID it just announced, it can poll cid.contact's /sync/status/ad/{adCid} endpoint directly to learn whether that specific ad has been fully processed. This endpoint doesn't have the negative-caching problem because it's keyed on the ad CID, not the content CID.
  • Curio surfaces that confirmation on its own piece-status endpoint (GET /pdp/piece/{pieceCid}/status, per curio#1405: adding synced/syncedAt fields). Clients like filecoin-pin and dealbot poll that endpoint, not cid.contact, to learn indexing status.
    • The key reason clients can't just poll cid.contact directly: cid.contact's ad-status check is keyed on the advertisement CID, and Curio is the only party that knows the advertisement CID for a given upload. An end client like filecoin-pin only knows the IPFS root CID, and has no structural way to derive the ad CID from it. If such a client polled /cid/{rootCid} on cid.contact before the content was actually indexed, it would trigger the negative-cache issue this whole migration is trying to avoid, hence the need to go through Curio's own status endpoint first, and only fall back to cid.contact once Curio has confirmed the content is ready.
  • Only once Curio's endpoint reports the piece as synced do clients query cid.contact for the root CID (GET https://cid.contact/cid/{rootCid}). By then it should already be indexed, so the query shouldn't produce a negative-cache miss.
    • This final cid.contact query is a genuine confirmation step, not a formality: we don't expect Curio's synced signal and cid.contact's own record to ever disagree, but if they do (Curio says synced, cid.contact has no record for the root CID), that's a real anomaly worth surfacing loudly rather than silently retrying or swallowing. filecoin-pin's library should expose this as a distinct, identifiable error/event (separate from "not yet indexed"), and callers (the filecoin-pin CLI, dealbot) are each responsible for logging/metricing it. See the filecoin-pin and dealbot issues below for specifics.

Steps

Image

ℹ️ It should be safe to "turn off" filecoinpin.contact at this point. We'll follow the plan in #664 (comment)


  • (ECD 2026-09-04) Update Curio to stop advertising to filecoinpin.contact.
  • (ECD 2026-09-??) Do a Curio release and deploy to SPs to stop using filecoinpin.contact.
    • Must happen after the filecoin-pin release and dealbot deployment above, so we're sure no clients still depend on filecoinpin.contact.
  • (ECD 2026-09-02)Full search across the FilOzone org for remaining filecoinpin.contact references.
  • (ECD 2026-09-08) Have the IPNI team remove the cid.contact fallback to filecoinpin.contact.
  • Transfer filecoinpin.contact domain from IP Shipyard to FOC Working Group.

Why

Details

filecoinpin.contact's current hardware is going away. Rather than stand up and operate replacement infrastructure, we're going to simplify and rely on cid.contact going forward: we believe its reliability and performance are good enough for our needs today.

For context, filecoinpin.contact's backend (Pulsar) doesn't resemble the storetheindex/IPNI deployment behind cid.contact. It was a different system built to work around scaling and operational reliability issues seen with IPNI, exposing an IPNI-compatible API as a compatibility layer rather than a long-term architecture. Standing up and operating a replacement of that infrastructure ourselves is not something we're taking on, so we're consolidating on cid.contact instead.

Metadata

Metadata

Assignees

Labels

team/filecoin-pin"Filecoin Pin" project is a stakeholder for this work.team/fs-wgFOC working group is a stakeholder for this work, and thus wants to track it on their project board.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions