-
Notifications
You must be signed in to change notification settings - Fork 26
Description
Background
We have a three-tier provider trust model:
- All providers (outer circle): Everyone registered in ServiceProviderRegistry
- Approved providers (middle circle): Providers that meet baseline requirements, recorded in FilecoinWarmStorageService
- 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
- 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.
- Implement simple contract: Moderate upfront cost, but operationally simpler and more secure long-term.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status