Skip to content

pdp: resolve provider EVM via on-chain fallback#677

Closed
parkan wants to merge 2 commits intomainfrom
pdp-onchain-actor-resolve
Closed

pdp: resolve provider EVM via on-chain fallback#677
parkan wants to merge 2 commits intomainfrom
pdp-onchain-actor-resolve

Conversation

@parkan
Copy link
Copy Markdown
Collaborator

@parkan parkan commented Apr 28, 2026

Summary

Two related fixes for the PDP deal-pusher path, both surfaced during end-to-end testing of FWSS PDP on calibnet against an externally-registered SP.

1. Resolve provider EVM address via on-chain fallback (commit 1)

resolveProviderEVMAddress required a pre-populated actors row whose address was the f410 form of the SP. That row is only populated by GetOrCreateActor when a wallet we control signs for the first time, so PDP schedules targeting any externally-registered SP would fail at deal-pusher time with failed to resolve actor for provider tXXX.

Fall back to Filecoin.StateLookupRobustAddress on cache miss and opportunistically write the resolved row for future runs.

2. Bump default gas limit to 200M (commit 2)

PDPVerifier.createDataSet was observed at ~79M gas used on calibnet, exceeding the prior 30M limit. The tx reverted with status 0, no logs, and an empty return — FEVM masks OOG as a generic revert, which is hard to diagnose with standard EVM tooling. Bump to 200M for headroom; excess gas is refunded.

ProposeDataSetStorageProvider uses the same constant and benefits too.

Why this matters

Hit during end-to-end testing of FWSS PDP flow on calibnet against an SP we just registered (providerId=24 on ServiceProviderRegistry at 0x839e5c99…).

Before these patches:

  • (1) was a hard wall: schedules to any SP whose key isn't in our keystore are dead-on-arrival with no built-in CLI to seed an Actor row for an arbitrary external address.
  • (2) failed silently as a generic revert — hours of trace digging before finding gasUsed ≈ gasLimit.

After:

  • Schedule for an external SP runs end-to-end through EnsureProofSet and ProposeTransfer. The deal record reaches proposed state (deal_id, schedule_id, set_id all populated), at which point further progress is gated on the receiving Curio node having v1.27.4+ schema migrations — orthogonal to this PR.

Test plan

  • go test ./service/dealpusher/ -run TestResolveProviderEVMAddress — 4 new tests pass on sqlite (cache hit, on-chain fallback w/ caching, on-chain RPC failure, non-delegated rejection)
  • Full ./service/dealpusher/... regression — pass
  • Live: built image, deployed, PDP schedule against external SP completes; data set 13242 created on PDPVerifier (calibnet)

parkan added 2 commits April 28, 2026 17:39
resolveProviderEVMAddress required a pre-populated actors row whose
address was the f410 form of the SP. That row is only populated by
GetOrCreateActor when a wallet we control signs for the first time, so
PDP schedules targeting any externally-registered SP would fail at
deal-pusher time with "failed to resolve actor for provider tXXX".

Fall back to Filecoin.StateLookupRobustAddress on cache miss and
opportunistically write the resolved row for future runs.
createDataSet on calibnet's PDPVerifier was observed at ~79M gas used,
which exceeded the previous 30M limit and caused tx reverts (status 0,
no logs, hard to diagnose since FEVM masks OOG as a generic revert).
Bump to 200M to leave headroom; excess gas is refunded so over-allocating
is cheap. Same constant is used by ProposeDataSetStorageProvider, which
benefits from the bump as well.
@parkan
Copy link
Copy Markdown
Collaborator Author

parkan commented May 1, 2026

superseded, we are using the curio API instead of direct chain interactions

@parkan parkan closed this May 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant