diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 8d62266cb..457de2b0f 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -1,25 +1,7 @@ name: Build and Publish on: - workflow_run: - workflows: ["Build and Test"] - branches: [main] - types: - - completed workflow_dispatch: - inputs: - skip_crates_io: - description: 'Skip publishing to crates.io' - type: boolean - default: false - skip_docs: - description: 'Skip publishing documentation' - type: boolean - default: false - force_version_tags: - description: 'Force version tags regardless of version change' - type: boolean - default: false permissions: contents: write # Needed for creating releases diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index d0e70b8dc..224b767e6 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,7 +1,6 @@ name: Build and Test on: - push: workflow_dispatch: permissions: diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml new file mode 100644 index 000000000..89996bc0e --- /dev/null +++ b/.github/workflows/build-binaries.yml @@ -0,0 +1,113 @@ +name: Build Binaries + +on: + pull_request: + push: + tags: + - "**" + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build - ${{ matrix.target }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-22.04 + target: x86_64-unknown-linux-gnu + artifact-name: starknet-devnet-x86_64-unknown-linux-gnu + + - os: ubuntu-22.04 + target: aarch64-unknown-linux-gnu + artifact-name: starknet-devnet-aarch64-unknown-linux-gnu + + - os: ubuntu-22.04 + target: x86_64-unknown-linux-musl + artifact-name: starknet-devnet-x86_64-unknown-linux-musl + + - os: macos-14 + target: x86_64-apple-darwin + artifact-name: starknet-devnet-x86_64-apple-darwin + + - os: macos-14 + target: aarch64-apple-darwin + artifact-name: starknet-devnet-aarch64-apple-darwin + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Add target + run: rustup target add ${{ matrix.target }} + + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + with: + key: binary-${{ matrix.target }} + cache-on-failure: true + + - name: Install cross-compilation dependencies (Linux) + if: runner.os == 'Linux' + run: | + if [[ "${{ matrix.target }}" == *"-musl" ]]; then + sudo apt-get update && sudo apt-get install -y musl-tools + fi + if [[ "${{ matrix.target }}" == "aarch64-"* ]]; then + sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu + fi + + - name: Configure AArch64 Linux linker + if: matrix.target == 'aarch64-unknown-linux-gnu' + run: | + echo '[target.aarch64-unknown-linux-gnu]' >> ~/.cargo/config.toml + echo 'linker = "aarch64-linux-gnu-gcc"' >> ~/.cargo/config.toml + + - name: Build binary + run: cargo build --release --target=${{ matrix.target }} --bin starknet-devnet + + - name: Archive binary + run: tar -czvf ${{ matrix.artifact-name }}.tar.gz --directory target/${{ matrix.target }}/release starknet-devnet + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact-name }} + path: ${{ matrix.artifact-name }}.tar.gz + retention-days: 30 + + release: + name: Create Release + needs: build + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + name: ${{ github.ref_name }} + draft: false + prerelease: ${{ contains(github.ref_name, '-') }} + generate_release_notes: true + files: | + artifacts/starknet-devnet-x86_64-unknown-linux-gnu/starknet-devnet-x86_64-unknown-linux-gnu.tar.gz + artifacts/starknet-devnet-aarch64-unknown-linux-gnu/starknet-devnet-aarch64-unknown-linux-gnu.tar.gz + artifacts/starknet-devnet-x86_64-unknown-linux-musl/starknet-devnet-x86_64-unknown-linux-musl.tar.gz + artifacts/starknet-devnet-x86_64-apple-darwin/starknet-devnet-x86_64-apple-darwin.tar.gz + artifacts/starknet-devnet-aarch64-apple-darwin/starknet-devnet-aarch64-apple-darwin.tar.gz diff --git a/Cargo.lock b/Cargo.lock index 86c3e53e7..c3a11be0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,7 +111,7 @@ dependencies = [ "auto_impl", "borsh", "c-kzg", - "derive_more 2.1.1", + "derive_more", "either", "k256", "once_cell", @@ -161,9 +161,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfbc46fa201350bf859add798d818bbe68b84882a8af832e4433791d28a975d" +checksum = "3bad0f48b9fe97029db0de15bb29a75f5f84848530673ba271b78216947d3877" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -174,9 +174,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14ff5ee5f27aa305bda825c735f686ad71bb65508158f059f513895abe69b8c3" +checksum = "e6ab1b2f1b48a7e6b3597cb2afae04f93879fb69d71e39736b5663d7366b23f2" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -254,7 +254,7 @@ dependencies = [ "auto_impl", "borsh", "c-kzg", - "derive_more 2.1.1", + "derive_more", "either", "serde", "serde_with", @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8708475665cc00e081c085886e68eada2f64cfa08fc668213a9231655093d4de" +checksum = "1e414aa37b335ad2acb78a95814c59d137d53139b412f87aed1e10e2d862cd49" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -323,7 +323,7 @@ dependencies = [ "alloy-sol-types", "async-trait", "auto_impl", - "derive_more 2.1.1", + "derive_more", "futures-utils-wasm", "serde", "serde_json", @@ -345,15 +345,15 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b88cf92ed20685979ed1d8472422f0c6c2d010cec77caf63aaa7669cc1a7bc2" +checksum = "66b1483f8c2562bf35f0270b697d5b5fe8170464e935bd855a4c5eaf6f89b354" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.1.1", + "derive_more", "foldhash 0.2.0", "hashbrown 0.16.1", "indexmap 2.13.0", @@ -428,7 +428,7 @@ checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -542,23 +542,23 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fa1ca7e617c634d2bd9fa71f9ec8e47c07106e248b9fcbd3eaddc13cabd625" +checksum = "2c4b64c8146291f750c3f391dff2dd40cf896f7e2b253417a31e342aa7265baa" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c00c0c3a75150a9dc7c8c679ca21853a137888b4e1c5569f92d7e2b15b5102" +checksum = "d9df903674682f9bae8d43fdea535ab48df2d6a8cb5104ca29c58ada22ef67b3" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -569,15 +569,15 @@ dependencies = [ "proc-macro2", "quote", "sha3", - "syn 2.0.114", + "syn 2.0.115", "syn-solidity", ] [[package]] name = "alloy-sol-macro-input" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297db260eb4d67c105f68d6ba11b8874eec681caec5505eab8fbebee97f790bc" +checksum = "737b8a959f527a86e07c44656db237024a32ae9b97d449f788262a547e8aa136" dependencies = [ "alloy-json-abi", "const-hex", @@ -587,15 +587,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.114", + "syn 2.0.115", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b91b13181d3bcd23680fd29d7bc861d1f33fbe90fdd0af67162434aeba902d" +checksum = "b28e6e86c6d2db52654b65a5a76b4f57eae5a32a7f0aa2222d1dbdb74e2cb8e0" dependencies = [ "serde", "winnow", @@ -603,9 +603,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc442cc2a75207b708d481314098a0f8b6f7b58e3148dd8d8cc7407b0d6f9385" +checksum = "fdf7effe4ab0a4f52c865959f790036e61a7983f68b13b75d7fbcedf20b753ce" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -622,7 +622,7 @@ dependencies = [ "alloy-json-rpc", "auto_impl", "base64 0.22.1", - "derive_more 2.1.1", + "derive_more", "futures", "futures-utils-wasm", "parking_lot 0.12.5", @@ -661,7 +661,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "arrayvec", - "derive_more 2.1.1", + "derive_more", "nybbles", "serde", "smallvec", @@ -678,7 +678,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -748,14 +748,13 @@ checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "apollo_compilation_utils" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b860e444fc3047527163ec7e0171323bd831f22c8e89a98e607715f3c50dcf9c" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_infra_utils", - "cairo-lang-sierra 2.12.3", + "cairo-lang-sierra 2.15.0", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "rlimit", "serde", "serde_json", @@ -767,9 +766,8 @@ dependencies = [ [[package]] name = "apollo_compile_to_native" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1c875c600127ce06d89c4283bdefdecfe92ea953d52a4847398c29a342bad6" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_compilation_utils", "apollo_compile_to_native_types", @@ -781,9 +779,8 @@ dependencies = [ [[package]] name = "apollo_compile_to_native_types" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04abf08b9a1c958f16307c9ff48ed1fb5dfe0e90f10f78bcc21c055f051209e4" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_config", "serde", @@ -792,9 +789,8 @@ dependencies = [ [[package]] name = "apollo_config" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb39734ba7a0596776fa1e4e4c4d2d32117b927c2b0b526bfe14c4c73743361" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_infra_utils", "clap", @@ -811,14 +807,14 @@ dependencies = [ [[package]] name = "apollo_infra_utils" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef50783135b0289f491e738fb3ea57ffccde51e68b12be4d96b8a74db252532c" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_proc_macros", "assert-json-diff", "colored 3.1.1", "num_enum", + "regex", "serde", "serde_json", "socket2 0.5.10", @@ -828,14 +824,14 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tracing", + "tracing-subscriber", "url", ] [[package]] name = "apollo_metrics" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a070146c18fea3fb7e42931ddb52828baf8e64cabc9873ea8f978f118c4fbe" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "indexmap 2.13.0", "metrics", @@ -846,21 +842,19 @@ dependencies = [ [[package]] name = "apollo_proc_macros" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b177fec2f66debebbe1d39bf5e4c8680037f58f877c9527fb9a1885f7300135" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] name = "apollo_sizeof" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b230dd6ebc0c6cfe7ef87c9c3bbf760063b40b6b7b469b43fb216994033569f" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_sizeof_macros", "starknet-types-core", @@ -868,13 +862,12 @@ dependencies = [ [[package]] name = "apollo_sizeof_macros" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b83d9b1feea5e65bccc822427caf564f5fc85cdcae116b2a87b72f1fd606c6" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -888,24 +881,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.114", -] - -[[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" -dependencies = [ - "ark-ff 0.4.2", - "ark-poly 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits", - "zeroize", + "syn 2.0.115", ] [[package]] @@ -916,7 +892,7 @@ checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", "ark-ff 0.5.0", - "ark-poly 0.5.0", + "ark-poly", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe 0.6.0", @@ -1014,7 +990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1052,20 +1028,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.114", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", + "syn 2.0.115", ] [[package]] @@ -1083,46 +1046,24 @@ dependencies = [ "hashbrown 0.15.5", ] -[[package]] -name = "ark-secp256k1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-secp256k1" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bd211c48debd3037b48873a7aa22c3aba034e83388aa4124795c9f220b88c7" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", "ark-std 0.5.0", ] -[[package]] -name = "ark-secp256r1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3975a01b0a6e3eae0f72ec7ca8598a6620fc72fa5981f6f5cca33b7cd788f633" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-secp256r1" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cf8be5820de567729bfa73a410ddd07cec8ad102d9a4bf61fd6b2e60db264e8" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", "ark-std 0.5.0", ] @@ -1143,7 +1084,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", @@ -1155,24 +1095,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ - "ark-serialize-derive 0.5.0", + "ark-serialize-derive", "ark-std 0.5.0", "arrayvec", "digest 0.10.7", "num-bigint", ] -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ark-serialize-derive" version = "0.5.0" @@ -1181,7 +1110,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1289,7 +1218,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1300,7 +1229,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1328,7 +1257,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1472,7 +1401,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -1565,9 +1494,8 @@ dependencies = [ [[package]] name = "blockifier" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b550a0722401d283cd20b6b778d81d784d7efe3dedc3a2417f5366275b30a0fa" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "anyhow", "apollo_compilation_utils", @@ -1576,20 +1504,20 @@ dependencies = [ "apollo_config", "apollo_infra_utils", "apollo_metrics", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-secp256k1 0.4.0", - "ark-secp256r1 0.4.0", + "ark-ec", + "ark-ff 0.5.0", + "ark-secp256k1", + "ark-secp256r1", "blockifier_test_utils", "cached", - "cairo-lang-casm 2.12.3", + "cairo-lang-casm 2.15.0", "cairo-lang-runner", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "cairo-native", "cairo-vm", "dashmap", - "derive_more 0.99.20", + "derive_more", "indexmap 2.13.0", "itertools 0.12.1", "keccak", @@ -1614,9 +1542,8 @@ dependencies = [ [[package]] name = "blockifier_test_utils" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e6d81a301fcbef9e69e13949d22505ec9116c20cbb763b3c242eda560340946" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_infra_utils", "cairo-lang-starknet-classes", @@ -1666,9 +1593,15 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] +[[package]] +name = "boxcar" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" + [[package]] name = "brotli" version = "8.0.2" @@ -1807,11 +1740,11 @@ dependencies = [ [[package]] name = "cairo-lang-casm" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1d84a85b59c753aa4a7f0c455a5c815e0aebb89faf0c8ab366b0d87c0bb934" +checksum = "84e6207b0fd16c0d188e91c81ad4e96bbc6c3cd92e128c832d9fbc87e0a4a11e" dependencies = [ - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "indoc", "num-bigint", "num-traits", @@ -1840,33 +1773,33 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "clap", "log", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", ] [[package]] name = "cairo-lang-compiler" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a5cbeb4e134cf29c63d18a235beae3f124bef2824ec45d09d6e18a0c334e509" +checksum = "e28cc7001d335ea5f8f886e12b1d2ff1cb4d3862d570100ac734ef748eb3f441" dependencies = [ "anyhow", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-project 2.12.3", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-lowering 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-project 2.15.0", "cairo-lang-runnable-utils", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-semantic 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-generator 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "indoc", "rayon", - "rust-analyzer-salsa", + "salsa 0.24.0", "semver 1.0.27", "smol_str 0.3.5", "thiserror 2.0.18", @@ -1880,11 +1813,13 @@ checksum = "c99d41a14f98521c617c0673a0faa41fd00029d32106a4643e1291a1813340a7" [[package]] name = "cairo-lang-debug" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa5311e1c31d413f3fa34e40e48b662c19151f0fb4b10467d627a52c93eae918" +checksum = "3f8fa7f741b25dfe4319c657b32c79ef1fc91c854b45b4d82bb279cba35fbbf5" dependencies = [ - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", + "id-arena", + "salsa 0.24.0", ] [[package]] @@ -1901,27 +1836,27 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "indexmap 1.9.3", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-defs" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872feccf7b8f70ed5d74c40548bf974fbcc5069b2ea1ae15a9b8f1ab911c536b" +checksum = "deaaad6ba678b88c88b0723907fd82b28d91831b4ee1c56d65084304cac7b72d" dependencies = [ "bincode", - "cairo-lang-debug 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "itertools 0.14.0", - "rust-analyzer-salsa", + "salsa 0.24.0", "serde", - "smol_str 0.3.5", "typetag", "xxhash-rust", ] @@ -1935,19 +1870,21 @@ dependencies = [ "cairo-lang-filesystem 1.0.0-rc0", "cairo-lang-utils 1.0.0-rc0", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", ] [[package]] name = "cairo-lang-diagnostics" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e7c551a634708366af3003176f2f9cdea56fd4a91c834ddd802030366f6a5" +checksum = "0bbb39a789267d1ea3c64dc4b5011530df096fd1c32bfe1dc72e0291ddb70e0b" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-utils 2.15.0", "itertools 0.14.0", + "salsa 0.24.0", ] [[package]] @@ -1964,11 +1901,11 @@ dependencies = [ [[package]] name = "cairo-lang-eq-solver" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed04fc3f52d68157f359257c477e30f68dec36bbf568c85d567812583cd5f9c8" +checksum = "ac789761904a39372635b5e3816f539fd8b4602a215d83c18e226e291a552420" dependencies = [ - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "good_lp", ] @@ -1981,42 +1918,45 @@ dependencies = [ "cairo-lang-debug 1.1.1", "cairo-lang-utils 1.0.0-rc0", "path-clean 0.1.0", - "salsa", + "salsa 0.16.1", "serde", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-filesystem" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca1835a43a00a90d5cd4ca3f6bb9178ec450d55458e8b56ac34ca1d6d0ccf58f" +checksum = "9a13326b1762c69d58d22ccd4df0e4973405aa73f0054aff7f8af7fd73deb88a" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-utils 2.15.0", + "itertools 0.14.0", "path-clean 1.0.1", - "rust-analyzer-salsa", + "salsa 0.24.0", "semver 1.0.27", "serde", "smol_str 0.3.5", - "toml 0.8.23", + "toml 0.9.12+spec-1.1.0", ] [[package]] name = "cairo-lang-formatter" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd0736456004f1d334bad5b366c6933c4b856a23a5dfade96cfe0a1c5eb3ddb" +checksum = "ba34c08ac67ac02b3128d564a45582f42334e91cc8a47431e9ed4b95f8389495" dependencies = [ "anyhow", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "diffy", "ignore", "itertools 0.14.0", + "salsa 0.24.0", "serde", "thiserror 2.0.18", ] @@ -2042,35 +1982,38 @@ dependencies = [ "log", "num-bigint", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-lowering" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2e1d66c241fba4f3dc43e42956001940298fb4ea5970acfc8b2db8bf4b6629" +checksum = "c32179ee954dbef5c26899c960c8d5d7d158dfa83ae8a924799c1932578e353a" dependencies = [ "assert_matches", "bincode", - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-proc-macros 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.15.0", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-semantic 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "id-arena", + "indent", "itertools 0.14.0", "log", "num-bigint", "num-integer", "num-traits", - "rust-analyzer-salsa", + "salsa 0.24.0", "serde", + "starknet-types-core", + "thiserror 2.0.18", + "tracing", ] [[package]] @@ -2089,29 +2032,28 @@ dependencies = [ "log", "num-bigint", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "unescaper", ] [[package]] name = "cairo-lang-parser" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c3ab263d4afd34a002dc0e37f9bacca734aa133dbbb8540651d28308977a68" +checksum = "fa894404dd671130cfb3d86d59dce97df27f565aa92699708d0bc78663cb778e" dependencies = [ - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", "cairo-lang-primitive-token", - "cairo-lang-syntax 2.12.3", - "cairo-lang-syntax-codegen 2.12.4", - "cairo-lang-utils 2.12.3", + "cairo-lang-syntax 2.15.0", + "cairo-lang-syntax-codegen 2.15.0", + "cairo-lang-utils 2.15.0", "colored 3.1.1", "itertools 0.14.0", "num-bigint", "num-traits", - "rust-analyzer-salsa", - "smol_str 0.3.5", + "salsa 0.24.0", "unescaper", ] @@ -2130,27 +2072,26 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "indoc", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-plugins" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566059584384c12fa598ae0e0509fd3d12b3985a25872de22e37245c4bc5762c" +checksum = "19c46896b74f3e66902d5beda1fed31fb0b8a205a13d9e1868a815d033817105" dependencies = [ - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "indent", "indoc", "itertools 0.14.0", - "rust-analyzer-salsa", - "smol_str 0.3.5", + "salsa 0.24.0", ] [[package]] @@ -2172,13 +2113,15 @@ dependencies = [ [[package]] name = "cairo-lang-proc-macros" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61599d8cac760505d1913fa5d7dddcf019f22d47f0748ff66b1b58afe1858b62" +checksum = "a8d5baca5b44cac3178306c82fedbc53ea677908b1682d29c39f03b03eb1d02e" dependencies = [ - "cairo-lang-debug 2.12.3", + "cairo-lang-debug 2.15.0", + "proc-macro2", "quote", - "syn 2.0.114", + "salsa 0.24.0", + "syn 2.0.115", ] [[package]] @@ -2196,30 +2139,30 @@ dependencies = [ [[package]] name = "cairo-lang-project" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99635e2569cebc31583110b417e6a410990a494c7d56998f2be0a169a1158456" +checksum = "c08a4ee75ce0fda214d882beb50a7c8d18d6e20107429200536b57d13d76bb7b" dependencies = [ - "cairo-lang-filesystem 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-utils 2.15.0", "serde", "thiserror 2.0.18", - "toml 0.8.23", + "toml 0.9.12+spec-1.1.0", ] [[package]] name = "cairo-lang-runnable-utils" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f747c3d433ec5e82576e59852fd8c86a802fefe55e7bdbb9c0db61adb1a40e7b" +checksum = "691bfb23661cc39c6f286b0256dc426096662fcae0c5b0d075abdc0e518d3934" dependencies = [ - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", + "cairo-lang-casm 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-ap-change 2.15.0", + "cairo-lang-sierra-gas 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "cairo-vm", "itertools 0.14.0", "thiserror 2.0.18", @@ -2227,30 +2170,32 @@ dependencies = [ [[package]] name = "cairo-lang-runner" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a9ab4bb286d641463b2253070c145c53ff7e71f29cda2a49915f79ff7db927" +checksum = "3d66b331e0a59fb52b31f725c8cc2d7112cbc6e85561d8a58b2809b6fa999716" dependencies = [ "ark-ff 0.5.0", - "ark-secp256k1 0.5.0", - "ark-secp256r1 0.5.0", - "cairo-lang-casm 2.12.3", - "cairo-lang-lowering 2.12.3", + "ark-secp256k1", + "ark-secp256r1", + "cairo-lang-casm 2.15.0", + "cairo-lang-lowering 2.15.0", "cairo-lang-runnable-utils", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", - "cairo-lang-starknet 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-generator 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", + "cairo-lang-starknet 2.15.0", + "cairo-lang-utils 2.15.0", "cairo-vm", + "clap", "itertools 0.14.0", "keccak", "num-bigint", "num-integer", "num-traits", "rand 0.9.2", + "salsa 0.24.0", + "serde", "sha2", - "smol_str 0.3.5", "starknet-types-core", "thiserror 2.0.18", ] @@ -2274,35 +2219,37 @@ dependencies = [ "log", "num-bigint", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-semantic" -version = "2.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1e01333b127fa3733f2f93b3febc45219ef55b807d196f298cadea6ad8fe44" -dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-plugins 2.12.3", - "cairo-lang-proc-macros 2.12.3", - "cairo-lang-syntax 2.12.3", +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83ad7598f3c29e628d5b306afdce4310fe72b123cd55567983dc47eabcb26fee" +dependencies = [ + "bincode", + "cairo-lang-debug 2.15.0", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-plugins 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-syntax 2.15.0", "cairo-lang-test-utils", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "id-arena", "indoc", "itertools 0.14.0", "num-bigint", "num-traits", - "rust-analyzer-salsa", + "salsa 0.24.0", + "serde", "sha3", - "smol_str 0.3.5", - "toml 0.8.23", + "starknet-types-core", + "toml 0.9.12+spec-1.1.0", ] [[package]] @@ -2321,7 +2268,7 @@ dependencies = [ "num-bigint", "num-traits", "regex", - "salsa", + "salsa 0.16.1", "serde", "sha3", "smol_str 0.2.2", @@ -2330,14 +2277,14 @@ dependencies = [ [[package]] name = "cairo-lang-sierra" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300655046f505cf806a918918e5397b20c22b579d78c2ef09bc7d4d59fd733be" +checksum = "1f7ab456f23241d2948d8a8795bb032f3a81be48747b970a853924063ffea7c2" dependencies = [ "anyhow", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "const-fnv1a-hash", - "convert_case 0.8.0", + "convert_case 0.10.0", "derivative", "itertools 0.14.0", "lalrpop 0.22.2", @@ -2346,7 +2293,6 @@ dependencies = [ "num-integer", "num-traits", "regex", - "rust-analyzer-salsa", "serde", "serde_json", "sha3", @@ -2370,14 +2316,14 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-ap-change" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c51190f463ac9f7d4a2ce0e0345cfc92334589811a7114eeeec84029999d7f1" +checksum = "98a3ca83a79e6191dcaa3cbb49dd53aa90176b49f4534b7e72a79f5a3fbb1cb4" dependencies = [ - "cairo-lang-eq-solver 2.12.3", - "cairo-lang-sierra 2.12.3", + "cairo-lang-eq-solver 2.15.0", + "cairo-lang-sierra 2.15.0", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "itertools 0.14.0", "num-bigint", "num-traits", @@ -2399,14 +2345,14 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-gas" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d0f038acd79aedcadad4ad2ad928b0881c4e96a2d9ad0e0b3173a6111f313" +checksum = "a5e2f9b5c7befa27d7cdb70ee03c8bd44309ecf6e16d439909c692770e733e1a" dependencies = [ - "cairo-lang-eq-solver 2.12.3", - "cairo-lang-sierra 2.12.3", + "cairo-lang-eq-solver 2.15.0", + "cairo-lang-sierra 2.15.0", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "itertools 0.14.0", "num-bigint", "num-traits", @@ -2435,29 +2381,29 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "num-bigint", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-sierra-generator" -version = "2.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bc8d2a89273ba24529319982a4a7833f2a6c4a87752baea2bc70ceb4b3285b7" -dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75afecf1adf1a1418b6b4865e694fd2f6e784551f2f812a28b2e33dd4c7c7d0b" +dependencies = [ + "cairo-lang-debug 2.15.0", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-lowering 2.15.0", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-semantic 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "itertools 0.14.0", "num-traits", - "rust-analyzer-salsa", + "salsa 0.24.0", "serde", "serde_json", "smol_str 0.3.5", @@ -2488,17 +2434,17 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-to-casm" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c852277442b2d8ca9741cdc8ccb737c6ad381d300ab4e2d982a98ba40e5f5b6" +checksum = "5c20590351b15f1522023386d3385de34baee1ea47339729994dcff16faadd7c" dependencies = [ "assert_matches", - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", + "cairo-lang-casm 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-ap-change 2.15.0", + "cairo-lang-sierra-gas 2.15.0", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "indoc", "itertools 0.14.0", "num-bigint", @@ -2509,12 +2455,12 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-type-size" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265aa8daaa94cc4d5e135a82c0bbe7d28d2c0fbc612332903dbf1a68ed15978f" +checksum = "9a3c5b27e5f5f6f0bca52fb8e2a6c071d83d24fe09f8d6505b6aab3bed5e1a65" dependencies = [ - "cairo-lang-sierra 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-sierra 2.15.0", + "cairo-lang-utils 2.15.0", ] [[package]] @@ -2543,7 +2489,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "clap", "convert_case 0.6.0", - "genco", + "genco 0.17.10", "indoc", "itertools 0.10.5", "log", @@ -2560,31 +2506,31 @@ dependencies = [ [[package]] name = "cairo-lang-starknet" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb8bf3ccf8fe1f910291d388a2351b6f40ad32be07bdbd3a628e103387b1a48" +checksum = "03449f446ffa58f6e365b95f2b95520031a6b2be265d6d4d1a33c0eb4e379810" dependencies = [ "anyhow", - "cairo-lang-compiler 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-plugins 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", + "cairo-lang-compiler 2.15.0", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-lowering 2.15.0", + "cairo-lang-parser 2.15.0", + "cairo-lang-plugins 2.15.0", + "cairo-lang-semantic 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-generator 2.15.0", "cairo-lang-starknet-classes", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "const_format", "indent", "indoc", "itertools 0.14.0", + "salsa 0.24.0", "serde", "serde_json", - "smol_str 0.3.5", "starknet-types-core", "thiserror 2.0.18", "typetag", @@ -2592,15 +2538,16 @@ dependencies = [ [[package]] name = "cairo-lang-starknet-classes" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4839b63927954a7c3d018fd012ce0bea256db205b85ee45df27fb1e90cb10e02" +checksum = "fd03f9747aa0071117c17d8c3992c0faff32e870f7e8fb285b748a6d1edeaee0" dependencies = [ - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", - "cairo-lang-utils 2.12.3", - "convert_case 0.8.0", + "cairo-lang-casm 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", + "cairo-lang-sierra-type-size", + "cairo-lang-utils 2.15.0", + "convert_case 0.10.0", "itertools 0.14.0", "num-bigint", "num-integer", @@ -2624,7 +2571,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "num-bigint", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", "unescaper", @@ -2632,20 +2579,21 @@ dependencies = [ [[package]] name = "cairo-lang-syntax" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f83d5b0213ddab04090f4a10d009ff3428a0d6e289f4fea31798210d60d5cb" +checksum = "92ced2e38a83e79f41518ba9970159ab84d7fc47ed139f0f70db2d060faeb302" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-filesystem 2.12.3", + "cairo-lang-debug 2.15.0", + "cairo-lang-filesystem 2.15.0", "cairo-lang-primitive-token", - "cairo-lang-utils 2.12.3", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-utils 2.15.0", "num-bigint", "num-traits", - "rust-analyzer-salsa", + "salsa 0.24.0", "serde", - "smol_str 0.3.5", "unescaper", + "vector-map", ] [[package]] @@ -2655,29 +2603,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7356209993e8f39abaadf26562204b149ae3e0af03114f0d9c2675480df4e2d3" dependencies = [ "cairo-lang-utils 1.0.0-rc0", - "genco", + "genco 0.17.10", "log", "xshell", ] [[package]] name = "cairo-lang-syntax-codegen" -version = "2.12.4" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c7a973e8010db56b2e1c6fdb898dbc5b584a769200c9eb264020338730458a" +checksum = "d12cf2171666fb224b4890906668f5ebcc31a5c91a4ff5a3b681b9d440d1c995" dependencies = [ - "genco", + "genco 0.19.0", "xshell", ] [[package]] name = "cairo-lang-test-utils" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbd4ebcd82ab07fba3d376a6aa992aa552fcb7f051736f6b5a2122381754bdb" +checksum = "b2316a0647f8b273bb989f16a44d61e5a71dcb76f8cbdfcc00d2f68734488d3f" dependencies = [ "cairo-lang-formatter", - "cairo-lang-utils 2.12.3", + "cairo-lang-proc-macros 2.15.0", + "cairo-lang-utils 2.15.0", "colored 3.1.1", "log", "pretty_assertions", @@ -2702,43 +2651,52 @@ dependencies = [ [[package]] name = "cairo-lang-utils" -version = "2.12.3" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca315cce0937801a772bee5fe92cca28b8172421bdd2f67c96e8288a0dcfb9f" +checksum = "d8469aa1f8361bd76648eade6cb9b18a957841e99937797788b327741de7cab8" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", "indexmap 2.13.0", "itertools 0.14.0", "num-bigint", "num-traits", "parity-scale-codec", - "schemars 0.8.22", + "salsa 0.24.0", + "schemars 1.2.1", "serde", "smol_str 0.3.5", + "tracing", + "tracing-log", + "tracing-subscriber", + "vector-map", ] [[package]] name = "cairo-native" -version = "0.7.3" +version = "0.9.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce3a73f176cbb920f729bc528a152a3c717d46e0d4f1023d56096b6aad1186b" +checksum = "a9f771cd6d92e5aa141a25d36ca6b7477470957538c2c1c662fe972453b45340" dependencies = [ "aquamarine", - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", - "ark-secp256k1 0.5.0", - "ark-secp256r1 0.5.0", + "ark-secp256k1", + "ark-secp256r1", "bumpalo", + "cairo-lang-lowering 2.15.0", "cairo-lang-runner", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-ap-change 2.15.0", + "cairo-lang-sierra-gas 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", + "cairo-lang-sierra-type-size", + "cairo-lang-starknet 2.15.0", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.15.0", "educe 0.5.11", "itertools 0.14.0", "keccak", + "lambdaworks-math", "lazy_static", "libc", "libloading", @@ -2752,7 +2710,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "starknet-curve", + "starknet-curve 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "tempfile", "thiserror 2.0.18", @@ -2762,16 +2720,15 @@ dependencies = [ [[package]] name = "cairo-vm" -version = "2.5.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21cacdf4e290ab5f0018f24d6bf97f8d3a8809bd09568550669270e7f9ed534" +checksum = "182965d2ccbc05674f798b30097854ecf015eed695194a3a5fe9b682c4163b9d" dependencies = [ "anyhow", "bincode", "bitvec", "generic-array", "hashbrown 0.15.5", - "hex", "indoc", "keccak", "lazy_static", @@ -2786,7 +2743,7 @@ dependencies = [ "serde_json", "sha2", "sha3", - "starknet-crypto", + "starknet-crypto 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "thiserror 2.0.18", "zip", @@ -2878,9 +2835,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.57" +version = "4.5.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" +checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806" dependencies = [ "clap_builder", "clap_derive", @@ -2888,9 +2845,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.57" +version = "4.5.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" +checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2" dependencies = [ "anstream", "anstyle", @@ -2907,14 +2864,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "colorchoice" @@ -3032,12 +2989,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "convert_case" version = "0.6.0" @@ -3056,15 +3007,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "convert_case" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "convert_case" version = "0.10.0" @@ -3142,6 +3084,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -3240,7 +3191,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3255,7 +3206,7 @@ dependencies = [ "quote", "serde", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3277,7 +3228,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3288,7 +3239,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3323,9 +3274,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" dependencies = [ "powerfmt", "serde_core", @@ -3342,19 +3293,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_more" -version = "0.99.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" -dependencies = [ - "convert_case 0.4.0", - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "syn 2.0.114", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -3374,7 +3312,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.114", + "syn 2.0.115", "unicode-xid", ] @@ -3449,7 +3387,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3500,7 +3438,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3512,7 +3450,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3546,9 +3484,9 @@ dependencies = [ [[package]] name = "ena" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" dependencies = [ "log", ] @@ -3602,7 +3540,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3892,7 +3830,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -3943,7 +3881,18 @@ version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a35958104272e516c2a5f66a9d82fba4784d2b585fc1e2358b8f96e15d342995" dependencies = [ - "genco-macros", + "genco-macros 0.17.10", + "relative-path", + "smallvec", +] + +[[package]] +name = "genco" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ab846431e5d637791b3279e7242fe2b21e11c3d8b4cf6a99f645c5f16ba7c0" +dependencies = [ + "genco-macros 0.19.0", "relative-path", "smallvec", ] @@ -3956,7 +3905,18 @@ checksum = "43eaff6bbc0b3a878361aced5ec6a2818ee7c541c5b33b5880dfa9a86c23e9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", +] + +[[package]] +name = "genco-macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42a1fe5a699c7f1d36ea6e04ed680a5c787cabff4b610ae3b8954ea3bcefec1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", ] [[package]] @@ -4080,9 +4040,6 @@ name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] [[package]] name = "hashbrown" @@ -4115,6 +4072,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + [[package]] name = "heck" version = "0.3.3" @@ -4502,7 +4468,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -4595,12 +4561,12 @@ dependencies = [ "reqwest", "serde", "serde_json", + "starknet-accounts", + "starknet-contract", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-devnet-core", - "starknet-rust-accounts", - "starknet-rust-contract", - "starknet-rust-core", - "starknet-rust-providers", - "starknet-rust-signers", + "starknet-providers", + "starknet-signers", "starknet_api", "thiserror 2.0.18", "tokio", @@ -4609,6 +4575,15 @@ dependencies = [ "url", ] +[[package]] +name = "intrusive-collections" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" +dependencies = [ + "memoffset", +] + [[package]] name = "inventory" version = "0.3.21" @@ -4855,6 +4830,7 @@ dependencies = [ "num-bigint", "num-traits", "rand 0.8.5", + "rayon", "serde", "serde_json", ] @@ -4997,7 +4973,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5046,7 +5022,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.114", + "syn 2.0.115", "tblgen", "unindent", ] @@ -5057,6 +5033,15 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "metrics" version = "0.24.3" @@ -5152,7 +5137,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5332,7 +5317,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5399,7 +5384,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5432,9 +5417,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" dependencies = [ "arrayvec", "bitvec", @@ -5448,14 +5433,14 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.7.4" +version = "3.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5599,7 +5584,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5634,7 +5619,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5712,9 +5697,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "predicates-core", @@ -5722,15 +5707,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -5753,7 +5738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -5775,7 +5760,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit", ] [[package]] @@ -5797,7 +5782,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6102,7 +6087,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6241,27 +6226,30 @@ dependencies = [ [[package]] name = "rstest" -version = "0.17.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de1bb486a691878cd320c2f0d319ba91eeaa2e894066d8b5f8f117c000e9d962" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" dependencies = [ - "futures", "futures-timer", + "futures-util", "rstest_macros", - "rustc_version 0.4.1", ] [[package]] name = "rstest_macros" -version = "0.17.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290ca1a1c8ca7edb7c3283bd44dc35dd54fdec6253a3912e201ba1072018fca8" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ "cfg-if", + "glob", + "proc-macro-crate", "proc-macro2", "quote", + "regex", + "relative-path", "rustc_version 0.4.1", - "syn 1.0.109", + "syn 2.0.115", "unicode-ident", ] @@ -6299,35 +6287,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" -[[package]] -name = "rust-analyzer-salsa" -version = "0.17.0-pre.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719825638c59fd26a55412a24561c7c5bcf54364c88b9a7a04ba08a6eafaba8d" -dependencies = [ - "indexmap 2.13.0", - "lock_api", - "oorandom", - "parking_lot 0.12.5", - "rust-analyzer-salsa-macros", - "rustc-hash 1.1.0", - "smallvec", - "tracing", - "triomphe", -] - -[[package]] -name = "rust-analyzer-salsa-macros" -version = "0.17.0-pre.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d96498e9684848c6676c399032ebc37c52da95ecbefa83d71ccc53b9f8a4a8e" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.114", -] - [[package]] name = "rust_decimal" version = "1.40.0" @@ -6472,10 +6431,41 @@ dependencies = [ "oorandom", "parking_lot 0.11.2", "rustc-hash 1.1.0", - "salsa-macros", + "salsa-macros 0.16.0", "smallvec", ] +[[package]] +name = "salsa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27956164373aeec733ac24ff1736de8541234e3a8e7e6f916b28175b5752af3b" +dependencies = [ + "boxcar", + "crossbeam-queue", + "crossbeam-utils", + "hashbrown 0.15.5", + "hashlink", + "indexmap 2.13.0", + "intrusive-collections", + "inventory", + "parking_lot 0.12.5", + "portable-atomic", + "rayon", + "rustc-hash 2.1.1", + "salsa-macro-rules", + "salsa-macros 0.24.0", + "smallvec", + "thin-vec", + "tracing", +] + +[[package]] +name = "salsa-macro-rules" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ca3b9d6e47c08b5de4b218e0c5f7ec910b51bce6314e651c8e7b9d154d174da" + [[package]] name = "salsa-macros" version = "0.16.0" @@ -6488,6 +6478,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "salsa-macros" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6337b62f2968be6b8afa30017d7564ecbde6832ada47ed2261fb14d0fd402ff4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", + "synstructure", +] + [[package]] name = "salsa20" version = "0.10.2" @@ -6524,19 +6526,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", -] - [[package]] name = "schemars" version = "0.9.0" @@ -6557,20 +6546,21 @@ checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", + "schemars_derive", "serde", "serde_json", ] [[package]] name = "schemars_derive" -version = "0.8.22" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6711,7 +6701,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6722,7 +6712,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6763,11 +6753,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -6810,7 +6800,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -6859,7 +6849,7 @@ checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7043,6 +7033,34 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "starknet-accounts" +version = "0.16.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "async-trait", + "auto_impl", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", + "starknet-crypto 0.8.1 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", + "starknet-providers", + "starknet-signers", + "thiserror 1.0.69", +] + +[[package]] +name = "starknet-contract" +version = "0.16.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "serde", + "serde_json", + "serde_with", + "starknet-accounts", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", + "starknet-providers", + "thiserror 1.0.69", +] + [[package]] name = "starknet-core" version = "0.16.0" @@ -7061,8 +7079,30 @@ dependencies = [ "serde_json_pythonic", "serde_with", "sha3", - "starknet-core-derive", - "starknet-crypto", + "starknet-core-derive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-crypto 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-types-core", +] + +[[package]] +name = "starknet-core" +version = "0.16.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "base64 0.21.7", + "crypto-bigint", + "flate2", + "foldhash 0.1.5", + "hex", + "indexmap 2.13.0", + "num-traits", + "serde", + "serde_json", + "serde_json_pythonic", + "serde_with", + "sha3", + "starknet-core-derive 0.1.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", + "starknet-crypto 0.8.1 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-types-core", ] @@ -7074,7 +7114,17 @@ checksum = "b08520b7d80eda7bf1a223e8db4f9bb5779a12846f15ebf8f8d76667eca7f5ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", +] + +[[package]] +name = "starknet-core-derive" +version = "0.1.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", ] [[package]] @@ -7091,7 +7141,25 @@ dependencies = [ "num-traits", "rfc6979", "sha2", - "starknet-curve", + "starknet-curve 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-types-core", + "zeroize", +] + +[[package]] +name = "starknet-crypto" +version = "0.8.1" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "crypto-bigint", + "hex", + "hmac", + "num-bigint", + "num-integer", + "num-traits", + "rfc6979", + "sha2", + "starknet-curve 0.6.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-types-core", "zeroize", ] @@ -7105,6 +7173,14 @@ dependencies = [ "starknet-types-core", ] +[[package]] +name = "starknet-curve" +version = "0.6.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" +dependencies = [ + "starknet-types-core", +] + [[package]] name = "starknet-devnet" version = "0.7.2" @@ -7119,11 +7195,11 @@ dependencies = [ "serde", "serde_json", "serial_test", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-devnet-core", "starknet-devnet-server", "starknet-devnet-types", - "starknet-rust-core", - "starknet-rust-providers", + "starknet-providers", "tokio", "tracing", "tracing-subscriber", @@ -7153,9 +7229,9 @@ dependencies = [ "reqwest", "serde", "serde_json", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-devnet-types", - "starknet-rust-core", - "starknet-rust-signers", + "starknet-signers", "starknet-types-core", "starknet_api", "thiserror 2.0.18", @@ -7183,10 +7259,10 @@ dependencies = [ "serde", "serde_json", "serde_yaml", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-devnet-core", "starknet-devnet-types", - "starknet-rust-core", - "starknet-rust-providers", + "starknet-providers", "thiserror 2.0.18", "tokio", "tower-http", @@ -7202,19 +7278,19 @@ dependencies = [ "base64 0.22.1", "bigdecimal", "blockifier", - "cairo-lang-casm 2.12.3", - "cairo-lang-compiler 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", + "cairo-lang-casm 2.15.0", + "cairo-lang-compiler 2.15.0", + "cairo-lang-defs 2.15.0", + "cairo-lang-diagnostics 2.15.0", + "cairo-lang-filesystem 2.15.0", + "cairo-lang-lowering 2.15.0", + "cairo-lang-semantic 2.15.0", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-generator 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", "cairo-lang-starknet-classes", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-syntax 2.15.0", + "cairo-lang-utils 2.15.0", "cairo-vm", "flate2", "lru 0.16.3", @@ -7224,7 +7300,7 @@ dependencies = [ "parking_lot 0.12.5", "serde", "serde_json", - "starknet-rust-core", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "starknet-types-core", "starknet_api", "thiserror 2.0.18", @@ -7233,105 +7309,9 @@ dependencies = [ ] [[package]] -name = "starknet-rust-accounts" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989a4d2cdc6c8fd7f7f942ccac6e0e151d47a7546da78690f3b9c9c5477751f2" -dependencies = [ - "async-trait", - "auto_impl", - "starknet-rust-core", - "starknet-rust-crypto", - "starknet-rust-providers", - "starknet-rust-signers", - "thiserror 1.0.69", -] - -[[package]] -name = "starknet-rust-contract" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fdecc1831151ee84d7f86b8d0551c6bc5a0d5990ca58fe81b0d20fea58660a" -dependencies = [ - "serde", - "serde_json", - "serde_with", - "starknet-rust-accounts", - "starknet-rust-core", - "starknet-rust-providers", - "thiserror 1.0.69", -] - -[[package]] -name = "starknet-rust-core" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "295694e002d92939c1e67050772b9e225adc791efbb2a72dc41d250d7595fcfc" -dependencies = [ - "base64 0.21.7", - "crypto-bigint", - "flate2", - "foldhash 0.1.5", - "hex", - "indexmap 2.13.0", - "num-traits", - "semver 1.0.27", - "serde", - "serde_json", - "serde_json_pythonic", - "serde_with", - "sha3", - "starknet-rust-core-derive", - "starknet-rust-crypto", - "starknet-types-core", -] - -[[package]] -name = "starknet-rust-core-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77fe79a81e657d7f500b9a3706a42cdb3691fd36049845e1ea4b7ea8181860cd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "starknet-rust-crypto" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f4c2c74d8eca6f5f084b44bbe43f20b9923b4f26b1586f0ced57a79ef7edb4" -dependencies = [ - "blake2", - "crypto-bigint", - "digest 0.10.7", - "hex", - "hmac", - "num-bigint", - "num-integer", - "num-traits", - "rfc6979", - "sha2", - "starknet-rust-curve", - "starknet-types-core", - "zeroize", -] - -[[package]] -name = "starknet-rust-curve" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1977caca63a4e6439968abe0c9d8c0d2074df7641f1153e8a551f8200470d8da" -dependencies = [ - "starknet-types-core", -] - -[[package]] -name = "starknet-rust-providers" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf7e54bc8a0926ac7bbd21ddba1bb54afabd9821aadb55f212135285a4ddb74" +name = "starknet-providers" +version = "0.16.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" dependencies = [ "async-trait", "auto_impl", @@ -7343,16 +7323,15 @@ dependencies = [ "serde", "serde_json", "serde_with", - "starknet-rust-core", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "thiserror 1.0.69", "url", ] [[package]] -name = "starknet-rust-signers" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e18965a181de93ee82588b88e1ae05d5fec33d7ca5beedc4b464bda6a33d59" +name = "starknet-signers" +version = "0.14.0" +source = "git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a#20b1ddebc133753f3666acde24a35b77e2a9522a" dependencies = [ "async-trait", "auto_impl", @@ -7360,8 +7339,8 @@ dependencies = [ "eth-keystore", "getrandom 0.2.17", "rand 0.8.5", - "starknet-rust-core", - "starknet-rust-crypto", + "starknet-core 0.16.0 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", + "starknet-crypto 0.8.1 (git+https://github.com/m-kus/starknet-rs?rev=20b1ddebc133753f3666acde24a35b77e2a9522a)", "thiserror 1.0.69", ] @@ -7386,9 +7365,8 @@ dependencies = [ [[package]] name = "starknet_api" -version = "0.16.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d1b32bfe0c7d92604633fe2a6beafc732e6517e07203f0c5c3be1ec06d90d99" +version = "0.18.0-dev.0" +source = "git+https://github.com/starkware-libs/sequencer?tag=APOLLO-PRE-PROOF-DEMO-11#3e8e9a1d6ed45f9e7df714141a09bed33c4ba2e5" dependencies = [ "apollo_infra_utils", "apollo_sizeof", @@ -7397,8 +7375,8 @@ dependencies = [ "cached", "cairo-lang-runner", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", - "derive_more 0.99.20", + "cairo-lang-utils 2.15.0", + "derive_more", "expect-test", "flate2", "hex", @@ -7414,13 +7392,14 @@ dependencies = [ "serde", "serde_json", "sha3", - "starknet-core", - "starknet-crypto", + "starknet-core 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-crypto 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "strum 0.25.0", "strum_macros 0.25.3", "thiserror 1.0.69", "time", + "tokio", ] [[package]] @@ -7481,7 +7460,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7493,7 +7472,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7515,9 +7494,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" dependencies = [ "proc-macro2", "quote", @@ -7526,14 +7505,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.5.4" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2379beea9476b89d0237078be761cf8e012d92d5ae4ae0c9a329f974838870fc" +checksum = "f8658017776544996edc21c8c7cc8bb4f13db60955382f4bac25dc6303b38438" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7553,7 +7532,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7643,6 +7622,12 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" +[[package]] +name = "thin-vec" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" + [[package]] name = "thiserror" version = "1.0.69" @@ -7669,7 +7654,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7680,7 +7665,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7793,7 +7778,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -7864,23 +7849,17 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "serde", + "indexmap 2.13.0", + "serde_core", "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", ] [[package]] @@ -7892,20 +7871,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.13.0", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - [[package]] name = "toml_edit" version = "0.23.10+spec-1.0.0" @@ -7913,25 +7878,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap 2.13.0", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.0.7+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "247eaa3197818b831697600aadf81514e577e0cba5eab10f7e064e78ae154df1" dependencies = [ "winnow", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_writer" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" @@ -8012,7 +7977,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8049,6 +8014,7 @@ dependencies = [ "sharded-slab", "smallvec", "thread_local", + "time", "tracing", "tracing-core", "tracing-log", @@ -8072,17 +8038,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad06847b7afb65c7866a36664b75c40b895e318cea4f71299f013fb22965329d" dependencies = [ "quote", - "syn 2.0.114", -] - -[[package]] -name = "triomphe" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" -dependencies = [ - "serde", - "stable_deref_trait", + "syn 2.0.115", ] [[package]] @@ -8147,7 +8103,7 @@ checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8236,18 +8192,21 @@ checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" [[package]] name = "universal-sierra-compiler" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7fb03117fdc04f671f6b3b0e1ba0c0abbb3b7002d43ad565c91f8f450a21bd" +checksum = "146c495ea6e70c4c4bde4b0c19842b1fda84d86952d32d5a5207c4276f55c231" dependencies = [ "anyhow", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", + "cairo-lang-sierra 2.15.0", + "cairo-lang-sierra-to-casm 2.15.0", + "cairo-lang-sierra-type-size", "cairo-lang-starknet 1.0.0-rc0", "cairo-lang-starknet-classes", "clap", "console", + "serde_core", "serde_json", + "tracing", "universal-sierra-compiler-cairo-lang-starknet-proxy", ] @@ -8366,7 +8325,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8381,6 +8340,15 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vector-map" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b34e878e32c750bb4253be124adb9da1dc93ca5d98c210787badf1e1ccdca7" +dependencies = [ + "serde", +] + [[package]] name = "version_check" version = "0.9.5" @@ -8491,7 +8459,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", "wasm-bindgen-shared", ] @@ -8656,7 +8624,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8667,7 +8635,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8678,7 +8646,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8689,7 +8657,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -8950,7 +8918,7 @@ dependencies = [ "heck 0.5.0", "indexmap 2.13.0", "prettyplease", - "syn 2.0.114", + "syn 2.0.115", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -8966,7 +8934,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -9069,7 +9037,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", "synstructure", ] @@ -9090,7 +9058,7 @@ checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -9110,7 +9078,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", "synstructure", ] @@ -9131,7 +9099,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -9164,7 +9132,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.115", ] [[package]] @@ -9181,9 +9149,9 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index 445b76132..0b72ca565 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,7 +72,7 @@ rand_mt = "5.0.0" rand_regex = "0.18.1" reqwest = { version = "0.12.24", features = ["json"] } url = "2.5" -usc = { version = "2.6.0-rc.0", package = "universal-sierra-compiler" } +usc = { version = "2.7.0", package = "universal-sierra-compiler" } num-bigint = { version = "0.4" } bigdecimal = { version = "0.4.9" } enum-helper-macros = "0.0.1" @@ -81,32 +81,32 @@ once_cell = "1.21.3" ahash = "0.8" # Starknet dependencies -starknet-types-core = "=0.2.4" -starknet_api = { version = "0.16.0-rc.3", features = ["testing"] } -blockifier = { version = "0.16.0-rc.3" } +starknet-types-core = "0.2.4" +starknet_api = { git = "https://github.com/starkware-libs/sequencer", tag = "APOLLO-PRE-PROOF-DEMO-11", features = ["testing"] } +blockifier = { git = "https://github.com/starkware-libs/sequencer", tag = "APOLLO-PRE-PROOF-DEMO-11" } -starknet-rs-signers = { version = "0.15.0", package = "starknet-rust-signers" } -starknet-rs-core = { version = "0.17.0", package = "starknet-rust-core" } -starknet-rs-providers = { version = "0.17.0", package = "starknet-rust-providers" } -starknet-rs-accounts = { version = "0.17.0", package = "starknet-rust-accounts" } -starknet-rs-contract = { version = "0.17.0", package = "starknet-rust-contract" } +starknet-rs-signers = { git = "https://github.com/m-kus/starknet-rs", rev = "20b1ddebc133753f3666acde24a35b77e2a9522a", package = "starknet-signers" } +starknet-rs-core = { git = "https://github.com/m-kus/starknet-rs", rev = "20b1ddebc133753f3666acde24a35b77e2a9522a", package = "starknet-core" } +starknet-rs-providers = { git = "https://github.com/m-kus/starknet-rs", rev = "20b1ddebc133753f3666acde24a35b77e2a9522a", package = "starknet-providers" } +starknet-rs-accounts = { git = "https://github.com/m-kus/starknet-rs", rev = "20b1ddebc133753f3666acde24a35b77e2a9522a", package = "starknet-accounts" } +starknet-rs-contract = { git = "https://github.com/m-kus/starknet-rs", rev = "20b1ddebc133753f3666acde24a35b77e2a9522a", package = "starknet-contract" } -cairo-vm = "=2.5.0" +cairo-vm = "3.0.1" # Cairo-lang dependencies -cairo-lang-starknet-classes = "=2.12.3" -cairo-lang-compiler = "=2.12.3" -cairo-lang-casm = "=2.12.3" -cairo-lang-defs = "=2.12.3" -cairo-lang-diagnostics = "=2.12.3" -cairo-lang-filesystem = "=2.12.3" -cairo-lang-lowering = "=2.12.3" -cairo-lang-semantic = "=2.12.3" -cairo-lang-sierra = "=2.12.3" -cairo-lang-sierra-generator = "=2.12.3" -cairo-lang-sierra-to-casm = "=2.12.3" -cairo-lang-syntax = "=2.12.3" -cairo-lang-utils = "=2.12.3" +cairo-lang-starknet-classes = "2.14.1-dev.3" +cairo-lang-compiler = "2.14.1-dev.3" +cairo-lang-casm = "2.14.1-dev.3" +cairo-lang-defs = "2.14.1-dev.3" +cairo-lang-diagnostics = "2.14.1-dev.3" +cairo-lang-filesystem = "2.14.1-dev.3" +cairo-lang-lowering = "2.14.1-dev.3" +cairo-lang-semantic = "2.14.1-dev.3" +cairo-lang-sierra = "2.14.1-dev.3" +cairo-lang-sierra-generator = "2.14.1-dev.3" +cairo-lang-sierra-to-casm = "2.14.1-dev.3" +cairo-lang-syntax = "2.14.1-dev.3" +cairo-lang-utils = "2.14.1-dev.3" # Inner dependencies starknet-types = { version = "0.7.2", path = "crates/starknet-devnet-types", package = "starknet-devnet-types" } @@ -139,8 +139,8 @@ tokio-tungstenite = { version = "0.28.0" } listeners = "0.2.1" # https://github.com/paritytech/parity-scale-codec/issues/656 -parity-scale-codec = "=3.7.4" -parity-scale-codec-derive = "=3.7.4" +parity-scale-codec = "=3.7.5" +parity-scale-codec-derive = "=3.7.5" # https://app.circleci.com/pipelines/github/0xSpaceShard/starknet-devnet/3033/workflows/3f93463c-7550-432b-8868-9bb0bf96dc10/jobs/5012 cargo-platform = "=0.1.8" diff --git a/crates/starknet-devnet-core/src/constants.rs b/crates/starknet-devnet-core/src/constants.rs index 1de28d3df..8061b51ff 100644 --- a/crates/starknet-devnet-core/src/constants.rs +++ b/crates/starknet-devnet-core/src/constants.rs @@ -86,7 +86,7 @@ pub const ARGENT_MULTISIG_CONTRACT_CLASS_HASH: Felt = /// https://github.com/OpenZeppelin/cairo-contracts/blob/89a450a88628ec3b86273f261b2d8d1ca9b1522b/src/account/interface.cairo#L7 pub const ISRC6_ID_HEX: &str = "0x2ceccef7f994940b3962a6c67e0ba4fcd37df7d131417c604f91e03caecc1cd"; -pub const STARKNET_VERSION: &str = "0.14.1"; +pub const STARKNET_VERSION: &str = "0.14.2"; pub const DEVNET_DEFAULT_SEED: u32 = 123; pub const DEVNET_DEFAULT_TEST_SEED: u32 = 123; diff --git a/crates/starknet-devnet-core/src/error.rs b/crates/starknet-devnet-core/src/error.rs index 47ee02078..7595e77a0 100644 --- a/crates/starknet-devnet-core/src/error.rs +++ b/crates/starknet-devnet-core/src/error.rs @@ -139,6 +139,11 @@ impl From for Error { TransactionPreValidationError::TransactionFeeError(tx_fee_err) => { Self::from(*tx_fee_err) } + TransactionPreValidationError::InvalidProofFacts(msg) => { + Self::TransactionValidationError( + TransactionValidationError::ValidationFailure { reason: msg }, + ) + } }, TransactionExecutionError::FeeCheckError(err) => err.into(), TransactionExecutionError::TransactionFeeError(err) => (*err).into(), diff --git a/crates/starknet-devnet-core/src/starknet/add_declare_transaction.rs b/crates/starknet-devnet-core/src/starknet/add_declare_transaction.rs index 31d0d1302..ae3eddd61 100644 --- a/crates/starknet-devnet-core/src/starknet/add_declare_transaction.rs +++ b/crates/starknet-devnet-core/src/starknet/add_declare_transaction.rs @@ -44,7 +44,7 @@ fn check_class_size( Ok(()) } -pub fn add_declare_transaction( +pub async fn add_declare_transaction( starknet: &mut Starknet, broadcasted_declare_transaction: BroadcastedDeclareTransaction, ) -> DevnetResult<(TransactionHash, ClassHash)> { @@ -108,7 +108,7 @@ pub fn add_declare_transaction( state.declare_contract_class(class_hash, casm_hash, contract_class)?; } - starknet.handle_accepted_transaction(transaction, execution_info)?; + starknet.handle_accepted_transaction(transaction, execution_info).await?; Ok((transaction_hash, class_hash)) } @@ -161,8 +161,8 @@ mod tests { dummy_contract_address, dummy_felt, resource_bounds_with_price_1, }; - #[test] - fn declare_transaction_v3_with_query_version_should_return_an_error() { + #[tokio::test(flavor = "multi_thread")] + async fn declare_transaction_v3_with_query_version_should_return_an_error() { let declare_tx = BroadcastedDeclareTransactionV3 { common: BroadcastedTransactionCommonV3 { version: Felt::THREE + QUERY_VERSION_OFFSET, @@ -181,7 +181,8 @@ mod tests { }; let result = Starknet::default() - .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_tx))); + .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_tx))) + .await; match result { Err(Error::UnsupportedAction { msg }) => { @@ -191,8 +192,8 @@ mod tests { }; } - #[test] - fn declare_transaction_v3_with_zero_gas_bounds_should_return_an_error() { + #[tokio::test(flavor = "multi_thread")] + async fn declare_transaction_v3_with_zero_gas_bounds_should_return_an_error() { let declare_tx = BroadcastedDeclareTransactionV3 { common: BroadcastedTransactionCommonV3 { version: Felt::THREE + QUERY_VERSION_OFFSET, @@ -211,7 +212,8 @@ mod tests { }; let result = Starknet::default() - .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_tx))); + .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_tx))) + .await; match result { Err(Error::TransactionValidationError( @@ -221,9 +223,10 @@ mod tests { } } - #[test] - fn add_declare_v3_transaction_successful_execution() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn add_declare_v3_transaction_successful_execution() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -232,7 +235,7 @@ mod tests { ); let (tx_hash, class_hash) = - starknet.add_declare_transaction(declare_tx.clone().into()).unwrap(); + starknet.add_declare_transaction(declare_tx.clone().into()).await.unwrap(); let tx = starknet.transactions.get_by_hash_mut(&tx_hash).unwrap(); @@ -251,9 +254,9 @@ mod tests { .unwrap(); } - #[test] - fn add_declare_v3_transaction_should_return_an_error_due_to_low_gas_bounds() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(20000); + #[tokio::test(flavor = "multi_thread")] + async fn add_declare_v3_transaction_should_return_an_error_due_to_low_gas_bounds() { + let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(20000).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -261,7 +264,7 @@ mod tests { resource_bounds_with_price_1(0, 1, 1), ); - match starknet.add_declare_transaction(declare_tx.into()) { + match starknet.add_declare_transaction(declare_tx.into()).await { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -269,9 +272,10 @@ mod tests { } } - #[test] - fn add_declare_v3_transaction_should_return_an_error_due_to_not_enough_balance_on_account() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1); + #[tokio::test(flavor = "multi_thread")] + async fn add_declare_v3_transaction_should_return_an_error_due_to_not_enough_balance_on_account() + { + let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -279,7 +283,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e9 as u64), ); - match starknet.add_declare_transaction(declare_tx.into()).unwrap_err() { + match starknet.add_declare_transaction(declare_tx.into()).await.unwrap_err() { Error::TransactionValidationError( TransactionValidationError::InsufficientAccountBalance, ) => {} @@ -287,9 +291,10 @@ mod tests { } } - #[test] - fn declare_v3_transaction_successful_storage_change() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn declare_v3_transaction_successful_storage_change() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -302,7 +307,8 @@ mod tests { ContractClass::Cairo1(declare_tx.contract_class.clone()).try_generate_hash().unwrap(); assert!(!starknet.pre_confirmed_state.is_contract_declared(expected_class_hash)); - let (tx_hash, class_hash) = starknet.add_declare_transaction(declare_tx.into()).unwrap(); + let (tx_hash, class_hash) = + starknet.add_declare_transaction(declare_tx.into()).await.unwrap(); let tx = starknet.transactions.get_by_hash_mut(&tx_hash).unwrap(); @@ -314,9 +320,10 @@ mod tests { assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); } - #[test] - fn declare_tx_should_fail_if_nonce_repeated() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn declare_tx_should_fail_if_nonce_repeated() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let tx_nonce = Felt::ZERO; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( @@ -331,7 +338,7 @@ mod tests { assert!(!starknet.pre_confirmed_state.is_contract_declared(expected_class_hash)); let (tx_hash, class_hash) = - starknet.add_declare_transaction(declare_tx.clone().into()).unwrap(); + starknet.add_declare_transaction(declare_tx.clone().into()).await.unwrap(); let tx = starknet.transactions.get_by_hash_mut(&tx_hash).unwrap(); @@ -342,7 +349,7 @@ mod tests { // check if contract is declared assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); - match starknet.add_declare_transaction(declare_tx.into()) { + match starknet.add_declare_transaction(declare_tx.into()).await { Err(Error::TransactionValidationError( TransactionValidationError::InvalidTransactionNonce { address, @@ -359,19 +366,20 @@ mod tests { assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); } - #[test] - fn declare_tx_should_fail_if_nonce_higher_than_expected_in_block_on_tx_mode() { - declare_tx_should_fail_if_nonce_higher_than_expected(BlockGenerationOn::Transaction); + #[tokio::test(flavor = "multi_thread")] + async fn declare_tx_should_fail_if_nonce_higher_than_expected_in_block_on_tx_mode() { + declare_tx_should_fail_if_nonce_higher_than_expected(BlockGenerationOn::Transaction).await; } - #[test] - fn declare_tx_should_fail_if_nonce_higher_than_expected_in_block_on_demand_mode() { - declare_tx_should_fail_if_nonce_higher_than_expected(BlockGenerationOn::Demand); + #[tokio::test(flavor = "multi_thread")] + async fn declare_tx_should_fail_if_nonce_higher_than_expected_in_block_on_demand_mode() { + declare_tx_should_fail_if_nonce_higher_than_expected(BlockGenerationOn::Demand).await; } - #[test] - fn declaration_success_should_depend_on_class_size_limit() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn declaration_success_should_depend_on_class_size_limit() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -385,20 +393,22 @@ mod tests { // Ideally would be set to (size - 1), but serialization is not the same for the class used // here and the one in `add_declare_transaction`. starknet.config.class_size_config.maximum_contract_class_size = 1; - match starknet.add_declare_transaction(declare_tx.clone().into()) { + match starknet.add_declare_transaction(declare_tx.clone().into()).await { Err(Error::ContractClassSizeIsTooLarge) => (), other => panic!("Unexpected declaration result: {other:?}"), }; // Should pass starknet.config.class_size_config.maximum_contract_class_size = old_limit; - let (_tx_hash, class_hash) = starknet.add_declare_transaction(declare_tx.into()).unwrap(); + let (_tx_hash, class_hash) = + starknet.add_declare_transaction(declare_tx.into()).await.unwrap(); assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); } - #[test] - fn declaration_success_should_depend_on_bytecode_size_limit() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn declaration_success_should_depend_on_bytecode_size_limit() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -412,20 +422,22 @@ mod tests { // Ideally would be set to (size - 1), but serialization is not the same for the class used // here and the one in `add_declare_transaction`. starknet.config.class_size_config.maximum_contract_bytecode_size = 1; - match starknet.add_declare_transaction(declare_tx.clone().into()) { + match starknet.add_declare_transaction(declare_tx.clone().into()).await { Err(Error::ContractClassSizeIsTooLarge) => (), other => panic!("Unexpected declaration result: {other:?}"), }; // Should pass starknet.config.class_size_config.maximum_contract_bytecode_size = old_limit; - let (_tx_hash, class_hash) = starknet.add_declare_transaction(declare_tx.into()).unwrap(); + let (_tx_hash, class_hash) = + starknet.add_declare_transaction(declare_tx.into()).await.unwrap(); assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); } - #[test] - fn declaration_success_should_depend_on_sierra_length_limit() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn declaration_success_should_depend_on_sierra_length_limit() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let declare_tx = broadcasted_declare_tx_v3_of_dummy_class( sender.account_address, @@ -437,21 +449,23 @@ mod tests { // Should fail starknet.config.class_size_config.maximum_sierra_length = sierra_length - 1; - match starknet.add_declare_transaction(declare_tx.clone().into()) { + match starknet.add_declare_transaction(declare_tx.clone().into()).await { Err(Error::ContractClassSizeIsTooLarge) => (), other => panic!("Unexpected declaration result: {other:?}"), }; // Should pass starknet.config.class_size_config.maximum_sierra_length = sierra_length; - let (_tx_hash, class_hash) = starknet.add_declare_transaction(declare_tx.into()).unwrap(); + let (_tx_hash, class_hash) = + starknet.add_declare_transaction(declare_tx.into()).await.unwrap(); assert!(starknet.pre_confirmed_state.is_contract_declared(class_hash)); } - fn declare_tx_should_fail_if_nonce_higher_than_expected( + async fn declare_tx_should_fail_if_nonce_higher_than_expected( block_generation_mode: BlockGenerationOn, ) { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; starknet.config.block_generation_on = block_generation_mode; let tx_nonce = Felt::ONE; // nonce too high @@ -466,7 +480,7 @@ mod tests { ContractClass::Cairo1(declare_tx.contract_class.clone()).try_generate_hash().unwrap(); assert!(!starknet.pre_confirmed_state.is_contract_declared(expected_class_hash)); - match starknet.add_declare_transaction(declare_tx.into()) { + match starknet.add_declare_transaction(declare_tx.into()).await { Err(Error::TransactionValidationError( TransactionValidationError::InvalidTransactionNonce { address, diff --git a/crates/starknet-devnet-core/src/starknet/add_deploy_account_transaction.rs b/crates/starknet-devnet-core/src/starknet/add_deploy_account_transaction.rs index 2168ecffb..ff1ea4e83 100644 --- a/crates/starknet-devnet-core/src/starknet/add_deploy_account_transaction.rs +++ b/crates/starknet-devnet-core/src/starknet/add_deploy_account_transaction.rs @@ -11,7 +11,7 @@ use super::Starknet; use crate::error::{DevnetResult, Error, TransactionValidationError}; use crate::state::CustomStateReader; -pub fn add_deploy_account_transaction( +pub async fn add_deploy_account_transaction( starknet: &mut Starknet, broadcasted_deploy_account_transaction: BroadcastedDeployAccountTransaction, ) -> DevnetResult<(TransactionHash, ContractAddress)> { @@ -63,7 +63,7 @@ pub fn add_deploy_account_transaction( } .execute(&mut starknet.pre_confirmed_state.state, &starknet.block_context)?; - starknet.handle_accepted_transaction(transaction, execution_info)?; + starknet.handle_accepted_transaction(transaction, execution_info).await?; Ok((transaction_hash, address)) } @@ -130,15 +130,17 @@ mod tests { } } - #[test] - fn account_deploy_transaction_v3_with_query_version_should_return_an_error() { + #[tokio::test(flavor = "multi_thread")] + async fn account_deploy_transaction_v3_with_query_version_should_return_an_error() { let mut deploy_account_transaction = test_deploy_account_transaction_v3(Felt::default(), 0, 10, 0, 0); deploy_account_transaction.common.version = Felt::THREE + QUERY_VERSION_OFFSET; - let result = Starknet::default().add_deploy_account_transaction( - BroadcastedDeployAccountTransaction::V3(deploy_account_transaction), - ); + let result = Starknet::default() + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3( + deploy_account_transaction, + )) + .await; match result { Err(crate::error::Error::UnsupportedAction { msg }) => { @@ -148,12 +150,15 @@ mod tests { }; } - #[test] - fn deploy_account_transaction_v3_with_zero_gas_bounds_should_return_an_error() { + #[tokio::test(flavor = "multi_thread")] + async fn deploy_account_transaction_v3_with_zero_gas_bounds_should_return_an_error() { let (mut starknet, account_class_hash) = setup(); let tx = test_deploy_account_transaction_v3(account_class_hash, 0, 0, 0, 0); - match starknet.add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) { + match starknet + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) + .await + { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -161,12 +166,15 @@ mod tests { } } - #[test] - fn deploy_account_transaction_v3_should_return_an_error_due_to_not_enough_balance() { + #[tokio::test(flavor = "multi_thread")] + async fn deploy_account_transaction_v3_should_return_an_error_due_to_not_enough_balance() { let (mut starknet, account_class_hash) = setup(); let tx = test_deploy_account_transaction_v3(account_class_hash, 0, 4000, 0, 0); - match starknet.add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) { + match starknet + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) + .await + { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientAccountBalance, )) => {} @@ -198,11 +206,14 @@ mod tests { .unwrap(); } - #[test] - fn deploy_account_transaction_v3_should_return_an_error_if_insufficient_l1_gas_bounds() { + #[tokio::test(flavor = "multi_thread")] + async fn deploy_account_transaction_v3_should_return_an_error_if_insufficient_l1_gas_bounds() { let (mut starknet, account_class_hash) = setup(); let tx = test_deploy_account_transaction_v3(account_class_hash, 0, 1, 0, 0); - match starknet.add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) { + match starknet + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) + .await + { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -210,11 +221,15 @@ mod tests { } } - #[test] - fn deploy_account_transaction_v3_should_return_an_error_if_only_l1_and_l2_gas_specified() { + #[tokio::test(flavor = "multi_thread")] + async fn deploy_account_transaction_v3_should_return_an_error_if_only_l1_and_l2_gas_specified() + { let (mut starknet, account_class_hash) = setup(); let tx = test_deploy_account_transaction_v3(account_class_hash, 0, 1000, 0, 1e7 as u64); - match starknet.add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) { + match starknet + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) + .await + { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -222,11 +237,14 @@ mod tests { } } - #[test] - fn deploy_account_transaction_v3_should_return_an_error_if_insufficient_l2_gas_bounds() { + #[tokio::test(flavor = "multi_thread")] + async fn deploy_account_transaction_v3_should_return_an_error_if_insufficient_l2_gas_bounds() { let (mut starknet, account_class_hash) = setup(); let tx = test_deploy_account_transaction_v3(account_class_hash, 0, 1000, 1000, 1); - match starknet.add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) { + match starknet + .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(tx)) + .await + { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -234,7 +252,12 @@ mod tests { } } - fn successfully_deploy_acc_v3(init_balance: u64, l1_gas: u64, l1_data_gas: u64, l2_gas: u64) { + async fn successfully_deploy_acc_v3( + init_balance: u64, + l1_gas: u64, + l1_data_gas: u64, + l2_gas: u64, + ) { let (mut starknet, account_class_hash) = setup(); let transaction = test_deploy_account_transaction_v3(account_class_hash, 0, l1_gas, l1_data_gas, l2_gas); @@ -249,6 +272,7 @@ mod tests { let (txn_hash, _) = starknet .add_deploy_account_transaction(BroadcastedDeployAccountTransaction::V3(transaction)) + .await .unwrap(); let txn = starknet.transactions.get_by_hash_mut(&txn_hash).unwrap(); @@ -265,14 +289,14 @@ mod tests { assert!(account_balance_before_deployment > account_balance_after_deployment); } - #[test] - fn test_deploy_account_transaction_v3_successful_execution_if_only_l1_gas() { - successfully_deploy_acc_v3(1e6 as u64, 4000, 0, 0); + #[tokio::test(flavor = "multi_thread")] + async fn test_deploy_account_transaction_v3_successful_execution_if_only_l1_gas() { + successfully_deploy_acc_v3(1e6 as u64, 4000, 0, 0).await; } - #[test] - fn test_deploy_account_transaction_v3_successful_execution_if_all_gas_bounds() { - successfully_deploy_acc_v3(1e8 as u64, 0, 1000, 1e7 as u64); + #[tokio::test(flavor = "multi_thread")] + async fn test_deploy_account_transaction_v3_successful_execution_if_all_gas_bounds() { + successfully_deploy_acc_v3(1e8 as u64, 0, 1000, 1e7 as u64).await; } /// Initializes starknet with erc20 contracts, 1 declared contract class. Gas price is set to 1 diff --git a/crates/starknet-devnet-core/src/starknet/add_invoke_transaction.rs b/crates/starknet-devnet-core/src/starknet/add_invoke_transaction.rs index 86ba61025..1394e0699 100644 --- a/crates/starknet-devnet-core/src/starknet/add_invoke_transaction.rs +++ b/crates/starknet-devnet-core/src/starknet/add_invoke_transaction.rs @@ -10,7 +10,7 @@ use starknet_types::rpc::transactions::{ use super::Starknet; use crate::error::{DevnetResult, Error, TransactionValidationError}; -pub fn add_invoke_transaction( +pub async fn add_invoke_transaction( starknet: &mut Starknet, broadcasted_invoke_transaction: BroadcastedInvokeTransaction, ) -> DevnetResult { @@ -63,7 +63,7 @@ pub fn add_invoke_transaction( let transaction = TransactionWithHash::new(transaction_hash, invoke_transaction); - starknet.handle_accepted_transaction(transaction, execution_info)?; + starknet.handle_accepted_transaction(transaction, execution_info).await?; Ok(transaction_hash) } @@ -104,8 +104,8 @@ mod tests { resource_bounds_with_price_1, test_invoke_transaction_v3, }; - #[test] - fn invoke_transaction_v3_with_only_query_version_should_return_an_error() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v3_with_only_query_version_should_return_an_error() { let mut invoke_transaction = test_invoke_transaction_v3( dummy_contract_address(), dummy_contract_address(), @@ -118,7 +118,7 @@ mod tests { let BroadcastedInvokeTransaction::V3(ref mut tx_v3) = invoke_transaction; tx_v3.common.version = Felt::THREE + QUERY_VERSION_OFFSET; - let result = Starknet::default().add_invoke_transaction(invoke_transaction); + let result = Starknet::default().add_invoke_transaction(invoke_transaction).await; match result { Err(crate::error::Error::UnsupportedAction { msg }) => { assert_eq!(msg, "only-query transactions are not supported") @@ -133,8 +133,8 @@ mod tests { parts[0] } - #[test] - fn invoke_transaction_v3_successful_execution_with_only_l1_gas() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v3_successful_execution_with_only_l1_gas() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); let account_address = account.get_address(); let initial_balance = @@ -149,7 +149,7 @@ mod tests { resource_bounds_with_price_1(biguint_to_u64(&initial_balance), 0, 0), ); - let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); @@ -161,8 +161,8 @@ mod tests { ); } - #[test] - fn invoke_transaction_v3_successful_execution_with_all_three_gas_bounds() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v3_successful_execution_with_all_three_gas_bounds() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); let account_address = account.get_address(); let initial_balance = @@ -180,7 +180,7 @@ mod tests { resource_bounds_with_price_1(gas_amount, gas_amount, gas_amount), ); - let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); @@ -192,8 +192,8 @@ mod tests { ); } - #[test] - fn invoke_transaction_v3_with_invalid_gas_amounts() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v3_with_invalid_gas_amounts() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); let account_address = account.get_address(); @@ -218,7 +218,7 @@ mod tests { resource_bounds_with_price_1(l1_gas, l1_data_gas, l2_gas), ); - match starknet.add_invoke_transaction(invoke_transaction) { + match starknet.add_invoke_transaction(invoke_transaction).await { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -229,8 +229,8 @@ mod tests { } } - #[test] - fn invoke_transaction_v1_successfully_changes_storage() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v1_successfully_changes_storage() { let ( mut starknet, account, @@ -254,7 +254,7 @@ mod tests { ); // invoke transaction - let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); assert_eq!(retrieved_tx.finality_status, TransactionFinalityStatus::AcceptedOnL2); assert_eq!(retrieved_tx.execution_result.status(), TransactionExecutionStatus::Succeeded); @@ -275,7 +275,7 @@ mod tests { ); // invoke transaction again - let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(invoke_transaction).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); assert_eq!(retrieved_tx.execution_result.status(), TransactionExecutionStatus::Succeeded); @@ -286,8 +286,8 @@ mod tests { ); } - #[test] - fn invoke_transaction_v3_with_zero_gas_bounds_should_return_error() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_transaction_v3_with_zero_gas_bounds_should_return_error() { let nonce = 0; let tx = test_invoke_transaction_v3( dummy_contract_address(), @@ -298,7 +298,7 @@ mod tests { resource_bounds_with_price_1(0, 0, 0), ); - match Starknet::default().add_invoke_transaction(tx) { + match Starknet::default().add_invoke_transaction(tx).await { Err(Error::TransactionValidationError( TransactionValidationError::InsufficientResourcesForValidate, )) => {} @@ -306,23 +306,25 @@ mod tests { } } - #[test] - fn invoke_tx_should_return_error_if_nonce_repeated_in_block_on_demand_mode() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_tx_should_return_error_if_nonce_repeated_in_block_on_demand_mode() { invoke_tx_should_fail_if_nonce_repeated( BlockGenerationOn::Demand, TransactionFinalityStatus::PreConfirmed, - ); + ) + .await; } - #[test] - fn invoke_tx_should_return_error_if_nonce_repeated_in_block_on_tx_mode() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_tx_should_return_error_if_nonce_repeated_in_block_on_tx_mode() { invoke_tx_should_fail_if_nonce_repeated( BlockGenerationOn::Transaction, TransactionFinalityStatus::AcceptedOnL2, - ); + ) + .await; } - fn invoke_tx_should_fail_if_nonce_repeated( + async fn invoke_tx_should_fail_if_nonce_repeated( block_generation_mode: BlockGenerationOn, expected_finality_status: TransactionFinalityStatus, ) { @@ -342,7 +344,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, l2_gas), ); - let transaction_hash = starknet.add_invoke_transaction(tx.clone()).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(tx.clone()).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); assert_eq!(retrieved_tx.finality_status, expected_finality_status); assert_eq!(retrieved_tx.execution_result.status(), TransactionExecutionStatus::Succeeded); @@ -358,7 +360,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, l2_gas * 2), ); - match starknet.add_invoke_transaction(tx) { + match starknet.add_invoke_transaction(tx).await { Err(Error::TransactionValidationError( TransactionValidationError::InvalidTransactionNonce { address, @@ -373,8 +375,8 @@ mod tests { } } - #[test] - fn nonce_should_be_incremented_if_invoke_reverted() { + #[tokio::test(flavor = "multi_thread")] + async fn nonce_should_be_incremented_if_invoke_reverted() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); let account_address = account.get_address().into(); @@ -397,7 +399,7 @@ mod tests { resource_bounds_with_price_1(0, 128, 520_000), ); - let transaction_hash = starknet.add_invoke_transaction(tx).unwrap(); + let transaction_hash = starknet.add_invoke_transaction(tx).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); assert_eq!(retrieved_tx.finality_status, TransactionFinalityStatus::AcceptedOnL2); assert_eq!(retrieved_tx.execution_result.status(), TransactionExecutionStatus::Reverted); @@ -407,8 +409,8 @@ mod tests { assert_eq!(nonce_after_reverted, Nonce(Felt::ONE)); } - #[test] - fn invoke_tx_should_fail_if_nonce_higher_than_expected_in_block_on_tx_mode() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_tx_should_fail_if_nonce_higher_than_expected_in_block_on_tx_mode() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); starknet.config.block_generation_on = BlockGenerationOn::Transaction; @@ -422,7 +424,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e6 as u64), ); - match starknet.add_invoke_transaction(tx) { + match starknet.add_invoke_transaction(tx).await { Err(Error::TransactionValidationError( TransactionValidationError::InvalidTransactionNonce { address, @@ -437,8 +439,8 @@ mod tests { } } - #[test] - fn invoke_tx_should_pass_if_nonce_higher_than_expected_in_block_on_demand_mode() { + #[tokio::test(flavor = "multi_thread")] + async fn invoke_tx_should_pass_if_nonce_higher_than_expected_in_block_on_demand_mode() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); starknet.config.block_generation_on = BlockGenerationOn::Demand; @@ -452,15 +454,15 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e6 as u64), ); - let tx_hash = starknet.add_invoke_transaction(tx).unwrap(); + let tx_hash = starknet.add_invoke_transaction(tx).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&tx_hash).unwrap(); assert_eq!(retrieved_tx.finality_status, TransactionFinalityStatus::PreConfirmed); assert_eq!(retrieved_tx.execution_result.status(), TransactionExecutionStatus::Succeeded); assert_eq!(retrieved_tx.block_number, Some(BlockNumber(0))); } - #[test] - fn txs_with_successive_nonces_are_acceptable_in_the_same_block() { + #[tokio::test(flavor = "multi_thread")] + async fn txs_with_successive_nonces_are_acceptable_in_the_same_block() { let (mut starknet, account, contract_address, increase_balance_selector, _) = setup(); starknet.config.block_generation_on = BlockGenerationOn::Demand; @@ -474,7 +476,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e6 as u64), ); - let tx_hash = starknet.add_invoke_transaction(tx).unwrap(); + let tx_hash = starknet.add_invoke_transaction(tx).await.unwrap(); let retrieved_tx = starknet.transactions.get_by_hash_mut(&tx_hash).unwrap(); assert_eq!(retrieved_tx.finality_status, TransactionFinalityStatus::PreConfirmed); assert_eq!( diff --git a/crates/starknet-devnet-core/src/starknet/add_l1_handler_transaction.rs b/crates/starknet-devnet-core/src/starknet/add_l1_handler_transaction.rs index 3f694ed04..cfa30cff6 100644 --- a/crates/starknet-devnet-core/src/starknet/add_l1_handler_transaction.rs +++ b/crates/starknet-devnet-core/src/starknet/add_l1_handler_transaction.rs @@ -8,7 +8,7 @@ use tracing::trace; use super::Starknet; use crate::error::DevnetResult; -pub fn add_l1_handler_transaction( +pub async fn add_l1_handler_transaction( starknet: &mut Starknet, transaction: L1HandlerTransaction, ) -> DevnetResult { @@ -21,10 +21,12 @@ pub fn add_l1_handler_transaction( blockifier::transaction::transaction_execution::Transaction::L1Handler(executable_tx) .execute(&mut starknet.pre_confirmed_state.state, &starknet.block_context)?; - starknet.handle_accepted_transaction( - TransactionWithHash::new(transaction_hash, Transaction::L1Handler(transaction.clone())), - execution_info, - )?; + starknet + .handle_accepted_transaction( + TransactionWithHash::new(transaction_hash, Transaction::L1Handler(transaction.clone())), + execution_info, + ) + .await?; // If L1 tx hash present, store the generated L2 tx hash in its messaging entry. // Not done as part of `handle_transaction_result` as it is specific to this tx type. @@ -70,8 +72,8 @@ mod tests { use crate::utils::exported_test_utils::dummy_cairo_l1l2_contract; use crate::utils::test_utils::{cairo_0_account_without_validations, dummy_key_pair}; - #[test] - fn l1_handler_transaction_hash_computation() { + #[tokio::test(flavor = "multi_thread")] + async fn l1_handler_transaction_hash_computation() { let from_address = "0x000000000000000000000000be3C44c09bc1a3566F3e1CA12e5AbA0fA4Ca72Be"; let to_address = "0x039dc79e64f4bb3289240f88e0bae7d21735bef0d1a51b2bf3c4730cb16983e1"; let selector = "0x02f15cff7b0eed8b9beb162696cf4e3e0e35fa7032af69cd1b7d2ac67a13f40f"; @@ -101,8 +103,8 @@ mod tests { assert_eq!(l1_handler_transaction_hash, transaction_hash); } - #[test] - fn l1_handler_transaction_successful_execution() { + #[tokio::test(flavor = "multi_thread")] + async fn l1_handler_transaction_successful_execution() { let (mut starknet, _account_address, contract_address, deposit_selector, _) = setup(); let transaction = get_l1_handler_tx( @@ -112,7 +114,7 @@ mod tests { vec![Felt::from(11), Felt::from(9999)], ); - let transaction_hash = starknet.add_l1_handler_transaction(transaction).unwrap(); + let transaction_hash = starknet.add_l1_handler_transaction(transaction).await.unwrap(); let state_transaction = starknet.transactions.get_by_hash_mut(&transaction_hash).unwrap(); @@ -123,8 +125,8 @@ mod tests { ); } - #[test] - fn l1_handler_transaction_not_l1_handler_entrypoint() { + #[tokio::test(flavor = "multi_thread")] + async fn l1_handler_transaction_not_l1_handler_entrypoint() { let (mut starknet, _account_address, contract_address, _, withdraw_selector) = setup(); let tx = get_l1_handler_tx( @@ -134,7 +136,7 @@ mod tests { vec![Felt::from(11), Felt::from(9999)], ); - let tx_hash = starknet.add_l1_handler_transaction(tx).unwrap(); + let tx_hash = starknet.add_l1_handler_transaction(tx).await.unwrap(); let trace = match starknet.get_transaction_trace_by_hash(tx_hash) { Ok(TransactionTrace::L1Handler(trace)) => trace, diff --git a/crates/starknet-devnet-core/src/starknet/events.rs b/crates/starknet-devnet-core/src/starknet/events.rs index c370df277..086996a4a 100644 --- a/crates/starknet-devnet-core/src/starknet/events.rs +++ b/crates/starknet-devnet-core/src/starknet/events.rs @@ -156,8 +156,8 @@ mod tests { use crate::traits::HashIdentified; use crate::utils::test_utils::{dummy_contract_address, dummy_declare_tx_v3_with_hash}; - #[test] - fn filter_keys_with_empty_or_no_filter() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_keys_with_empty_or_no_filter() { let keys = vec![1u32]; // no filter assert!(check_if_filter_applies_for_event_keys(&None, &keys)); @@ -171,8 +171,8 @@ mod tests { assert!(check_if_filter_applies_for_event_keys(&Some(filter), &keys)); } - #[test] - fn filter_applies_to_single_key() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_applies_to_single_key() { // check for 1 key let keys = vec![1u32]; @@ -191,8 +191,8 @@ mod tests { assert!(check_if_filter_applies_for_event_keys(&Some(filter), &keys)); } - #[test] - fn filter_does_not_apply_to_single_key() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_does_not_apply_to_single_key() { let keys = vec![1u32]; // filter with 1 key, that is different from the keys and second one empty filter @@ -204,8 +204,8 @@ mod tests { assert!(!check_if_filter_applies_for_event_keys(&Some(filter), &keys)); } - #[test] - fn filter_applies_to_multiple_keys() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_applies_to_multiple_keys() { let keys = vec![3u32, 2u32]; // both filters apply to the keys, each filter is with 1 value @@ -229,8 +229,8 @@ mod tests { assert!(check_if_filter_applies_for_event_keys(&Some(filter), &keys)); } - #[test] - fn filter_does_not_apply_to_multiple_keys() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_does_not_apply_to_multiple_keys() { let keys = vec![3u32, 2u32]; // first filter applies to the keys, second filter does not @@ -246,8 +246,8 @@ mod tests { assert!(!check_if_filter_applies_for_event_keys(&Some(filter), &keys)); } - #[test] - fn filter_with_address_only() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_with_address_only() { let event = dummy_event(); // filter with address that is the same as the on in the event @@ -259,8 +259,8 @@ mod tests { assert!(!check_if_filter_applies_for_event(&Some(address), &None, &event)); } - #[test] - fn filter_with_keys_only() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_with_keys_only() { let event = dummy_event(); let keys_filter = vec![vec![Felt::ONE, Felt::THREE]]; @@ -270,8 +270,8 @@ mod tests { assert!(check_if_filter_applies_for_event(&None, &Some(keys_filter), &event)); } - #[test] - fn filter_with_address_and_keys() { + #[tokio::test(flavor = "multi_thread")] + async fn filter_with_address_and_keys() { let event = dummy_event(); // filter with address correct and filter keys correct @@ -295,9 +295,9 @@ mod tests { assert!(!check_if_filter_applies_for_event(&address, &Some(keys_filter), &event)); } - #[test] - fn pagination_for_latest_block_that_has_1_transaction_with_5_events() { - let starknet = setup(); + #[tokio::test(flavor = "multi_thread")] + async fn pagination_for_latest_block_that_has_1_transaction_with_5_events() { + let starknet = setup().await; // no pagination to the latest block events let (events, has_more) = get_events( @@ -349,9 +349,9 @@ mod tests { assert!(!has_more); } - #[test] - fn pagination_for_events_of_multiple_blocks() { - let starknet = setup(); + #[tokio::test(flavor = "multi_thread")] + async fn pagination_for_events_of_multiple_blocks() { + let starknet = setup().await; // returns all events from all blocks let (events, has_more) = @@ -382,9 +382,9 @@ mod tests { assert!(has_more); } - #[test] - fn check_correct_events_being_returned() { - let starknet = setup(); + #[tokio::test(flavor = "multi_thread")] + async fn check_correct_events_being_returned() { + let starknet = setup().await; // events with key 15 should be only 1 in the 5th transaction let (events, _) = get_events( @@ -428,10 +428,10 @@ mod tests { } } - fn setup() -> Starknet { + async fn setup() -> Starknet { // generate 5 transactions // each transaction should have events count equal to the order of the transaction - let mut starknet = Starknet::new(&StarknetConfig::default()).unwrap(); + let mut starknet = Starknet::new(&StarknetConfig::default()).await.unwrap(); let mut transaction = dummy_declare_tx_v3_with_hash(); @@ -443,7 +443,7 @@ mod tests { let transaction_hash = Felt::from(idx as u128 + 100); transaction = TransactionWithHash::new(transaction_hash, transaction.transaction); - starknet.handle_accepted_transaction(transaction.clone(), txn_info).unwrap(); + starknet.handle_accepted_transaction(transaction.clone(), txn_info).await.unwrap(); } assert_eq!( diff --git a/crates/starknet-devnet-core/src/starknet/get_class_impls.rs b/crates/starknet-devnet-core/src/starknet/get_class_impls.rs index 4842b1e48..6aa14eb84 100644 --- a/crates/starknet-devnet-core/src/starknet/get_class_impls.rs +++ b/crates/starknet-devnet-core/src/starknet/get_class_impls.rs @@ -87,13 +87,14 @@ mod tests { broadcasted_declare_tx_v3_of_dummy_class, resource_bounds_with_price_1, }; - #[test] - fn get_sierra_class() { + #[tokio::test(flavor = "multi_thread")] + async fn get_sierra_class() { let (mut starknet, account) = setup_starknet_with_no_signature_check_account_and_state_capacity( 1e18 as u128, StateArchiveCapacity::Full, - ); + ) + .await; let declare_txn = broadcasted_declare_tx_v3_of_dummy_class( account.account_address, @@ -104,6 +105,7 @@ mod tests { let expected: ContractClass = declare_txn.contract_class.clone().into(); let (_, class_hash) = starknet .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_txn))) + .await .unwrap(); let block_number = starknet.get_latest_block().unwrap().block_number(); @@ -113,13 +115,14 @@ mod tests { assert_eq!(contract_class, expected) } - #[test] - fn get_class_hash_at_generated_accounts() { + #[tokio::test(flavor = "multi_thread")] + async fn get_class_hash_at_generated_accounts() { let (mut starknet, account) = setup_starknet_with_no_signature_check_account_and_state_capacity( 1e8 as u128, StateArchiveCapacity::Full, - ); + ) + .await; let block_number = starknet.get_latest_block().unwrap().block_number(); let block_id = BlockId::Number(block_number.0); @@ -129,17 +132,18 @@ mod tests { assert_eq!(class_hash, expected); } - #[test] - fn get_class_hash_at_generated_accounts_without_state_archive() { + #[tokio::test(flavor = "multi_thread")] + async fn get_class_hash_at_generated_accounts_without_state_archive() { let (mut starknet, account) = setup_starknet_with_no_signature_check_account_and_state_capacity( 1e8 as u128, StateArchiveCapacity::None, - ); + ) + .await; let block_number = starknet.get_latest_block().unwrap().block_number(); let block_id = BlockId::Number(block_number.0); - starknet.create_block(); // makes the queried block non-latest (and unsupported) + starknet.create_block().await; // makes the queried block non-latest (and unsupported) let class_hash = starknet.get_class_hash_at(&block_id, account.account_address); match class_hash.err().unwrap() { @@ -148,13 +152,14 @@ mod tests { } } - #[test] - fn get_class_at_generated_accounts() { + #[tokio::test(flavor = "multi_thread")] + async fn get_class_at_generated_accounts() { let (mut starknet, account) = setup_starknet_with_no_signature_check_account_and_state_capacity( 1e8 as u128, StateArchiveCapacity::Full, - ); + ) + .await; let block_number = starknet.get_latest_block().unwrap().block_number(); let block_id = BlockId::Number(block_number.0); @@ -163,13 +168,14 @@ mod tests { assert_eq!(contract_class, account.contract_class); } - #[test] - fn attempt_getting_class_from_block_before_declaration() { + #[tokio::test(flavor = "multi_thread")] + async fn attempt_getting_class_from_block_before_declaration() { let (mut starknet, account) = setup_starknet_with_no_signature_check_account_and_state_capacity( 1e8 as u128, StateArchiveCapacity::Full, - ); + ) + .await; let block_number = starknet.get_latest_block().unwrap().block_number(); // class not present before the latest block diff --git a/crates/starknet-devnet-core/src/starknet/mod.rs b/crates/starknet-devnet-core/src/starknet/mod.rs index 1a8994d4f..c6361e5bd 100644 --- a/crates/starknet-devnet-core/src/starknet/mod.rs +++ b/crates/starknet-devnet-core/src/starknet/mod.rs @@ -155,7 +155,7 @@ impl Default for Starknet { } impl Starknet { - pub fn new(config: &StarknetConfig) -> DevnetResult { + pub async fn new(config: &StarknetConfig) -> DevnetResult { let defaulter = StarknetDefaulter::new(config.fork_config.clone()); let rpc_contract_classes = Arc::new(RwLock::new(CommittedClassStorage::default())); let mut state = StarknetState::new(defaulter, rpc_contract_classes.clone()); @@ -294,7 +294,7 @@ impl Starknet { if let Some(start_time) = config.start_time { this.set_next_block_timestamp(start_time); }; - this.create_block(); + this.create_block().await; Ok(this) } @@ -303,11 +303,11 @@ impl Starknet { &mut self.pre_confirmed_state } - pub fn restart(&mut self, restart_l1_to_l2_messaging: bool) -> DevnetResult<()> { + pub async fn restart(&mut self, restart_l1_to_l2_messaging: bool) -> DevnetResult<()> { let new_messaging_ethereum = if restart_l1_to_l2_messaging { None } else { self.messaging.ethereum.clone() }; - *self = Starknet::new(&self.config)?; + *self = Starknet::new(&self.config).await?; self.messaging.ethereum = new_messaging_ethereum; info!("Starknet Devnet restarted"); @@ -323,6 +323,31 @@ impl Starknet { pub(crate) fn generate_pre_confirmed_block(&mut self) { Self::advance_block_context_block_number(&mut self.block_context); + // Write old block hash to the block hash contract in state so that + // the blockifier can look it up during proof_facts validation and + // get_block_hash syscall. + let next_block_number = self.block_context.block_info().block_number; + let old_block_number_and_hash = next_block_number + .0 + .checked_sub(blockifier::abi::constants::STORED_BLOCK_HASH_BUFFER) + .and_then(|old_num| { + let old_block_number = BlockNumber(old_num); + let old_block_hash = self.blocks.num_to_hash.get(&old_block_number)?; + Some(starknet_api::block::BlockHashAndNumber { + number: old_block_number, + hash: starknet_api::block::BlockHash(*old_block_hash), + }) + }); + + if let Err(e) = blockifier::blockifier::block::pre_process_block( + &mut self.pre_confirmed_state.state, + old_block_number_and_hash, + next_block_number, + &get_versioned_constants().os_constants, + ) { + tracing::error!("Failed to pre-process block: {e}"); + } + Self::set_block_context_gas(&mut self.block_context, &self.next_block_gas); // Pre_confirmed block header gas data needs to be set @@ -364,7 +389,7 @@ impl Starknet { /// Transfer data from pre_confirmed block into new block and save it to blocks collection. /// Generates new pre_confirmed block. Same for pre_confirmed state. Returns the new block hash. - pub(crate) fn generate_new_block_and_state(&mut self) -> Felt { + pub(crate) async fn generate_new_block_and_state(&mut self) -> Felt { let timer = std::time::Instant::now(); let mut new_block = self.pre_confirmed_block().clone(); @@ -432,15 +457,17 @@ impl Starknet { .map(|tx| tx.into()) .collect(); - let thin_state_diff = self.pre_confirmed_state_diff.clone().into(); + let thin_state_diff: starknet_api::state::ThinStateDiff = + self.pre_confirmed_state_diff.clone().into(); if !self.config.lite_mode { let commitments = calculate_block_commitments( &transaction_data, - &thin_state_diff, + thin_state_diff.clone(), l1_da_mode, &starknet_version, - ); + ) + .await; new_block.set_commitments(commitments); } @@ -486,7 +513,7 @@ impl Starknet { /// Handles succeeded and reverted transactions. The tx is stored and potentially dumped. A new /// block is generated in block-generation-on-transaction mode. - pub(crate) fn handle_accepted_transaction( + pub(crate) async fn handle_accepted_transaction( &mut self, transaction: TransactionWithHash, tx_info: TransactionExecutionInfo, @@ -521,7 +548,7 @@ impl Starknet { // create new block from pre_confirmed one, only in block-generation-on-transaction mode if !self.config.uses_pre_confirmed_block() { - self.generate_new_block_and_state(); + self.generate_new_block_and_state().await; } Ok(()) @@ -544,6 +571,7 @@ impl Starknet { let block_info = BlockInfo { block_number: BlockNumber(block_number), block_timestamp: BlockTimestamp(0), + starknet_version: Default::default(), sequencer_address: starknet_api::contract_address!("0x1000"), gas_prices: GasPrices { eth_gas_prices: GasPriceVector { @@ -828,11 +856,11 @@ impl Starknet { estimations::estimate_message_fee(self, block_id, message) } - pub fn add_declare_transaction( + pub async fn add_declare_transaction( &mut self, declare_transaction: BroadcastedDeclareTransaction, ) -> DevnetResult<(TransactionHash, ClassHash)> { - add_declare_transaction::add_declare_transaction(self, declare_transaction) + add_declare_transaction::add_declare_transaction(self, declare_transaction).await } /// returning the chain id as object @@ -840,7 +868,7 @@ impl Starknet { self.config.chain_id } - pub fn add_deploy_account_transaction( + pub async fn add_deploy_account_transaction( &mut self, deploy_account_transaction: BroadcastedDeployAccountTransaction, ) -> DevnetResult<(TransactionHash, ContractAddress)> { @@ -848,20 +876,21 @@ impl Starknet { self, deploy_account_transaction, ) + .await } - pub fn add_invoke_transaction( + pub async fn add_invoke_transaction( &mut self, invoke_transaction: BroadcastedInvokeTransaction, ) -> DevnetResult { - add_invoke_transaction::add_invoke_transaction(self, invoke_transaction) + add_invoke_transaction::add_invoke_transaction(self, invoke_transaction).await } - pub fn add_l1_handler_transaction( + pub async fn add_l1_handler_transaction( &mut self, l1_handler_transaction: L1HandlerTransaction, ) -> DevnetResult { - add_l1_handler_transaction::add_l1_handler_transaction(self, l1_handler_transaction) + add_l1_handler_transaction::add_l1_handler_transaction(self, l1_handler_transaction).await } fn minting_calldata( @@ -921,6 +950,8 @@ impl Starknet { fee_data_availability_mode: DataAvailabilityMode::L1, }, account_deployment_data: vec![], + proof_facts: vec![], + proof: String::new(), }; // generate signature by signing the tx hash @@ -940,6 +971,7 @@ impl Starknet { self, BroadcastedInvokeTransaction::V3(invoke_tx), ) + .await } pub fn block_state_update(&self, block_id: &CustomBlockId) -> DevnetResult { @@ -961,7 +993,7 @@ impl Starknet { } } - pub fn set_next_block_gas( + pub async fn set_next_block_gas( &mut self, gas_prices: GasModificationRequest, ) -> DevnetResult { @@ -970,13 +1002,13 @@ impl Starknet { // If generate_block is true, generate new block, for now custom dump_event is None but in // future it will change to GasSetEvent with self.next_block_gas data if let Some(true) = gas_prices.generate_block { - self.create_block() + self.create_block().await } Ok(self.next_block_gas.clone()) } - pub fn abort_blocks( + pub async fn abort_blocks( &mut self, mut starting_block_id: CustomBlockId, ) -> DevnetResult> { @@ -986,7 +1018,7 @@ impl Starknet { } if let CustomBlockId::Tag(CustomBlockTag::PreConfirmed) = starting_block_id { - self.create_block(); + self.create_block().await; starting_block_id = CustomBlockId::Tag(CustomBlockTag::Latest); } @@ -1154,6 +1186,58 @@ impl Starknet { Ok(state.get_storage_at(contract_address.into(), storage_key.into())?) } + pub fn find_last_storage_update_block( + &self, + block_id: &CustomBlockId, + contract_address: ContractAddress, + storage_key: PatriciaKey, + ) -> DevnetResult { + // For PreConfirmed: check pre_confirmed_state_diff first + if matches!(block_id, CustomBlockId::Tag(CustomBlockTag::PreConfirmed)) { + if let Some(updates) = + self.pre_confirmed_state_diff.storage_updates.get(&contract_address) + { + if updates.contains_key(&storage_key) { + return Ok(self.blocks.pre_confirmed_block.block_number().0); + } + } + } + + // Determine upper bound block number + let upper = match block_id { + CustomBlockId::Tag( + CustomBlockTag::Latest | CustomBlockTag::PreConfirmed, + ) => self + .blocks + .last_block_hash + .and_then(|h| self.blocks.hash_to_block.get(&h)) + .map(|b| b.block_number()), + _ => self.get_block(block_id).ok().map(|b| b.block_number()), + }; + + let Some(upper) = upper else { + return Ok(0); + }; + + // Scan blocks in reverse order + for (block_num, block_hash) in self.blocks.num_to_hash.iter().rev() { + if *block_num > upper { + continue; + } + if let Some(diff) = self.blocks.hash_to_state_diff.get(block_hash) { + if diff + .storage_updates + .get(&contract_address) + .is_some_and(|u| u.contains_key(&storage_key)) + { + return Ok(block_num.0); + } + } + } + + Ok(0) + } + pub fn get_block(&self, block_id: &CustomBlockId) -> DevnetResult<&StarknetBlock> { self.blocks.get_by_block_id(block_id).ok_or(Error::NoBlock) } @@ -1470,28 +1554,28 @@ impl Starknet { } /// create new block from pre_confirmed one - pub fn create_block(&mut self) { - self.generate_new_block_and_state(); + pub async fn create_block(&mut self) { + self.generate_new_block_and_state().await; } // Set time and optionally create a new block - pub fn set_time(&mut self, timestamp: u64, create_block: bool) { + pub async fn set_time(&mut self, timestamp: u64, create_block: bool) { self.set_block_timestamp_shift( timestamp as i64 - Starknet::get_unix_timestamp_as_seconds() as i64, ); self.set_next_block_timestamp(timestamp); if create_block { - self.create_block(); + self.create_block().await; } } // Set timestamp shift and create empty block - pub fn increase_time(&mut self, time_shift: u64) { + pub async fn increase_time(&mut self, time_shift: u64) { self.set_block_timestamp_shift( self.pre_confirmed_block_timestamp_shift + time_shift as i64, ); - self.create_block() + self.create_block().await } // Set timestamp shift for next blocks @@ -1671,7 +1755,7 @@ mod tests { /// Initializes starknet with 1 account that doesn't perform actual tx signature validation. /// Allows specifying the state archive capacity. - pub(crate) fn setup_starknet_with_no_signature_check_account_and_state_capacity( + pub(crate) async fn setup_starknet_with_no_signature_check_account_and_state_capacity( acc_balance: u128, state_archive: StateArchiveCapacity, ) -> (Starknet, Account) { @@ -1685,6 +1769,7 @@ mod tests { state_archive, ..Default::default() }) + .await .unwrap(); let account_class = cairo_0_account_without_validations(); @@ -1701,26 +1786,27 @@ mod tests { acc.deploy(&mut starknet.pre_confirmed_state).unwrap(); starknet.commit_diff().unwrap(); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; starknet.restart_pre_confirmed_block(); (starknet, acc) } /// Initializes starknet with 1 account that doesn't perform actual tx signature validation. - pub(crate) fn setup_starknet_with_no_signature_check_account( + pub(crate) async fn setup_starknet_with_no_signature_check_account( acc_balance: u128, ) -> (Starknet, Account) { setup_starknet_with_no_signature_check_account_and_state_capacity( acc_balance, StateArchiveCapacity::None, ) + .await } - #[test] - fn correct_initial_state_with_test_config() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_initial_state_with_test_config() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let predeployed_accounts = starknet.predeployed_accounts.get_accounts(); let expected_balance = config.predeployed_accounts_initial_balance; @@ -1735,8 +1821,8 @@ mod tests { } } - #[test] - fn correct_block_context_creation() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_block_context_creation() { let fee_token_address = ContractAddress::new(felt_from_prefixed_hex("0xAA").unwrap()).unwrap(); let block_ctx = Starknet::init_block_context( @@ -1760,10 +1846,10 @@ mod tests { ); } - #[test] - fn pre_confirmed_block_is_correct() { + #[tokio::test(flavor = "multi_thread")] + async fn pre_confirmed_block_is_correct() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let initial_block_number = starknet.block_context.block_info().block_number; starknet.generate_pre_confirmed_block(); @@ -1773,10 +1859,10 @@ mod tests { ); } - #[test] - fn correct_new_block_creation() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_new_block_creation() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let tx = dummy_declare_tx_v3_with_hash(); @@ -1788,7 +1874,7 @@ mod tests { // blocks collection should not be empty assert_eq!(starknet.blocks.hash_to_block.len(), 1); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; // blocks collection should not be empty assert_eq!(starknet.blocks.hash_to_block.len(), 2); @@ -1800,10 +1886,10 @@ mod tests { assert_eq!(*added_block.get_transactions().first().unwrap(), *tx.get_transaction_hash()); } - #[test] - fn successful_emptying_of_pre_confirmed_block() { + #[tokio::test(flavor = "multi_thread")] + async fn successful_emptying_of_pre_confirmed_block() { let config = StarknetConfig { start_time: Some(0), ..Default::default() }; - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let initial_block_number = starknet.block_context.block_info().block_number; let initial_gas_price_wei = @@ -1845,8 +1931,8 @@ mod tests { assert_eq!(header.sequencer.0, initial_sequencer); } - #[test] - fn correct_block_context_update() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_block_context_update() { let mut block_ctx = Starknet::init_block_context( nonzero!(1u128), nonzero!(1u128), @@ -1865,30 +1951,30 @@ mod tests { assert_eq!(block_ctx.block_info().block_number, initial_block_number.next().unwrap()); } - #[test] - fn getting_state_of_latest_block() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_state_of_latest_block() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); starknet .get_mut_state_at(&CustomBlockId::Tag(CustomBlockTag::Latest)) .expect("Should be OK"); } - #[test] - fn getting_state_of_pre_confirmed_block() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_state_of_pre_confirmed_block() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); starknet .get_mut_state_at(&CustomBlockId::Tag(CustomBlockTag::PreConfirmed)) .expect("Should be OK"); } - #[test] - fn getting_state_at_block_by_nonexistent_hash_with_full_state_archive() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_state_at_block_by_nonexistent_hash_with_full_state_archive() { let config = StarknetConfig { state_archive: StateArchiveCapacity::Full, ..Default::default() }; - let mut starknet = Starknet::new(&config).unwrap(); - starknet.generate_new_block_and_state(); + let mut starknet = Starknet::new(&config).await.unwrap(); + starknet.generate_new_block_and_state().await; match starknet.get_mut_state_at(&CustomBlockId::Hash(Felt::ZERO)) { Err(Error::NoBlock) => (), @@ -1896,13 +1982,13 @@ mod tests { } } - #[test] - fn getting_nonexistent_state_at_block_by_number_with_full_state_archive() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_nonexistent_state_at_block_by_number_with_full_state_archive() { let config = StarknetConfig { state_archive: StateArchiveCapacity::Full, ..Default::default() }; - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let genesis_block_hash = starknet.get_latest_block().unwrap(); - let block_hash = starknet.generate_new_block_and_state(); + let block_hash = starknet.generate_new_block_and_state().await; starknet.blocks.hash_to_state.remove(&block_hash); starknet.blocks.last_block_hash = Some(genesis_block_hash.block_hash()); @@ -1912,11 +1998,11 @@ mod tests { } } - #[test] - fn getting_state_at_without_state_archive() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_state_at_without_state_archive() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); - starknet.generate_new_block_and_state(); + let mut starknet = Starknet::new(&config).await.unwrap(); + starknet.generate_new_block_and_state().await; match starknet.get_mut_state_at(&CustomBlockId::Number(0)) { Err(Error::NoStateAtBlock { .. }) => (), @@ -1924,10 +2010,10 @@ mod tests { } } - #[test] - fn assert_expected_predeclared_account_classes() { + #[tokio::test(flavor = "multi_thread")] + async fn assert_expected_predeclared_account_classes() { let config = StarknetConfig { predeclare_argent: true, ..Default::default() }; - let starknet = Starknet::new(&config).unwrap(); + let starknet = Starknet::new(&config).await.unwrap(); for class_hash in [ ARGENT_CONTRACT_CLASS_HASH, ARGENT_MULTISIG_CONTRACT_CLASS_HASH, @@ -1941,10 +2027,10 @@ mod tests { } } - #[test] - fn calling_method_of_undeployed_contract() { + #[tokio::test(flavor = "multi_thread")] + async fn calling_method_of_undeployed_contract() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let undeployed_address = Felt::from_hex_unchecked("0x1234"); let entry_point_selector = get_selector_from_name("balanceOf").unwrap(); @@ -1960,10 +2046,10 @@ mod tests { } } - #[test] - fn calling_nonexistent_contract_method() { + #[tokio::test(flavor = "multi_thread")] + async fn calling_nonexistent_contract_method() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let predeployed_account = &starknet.predeployed_accounts.get_accounts()[0]; let entry_point_selector = get_selector_from_name("nonExistentMethod").unwrap(); @@ -1993,10 +2079,10 @@ mod tests { ) } - #[test] - fn getting_balance_of_predeployed_contract() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_balance_of_predeployed_contract() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let predeployed_account = &starknet.predeployed_accounts.get_accounts()[0].clone(); let result = get_balance_at(&mut starknet, predeployed_account.account_address).unwrap(); @@ -2005,10 +2091,10 @@ mod tests { assert_eq!(result, balance_uint256); } - #[test] - fn getting_balance_of_undeployed_contract() { + #[tokio::test(flavor = "multi_thread")] + async fn getting_balance_of_undeployed_contract() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); let undeployed_address = ContractAddress::new(Felt::from_hex_unchecked("0x1234")).unwrap(); let result = get_balance_at(&mut starknet, undeployed_address).unwrap(); @@ -2017,10 +2103,10 @@ mod tests { assert_eq!(result, expected_balance_uint256); } - #[test] - fn correct_latest_block() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_latest_block() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); // last added block number -> 0 let added_block = @@ -2030,7 +2116,7 @@ mod tests { assert_eq!(block_number.0, added_block.header.block_header_without_hash.block_number.0); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; let added_block2 = starknet.blocks.get_by_hash(starknet.blocks.last_block_hash.unwrap()).unwrap(); @@ -2039,25 +2125,26 @@ mod tests { assert_eq!(block_number2.0, added_block2.header.block_header_without_hash.block_number.0); } - #[test] - fn returns_chain_id() { + #[tokio::test(flavor = "multi_thread")] + async fn returns_chain_id() { let config = StarknetConfig::default(); - let starknet = Starknet::new(&config).unwrap(); + let starknet = Starknet::new(&config).await.unwrap(); let chain_id = starknet.chain_id(); assert_eq!(chain_id.to_string(), DEVNET_DEFAULT_CHAIN_ID.to_string()); } - #[test] - fn correct_state_at_specific_block() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_state_at_specific_block() { let mut starknet = Starknet::new(&StarknetConfig { state_archive: StateArchiveCapacity::Full, ..Default::default() }) + .await .expect("Could not start Devnet"); // generate initial block with empty state - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; // **generate second block** // add data to state @@ -2069,7 +2156,7 @@ mod tests { // generate new block and save the state starknet.commit_diff().unwrap(); - let second_block = starknet.generate_new_block_and_state(); + let second_block = starknet.generate_new_block_and_state().await; // **generate third block** // add data to state @@ -2081,7 +2168,7 @@ mod tests { // generate new block and save the state starknet.commit_diff().unwrap(); - let third_block = starknet.generate_new_block_and_state(); + let third_block = starknet.generate_new_block_and_state().await; // check modified state at block 1 and 2 to contain the correct value for the nonce let second_block_address_nonce = starknet @@ -2105,25 +2192,87 @@ mod tests { assert_eq!(third_block_expected_address_nonce, third_block_address_nonce.0); } - #[test] - fn gets_latest_block() { + #[tokio::test(flavor = "multi_thread")] + async fn gets_latest_block() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); - starknet.generate_new_block_and_state(); - starknet.generate_new_block_and_state(); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; + starknet.generate_new_block_and_state().await; + starknet.generate_new_block_and_state().await; let latest_block = starknet.get_latest_block(); assert_eq!(latest_block.unwrap().block_number(), BlockNumber(3)); } - #[test] - fn check_timestamp_of_newly_generated_block() { + #[tokio::test(flavor = "multi_thread")] + async fn block_hashes_written_to_block_hash_contract() { + use blockifier::abi::constants::STORED_BLOCK_HASH_BUFFER; + use starknet_api::state::StorageKey; + + let config = StarknetConfig::default(); + let mut starknet = Starknet::new(&config).await.unwrap(); + + let versioned_constants = crate::utils::get_versioned_constants(); + let block_hash_contract_address = + versioned_constants.os_constants.os_contract_addresses.block_hash_contract_address(); + + // Generate enough blocks to exceed STORED_BLOCK_HASH_BUFFER (10). + // Genesis block is 0, so we need to create blocks up to at least 10+1. + let total_blocks = STORED_BLOCK_HASH_BUFFER + 3; + for _ in 0..total_blocks { + starknet.generate_new_block_and_state().await; + } + + // Block 0 (genesis) should now have its hash stored in the block hash contract, + // because the current block number is >= STORED_BLOCK_HASH_BUFFER. + let genesis_hash = *starknet.blocks.num_to_hash.get(&BlockNumber(0)).unwrap(); + assert_ne!(genesis_hash, Felt::ZERO, "Genesis block hash should be non-zero"); + + let stored_hash = starknet + .pre_confirmed_state + .state + .get_storage_at(block_hash_contract_address, StorageKey::from(0u64)) + .unwrap(); + assert_eq!( + stored_hash, genesis_hash, + "Stored block hash for block 0 should match the actual block hash" + ); + + // Check a few more old blocks + for block_num in 1..=3u64 { + let expected_hash = *starknet.blocks.num_to_hash.get(&BlockNumber(block_num)).unwrap(); + let stored = starknet + .pre_confirmed_state + .state + .get_storage_at(block_hash_contract_address, StorageKey::from(block_num)) + .unwrap(); + assert_eq!( + stored, expected_hash, + "Stored block hash for block {block_num} should match actual hash" + ); + } + + // A block within the buffer (too recent) should NOT have a stored hash yet. + let recent_block_num = total_blocks; // the latest confirmed block + let stored_recent = starknet + .pre_confirmed_state + .state + .get_storage_at(block_hash_contract_address, StorageKey::from(recent_block_num)) + .unwrap(); + assert_eq!( + stored_recent, + Felt::ZERO, + "Recent block within the buffer should not have a stored hash" + ); + } + + #[tokio::test(flavor = "multi_thread")] + async fn check_timestamp_of_newly_generated_block() { let config = StarknetConfig::default(); - let mut starknet = Starknet::new(&config).unwrap(); + let mut starknet = Starknet::new(&config).await.unwrap(); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; starknet .blocks .pre_confirmed_block @@ -2133,7 +2282,7 @@ mod tests { let sleep_duration_secs = 5; thread::sleep(Duration::from_secs(sleep_duration_secs)); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; let block_timestamp = starknet.get_latest_block().unwrap().header.block_header_without_hash.timestamp; @@ -2143,16 +2292,17 @@ mod tests { assert!(pre_confirmed_block_timestamp.0 + sleep_duration_secs <= block_timestamp.0); } - #[test] - fn test_block_abortion_when_state_archive_capacity_not_full() { + #[tokio::test(flavor = "multi_thread")] + async fn test_block_abortion_when_state_archive_capacity_not_full() { let mut starknet = Starknet::new(&StarknetConfig { state_archive: StateArchiveCapacity::None, ..Default::default() }) + .await .unwrap(); let dummy_hash = felt_from_prefixed_hex("0x42").unwrap(); - match starknet.abort_blocks(CustomBlockId::Hash(dummy_hash)) { + match starknet.abort_blocks(CustomBlockId::Hash(dummy_hash)).await { Err(Error::UnsupportedAction { msg }) => { assert!(msg.contains("state-archive-capacity")) } @@ -2160,24 +2310,26 @@ mod tests { } } - #[test] - fn test_abortion_of_non_existent_block() { + #[tokio::test(flavor = "multi_thread")] + async fn test_abortion_of_non_existent_block() { let mut starknet = Starknet::new(&StarknetConfig { state_archive: StateArchiveCapacity::Full, ..Default::default() }) + .await .unwrap(); let dummy_hash = felt_from_prefixed_hex("0x42").unwrap(); - match starknet.abort_blocks(CustomBlockId::Hash(dummy_hash)) { + match starknet.abort_blocks(CustomBlockId::Hash(dummy_hash)).await { Err(Error::NoBlock) => (), unexpected => panic!("Got unexpected response: {unexpected:?}"), } } - #[test] - fn receipt_should_have_block_properties_after_tx_is_accepted() { - let (mut starknet, sender) = setup_starknet_with_no_signature_check_account(1e18 as u128); + #[tokio::test(flavor = "multi_thread")] + async fn receipt_should_have_block_properties_after_tx_is_accepted() { + let (mut starknet, sender) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; starknet.config.block_generation_on = BlockGenerationOn::Demand; let tx = broadcasted_declare_tx_v3_of_dummy_class( @@ -2186,7 +2338,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e9 as u64), ); - let (tx_hash, _) = starknet.add_declare_transaction(tx.into()).unwrap(); + let (tx_hash, _) = starknet.add_declare_transaction(tx.into()).await.unwrap(); let receipt = starknet.get_transaction_receipt_by_hash(&tx_hash).unwrap(); match receipt { @@ -2198,7 +2350,7 @@ mod tests { } // receipt should have block params after accepting the tx by triggering block creation - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; let latest_block = starknet.get_block(&CustomBlockId::Tag(CustomBlockTag::Latest)).unwrap(); let receipt = starknet.get_transaction_receipt_by_hash(&tx_hash).unwrap(); diff --git a/crates/starknet-devnet-core/src/starknet/state_update.rs b/crates/starknet-devnet-core/src/starknet/state_update.rs index 693c34ae9..f113d58f0 100644 --- a/crates/starknet-devnet-core/src/starknet/state_update.rs +++ b/crates/starknet-devnet-core/src/starknet/state_update.rs @@ -34,10 +34,11 @@ mod tests { broadcasted_declare_tx_v3, dummy_cairo_1_contract_class, resource_bounds_with_price_1, }; - #[test] + #[tokio::test(flavor = "multi_thread")] /// This test checks that the state update is correct after a declare transaction v3. - fn correct_state_update_after_declare_transaction_v3() { - let (mut starknet, acc) = setup_starknet_with_no_signature_check_account(1e18 as u128); + async fn correct_state_update_after_declare_transaction_v3() { + let (mut starknet, acc) = + setup_starknet_with_no_signature_check_account(1e18 as u128).await; let contract_class = dummy_cairo_1_contract_class(); let compiled_class_hash = compile_sierra_contract(&contract_class).unwrap().hash(&HashVersion::V2).0; @@ -53,6 +54,7 @@ mod tests { // first execute declare v3 transaction let (txn_hash, _) = starknet .add_declare_transaction(BroadcastedDeclareTransaction::V3(Box::new(declare_txn))) + .await .unwrap(); let tx = starknet.transactions.get_by_hash_mut(&txn_hash).unwrap(); assert_eq!(tx.finality_status, TransactionFinalityStatus::AcceptedOnL2); diff --git a/crates/starknet-devnet-core/src/state/state_diff.rs b/crates/starknet-devnet-core/src/state/state_diff.rs index b668894cf..db9b41a2e 100644 --- a/crates/starknet-devnet-core/src/state/state_diff.rs +++ b/crates/starknet-devnet-core/src/state/state_diff.rs @@ -264,8 +264,8 @@ mod tests { dummy_felt, dummy_key_pair, resource_bounds_with_price_1, test_invoke_transaction_v3, }; - #[test] - fn correct_no_difference_between_non_modified_states() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_no_difference_between_non_modified_states() { let mut state = setup(); let block_number = 1; let new_classes = state.rpc_contract_classes.write().commit(block_number); @@ -274,8 +274,8 @@ mod tests { assert_eq!(generated_diff, expected_diff); } - #[test] - fn correct_difference_on_cairo1_class_declaration() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_difference_on_cairo1_class_declaration() { let mut state = setup(); let class_hash = ClassHash(Felt::ONE); @@ -300,8 +300,8 @@ mod tests { assert_eq!(generated_diff, expected_diff); } - #[test] - fn correct_difference_in_state_diff_object() { + #[tokio::test(flavor = "multi_thread")] + async fn correct_difference_in_state_diff_object() { let mut state = setup(); let class_hash = dummy_felt(); let contract_address = dummy_contract_address(); @@ -324,8 +324,8 @@ mod tests { assert_eq!(generated_diff, expected_diff); } - #[test] - fn test_class_replacement_produces_correct_state_diff() { + #[tokio::test(flavor = "multi_thread")] + async fn test_class_replacement_produces_correct_state_diff() { let mut starknet = Starknet::new(&StarknetConfig { gas_price_wei: nonzero!(1u128), gas_price_fri: nonzero!(1u128), @@ -335,6 +335,7 @@ mod tests { l2_gas_price_fri: nonzero!(1u128), ..Default::default() }) + .await .unwrap(); let account_without_validations_contract_class = cairo_0_account_without_validations(); @@ -355,7 +356,7 @@ mod tests { account.deploy(&mut starknet.pre_confirmed_state).unwrap(); starknet.commit_diff().unwrap(); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; starknet.restart_pre_confirmed_block(); // dummy contract @@ -385,6 +386,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e9 as u64), ), ))) + .await .unwrap(); } @@ -397,7 +399,7 @@ mod tests { .unwrap(); starknet.commit_diff().unwrap(); - starknet.generate_new_block_and_state(); + starknet.generate_new_block_and_state().await; starknet.restart_pre_confirmed_block(); let new_class_hash = ContractClass::Cairo1(replacing_contract).try_generate_hash().unwrap(); @@ -411,7 +413,7 @@ mod tests { resource_bounds_with_price_1(0, 1000, 1e7 as u64), ); - starknet.add_invoke_transaction(invoke_txn).unwrap(); + starknet.add_invoke_transaction(invoke_txn).await.unwrap(); let state_update = starknet.block_state_update(&BlockId::Tag(BlockTag::Latest)).unwrap(); diff --git a/crates/starknet-devnet-core/src/utils.rs b/crates/starknet-devnet-core/src/utils.rs index 407529501..d235a3757 100644 --- a/crates/starknet-devnet-core/src/utils.rs +++ b/crates/starknet-devnet-core/src/utils.rs @@ -40,10 +40,10 @@ pub(crate) fn get_storage_var_address( Ok(PatriciaKey::new(storage_var_address)?) } -/// This should be modified when updating to the version after 0.14.1 +/// This should be modified when updating to the version after 0.14.2 pub(crate) fn get_versioned_constants() -> VersionedConstants { #[allow(clippy::unwrap_used)] - VersionedConstants::get(&StarknetVersion::V0_14_1).unwrap().clone() + VersionedConstants::get(&StarknetVersion::V0_14_2).unwrap().clone() } /// Values not present here: https://docs.starknet.io/tools/limits-and-triggers/ @@ -62,7 +62,6 @@ pub(crate) fn custom_bouncer_config() -> BouncerConfig { ..BouncerWeights::max() }, builtin_weights: BuiltinWeights::default(), - blake_weight: 5263, // from BouncerConfig::default } } @@ -242,6 +241,8 @@ pub(crate) mod test_utils { sender_address: account_address, calldata, account_deployment_data: vec![], + proof_facts: vec![], + proof: String::new(), }) } } diff --git a/crates/starknet-devnet-server/src/api/endpoints.rs b/crates/starknet-devnet-server/src/api/endpoints.rs index 1a713e50b..d1d280960 100644 --- a/crates/starknet-devnet-server/src/api/endpoints.rs +++ b/crates/starknet-devnet-server/src/api/endpoints.rs @@ -1,5 +1,7 @@ use starknet_core::error::{ContractExecutionError, Error, StateError}; -use starknet_rs_core::types::{BlockId as ImportedBlockId, Felt, MsgFromL1}; +use starknet_rs_core::types::{ + BlockId as ImportedBlockId, Felt, MsgFromL1, StorageResponseFlag, StorageResult, +}; use starknet_rs_providers::Provider; use starknet_types::contract_address::ContractAddress; use starknet_types::felt::{ClassHash, TransactionHash}; @@ -118,12 +120,15 @@ impl JsonRpcHandler { contract_address: ContractAddress, key: PatriciaKey, block_id: BlockId, + response_flags: Option>, ) -> StrictRpcResult { - let felt = self - .api - .starknet - .lock() - .await + let include_last_update = response_flags + .as_ref() + .is_some_and(|f| f.contains(&StorageResponseFlag::IncludeLastUpdateBlock)); + + let mut starknet = self.api.starknet.lock().await; + + let felt = starknet .contract_storage_at_block(&block_id, contract_address, key) .map_err(|err| match err { Error::NoBlock => ApiError::BlockNotFound, @@ -134,7 +139,18 @@ impl JsonRpcHandler { unknown_error => ApiError::StarknetDevnetError(unknown_error), })?; - Ok(StarknetResponse::Felt(felt).into()) + if include_last_update { + let last_update_block = starknet + .find_last_storage_update_block(&block_id, contract_address, key) + .map_err(ApiError::StarknetDevnetError)?; + Ok(StarknetResponse::StorageResult(StorageResult { + value: felt, + last_update_block, + }) + .into()) + } else { + Ok(StarknetResponse::Felt(felt).into()) + } } /// starknet_getStorageProof diff --git a/crates/starknet-devnet-server/src/api/endpoints_ws.rs b/crates/starknet-devnet-server/src/api/endpoints_ws.rs index 5140a95fa..8d573b955 100644 --- a/crates/starknet-devnet-server/src/api/endpoints_ws.rs +++ b/crates/starknet-devnet-server/src/api/endpoints_ws.rs @@ -91,17 +91,13 @@ impl JsonRpcHandler { } ImportedL1DataAvailabilityMode::Blob => L1DataAvailabilityMode::Blob, }, - n_transactions: origin_block.transaction_count, - n_events: origin_block.event_count, - state_diff_length: origin_block.state_diff_length, - state_diff_commitment: StateDiffCommitment(PoseidonHash( - origin_block.state_diff_commitment, - )), - transaction_commitment: TransactionCommitment( - origin_block.transaction_commitment, - ), - event_commitment: EventCommitment(origin_block.event_commitment), - receipt_commitment: ReceiptCommitment(origin_block.receipt_commitment), + n_transactions: origin_block.transactions.len() as u64, + n_events: 0, + state_diff_length: 0, + state_diff_commitment: StateDiffCommitment(PoseidonHash(Felt::ZERO)), + transaction_commitment: TransactionCommitment(Felt::ZERO), + event_commitment: EventCommitment(Felt::ZERO), + receipt_commitment: ReceiptCommitment(Felt::ZERO), }; Ok(origin_header) } diff --git a/crates/starknet-devnet-server/src/api/json_rpc_handler.rs b/crates/starknet-devnet-server/src/api/json_rpc_handler.rs index dd8b8201c..8d4a7b305 100644 --- a/crates/starknet-devnet-server/src/api/json_rpc_handler.rs +++ b/crates/starknet-devnet-server/src/api/json_rpc_handler.rs @@ -388,9 +388,12 @@ impl JsonRpcHandler { self.get_block_with_receipts(block.block_id).await } StarknetSpecRequest::StateUpdate(block) => self.get_state_update(block.block_id).await, - StarknetSpecRequest::StorageAt(GetStorageInput { contract_address, key, block_id }) => { - self.get_storage_at(contract_address, key, block_id).await - } + StarknetSpecRequest::StorageAt(GetStorageInput { + contract_address, + key, + block_id, + response_flags, + }) => self.get_storage_at(contract_address, key, block_id, response_flags).await, StarknetSpecRequest::TransactionStatusByHash(TransactionHashInput { transaction_hash, }) => self.get_transaction_status_by_hash(transaction_hash).await, diff --git a/crates/starknet-devnet-server/src/api/models/json_rpc_request.rs b/crates/starknet-devnet-server/src/api/models/json_rpc_request.rs index ad118fa5e..b2ea9175e 100644 --- a/crates/starknet-devnet-server/src/api/models/json_rpc_request.rs +++ b/crates/starknet-devnet-server/src/api/models/json_rpc_request.rs @@ -539,6 +539,10 @@ mod requests_tests { let json_str = r#"{"method":"starknet_getStorageAt","params":{"contract_address":"0x134134","key":"0x134134","block_id":"latest"}}"#; assert_deserialization_succeeds(json_str); + // With response_flags + let json_str_with_flags = r#"{"method":"starknet_getStorageAt","params":{"contract_address":"0x134134","key":"0x134134","block_id":"latest","response_flags":["INCLUDE_LAST_UPDATE_BLOCK"]}}"#; + assert_deserialization_succeeds(json_str_with_flags); + assert_deserialization_fails( &json_str.replace(r#""contract_address":"0x134134""#, r#""contract_address":"123""#), "Missing prefix 0x in 123", diff --git a/crates/starknet-devnet-server/src/api/models/json_rpc_response.rs b/crates/starknet-devnet-server/src/api/models/json_rpc_response.rs index 476423f2c..a5ee5875a 100644 --- a/crates/starknet-devnet-server/src/api/models/json_rpc_response.rs +++ b/crates/starknet-devnet-server/src/api/models/json_rpc_response.rs @@ -2,7 +2,7 @@ use serde::Deserialize; use serde::Serialize; use starknet_core::CasmContractClass; -use starknet_rs_core::types::{ContractClass as CodegenContractClass, Felt}; +use starknet_rs_core::types::{ContractClass as CodegenContractClass, Felt, StorageResult}; use starknet_types::rpc::block::{Block, PreConfirmedBlock}; use starknet_types::rpc::estimate_message_fee::FeeEstimateWrapper; use starknet_types::rpc::gas_modification::GasModification; @@ -53,6 +53,7 @@ pub enum StarknetResponse { StateUpdate(StateUpdate), PreConfirmedStateUpdate(PreConfirmedStateUpdate), Felt(Felt), + StorageResult(StorageResult), Transaction(TransactionWithHash), TransactionReceiptByTransactionHash(Box), TransactionStatusByHash(TransactionStatus), diff --git a/crates/starknet-devnet-server/src/api/models/mod.rs b/crates/starknet-devnet-server/src/api/models/mod.rs index 1b63d1b1d..0bc435d93 100644 --- a/crates/starknet-devnet-server/src/api/models/mod.rs +++ b/crates/starknet-devnet-server/src/api/models/mod.rs @@ -7,7 +7,7 @@ pub use json_rpc_request::{ }; pub use json_rpc_response::{DevnetResponse, JsonRpcResponse, StarknetResponse}; use serde::{Deserialize, Serialize}; -use starknet_rs_core::types::{Felt, Hash256, TransactionExecutionStatus}; +use starknet_rs_core::types::{Felt, Hash256, StorageResponseFlag, TransactionExecutionStatus}; use starknet_types::contract_address::ContractAddress; use starknet_types::felt::{BlockHash, ClassHash, TransactionHash}; use starknet_types::num_bigint::BigUint; @@ -51,6 +51,8 @@ pub struct GetStorageInput { pub contract_address: ContractAddress, pub key: PatriciaKey, pub block_id: BlockId, + #[serde(default)] + pub response_flags: Option>, } #[derive(Deserialize, Clone, Debug)] @@ -461,6 +463,8 @@ mod tests { BroadcastedDeclareTransaction, BroadcastedTransaction, }; + use starknet_rs_core::types::StorageResponseFlag; + use super::{BlockIdInput, EstimateFeeInput, GetStorageInput}; use crate::test_utils::{EXPECTED_INVALID_BLOCK_ID_MSG, assert_contains}; @@ -728,6 +732,7 @@ mod tests { block_id: BlockId::Hash(Felt::ONE), contract_address: ContractAddress::new(Felt::TWO).unwrap(), key: PatriciaKey::new(Felt::THREE).unwrap(), + response_flags: None, }; assert_get_storage_input_correctness( @@ -751,6 +756,22 @@ mod tests { ); } + #[test] + fn deserialize_get_storage_input_with_response_flags() { + let json_str = r#"{"block_id": "latest", "contract_address": "0x01", "key": "0x02", "response_flags": ["INCLUDE_LAST_UPDATE_BLOCK"]}"#; + let input = serde_json::from_str::(json_str).unwrap(); + assert_eq!( + input.response_flags, + Some(vec![StorageResponseFlag::IncludeLastUpdateBlock]) + ); + + // Without response_flags - should default to None + let json_str_no_flags = + r#"{"block_id": "latest", "contract_address": "0x01", "key": "0x02"}"#; + let input_no_flags = serde_json::from_str::(json_str_no_flags).unwrap(); + assert_eq!(input_no_flags.response_flags, None); + } + // unit tests for TransactionHashInput deserialization #[test] fn deserialize_transaction_hash_input() { diff --git a/crates/starknet-devnet-server/src/api/write_endpoints.rs b/crates/starknet-devnet-server/src/api/write_endpoints.rs index ca49b67ae..c0a61d032 100644 --- a/crates/starknet-devnet-server/src/api/write_endpoints.rs +++ b/crates/starknet-devnet-server/src/api/write_endpoints.rs @@ -36,7 +36,7 @@ impl JsonRpcHandler { request: BroadcastedDeclareTransaction, ) -> StrictRpcResult { let (transaction_hash, class_hash) = - self.api.starknet.lock().await.add_declare_transaction(request).map_err( + self.api.starknet.lock().await.add_declare_transaction(request).await.map_err( |err| match err { starknet_core::error::Error::CompiledClassHashMismatch => { ApiError::CompiledClassHashMismatch @@ -63,7 +63,7 @@ impl JsonRpcHandler { request: BroadcastedDeployAccountTransaction, ) -> StrictRpcResult { let (transaction_hash, contract_address) = - self.api.starknet.lock().await.add_deploy_account_transaction(request).map_err( + self.api.starknet.lock().await.add_deploy_account_transaction(request).await.map_err( |err| match err { starknet_core::error::Error::StateError( starknet_core::error::StateError::NoneClassHash(_), @@ -83,7 +83,8 @@ impl JsonRpcHandler { &self, request: BroadcastedInvokeTransaction, ) -> StrictRpcResult { - let transaction_hash = self.api.starknet.lock().await.add_invoke_transaction(request)?; + let transaction_hash = + self.api.starknet.lock().await.add_invoke_transaction(request).await?; Ok(StarknetResponse::TransactionHash(TransactionHashOutput { transaction_hash }).into()) } @@ -222,7 +223,7 @@ impl JsonRpcHandler { pub async fn postman_send_message_to_l2(&self, message: MessageToL2) -> StrictRpcResult { let transaction = L1HandlerTransaction::try_from_message_to_l2(message)?; let transaction_hash = - self.api.starknet.lock().await.add_l1_handler_transaction(transaction)?; + self.api.starknet.lock().await.add_l1_handler_transaction(transaction).await?; Ok(DevnetResponse::TransactionHash(TransactionHashOutput { transaction_hash }).into()) } @@ -237,7 +238,7 @@ impl JsonRpcHandler { pub async fn create_block(&self) -> StrictRpcResult { let mut starknet = self.api.starknet.lock().await; - starknet.create_block(); + starknet.create_block().await; let block = starknet.get_latest_block()?; Ok(DevnetResponse::CreatedBlock(CreatedBlock { block_hash: block.block_hash() }).into()) @@ -245,7 +246,7 @@ impl JsonRpcHandler { /// devnet_abortBlocks pub async fn abort_blocks(&self, data: AbortingBlocks) -> StrictRpcResult { - let aborted = self.api.starknet.lock().await.abort_blocks(data.starting_block_id)?; + let aborted = self.api.starknet.lock().await.abort_blocks(data.starting_block_id).await?; Ok(DevnetResponse::AbortedBlocks(AbortedBlocks { aborted }).into()) } @@ -257,8 +258,14 @@ impl JsonRpcHandler { /// devnet_setGasPrice pub async fn set_gas_price(&self, data: GasModificationRequest) -> StrictRpcResult { - let modified_gas = - self.api.starknet.lock().await.set_next_block_gas(data).map_err(ApiError::from)?; + let modified_gas = self + .api + .starknet + .lock() + .await + .set_next_block_gas(data) + .await + .map_err(ApiError::from)?; Ok(DevnetResponse::GasModification(modified_gas).into()) } @@ -268,7 +275,7 @@ impl JsonRpcHandler { self.api.dumpable_events.lock().await.clear(); let restart_params = data.unwrap_or_default(); - self.api.starknet.lock().await.restart(restart_params.restart_l1_to_l2_messaging)?; + self.api.starknet.lock().await.restart(restart_params.restart_l1_to_l2_messaging).await?; self.api.sockets.lock().await.clear(); @@ -279,7 +286,7 @@ impl JsonRpcHandler { pub async fn set_time(&self, data: SetTime) -> StrictRpcResult { let mut starknet = self.api.starknet.lock().await; let generate_block = data.generate_block.unwrap_or(true); - starknet.set_time(data.time, generate_block); + starknet.set_time(data.time, generate_block).await; let block_hash = if generate_block { let last_block = starknet.get_latest_block()?; Some(last_block.block_hash()) @@ -293,7 +300,7 @@ impl JsonRpcHandler { /// devnet_increaseTime pub async fn increase_time(&self, data: IncreaseTime) -> StrictRpcResult { let mut starknet = self.api.starknet.lock().await; - starknet.increase_time(data.time); + starknet.increase_time(data.time).await; let last_block = starknet.get_latest_block()?; diff --git a/crates/starknet-devnet-types/src/rpc/emitted_event.rs b/crates/starknet-devnet-types/src/rpc/emitted_event.rs index efdbcbf1d..901200689 100644 --- a/crates/starknet-devnet-types/src/rpc/emitted_event.rs +++ b/crates/starknet-devnet-types/src/rpc/emitted_event.rs @@ -25,8 +25,8 @@ impl From for EmittedEvent { fn from(sn_rs_event: starknet_rs_core::types::EmittedEvent) -> Self { Self { transaction_hash: sn_rs_event.transaction_hash, - transaction_index: sn_rs_event.transaction_index, - event_index: sn_rs_event.event_index, + transaction_index: 0, + event_index: 0, block_hash: sn_rs_event.block_hash, block_number: sn_rs_event.block_number.map(BlockNumber), #[allow(clippy::expect_used)] diff --git a/crates/starknet-devnet-types/src/rpc/transactions/broadcasted_invoke_transaction_v3.rs b/crates/starknet-devnet-types/src/rpc/transactions/broadcasted_invoke_transaction_v3.rs index 908071ba9..89ef31347 100644 --- a/crates/starknet-devnet-types/src/rpc/transactions/broadcasted_invoke_transaction_v3.rs +++ b/crates/starknet-devnet-types/src/rpc/transactions/broadcasted_invoke_transaction_v3.rs @@ -16,6 +16,10 @@ pub struct BroadcastedInvokeTransactionV3 { pub sender_address: ContractAddress, pub calldata: Calldata, pub account_deployment_data: Vec, + #[serde(default)] + pub proof_facts: Vec, + #[serde(default)] + pub proof: String, } impl BroadcastedInvokeTransactionV3 { @@ -39,6 +43,9 @@ impl BroadcastedInvokeTransactionV3 { account_deployment_data: starknet_api::transaction::fields::AccountDeploymentData( self.account_deployment_data.clone(), ), + proof_facts: starknet_api::transaction::fields::ProofFacts(Arc::new( + self.proof_facts.clone(), + )), }; Ok(starknet_api::transaction::InvokeTransaction::V3(sn_api_transaction)) diff --git a/crates/starknet-devnet-types/src/rpc/transactions/invoke_transaction_v3.rs b/crates/starknet-devnet-types/src/rpc/transactions/invoke_transaction_v3.rs index 618ba2dee..3aabb7055 100644 --- a/crates/starknet-devnet-types/src/rpc/transactions/invoke_transaction_v3.rs +++ b/crates/starknet-devnet-types/src/rpc/transactions/invoke_transaction_v3.rs @@ -26,6 +26,10 @@ pub struct InvokeTransactionV3 { account_deployment_data: Vec, pub(crate) sender_address: ContractAddress, calldata: Calldata, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + proof_facts: Vec, + #[serde(default, skip_serializing_if = "String::is_empty")] + proof: String, } impl InvokeTransactionV3 { @@ -42,6 +46,8 @@ impl InvokeTransactionV3 { sender_address: broadcasted_txn.sender_address, calldata: broadcasted_txn.calldata.clone(), account_deployment_data: broadcasted_txn.account_deployment_data.clone(), + proof_facts: broadcasted_txn.proof_facts.clone(), + proof: broadcasted_txn.proof.clone(), } } @@ -66,6 +72,8 @@ impl From for BroadcastedInvokeTransactionV3 { sender_address: value.sender_address, calldata: value.calldata, account_deployment_data: value.account_deployment_data, + proof_facts: value.proof_facts, + proof: value.proof, } } } diff --git a/crates/starknet-devnet/src/main.rs b/crates/starknet-devnet/src/main.rs index cfea32e65..023dfb02b 100644 --- a/crates/starknet-devnet/src/main.rs +++ b/crates/starknet-devnet/src/main.rs @@ -306,7 +306,7 @@ async fn main() -> Result<(), anyhow::Error> { // shadow mutability of starknet_config let starknet_config = starknet_config; - let mut starknet = Starknet::new(&starknet_config)?; + let mut starknet = Starknet::new(&starknet_config).await?; let (address, listener) = bind_port(server_config.host, server_config.port).await?;