Conversation
v1.10.0
Kubuxu
reviewed
Nov 7, 2025
| serde_json::to_string_pretty(&request_body).unwrap() | ||
| ); | ||
|
|
||
| let mut builder = self.http_client.post(self.url.as_str()).json(&request_body); |
There was a problem hiding this comment.
You might want to switch to websockets for better efficiency if you run into some perf issues here.
Kubuxu
reviewed
Nov 7, 2025
| } | ||
|
|
||
| /// Read a 32-byte FEVM storage slot from the contract state. | ||
| /// `slot_key` is the 32-byte slot *preimage* (e.g., mapping: keccak(pad(key)||pad(slotIndex))). |
There was a problem hiding this comment.
preimage would be the inputs that get hashed, so key, slotIndex, it seems like you are accepting the digest.
Kubuxu
approved these changes
Nov 7, 2025
Kubuxu
left a comment
There was a problem hiding this comment.
The approach is very much correct. I spot-checked some edge cases I had in mind, and they seem to be covered. From high-level LGTM. I could look further into data paths (to ensure we don't trust proof inputs too much), and I will try to do that.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR introduces the first working implementation of IPC Filecoin Proofs — a library and CLI tool for generating and verifying compact Merkle proofs of Filecoin L1 state and events.
It enables IPC subnets (and other verifiers) to prove facts about the L1 chain offline, using only a self-contained witness bundle. This is primarily used for top-down message verification, cross-chain bridges, and trust-minimized automation.
What’s included
NewTopDownMessage) was emitted by a particular actor at a specific height.{ blocks[], proofs[] }structure that can be verified offline with no RPC dependencies.How it works
RecordingBlockStorelogs every block read.ProofBundle.Why it matters
This is the foundation for trust-minimized IPC communication — subnets can verify parent-chain events or state changes without needing a full node or RPC.
It also opens the door for bridges, auditable relayers, and off-chain verifiers that can independently confirm Filecoin L1 data integrity.
Next steps / planned improvements
ProofBundle(likely CAR-based).Notes for reviewers
The review focus should be on:
Please flag anything unclear or brittle — particularly around actor ID handling, finality assumptions, or serialization boundaries.
In short: this PR lays the groundwork for verifiable, self-contained proofs of Filecoin L1 facts — the core building block for IPC cross-chain trust.