diff --git a/.cargo/release-version b/.cargo/release-version index a7a4bb2332..8503faf3bb 100644 --- a/.cargo/release-version +++ b/.cargo/release-version @@ -1 +1 @@ -v4.7.3 \ No newline at end of file +v4.8.0 \ No newline at end of file diff --git a/.ci/test_devnet.sh b/.ci/test_devnet.sh index 2ec8864434..d3f0117899 100755 --- a/.ci/test_devnet.sh +++ b/.ci/test_devnet.sh @@ -136,6 +136,10 @@ function main: add r0 r1 into r2; output r2 as u32.private; +view compute_sum: + add 1u32 2u32 into r0; + output r0 as u32.public; + constructor: assert.eq true true; " > program/main.aleo @@ -187,6 +191,36 @@ else exit 1 fi +# Query the view function at the latest height. +log "● Testing view function evaluation at latest height..." +view_response=$(curl -s -X POST \ + -H "Content-Type: application/json" \ + -d '[]' \ + "http://localhost:3030/v2/$network_name/program/${program_name}/view/compute_sum") +view_output=$(jq -r '.[0]' <<< "$view_response") +if [ "$view_output" = "3u32" ]; then + log "✅ View function returned expected output at latest height: $view_output" +else + log "❌ Test failed! View function returned unexpected output at latest height: $view_response" + exit 1 +fi + +# Query the view function at a specific block height. +# Requires history feature. +# log "● Testing view function evaluation at specific block height..." +# current_height=$(curl -s "http://localhost:3030/v2/$network_name/block/height/latest") +# view_response=$(curl -s -X POST \ +# -H "Content-Type: application/json" \ +# -d '[]' \ +# "http://localhost:3030/v2/$network_name/program/${program_name}/view/compute_sum/${current_height}") +# view_output=$(jq -r '.[0]' <<< "$view_response") +# if [ "$view_output" = "3u32" ]; then +# log "✅ View function returned expected output at height ${current_height}: $view_output" +# else +# log "❌ Test failed! View function returned unexpected output at height ${current_height}: $view_response" +# exit 1 +# fi + # Execute a function in the deployed program and wait for the execution to be processed. log "● Testing program execution with V2 API..." execute_result=$(cd program && snarkos developer execute --dev-key 0 --network "$network_id" --broadcast --endpoint=http://localhost:3030 \ diff --git a/.circleci/config.yml b/.circleci/config.yml index 02aa7039cf..3e378536c3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -816,7 +816,7 @@ workflows: filters: branches: only: - - test_fixed_dev_committee + - copilot/feature-expose-new-api-endpoint - canary - testnet - mainnet @@ -826,7 +826,7 @@ workflows: filters: branches: only: - - release-mainnet-4.7.3 + - copilot/feature-expose-new-api-endpoint - canary - testnet - mainnet @@ -836,7 +836,7 @@ workflows: filters: branches: only: - - release-mainnet-4.7.3 + - copilot/feature-expose-new-api-endpoint - canary - testnet - mainnet @@ -845,7 +845,7 @@ workflows: filters: branches: only: - - release-mainnet-4.7.3 + - copilot/feature-expose-new-api-endpoint - canary - testnet - mainnet diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index 5a18ccbf7e..aecfd17c9f 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -4,7 +4,7 @@ on: push: branches: - 'staging' - - 'release-mainnet-4.7.3' + - 'copilot/feature-expose-new-api-endpoint' workflow_dispatch: jobs: diff --git a/Cargo.lock b/Cargo.lock index 320f446e88..37e51413ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -177,6 +177,15 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary" version = "1.4.2" @@ -400,7 +409,7 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -450,9 +459,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" [[package]] name = "blake2" @@ -485,9 +494,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", ] @@ -538,6 +547,12 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytemuck" version = "1.25.0" @@ -577,9 +592,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.2.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" dependencies = [ "find-msvc-tools", "jobserver", @@ -621,9 +636,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -921,6 +936,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -961,7 +982,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "crossterm_winapi", "derive_more", "document-features", @@ -1160,7 +1181,6 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -1226,7 +1246,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.0", + "block-buffer 0.12.1", "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", @@ -1477,6 +1497,12 @@ dependencies = [ "regex", ] +[[package]] +name = "fast-srgb8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" + [[package]] name = "fastrand" version = "2.4.1" @@ -1777,7 +1803,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", "libgit2-sys", "log", @@ -1873,6 +1899,11 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "hdrhistogram" @@ -2479,13 +2510,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -2631,7 +2661,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -2700,6 +2730,15 @@ dependencies = [ "hashbrown 0.16.1", ] +[[package]] +name = "lru" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +dependencies = [ + "hashbrown 0.17.1", +] + [[package]] name = "lru-slab" version = "0.1.2" @@ -2743,9 +2782,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmem" @@ -2905,7 +2944,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -2918,7 +2957,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -3068,7 +3107,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "foreign-types", "libc", @@ -3120,6 +3159,30 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "libm", + "palette_derive", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2", + "quote 1.0.45", + "syn 2.0.117", +] + [[package]] name = "parking_lot" version = "0.12.5" @@ -3420,13 +3483,13 @@ checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.12.1", + "bitflags 2.13.0", "lazy_static", "num-traits", "rand 0.8.6", "rand_chacha 0.3.1", "rand_xorshift 0.3.0", - "regex-syntax 0.8.10", + "regex-syntax 0.8.11", "rusty-fork", "tempfile", "unarray", @@ -3434,9 +3497,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", "prost-derive", @@ -3444,9 +3507,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", "itertools 0.14.0", @@ -3457,9 +3520,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ "prost", ] @@ -3693,9 +3756,9 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc" +checksum = "1695748e3a735b34968c887ceea5a380b43545903868ae8f5b666593100f6b68" dependencies = [ "instability", "ratatui-core", @@ -3703,21 +3766,25 @@ dependencies = [ "ratatui-macros", "ratatui-termwiz", "ratatui-widgets", + "serde", ] [[package]] name = "ratatui-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293" +checksum = "42d3603f354bba8c595fa47860e60142d7372b7210c27044c6a7d0e1a4336b44" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "compact_str", - "hashbrown 0.16.1", + "critical-section", + "hashbrown 0.17.1", "indoc", "itertools 0.14.0", "kasuari", - "lru", + "lru 0.18.0", + "palette", + "serde", "strum", "thiserror 2.0.18", "unicode-segmentation", @@ -3727,9 +3794,9 @@ dependencies = [ [[package]] name = "ratatui-crossterm" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3" +checksum = "2b2867bedcbd6a690ca4f8672a687b730ec07660c79844517b084311b529980c" dependencies = [ "cfg-if", "crossterm", @@ -3739,9 +3806,9 @@ dependencies = [ [[package]] name = "ratatui-macros" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4" +checksum = "80fac59720679490d89d200df411faa249be728681adcabed3d047ae72c48f1d" dependencies = [ "ratatui-core", "ratatui-widgets", @@ -3749,9 +3816,9 @@ dependencies = [ [[package]] name = "ratatui-termwiz" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c" +checksum = "386b8ff8f74ed749509391c56d549761a2fcdb408e1f42e467286bcb7dac8967" dependencies = [ "ratatui-core", "termwiz", @@ -3759,17 +3826,18 @@ dependencies = [ [[package]] name = "ratatui-widgets" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db" +checksum = "7ef4f17dd7ac3abf5adc2b920a03c61eee4bfe6a88fa5191936895525371d79c" dependencies = [ - "bitflags 2.12.1", - "hashbrown 0.16.1", + "bitflags 2.13.0", + "hashbrown 0.17.1", "indoc", "instability", "itertools 0.14.0", "line-clipping", "ratatui-core", + "serde", "strum", "time", "unicode-segmentation", @@ -3782,7 +3850,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -3811,7 +3879,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -3847,14 +3915,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", "regex-automata 0.4.14", - "regex-syntax 0.8.10", + "regex-syntax 0.8.11", ] [[package]] @@ -3874,7 +3942,7 @@ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.10", + "regex-syntax 0.8.11", ] [[package]] @@ -3885,9 +3953,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "reqwest" @@ -4037,7 +4105,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4050,7 +4118,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", @@ -4238,7 +4306,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4379,9 +4447,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64 0.22.1", "bs58", @@ -4399,9 +4467,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling", "proc-macro2", @@ -4577,9 +4645,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smol_str" @@ -4706,7 +4774,7 @@ dependencies = [ "http 1.3.1", "indexmap 2.14.0", "locktick", - "lru", + "lru 0.16.4", "num_cpus", "parking_lot", "paste", @@ -4752,7 +4820,7 @@ dependencies = [ "indexmap 2.14.0", "itertools 0.14.0", "locktick", - "lru", + "lru 0.16.4", "mockall", "open", "parking_lot", @@ -4836,7 +4904,7 @@ dependencies = [ "anyhow", "indexmap 2.14.0", "locktick", - "lru", + "lru 0.16.4", "parking_lot", "snarkvm", "tracing", @@ -4875,7 +4943,7 @@ dependencies = [ "indexmap 2.14.0", "itertools 0.14.0", "locktick", - "lru", + "lru 0.16.4", "once_cell", "parking_lot", "snarkos-account", @@ -4937,7 +5005,7 @@ dependencies = [ "indexmap 2.14.0", "jsonwebtoken", "locktick", - "lru", + "lru 0.16.4", "once_cell", "parking_lot", "rand 0.10.1", @@ -5087,8 +5155,8 @@ dependencies = [ [[package]] name = "snarkvm" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "dotenvy", @@ -5112,8 +5180,8 @@ dependencies = [ [[package]] name = "snarkvm-algorithms" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", @@ -5140,19 +5208,19 @@ dependencies = [ [[package]] name = "snarkvm-algorithms-cuda" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "blst", "cc", "sppark", - "which 8.0.2", + "which 8.0.3", ] [[package]] name = "snarkvm-circuit" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5165,8 +5233,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-account" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-network", "snarkvm-circuit-types", @@ -5175,8 +5243,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-algorithms" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-types", "snarkvm-console-algorithms", @@ -5185,8 +5253,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-collections" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-types", @@ -5195,8 +5263,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-environment" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5215,13 +5283,13 @@ dependencies = [ [[package]] name = "snarkvm-circuit-environment-witness" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" [[package]] name = "snarkvm-circuit-network" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-collections", @@ -5231,8 +5299,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-program" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5245,8 +5313,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-address", @@ -5260,8 +5328,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-address" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5273,8 +5341,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-boolean" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-console-types-boolean", @@ -5282,8 +5350,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-field" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5292,8 +5360,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-group" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5304,8 +5372,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-integers" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5316,8 +5384,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-scalar" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5327,8 +5395,8 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-string" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5339,8 +5407,8 @@ dependencies = [ [[package]] name = "snarkvm-console" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-account", "snarkvm-console-algorithms", @@ -5352,8 +5420,8 @@ dependencies = [ [[package]] name = "snarkvm-console-account" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "bs58", "snarkvm-console-network", @@ -5363,8 +5431,8 @@ dependencies = [ [[package]] name = "snarkvm-console-algorithms" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "blake2s_simd", "hex", @@ -5379,8 +5447,8 @@ dependencies = [ [[package]] name = "snarkvm-console-collections" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "locktick", @@ -5393,8 +5461,8 @@ dependencies = [ [[package]] name = "snarkvm-console-network" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "enum-iterator", @@ -5413,8 +5481,8 @@ dependencies = [ [[package]] name = "snarkvm-console-network-environment" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "bech32", @@ -5431,8 +5499,8 @@ dependencies = [ [[package]] name = "snarkvm-console-program" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "enum-iterator", "enum_index", @@ -5452,8 +5520,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-address", @@ -5467,8 +5535,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types-address" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5478,16 +5546,16 @@ dependencies = [ [[package]] name = "snarkvm-console-types-boolean" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", ] [[package]] name = "snarkvm-console-types-field" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5496,8 +5564,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types-group" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5507,8 +5575,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types-integers" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5518,8 +5586,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types-scalar" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5529,8 +5597,8 @@ dependencies = [ [[package]] name = "snarkvm-console-types-string" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5540,8 +5608,8 @@ dependencies = [ [[package]] name = "snarkvm-curves" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "rand 0.10.1", "rustc_version", @@ -5553,8 +5621,8 @@ dependencies = [ [[package]] name = "snarkvm-fields" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", @@ -5570,15 +5638,15 @@ dependencies = [ [[package]] name = "snarkvm-ledger" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", "cfg-if", "indexmap 2.14.0", "locktick", - "lru", + "lru 0.16.4", "parking_lot", "rand 0.10.1", "rand_chacha 0.10.0", @@ -5603,8 +5671,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-authority" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "rand 0.10.1", @@ -5615,8 +5683,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-block" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5639,8 +5707,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-committee" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5658,8 +5726,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-ledger-narwhal-batch-certificate", "snarkvm-ledger-narwhal-batch-header", @@ -5671,8 +5739,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-certificate" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5684,8 +5752,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-header" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5696,8 +5764,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-data" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "bytes", "serde_json", @@ -5707,8 +5775,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-subdag" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5722,8 +5790,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "bytes", "serde_json", @@ -5735,8 +5803,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission-id" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "snarkvm-console", "snarkvm-ledger-puzzle", @@ -5744,15 +5812,15 @@ dependencies = [ [[package]] name = "snarkvm-ledger-puzzle" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", "bincode", "indexmap 2.14.0", "locktick", - "lru", + "lru 0.16.4", "parking_lot", "rand 0.10.1", "rand_chacha 0.10.0", @@ -5765,15 +5833,15 @@ dependencies = [ [[package]] name = "snarkvm-ledger-puzzle-epoch" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", "colored 3.1.1", "indexmap 2.14.0", "locktick", - "lru", + "lru 0.16.4", "parking_lot", "rand 0.10.1", "rand_chacha 0.10.0", @@ -5788,8 +5856,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-query" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "async-trait", @@ -5805,8 +5873,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-store" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std-storage", "anyhow", @@ -5834,8 +5902,8 @@ dependencies = [ [[package]] name = "snarkvm-ledger-test-helpers" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", @@ -5852,16 +5920,16 @@ dependencies = [ [[package]] name = "snarkvm-metrics" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "metrics", ] [[package]] name = "snarkvm-parameters" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", @@ -5883,16 +5951,16 @@ dependencies = [ [[package]] name = "snarkvm-slipstream-plugin-interface" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", ] [[package]] name = "snarkvm-slipstream-plugin-manager" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "json5", @@ -5905,15 +5973,15 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", "indexmap 2.14.0", "itertools 0.14.0", "locktick", - "lru", + "lru 0.16.4", "parking_lot", "rand 0.10.1", "rayon", @@ -5921,6 +5989,7 @@ dependencies = [ "snarkvm-algorithms", "snarkvm-circuit", "snarkvm-console", + "snarkvm-ledger-authority", "snarkvm-ledger-block", "snarkvm-ledger-committee", "snarkvm-ledger-narwhal-data", @@ -5940,8 +6009,8 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-error" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "anyhow", "snarkvm-circuit-environment", @@ -5952,8 +6021,8 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-process" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "colored 3.1.1", @@ -5979,8 +6048,8 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-program" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "enum-iterator", "indexmap 2.14.0", @@ -6000,8 +6069,8 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-snark" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "bincode", "serde_json", @@ -6013,8 +6082,8 @@ dependencies = [ [[package]] name = "snarkvm-utilities" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "aleo-std", "anyhow", @@ -6036,8 +6105,8 @@ dependencies = [ [[package]] name = "snarkvm-utilities-derives" -version = "4.7.1" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=c457b6b9e#c457b6b9eff25e81930c2bf260539097c3e67c31" +version = "4.7.3" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=9d8ed0ce1#9d8ed0ce1dd3d2548ed174b2fc413bdf49d868db" dependencies = [ "proc-macro2", "quote 1.0.45", @@ -6170,18 +6239,18 @@ dependencies = [ [[package]] name = "strum" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", @@ -6273,7 +6342,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6336,7 +6405,7 @@ checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" dependencies = [ "anyhow", "base64 0.22.1", - "bitflags 2.12.1", + "bitflags 2.13.0", "fancy-regex", "filedescriptor", "finl_unicode", @@ -6507,12 +6576,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" dependencies = [ "deranged", - "itoa", "libc", "num-conv", "num_threads", @@ -6524,15 +6592,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" dependencies = [ "num-conv", "time-core", @@ -6769,7 +6837,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytes", "futures-core", "futures-util", @@ -7070,9 +7138,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.2" +version = "1.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" dependencies = [ "atomic", "getrandom 0.4.2", @@ -7161,9 +7229,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563" dependencies = [ "cfg-if", "once_cell", @@ -7174,9 +7242,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf" dependencies = [ "js-sys", "wasm-bindgen", @@ -7184,9 +7252,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc" dependencies = [ "quote 1.0.45", "wasm-bindgen-macro-support", @@ -7194,9 +7262,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b" dependencies = [ "bumpalo", "proc-macro2", @@ -7207,9 +7275,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.123" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92" dependencies = [ "unicode-ident", ] @@ -7242,7 +7310,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -7250,9 +7318,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69" dependencies = [ "js-sys", "wasm-bindgen", @@ -7372,9 +7440,9 @@ dependencies = [ [[package]] name = "which" -version = "8.0.2" +version = "8.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81995fafaaaf6ae47a7d0cc83c67caf92aeb7e5331650ae6ff856f7c0c60c459" +checksum = "c789537cf2f7f55be8e6192f92e464174ee55f91af622777f7f1ceb0dbccd03e" dependencies = [ "libc", ] @@ -7721,7 +7789,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.12.1", + "bitflags 2.13.0", "indexmap 2.14.0", "log", "serde", @@ -7782,18 +7850,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b065d4f0e55f82fae73202e189638116a87c55ab6b8e6c2721e13dd9d854ad1" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.50" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631b19d36a892ab55420c92dbc83ccd79274f25be714855d3074aa71cab639" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote 1.0.45", diff --git a/Cargo.toml b/Cargo.toml index 188e4fa56f..a8700b6bef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ default-features = false [workspace.dependencies.snarkvm] #path = "../snarkVM" git = "https://github.com/ProvableHQ/snarkVM.git" -rev = "c457b6b9e" +rev = "9d8ed0ce1" #version = "=4.7.3" [workspace.dependencies.anyhow] diff --git a/display/Cargo.toml b/display/Cargo.toml index 13bb57989a..ed6adde7eb 100644 --- a/display/Cargo.toml +++ b/display/Cargo.toml @@ -29,6 +29,8 @@ workspace = true [dependencies.ratatui] version = "0.30" +default-features = false +features = ["crossterm", "layout-cache", "macros", "underline-color"] [dependencies.snarkos-node] workspace = true diff --git a/node/bft/ledger-service/src/ledger.rs b/node/bft/ledger-service/src/ledger.rs index b30050c8fa..7d3d3ec136 100644 --- a/node/bft/ledger-service/src/ledger.rs +++ b/node/bft/ledger-service/src/ledger.rs @@ -546,7 +546,7 @@ impl> LedgerService for CoreLedgerService< match transaction { Transaction::Deploy(_, _, _, deployment, _) => { let (_, cost_details) = deployment_cost(self.ledger.vm().process(), deployment, consensus_version)?; - let compute_spend = deploy_compute_cost_in_microcredits(cost_details, consensus_version)?; + let compute_spend = deploy_compute_cost_in_microcredits(cost_details, consensus_version); ensure!( compute_spend <= transaction_spend_limit, "Transaction '{id}' exceeds the transaction spend limit with compute_spend: '{compute_spend}'" @@ -555,7 +555,7 @@ impl> LedgerService for CoreLedgerService< } Transaction::Execute(_, _, execution, _) => { let (_, cost_details) = execution_cost(self.ledger.vm().process(), execution, consensus_version)?; - let compute_spend = execute_compute_cost_in_microcredits(cost_details, consensus_version)?; + let compute_spend = execute_compute_cost_in_microcredits(cost_details, consensus_version); if consensus_version >= ConsensusVersion::V11 { // From V11, add this check for consistency with our deployment checks. ensure!( diff --git a/node/rest/src/lib.rs b/node/rest/src/lib.rs index dccd6c4dcf..67fdb3ca34 100644 --- a/node/rest/src/lib.rs +++ b/node/rest/src/lib.rs @@ -282,11 +282,15 @@ impl, R: Routing> Rest { None => routes, }; - // If the `history` feature is enabled, enable the additional endpoint. + // Register the view-at-latest-height endpoint (always available, no history required). + let routes = routes.route("/program/{id}/view/{function}", post(Self::evaluate_view_latest)); + + // If the `history` feature is enabled, enable the additional endpoints. #[cfg(feature = "history")] let routes = routes .route("/program/{id}/mapping/{name}/{key}/history/{height}", get(Self::get_history)) - .route("/program/{id}/mapping/{name}/history/{height}", get(Self::get_history_batch)); + .route("/program/{id}/mapping/{name}/history/{height}", get(Self::get_history_batch)) + .route("/program/{id}/view/{function}/{height}", post(Self::evaluate_view)); // If the `history-staking-rewards` feature is enabled, enable the additional endpoint. #[cfg(feature = "history-staking-rewards")] diff --git a/node/rest/src/routes.rs b/node/rest/src/routes.rs index 42e55455de..7d3993675e 100644 --- a/node/rest/src/routes.rs +++ b/node/rest/src/routes.rs @@ -21,7 +21,18 @@ use snarkos_node_sync::BftSyncMode; use snarkvm::ledger::store::helpers::MapRead; use snarkvm::{ ledger::puzzle::Solution, - prelude::{Address, Identifier, LimitedWriter, Plaintext, Program, ToBytes, block::Transaction}, + prelude::{ + Address, + ConsensusVersion, + Identifier, + LimitedWriter, + Plaintext, + Program, + ToBytes, + Value, + block::Transaction, + }, + synthesizer::program::{FinalizeGlobalState, StackTrait}, }; use axum::{Json, extract::rejection::JsonRejection}; @@ -44,6 +55,8 @@ const MAX_KEYS_PER_REQUEST: usize = 1 << 7; type HistoricalMappingKey = (ProgramID, Identifier, Plaintext, u32); #[cfg(feature = "history")] type HistoricalMappingRoute = (ProgramID, Identifier, u32); +#[cfg(feature = "history")] +type ViewFunctionRoute = (ProgramID, Identifier, u32); #[cfg(feature = "history")] fn parse_historical_mapping_keys(keys: &[String]) -> Result>, RestError> { @@ -71,6 +84,19 @@ fn parse_historical_mapping_keys(keys: &[String]) -> Result, _>>() } +/// Parses a list of strings into a `Vec>` for use as view function inputs. +fn parse_view_inputs(inputs: &[String]) -> Result>, RestError> { + inputs + .iter() + .enumerate() + .map(|(index, input)| { + input.parse::>().map_err(|err| { + RestError::unprocessable_entity(err.context(format!("Invalid input at index {index}: {input}"))) + }) + }) + .collect::, _>>() +} + /// Deserialize a CSV string into a vector of strings. fn de_csv<'de, D>(de: D) -> std::result::Result, D::Error> where @@ -1134,6 +1160,134 @@ impl, R: Routing> Rest { Ok((StatusCode::OK, ErasedJson::pretty(values))) } + /// POST /{network}/program/{id}/view/{functionName}/{height} + /// + /// Evaluates a view function against the ledger state at the given block `height`. + /// The request body must be a JSON array of string-encoded inputs, e.g.: + /// + /// ```json + /// ["aleo1...", "10u64"] + /// ``` + /// + /// Returns the outputs as a JSON array of string-encoded values. + #[cfg(feature = "history")] + pub(crate) async fn evaluate_view( + State(rest): State, + Path((program_id, view_name, height)): Path>, + json_result: Result>, JsonRejection>, + ) -> Result { + // Parse the inputs from the request body. + let Json(raw_inputs) = match json_result { + Ok(json) => json, + Err(err) => return Err(RestError::unprocessable_entity(anyhow!("Invalid request body: {err}"))), + }; + + // Parse the inputs into `Value`. + let inputs = parse_view_inputs::(&raw_inputs)?; + + // Evaluate the view function in a blocking task. + let outputs = match tokio::task::spawn_blocking(move || { + rest.ledger.vm().evaluate_view_at_height(program_id, view_name, inputs, height) + }) + .await + { + Ok(Ok(outputs)) => outputs, + Ok(Err(err)) => { + return Err(RestError::bad_request( + err.context(format!("Failed to evaluate view '{view_name}' for '{program_id}' at height {height}")), + )); + } + Err(err) => return Err(RestError::internal_server_error(anyhow!("Tokio error: {err}"))), + }; + + // Encode each output as a string. + let output_strings: Vec = outputs.iter().map(|v| v.to_string()).collect(); + + Ok((StatusCode::OK, ErasedJson::pretty(output_strings))) + } + + /// POST /{network}/program/{id}/view/{functionName} + /// + /// Evaluates a view function against the ledger state at the latest block height. + /// The request body must be a JSON array of string-encoded inputs, e.g.: + /// + /// ```json + /// ["aleo1...", "10u64"] + /// ``` + /// + /// Returns the outputs as a JSON array of string-encoded values. + /// Optionally, append `?metadata=true` to also return the block height at which the + /// view was evaluated (same semantics as the mapping-read endpoints). + pub(crate) async fn evaluate_view_latest( + State(rest): State, + Path((program_id, view_name)): Path<(ProgramID, Identifier)>, + metadata: Query, + json_result: Result>, JsonRejection>, + ) -> Result { + // Parse the inputs from the request body. + let Json(raw_inputs) = match json_result { + Ok(json) => json, + Err(err) => return Err(RestError::unprocessable_entity(anyhow!("Invalid request body: {err}"))), + }; + + // Parse the inputs into `Value`. + let inputs = parse_view_inputs::(&raw_inputs)?; + + // Evaluate the view function in a blocking task. + // The latest block's state is captured inside the task to minimise the window + // between state sampling and evaluation. + let (outputs, height) = match tokio::task::spawn_blocking(move || { + // Capture the latest block to build a consistent `FinalizeGlobalState`. + let block = rest.ledger.latest_block(); + let height = block.height(); + + // Reconstruct the `FinalizeGlobalState` for the latest block. The block timestamp + // is only included from `ConsensusVersion::V12` onward, matching the consensus path. + let block_timestamp = + (height >= N::CONSENSUS_HEIGHT(ConsensusVersion::V12).unwrap_or_default()).then_some(block.timestamp()); + let state = FinalizeGlobalState::new::( + block.round(), + height, + block_timestamp, + block.cumulative_weight(), + block.cumulative_proof_target(), + block.previous_hash(), + None, + )?; + + // Get the current (latest-edition) stack for the program. + let stack = rest.ledger.vm().process().get_stack(program_id)?; + + // Evaluate the view against the current finalize store. + let outputs = stack.evaluate_view(state, rest.ledger.vm().finalize_store(), &view_name, inputs)?; + + Ok::<_, anyhow::Error>((outputs, height)) + }) + .await + { + Ok(Ok(result)) => result, + Ok(Err(err)) => { + return Err(RestError::bad_request(err.context(format!( + "Failed to evaluate view '{view_name}' for '{program_id}' at the latest height" + )))); + } + Err(err) => return Err(RestError::internal_server_error(anyhow!("Tokio error: {err}"))), + }; + + // Encode each output as a string. + let output_strings: Vec = outputs.iter().map(|v| v.to_string()).collect(); + + // Check if metadata is requested and return the outputs with the sampled height if so. + if metadata.metadata.unwrap_or(false) { + return Ok(ErasedJson::pretty(json!({ + "data": output_strings, + "height": height, + }))); + } + + Ok(ErasedJson::pretty(output_strings)) + } + /// GET /{network}/staking/rewards/{address}/{height} #[cfg(feature = "history-staking-rewards")] pub(crate) async fn get_staking_reward( diff --git a/node/router/messages/src/lib.rs b/node/router/messages/src/lib.rs index 7376a76a47..49792c0699 100644 --- a/node/router/messages/src/lib.rs +++ b/node/router/messages/src/lib.rs @@ -108,7 +108,7 @@ impl From for Message { impl Message { /// The version of the network protocol; this is incremented for breaking changes between migration versions. // Note. This should be incremented for each new `ConsensusVersion` that is added. - pub const VERSIONS: [(ConsensusVersion, u32); 10] = [ + pub const VERSIONS: [(ConsensusVersion, u32); 11] = [ (ConsensusVersion::V5, 17), (ConsensusVersion::V7, 18), (ConsensusVersion::V8, 19), @@ -119,6 +119,7 @@ impl Message { (ConsensusVersion::V13, 24), (ConsensusVersion::V14, 25), (ConsensusVersion::V15, 26), + (ConsensusVersion::V16, 27), ]; /// Returns the latest message version.