Skip to content

Conversation

@seolaoh
Copy link
Collaborator

@seolaoh seolaoh commented Jul 10, 2025

Replaced RollupConfig with CeloRollupConfig to correctly deserialize cel2_time field in our rollup config. This PR also includes some commits from the demo work (from seolaoh/demo-with-hokulea), either for improvements or to make the demo functional.

But, we currently have several dependencies on upstream op-succinct, so it's a bit complicated to merge all the demo-related commits at this point. The base branch develop depends on kona v1.0.2, and we've already bumped celo-kona to the latest version, which also relies on kona v1.0.2. But to merge our hokulea-related commits here, we would also need to merge this upstream branch, which still depends on kona v1.0.1. So it can't be merged directly at the moment. I believe it's better to leave this area untouched until that PR gets merged. So there are some remaining demo commits not included in this PR, and we can pick them up later once the upstream PR is merged with kona v1.0.2. I'll leave the remaining commit hashes below for reference:

cursor[bot]

This comment was marked as outdated.

@seolaoh seolaoh force-pushed the seolaoh/pickup-demo-commits branch from cda8eb6 to b079e19 Compare July 10, 2025 14:44
cursor[bot]

This comment was marked as outdated.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Incorrect Skip Condition in Proposer Logic

The proposer resolution logic incorrectly changed its skip condition from claim_data.status != ProposalStatus::Unchallenged to claim_data.status == ProposalStatus::Challenged. The original condition skipped resolution for any non-unchallenged game (e.g., Challenged or Resolved), but the new condition only skips for Challenged games. This causes the proposer to attempt resolving games that are already Resolved, potentially wasting gas or causing transaction failures.

fault-proof/src/lib.rs#L623-L631

Mode::Proposer => {
if claim_data.status == ProposalStatus::Challenged {
tracing::info!(
"Game {:?} at index {:?} is challenged, not attempting resolution",
game_address,
index
);
return Ok(Action::Skipped);
}

Fix in CursorFix in Web


Bug: Docker Build Fails on Missing Directory

The COPY resources/ ./resources/ instruction will cause Docker build failures if the resources/ directory is missing from the build context.

fault-proof/Dockerfile.proposer#L40-L41

WORKDIR /app
COPY resources/ ./resources/

fault-proof/Dockerfile.challenger#L40-L41

WORKDIR /app
COPY resources/ ./resources/

Fix in CursorFix in Web


Was this report helpful? Give feedback by reacting with 👍 or 👎

Copy link

@karlb karlb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm lacking the context from when the demo was prepared, so I left some notes on what I couldn't meaningfully review without more context. I'm willing to approve if those sections don't need a review (they might have been sufficiently discussed before the demo).

Comment on lines +17 to +18
rustls::crypto::ring::default_provider().install_default().unwrap();

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know why we need this.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The context is here, I faced an issue related to a crypto library, and this was the solution to resolve it.

.strategy(FulfillmentStrategy::Hosted)
.skip_simulation(true)
.cycle_limit(1_000_000_000_000)
.cycle_limit(1_000_000_000)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't judge the implications of this.

Copy link
Collaborator Author

@seolaoh seolaoh Jul 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a similar concept with gas limit. Our Succinct account must have cycle_limit * credit_per_cycle amount of credit, and when the cycle limit is 1_000_000_000, the required credit is approximately 10.03 credit. We decided to set the cycle limit with an environment variable, and the default value as 3_000_000_000 which requires 30.03 credit exists on our account. You can see here the cycle limit and proof cost.

Comment on lines -624 to +626
if claim_data.status != ProposalStatus::Unchallenged {
if claim_data.status == ProposalStatus::Challenged {
tracing::info!(
"Game {:?} at index {:?} is not unchallenged, not attempting resolution",
"Game {:?} at index {:?} is challenged, not attempting resolution",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we really do something for ChallengedAndValidProofProvided?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we need to resolve the game when it is challenged and valid proof provided which means the proposer's win. I don't know the exact reason why they didn't force the proposer to resolve the ChallengedAndValidProofProvided games, but maybe it is intended for the prover who actually provided the proof and not necessarily the proposer itself to resolve the game. But we don't have a separate prover instance apart from the proposer, so we had to change it like this.

@seolaoh seolaoh merged commit ad5dad0 into develop Jul 14, 2025
5 of 6 checks passed
@seolaoh seolaoh deleted the seolaoh/pickup-demo-commits branch July 14, 2025 08:58
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.

4 participants