-
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.
feat: Documentation and CI configuration for Solidity (#36)
* feat: Update Sphinx and replace Groth16 with Plonk (#23) * feat: Solidity verification of light client proofs with Plonk (#28) * feat: Add scaffolding for Plonk verification in Solidity * feat: Add Plonk contract * tests: Add more negative Solidity testing * feat: Add Rust program for Solidity contract generating * chore: Update Cargo.lock * chore: Update Plonk contract according to 'e48c01ec' tag of Sphinx * chore: Formatting * feat: Introduce downloading from our AWS private bucket * feat: Update Foundry project to use sphinx-contracts dependency * chore: Rename SP1 -> Sphinx * chore: Add README for Solidity verification * feat: Add CI configuration for Solidity * ci: solidity tests on all PR Signed-off-by: Thomas Chataigner <[email protected]> * chore: update programs Signed-off-by: Thomas Chataigner <[email protected]> * docs: move documentation to mdBook Signed-off-by: Thomas Chataigner <[email protected]> --------- Signed-off-by: Thomas Chataigner <[email protected]> Co-authored-by: wwared <[email protected]> Co-authored-by: Thomas Chataigner <[email protected]>
- Loading branch information
1 parent
03b55a7
commit 5f73e03
Showing
7 changed files
with
133 additions
and
11 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
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
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,75 @@ | ||
# Benchmark on-chain verification | ||
|
||
Our Light Client is able to produce SNARK proofs that can be verified on-chain. This section will cover how to run the | ||
benchmarks for the on-chain verification. | ||
|
||
To be able to execute such tests our repository contains a project called `solidity` is based | ||
off [Foundry](https://github.com/foundry-rs/foundry) 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 contracts used for testing can be found in the [sphinx-contracts](https://github.com/lurk-lab/sphinx-contracts) | ||
repository which is used as a dependency. | ||
|
||
## Requirements | ||
|
||
Make sure that you have properly set up the `sphinx-contracts` submodule. If you haven't done so, you can do it by | ||
running the following command: | ||
|
||
```bash | ||
git submodule update --init --recursive | ||
``` | ||
|
||
## Run the tests | ||
|
||
To run the tests, navigate to the `solidity/contracts` directory and execute the following command: | ||
|
||
```bash | ||
cd solidity/contracts && \ | ||
forge test | ||
``` | ||
|
||
The output should look like this: | ||
|
||
``` | ||
% 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. | ||
|
||
## Fixture generation | ||
|
||
If you wish to either run the tests with custom fixtures or regenerate the existing ones, you can do so by running the | ||
`fixture-generator` Rust program. This program will run the end-to-end proving (either epoch-change or inclusion) and | ||
export the fixture file to the relevant place (`solidity/contracts/src/plonk_fixtures`). | ||
|
||
To run the `fixture-generator` for the inclusion program, execute the following command: | ||
|
||
```bash | ||
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 | ||
``` | ||
|
||
> **Tips** | ||
> | ||
> Check that the fixtures have been updated by running `git status`. | ||
> **Note** | ||
> | ||
> You might be encountering issue with updating `sphinx-contracts` Foundry dependency, in this case try manually | ||
> specifying accessing the submodule via SSH | ||
> ``` | ||
> git config submodule.aptos/solidity/contracts/lib/sphinx-contracts.url [email protected]:lurk-lab/sphinx-contracts | ||
> ``` |
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
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,8 @@ | ||
## 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. | ||
|
||
For more information about how to run the on-chain verification benchmarks, please refer to the dedicated section of the | ||
mdBook. Otherwise, the README can be found in the [`docs/src/benchmarks/on_chain.md`](../docs/src/benchmark/on_chain.md) | ||
folder. |
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