Skip to content

Decision: Endorsement Certificates vs Smart Contract Approach #540

@rvagg

Description

@rvagg

Background

We have a three-tier provider trust model:

  1. All providers (outer circle): Everyone registered in ServiceProviderRegistry
  2. Approved providers (middle circle): Providers that meet baseline requirements, recorded in FilecoinWarmStorageService
  3. Endorsed providers (inner circle): Small set of providers highly trusted by us that we will (initially) be storing at least one copy of everything on

This decision concerns how we identify the endorsed tier.

The core issue

The current proposed mechanism, "endorsement certificates" are using complex cryptographic machinery (EIP-712 signed certificates, distributed via SP capability metadata) to solve what is fundamentally a simple trust problem: "Which SPs should I store at least one copy with?"

For a small, curated inner circle, this complexity may not be justified, particularly since we don't believe this problem will exist as we proceed with future plans for the MSP intermediary layer.

Concerns with endorsement certificates

Complexity:

  • Significant implementation effort, still incomplete after multiple review rounds (but not too hard to finish)
  • SP selection logic is becoming difficult to explain
  • More moving parts = more failure modes

Operational burden:

  • Requires SP participation: they must submit certificates to their registry entry
  • Adds delay and coordination overhead
  • Requires confirmation by us after SP submission

Security:

  • No multisig: any one of three wallets (Tippy, Orjan, Jenny) can endorse
  • Single wallet compromise affects entire endorsement chain
  • No revocation mechanism--only certificate timeout
  • Cannot react quickly to trust changes or SP quality issues

Performance:

  • Must walk entire registry to find endorsed providers
  • Adds latency at startup before system functions

Proposed alternative: endorsed providers contract

A standalone contract holding a list of endorsed provider IDs:

  • Owner (multisig) can add/remove providers on demand
  • SDK fetches list in parallel with other initialization
  • Immediate revocation capability
  • O(1) lookup vs O(n) registry walk
  • Appropriate complexity for managing a small curated list

Effort estimate: ~2-3 days

  • Author contract + basic tests
  • Add to deployment scripts and docs
  • Hardcode address per-network in SDK (we could add another address record to FWSS, but I think we can treat this as a separate concern to core FWSS)
  • Add query to SDK

Decision framework

Ignoring sunk cost:

Aspect Certificates Simple Contract
Immediate cost Lower (PR nearly ready) Moderate (new work)
Ongoing complexity High Low
Security model Weaker (single-sig) Stronger (multisig)
Revocation None (timeout only) Immediate
SP coordination Required None
Explainability Difficult Trivial
Fit for small list Over-engineered Appropriate

Lock-in

Whichever approach ships, we must support it for the lifetime of SDK versions containing it. Switching later means maintaining both mechanisms in parallel for some period of time and we won't know for sure how long it would be.

With endorsement certificates and their expiry, we'd have the possibility of older SDK users looking for endorsed SPs and finding none once we stop updating them.

Options

  1. Proceed with endorsement certificates: PR feat: Endorsement Certificates #443 is close to ready, but needs certificates rolled out to SPs and testing. Lowest immediate cost, but carries ongoing burdens.
  2. Implement simple contract: Moderate upfront cost, but operationally simpler and more secure long-term.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

🎉 Done

Relationships

None yet

Development

No branches or pull requests

Issue actions