Releases: openvm-org/openvm
v1.4.0
This release focuses on performance:
- Execution was rewritten for much better performance and to support our distributed proving architecture.
- All proving after execution, including trace generation, is now supported on Nvidia GPUs through new CUDA kernels and Rust bindings.
Users are recommended to upgrade all guest and host crates to openvm v1.4.0
.
See CHANGELOG.md for more details.
What's Changed
- feat: make merkle tree finalization parallel by @Golovanov399 in #1701
- fix(new-execution): return segments in
execute_metered
by @shuklaayush in #1702 - refactor: Move
Streams
intoVmStateMut
by @nyunyunyunyu in #1707 - fix(new-execution): remove hardcoded trace heights by @shuklaayush in #1715
- feat: Do not build a
BTreeMap
when we don't need to by @Golovanov399 in #1718 - feat: new execution e4 for memory adapters by @Golovanov399 in #1733
- feat: use memmap instead of paged_vecs on platforms that support it by @pjabbarzade in #1734
- chore: merge
main
branch by @jonathanpwang in #1740 - chore: add serde to segment by @luffykai in #1749
- fix(new-execution): cleanup
vm.rs
by @shuklaayush in #1751 - ci: add benches for
execute_metered
by @shuklaayush in #1752 - chore(new-execution): clk/cycles -> instret/insns by @shuklaayush in #1755
- chore: merge
main
by @jonathanpwang in #1759 - feat: generalize E3 with generic
RecordArena
by @jonathanpwang in #1761 - chore: add execution insn/s logging by @jonathanpwang in #1764
- fix(new-execution): prevent segmentation in single segment executor by @shuklaayush in #1766
- fix(new-execution): use
StdRng
for deterministic execution by @shuklaayush in #1769 - perf(new-execution): use page-based approach for merkle tree metering by @shuklaayush in #1770
- fix(ci): make codspeed instrumentation dispatch only by @shuklaayush in #1771
- feat: RecordArena implementation on DenseRecordArena for variable length records by @arayikhalatyan in #1775
- chore(ci): fix REF_HASH calculation by @jonathanpwang in #1776
- feat(sdk): derive Debug traits in config by @Qumeric in #1777
- chore: make testing ProgramDummyAir mod public by @stephenh-axiom-xyz in #1781
- chore: make RANGE_CHECKER_BUS pub by @stephenh-axiom-xyz in #1783
- chore: add 'allocated' method to DenseRecordArena by @arayikhalatyan in #1785
- chore: fix last chore by @arayikhalatyan in #1786
- refactor(new-execution): make
ExecutionCtrl
s stateless by @shuklaayush in #1789 - fix: proper memory access functions in
execute_e1_impl
in the native poseidon chip by @Golovanov399 in #1790 - chore: use tracing spans for metrics by @jonathanpwang in #1791
- chore: make memory volatile and persistent boundary chips pub by @stephenh-axiom-xyz in #1792
- refactor: use PagedVec for TracingMemory metadata storage by @jonathanpwang in #1793
- feat(new-execution): change default
PAGE_BITS
value in e2 to 6 by @shuklaayush in #1794 - fix(new-execution): no segmentation in single segment executor by @shuklaayush in #1796
- ci(new-execution): run codspeed instrumentation on push by @shuklaayush in #1797
- feat(new-execution): ignore register addr space for memory ops by @shuklaayush in #1798
- fix(new-execution): remove duplicate assignment by @shuklaayush in #1799
- fix: account for E1 / E2 execution in metrics summary by @yi-sun in #1800
- fix(new-execution): disable loads from address space 1 by @shuklaayush in #1802
- fix(new-execution): adapter offset should be boundary_idx + 1 by @shuklaayush in #1803
- chore(ci): fix the instance type for codspeed benches by @jonathanpwang in #1811
- chore: update
stark-backend
commit by @jonathanpwang in #1812 - feat: extract_layout implementation for native Poseidon2 by @stephenh-axiom-xyz in #1813
- chore: make plonky3 nightly-features optional by @jonathanpwang in #1818
- feat: modify fri records + tests by @arayikhalatyan in #1819
- fix: native Poseidon2 record size should be in bytes instead of u32 by @stephenh-axiom-xyz in #1821
- refactor(new-execution): optimize E1/E2 implementation by @nyunyunyunyu in #1827
- fix(openvm-prof): replace unwraps with better error strings by @shuklaayush in #1833
- feat: update architecture for generic
ProverBackend
s by @jonathanpwang in #1836 - feat: use cached max trace heights in leaf/internal aggregation by @stephenh-axiom-xyz in #1839
- fix(new-execution): add register contribtions on
reset_segment
by @shuklaayush in #1843 - chore: merge
main
by @jonathanpwang in #1844 - feat: Add pubs needed for gpu by @Golovanov399 in #1860
- feat: RecordSeeker::get_aligned_record_size by @arayikhalatyan in #1863
- chore: General Sys phantom by @nyunyunyunyu in #1867
- fix(new-execution): don't pass total_widths to execute_metered by @shuklaayush in #1868
- feat: public sha2 trace by @matejav in #1881
- feat(new-execution): optimize algebra extension e1/e2 execution by @shuklaayush in #1882
- fix(new-execution): use smaller fib number in
verify_stark
test by @shuklaayush in #1893 - chore: move record arena implementation to separate file by @jonathanpwang in #1894
- fix(new-execution): assign bls12_381 output properly by @shuklaayush in #1895
- chore: Optimistic E3 Execution for Poseidon2 Chip by @nyunyunyunyu in #1896
- perf: remove
step
fromProgram
by @jonathanpwang in #1897 - chore: use explicit
Result<_, ExecutionError>
andpre_compute*
returnsStaticProgramError
by @jonathanpwang in #1898 - chore(perf): use constant for address space in
tracing_read
when possible by @jonathanpwang in #1899 - fix(new-execution): replace segmentation strategy with segmentation limits by @shuklaayush in #1901
- perf(new-execution): use unchecked ops in e2 by @shuklaayush in #1902
- feat: add host configurable memory cell type to
MemoryConfig
by @jonathanpwang in #1903 - fix: native
FriReducedOpeningRecord
size calculation by @teokitan in #1905 - chore: make
SdkVmConfig::to_inner
pub by @jonathanpwang in #1906 - chore:
PairingProverExt
is vacuous by @jonathanpwang in #1907 - chore: clean up benchmarks by @jonathanpwang in #1908
- fix(metrics): cycle tracker spans recorded only with "perf-metrics" by @jonathanpwang in #1910
- chore(tracing): trace individual AIR tracegen by @jonathanpwang in #1911
- feat:
generate_app_proof
always verifies segment proofs by @jonathanpwang in #1912 - chore: remove
DenseRecordArena::current_size
by @jonathanpwang in #1913 - feat:
execute_metered
returns final memory by @jonathanpwang in #1914 - feat: add "stark-debug" feature by @jonathanpwang in #1915
- fix(docs): update isa spec to specify alignment requirements by @shuklaayush in #1917
- fix(new-execution): always inline
execute_impl
by @shuklaayush in #1919 - fix(...
v1.3.0
No circuit constraints or verifying keys were changed in this release.
A substantial refactor has been done to the guest libraries to separate the low level Rust bindings for OpenVM intrinsic instructions from the higher level user interface. For each VM extension, the openvm-$name-guest
crate is now a primitives library containing only the Rust bindings for the intrinsic instructions and essential logic related to the extension (e.g., ECDSA signature verification). We introduce new guest libraries as standalone Rust crates which provide the high-level interfaces guest programs should use to interact with the associated VM extensions.
We also add a new guest library openvm-verify-stark
which provides functionality to verify OpenVM STARK proofs from Rust programs using acceleration from the native field arithmetic VM extension.
Users are advised to switch to using the new guest libraries.
What's Changed
- chore(ecc-guest): remove
k256, p256
modules and fix guest-libs to allow patching (#1708) (Jonathan Wang) - feat: optimize
Group::is_identity
(#1709) (Avaneesh-axiom) - perf(ecc-guest): optimize setup handling in ecc guest bindings (#1706) (Jonathan Wang)
- perf: update stark-backend commit (Jonathan Wang)
- feat: Patch ecdsa
VerifyingKey::recover_from_prehash
to skip message verification (#1691) (Avaneesh-axiom) - refactor: guest bindings (#1613) (Jonathan Wang)
- refactor: guest bindings (#1613) (Avaneesh-axiom)
- feat: ensure all CLI commit outputs are in hex + fix verify STARK (#1697) (stephenh-axiom-xyz)
- feat: CLI prove use bin name for output path + e2e stark verify (#1675) (stephenh-axiom-xyz)
- feat: init command for cargo openvm (#1670) (stephenh-axiom-xyz)
- feat: commit command for cargo openvm (#1667) (stephenh-axiom-xyz)
- feat: cargo CLI update target directory (#1662) (stephenh-axiom-xyz)
- chore: add entry point to book examples without openvm::init!() (#1663) (stephenh-axiom-xyz)
- docs: add CHANGELOG.md (#1660) (HrikB)
- fix: verifier read dir (#1658) (HrikB)
- refactor: CLI Build & Setup (#1649) (Xinding Wei)
- feat: helper functions for verify_openvm_stark (#1631) (Xinding Wei)
- feat: Macro define_verify_openvm_stark (#1620) (Xinding Wei)
- feat: Root Verifier ASM (#1615) (Xinding Wei)
- feat: Add Rv32HintLoadByKey (#1606) (Xinding Wei)
- feat: Add e2e stark proof support (#1597) (Xinding Wei)
- feat: openvm build can build multiple targets + additional cargo options (#1647) (stephenh-axiom-xyz)
- chore: update
getrandom
to v0.3 inopenvm
lib (#1635) (Jonathan Wang) - feat: Lazily call setup function for moduli and curves on first use (#1603) (Avaneesh-axiom)
- feat: Build script for calling init macros (#1596) (Avaneesh-axiom)
- refactor: ELF and Program (#1638) (Xinding Wei)
- chore(ci): patch examples to use local crates by @jonathanpwang in #1712
- chore: change to dual license by @yi-sun in #1713
- fix(sw-macro): host
set_up_once
undefined by @jonathanpwang in #1717 - docs: Add comment explaining the
is_identity
optimization by @Avaneesh-axiom in #1716 - fix(cli): generate
openvm_init.rs
before building by @jonathanpwang in #1721 - chore: macro crate should use workspace version by @jonathanpwang in #1723
- docs: update division typo in ISA.md by @stephenh-axiom-xyz in #1726
- chore(ecc-guest): placeholder trait and function implementations for patch compilation by @jonathanpwang in #1720
- chore: fix typos and links by @jonathanpwang in #1730
- feat: Add feature gating for halo2 imports in SDK and CLI crates by @devin-ai-integration[bot] in #1731
- fix: use seed for deterministic re-execution by @jonathanpwang in #1741
- docs: Add VERSIONING.md documentation by @devin-ai-integration[bot] in #1735
- fix(ecdsa): match upstream behavior to error on overflowing add by @jonathanpwang in #1742
- fix(ecdsa): validate public key is not identity by @jonathanpwang in #1743
- fix(k256): ecdsa verify needs custom hook by @jonathanpwang in #1744
- fix(ecc): checked
from_be_bytes
by @jonathanpwang in #1746 - fix:
from_sec1_bytes
should reject identity by @jonathanpwang in #1747 - fix: Elliptic curve point decompression doesn't check if
y = 0
by @Avaneesh-axiom in #1768 - fix: verify stark test by @HrikB in #1779
- chore: update
stark-backend
tov1.1.1
tag by @jonathanpwang in #1784 - docs: Add README.md for verify_stark by @nyunyunyunyu in #1774
- chore: run verify-stark tests in ci by @HrikB in #1788
- feat(toolchain): support
getrandom
v0.2 and v0.3 simultaneously by @jonathanpwang in #1795 - ci: add versioning compatibility workflow for INT-4160 by @devin-ai-integration[bot] in #1753
- fix:
getrandom
pulling instd
by @jonathanpwang in #1804 - feat(cli): update version command and add version tag to init by @jonathanpwang in #1820
- docs: guest libs by @HrikB in #1805
- docs(book): add docs on
init!
macro by @jonathanpwang in #1837 - docs(book): clarify read-only reflection by @jonathanpwang in #1838
- fix(test): use local
openvm
for testingcargo openvm init
by @jonathanpwang in #1842 - fix(test): CLI init test patching not triggered by @jonathanpwang in #1846
- audit: add cantina report for v1.3.0 by @jonathanpwang in #1855
- chore: bump workspace version to
v1.3.0
by @jonathanpwang in #1854 - docs: update CHANGELOG with breaking changes since v1.2.0 by @devin-ai-integration[bot] in #1732
- fix(sdk):
aggregate_leaf_proofs
should always generate an internal proof by @jonathanpwang in #1866 - chore: update book for v1.3.0 release by @jonathanpwang in #1865
Full Changelog: v1.2.0...v1.3.0
v1.2.1-rc.0
v1.2.0
Security Fix
This release makes fixes for security advisories:
- Plonky3: GHSA-f69f-5fx9-w9r9
- OpenVM: GHSA-4w7p-8f9q-f4g2 (recursion circuit fixes corresponding to Plonky3)
See the advisories for further details as well as #1703
What's Changed
- docs: solidity sdk by @HrikB in #1628
- chore: update tagged version by @yi-sun in #1636
- fix: change parallel estimate to account for serial execution by @yi-sun in #1686
- docs: Stark Proof Aggregation by @nyunyunyunyu in #1693
- fix(recursion): final_poly & FRI missing randomness by @jonathanpwang in #1703
Full Changelog: v1.1.2...v1.2.0
v1.1.2
The solidity verifier contract generation has been changed so the version stored in the contract is {MAJOR_VERSION}.{MINOR_VERSION}
. The patch version will not change the verifier contract (this will be upheld by OpenVM).
What's Changed
- chore: update tag in book install instructions by @jonathanpwang in #1626
- fix: several typos of different importance by @crStiv in #1627
- docs: Update native compiler docs for debug by @nyunyunyunyu in #1634
- feat: truncate patch on verifier version by @HrikB in #1629
New Contributors
Full Changelog: v1.1.1...v1.1.2
v1.1.1
We have added new functionality to the SDK to generate Solidity verifier contracts with better contract interfaces, intended for compatibility with the OpenVM Solidity SDK. The CLI commands related to evm
have updated output formats documented in the book.
Notes
The pre-release tag v1.0.1-rc.1 (0f94c8a) was rebased on top of the security fix patched in v1.1.0. The new commit after the rebase was b4a5652 (tag v1.1.1-rc.1).
One can check via
git diff b4a565219ad808ee11cdd5f1be4a8516bb7df1ac 0f94c8a3dfa7536c1231465d1bdee5fc607a5993
that the only difference in the two commits is the fix from v1.0.0...v1.1.0.
What's Changed
- feat(cli): install pinned nightly toolchain automatically by @jonathanpwang in #1541
- chore: fix book lints by @yi-sun in #1543
- book: update install instructions with tag by @jonathanpwang in #1545
- docs: add link to whitepaper by @jonathanpwang in #1546
- fix: don't segment due to fixed-size traces by @zlangley in #1548
- chore: fix broken links by @bodhi-crypo in #1547
- fix(ci): run openvm-cli tests by @shuklaayush in #1552
- fix: Update Mod Builder symbolic expression multiplication test by @Avaneesh-axiom in #1551
- fix: use absolute paths in
VmConfig
derive macro by @shuklaayush in #1550 - feat: make provers generic over engine by @Golovanov399 in #1553
- fix: RootVerifierLocalProver should respect AIR heights by @nyunyunyunyu in #1554
- feat(test): add execution benchmarks by @shuklaayush in #1556
- feat:
OpenVmHalo2Verifier
by @HrikB in #1549 - chore: cargo openvm build also outputs committed exe by @luffykai in #1560
- chore(ci): enforce conventional commits PR title by @jonathanpwang in #1564
- chore(deps): bump tokio from 1.43.0 to 1.43.1 by @dependabot in #1562
- chore(deps): bump crossbeam-channel from 0.5.14 to 0.5.15 by @dependabot in #1569
- fix(docs): typo in access adapter split/merge algorithm by @shuklaayush in #1566
- feat(sdk)!: configurable aggregation tree shape in SDK by @jonathanpwang in #1570
- perf: set default
num_children_internal=3
by @jonathanpwang in #1573 - chore(fmt): wrap comments and format code comments by @jonathanpwang in #1575
- chore: feature gate
revm
andalloy
imports by @jonathanpwang in #1572 - fix: circuit flamegraphs with segmentation by @Avaneesh-axiom in #1576
- chore: silence clippy by @zlangley in #1580
- chore: alter json format of proof to align with verifier contract by @HrikB in #1578
- chore: bump workspace version to 1.0.1-rc.0 by @HrikB in #1581
- feat: format verifier by @HrikB in #1583
- docs: update the verifier contract paths in book by @HrikB in #1587
- chore: improvements to book on interface by @yi-sun in #1593
- chore(ci): invert reverse flamegraph for icicles by @manh9203 in #1594
- ci: bump actions/checkout to v4 by @dizer-ti in #1595
- fix: Micro benchmark flamegraph by @manh9203 in #1598
- chore: add offline mode to cli build by @luffykai in #1605
- chore: feature gate
forge-fmt
by @jonathanpwang in #1608 - chore: allow cargo home env var in build by @luffykai in #1609
- feat(cli): allow
RUSTFLAGS
in build command by @jonathanpwang in #1610 - docs(book): improve overview on CLI inputs by @jonathanpwang in #1612
- fix(prof):
openvm-prof
handling of duplicate names by @jonathanpwang in #1617 - chore(deps): bump crossbeam-channel from 0.5.14 to 0.5.15 by @dependabot in #1621
- chore: bump
stark-backend
tov1.0.1
by @jonathanpwang in #1622 - release: v1.1.1 by @jonathanpwang in #1624
- audit: add Cantina security review for v1.1.1 by @jonathanpwang in #1625
New Contributors
- @bodhi-crypo made their first contribution in #1547
- @dependabot made their first contribution in #1562
Full Changelog: v1.1.0...v1.1.1
v1.1.0
Security advisory -- we found a bug in the AUIPC chip constraints in OpenVM v1.0.0:
github.com/openvm-org/openvm/security/advisories/GHSA-jf2r-x3j4-23m7
The bug has been fixed in the new OpenVM v1.1.0 release, and all known live deployments have been updated.
All users are recommended to update to OpenVM v1.1.0 immediately.
Full Changelog: v1.0.0...v1.1.0
v1.0.1-rc.1
v1.0.1-rc.0
What's Changed
- feat(cli): install pinned nightly toolchain automatically by @jonathanpwang in #1541
- chore: fix book lints by @yi-sun in #1543
- book: update install instructions with tag by @jonathanpwang in #1545
- docs: add link to whitepaper by @jonathanpwang in #1546
- fix: don't segment due to fixed-size traces by @zlangley in #1548
- chore: fix broken links by @bodhi-crypo in #1547
- fix(ci): run openvm-cli tests by @shuklaayush in #1552
- fix: Update Mod Builder symbolic expression multiplication test by @Avaneesh-axiom in #1551
- fix: use absolute paths in
VmConfig
derive macro by @shuklaayush in #1550 - feat: make provers generic over engine by @Golovanov399 in #1553
- fix: RootVerifierLocalProver should respect AIR heights by @nyunyunyunyu in #1554
- feat(test): add execution benchmarks by @shuklaayush in #1556
- feat:
OpenVmHalo2Verifier
by @HrikB in #1549 - chore: cargo openvm build also outputs committed exe by @luffykai in #1560
- chore(ci): enforce conventional commits PR title by @jonathanpwang in #1564
- chore(deps): bump tokio from 1.43.0 to 1.43.1 by @dependabot in #1562
- chore(deps): bump crossbeam-channel from 0.5.14 to 0.5.15 by @dependabot in #1569
- fix(docs): typo in access adapter split/merge algorithm by @shuklaayush in #1566
- feat(sdk)!: configurable aggregation tree shape in SDK by @jonathanpwang in #1570
- perf: set default
num_children_internal=3
by @jonathanpwang in #1573 - chore(fmt): wrap comments and format code comments by @jonathanpwang in #1575
- chore: feature gate
revm
andalloy
imports by @jonathanpwang in #1572 - fix: circuit flamegraphs with segmentation by @Avaneesh-axiom in #1576
- chore: silence clippy by @zlangley in #1580
- chore: alter json format of proof to align with verifier contract by @HrikB in #1578
- chore: bump workspace version to 1.0.1-rc.0 by @HrikB in #1581
New Contributors
- @bodhi-crypo made their first contribution in #1547
- @dependabot made their first contribution in #1562
Full Changelog: v1.0.0...v1.0.1-rc.0
v1.0.0
OpenVM v1.0.0: Production Ready
What's Changed
- test: speed up pairing test by @jonathanpwang in #1498
- chore:
pub
chip fields necessary for serialization/deserialization by @manh9203 in #1497 - chore(style): use log2_ceil by @jonathanpwang in #1500
- feat(recursion): observe AIR IDs in verifier by @jonathanpwang in #1502
- feat(recursion): add clarifying OOB check by @jonathanpwang in #1503
- chore: change cli input format by @luffykai in #1504
- audit: add internal V1 audit report by @jonathanpwang in #1505
- chore: Update stark-backend rev by @gaxiom in #1508
- chore: fix audit typos by @shuklaayush in #1509
- audit: add V1 Cantina Competition report by @jonathanpwang in #1511
- feat(sdk): hardware and language independent encoding of inner STARK
Proof
by @jonathanpwang in #1501 - chore: exclude non-executable targets when building by @luffykai in #1514
- fix(test): update negative range tuple test by @shuklaayush in #1518
- chore: remove redundant
memory_image_to_paged_vec
by @Golovanov399 in #1517 - test(ci): run all workflows on Cargo.toml changes by @jonathanpwang in #1520
- chore: clean up deps using
cargo shear
by @shuklaayush in #1506 - chore: impl
AsRef
forSharedBitwiseOperationLookupChip
andSharedRangeTupleCheckerChip
by @manh9203 in #1512 - feat(ci): add cargo shear lint by @shuklaayush in #1507
- feat: Cross-language Serialization for RootVmVerifierInput/ContinuationVmProof by @nyunyunyunyu in #1516
- chore: make fields in
MemoryController
public by @jonathanpwang in #1515 - feat:
GenericSdk<E: StarkFriEngine<BabyBearPoseidon2Config>>
by @Golovanov399 in #1519 - chore: Derive Traits used for serialization by @Avaneesh-axiom in #1513
- chore: update toolchain to rust stable 1.85.1 by @jonathanpwang in #1522
- chore: Derive PartialEq on Sha256Record and KeccakRecord by @Avaneesh-axiom in #1523
- chore: public
get_height()
ofFriReducedOpeningChip
by @manh9203 in #1524 - feat: check height constraints after finalization and retry if needed by @zlangley in #1521
- chore: update comment on
current_trace_cells
by @jonathanpwang in #1525 - chore: Add debug assertions for the setup row of Mod Builder chips by @Avaneesh-axiom in #1527
- fix: Add p256 feature to clippy when linting ecc test guest programs by @Avaneesh-axiom in #1528
- book: mention consistency between guest max memory and VM memory config by @jonathanpwang in #1531
- chore: Update book to specify order of items in init! macros by @Avaneesh-axiom in #1533
- book: update EVM proof format by @jonathanpwang in #1530
- chore: allow configurability of
manifest_dir
so external crates can reuseopenvm-benchmarks
by @HrikB in #1463 - fix(ci): rust docs build workflow requires nightly by @jonathanpwang in #1535
- feat: update security for v1 release by @yi-sun in #1534
- fix: plonky3 FRI verifier by @jonathanpwang in #1537
- fix: Clarifications to book about ECC and Pairing extensions by @Avaneesh-axiom in #1536
- chore: Implement
Send
forPhantomChip
by @manh9203 in #1539 - feat: Add static SDK check for recursive verification feasibility by @zlangley in #1532
- docs: add more details into the continuations spec by @Golovanov399 in #1538
- release: v1.0.0 by @jonathanpwang in #1540
New Contributors
Full Changelog: v1.0.0-rc.2...v1.0.0