-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: Add README for Solidity verification
- Loading branch information
Showing
3 changed files
with
61 additions
and
9 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
## On-chain Plonk verification | ||
|
||
One of the requirements for the Light Client is the on-chain (Solidity) verification of Sphinx proofs generated by epoch-change and inclusion programs. | ||
|
||
This directory contains the [Foundry](https://github.com/foundry-rs/foundry) project (`solidity`) which demonstrates the Solidity verification using so-called fixtures (JSON files) | ||
containing the proof data (proof itself, public values and verification key) required for running the verification for both epoch-change and inclusion programs. | ||
The fixtures can be regenerated using `fixture-generator` Rust program. | ||
|
||
The contracts are actually located in [sphinx-contracts](https://github.com/lurk-lab/sphinx-contracts) repository which is used as a dependency. | ||
|
||
To run `contracts` forge tests: | ||
|
||
``` | ||
% cd solidity/contracts && forge test | ||
[⠊] Compiling... | ||
[⠒] Compiling 29 files with Solc 0.8.26 | ||
[⠢] Solc 0.8.26 finished in 1.11s | ||
Compiler run successful! | ||
Ran 4 tests for test/test_lc_proofs.sol:SolidityVerificationTest | ||
[PASS] testFail_FakeProofEpochChange() (gas: 8660281895700906413) | ||
[PASS] testFail_FakeProofInclusion() (gas: 8660281895700906417) | ||
[PASS] testValidEpochChangeProofPlonk() (gas: 318056) | ||
[PASS] testValidInclusionProofPlonk() (gas: 318103) | ||
Suite result: ok. 4 passed; 0 failed; 0 skipped; finished in 12.52ms (15.70ms CPU time) | ||
Ran 1 test suite in 154.07ms (12.52ms CPU time): 4 tests passed, 0 failed, 0 skipped (4 total tests) | ||
``` | ||
|
||
Currently, the verification of Plonk proof (either epoch-change or inclusion program) costs ~318k gas. | ||
|
||
If you want to use custom fixtures, you can regenerate them using `fixture-generator` which runs the e2e proving (either epoch-change or inclusion) - it may take a while - and then finally | ||
exports fixture file and puts it to the relevant place (`solidity/contracts/src/plonk_fixtures`). | ||
|
||
To run `fixture-generator` (for inclusion program): | ||
|
||
``` | ||
RUST_LOG=info RUSTFLAGS="-C target-cpu=native --cfg tokio_unstable" SHARD_SIZE=4194304 SHARD_BATCH_SIZE=0 cargo +nightly run --release --features aptos --bin generate-fixture -- --program inclusion | ||
``` | ||
|
||
Then you can check that fixture file of inclusion program has been changed: | ||
``` | ||
% git status | ||
Changes not staged for commit: | ||
(use "git add <file>..." to update what will be committed) | ||
(use "git restore <file>..." to discard changes in working directory) | ||
modified: contracts/src/plonk_fixtures/inclusion_fixture.json | ||
no changes added to commit (use "git add" and/or "git commit -a") | ||
``` | ||
|
||
And you can re-run Solidity tests with newer fixture: | ||
``` | ||
% cd solidity/contracts && forge test | ||
``` |
This file was deleted.
Oops, something went wrong.
This file contains 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