diff --git a/Cargo.lock b/Cargo.lock index b2c1e7603dc6..5c6db9fe51be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -205,6 +205,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ar_archive_writer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a" +dependencies = [ + "object 0.32.2", +] + [[package]] name = "arbitrary" version = "1.4.2" @@ -278,7 +287,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -290,7 +299,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -399,7 +408,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -416,7 +425,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -461,7 +470,7 @@ dependencies = [ "manyhow", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -477,7 +486,7 @@ dependencies = [ "proc-macro2", "quote", "quote-use", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -749,7 +758,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -961,9 +970,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "regex-automata", @@ -1072,7 +1081,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.107", + "syn 2.0.108", "tempfile", "toml", ] @@ -1088,9 +1097,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.41" +version = "1.2.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" dependencies = [ "find-msvc-tools", "jobserver", @@ -1279,7 +1288,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1906,7 +1915,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1940,7 +1949,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1954,7 +1963,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1965,7 +1974,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1976,7 +1985,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2014,7 +2023,7 @@ dependencies = [ "proc-macro2", "quote", "semver", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2044,9 +2053,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -2060,7 +2069,7 @@ checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2072,7 +2081,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2083,7 +2092,7 @@ checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2094,7 +2103,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2115,7 +2124,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2125,7 +2134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2146,7 +2155,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "unicode-xid", ] @@ -2224,14 +2233,14 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "doc-comment" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "780955b8b195a21ab8e4ac6b60dd1dbdcec1dc6c51c0617964b08c81785e12c9" [[package]] name = "drop_bomb" @@ -2326,7 +2335,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2383,27 +2392,27 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "enum-ordinalize" -version = "4.3.0" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" dependencies = [ "enum-ordinalize-derive", ] [[package]] name = "enum-ordinalize-derive" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2423,7 +2432,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2508,7 +2517,7 @@ checksum = "3a82608ee96ce76aeab659e9b8d3c2b787bffd223199af88c674923d861ada10" dependencies = [ "execute-command-macro", "execute-command-tokens", - "generic-array 1.3.4", + "generic-array 1.3.5", ] [[package]] @@ -2528,7 +2537,7 @@ checksum = "ce8cd46a041ad005ab9c71263f9a0ff5b529eac0fe4cc9b4a20f4f0765d8cf4b" dependencies = [ "execute-command-tokens", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2612,7 +2621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cf792125fca464ddbf54eb4e2d5826fd4988164d060d777a30b43405548c1a3" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3071,9 +3080,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -3298,7 +3307,7 @@ dependencies = [ "statrs", "strum", "strum_macros", - "syn 2.0.107", + "syn 2.0.108", "tabled", "tap", "tar", @@ -3411,7 +3420,7 @@ dependencies = [ "frc42_hasher", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3537,7 +3546,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3930,9 +3939,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "1.3.4" +version = "1.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985a5578ebdb02351d484a77fb27e7cb79272f1ba9bc24692d8243c3cfe40660" +checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542" dependencies = [ "rustversion", "typenum", @@ -3940,20 +3949,20 @@ dependencies = [ [[package]] name = "get-size-derive2" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3814abc7da8ab18d2fd820f5b540b5e39b6af0a32de1bdd7c47576693074843" +checksum = "46b134aa084df7c3a513a1035c52f623e4b3065dfaf3d905a4f28a2e79b5bb3f" dependencies = [ "attribute-derive", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "get-size2" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfe2cec5b5ce8fb94dcdb16a1708baa4d0609cc3ce305ca5d3f6f2ffb59baed" +checksum = "c0d51c9f2e956a517619ad9e7eaebc7a573f9c49b38152e12eade750f89156f9" dependencies = [ "get-size-derive2", "hashbrown 0.16.0", @@ -4040,7 +4049,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4051,9 +4060,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab69130804d941f8075cfd713bf8848a2c3b3f201a9457a11e6f87e1ab62305" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", @@ -4712,7 +4721,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4740,9 +4749,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e0ddd45fe8e09ee1a607920b12271f8a5528a41ecaf6e1d1440d6493315b6b" +checksum = "ade6dfcba0dfb62ad59e59e7241ec8912af34fd29e0e743e3db992bd278e8b65" dependencies = [ "console 0.16.1", "portable-atomic", @@ -4850,13 +4859,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4956,9 +4965,9 @@ checksum = "a037eddb7d28de1d0fc42411f501b53b75838d313908078d6698d064f3029b24" [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -5063,7 +5072,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5207,7 +5216,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5643,7 +5652,7 @@ checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" dependencies = [ "heck 0.5.0", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5726,7 +5735,7 @@ dependencies = [ "thiserror 2.0.17", "tracing", "yamux 0.12.1", - "yamux 0.13.7", + "yamux 0.13.8", ] [[package]] @@ -5883,7 +5892,7 @@ dependencies = [ "manyhow-macros", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6162,7 +6171,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -6422,7 +6431,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6487,6 +6496,15 @@ dependencies = [ "serde", ] +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + [[package]] name = "object" version = "0.36.7" @@ -6660,7 +6678,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6815,7 +6833,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6867,7 +6885,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7085,7 +7103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7142,9 +7160,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -7191,7 +7209,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7214,7 +7232,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7228,10 +7246,11 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e66fcd288453b748497d8fb18bccc83a16b0518e3906d4b8df0a8d42d93dbb1c" +checksum = "d11f2fedc3b7dafdc2851bc52f277377c5473d378859be234bc7ebb593144d01" dependencies = [ + "ar_archive_writer", "cc", ] @@ -7287,7 +7306,7 @@ checksum = "f71ee38b42f8459a88d3362be6f9b841ad2d5421844f61eb1c59c11bff3ac14a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7374,7 +7393,7 @@ dependencies = [ "proc-macro-utils", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7607,7 +7626,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7849,7 +7868,7 @@ dependencies = [ "rust2go-cli", "rust2go-convert", "rust2go-macro", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7872,7 +7891,7 @@ checksum = "04274cfe9552d6893cf9cb17652de327c3b0f4f912b5372a904d9d97da9204c5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7890,7 +7909,7 @@ dependencies = [ "proc-macro2", "quote", "rust2go-common", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7996,9 +8015,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "web-time", "zeroize", @@ -8146,7 +8165,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8245,7 +8264,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8256,7 +8275,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8303,7 +8322,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8376,7 +8395,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8414,7 +8433,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8601,17 +8620,17 @@ checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "smol_str" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5" dependencies = [ "borsh", - "serde", + "serde_core", ] [[package]] @@ -8884,7 +8903,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8895,7 +8914,7 @@ checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8916,7 +8935,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8938,9 +8957,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.107" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -8964,7 +8983,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9121,7 +9140,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9132,7 +9151,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9274,7 +9293,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9552,7 +9571,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9933,9 +9952,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -9944,25 +9963,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.107", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -9973,9 +9978,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9983,22 +9988,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.107", - "wasm-bindgen-backend", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -10241,14 +10246,14 @@ checksum = "5732a5c86efce7bca121a61d8c07875f6b85c1607aa86753b40f7f8bd9d3a780" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -10379,7 +10384,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10390,7 +10395,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10813,9 +10818,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -10843,9 +10848,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.7" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6927cfe0edfae4b26a369df6bad49cd0ef088c0ec48f4045b2084bcaedc10246" +checksum = "deab71f2e20691b4728b349c6cee8fc7223880fa67b6b4f92225ec32225447e5" dependencies = [ "futures", "log", @@ -10902,7 +10907,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -10923,7 +10928,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10943,7 +10948,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -10964,7 +10969,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10997,7 +11002,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index aed88a5a0d94..6b4093543307 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,7 +63,7 @@ dialoguer = "0.12" digest = "0.10" directories = "6" displaydoc = "0.2" -educe = { version = "0.6.0", features = ["Debug"], default-features = false } +educe = { version = "0.6", features = ["Debug"], default-features = false } enumflags2 = "0.7" ethereum-types = { version = "0.16", features = ["ethbloom"] } ez-jsonrpc-types = "0.5" diff --git a/src/daemon/mod.rs b/src/daemon/mod.rs index 1c1e0ee9fb45..0f84bc458c43 100644 --- a/src/daemon/mod.rs +++ b/src/daemon/mod.rs @@ -595,6 +595,9 @@ pub(super) async fn start_services( if opts.exit_after_init { return Ok(()); } + if !opts.stateless { + ctx.state_manager.maybe_rewind_heaviest_tipset()?; + } let p2p_service = create_p2p_service(&mut services, &mut config, &ctx).await?; let mpool = create_mpool(&mut services, &p2p_service, &ctx)?; let chain_follower = create_chain_follower(opts, &p2p_service, mpool.clone(), &ctx)?; diff --git a/src/networks/actors_bundle.rs b/src/networks/actors_bundle.rs index 3628f9df373e..249374bb044b 100644 --- a/src/networks/actors_bundle.rs +++ b/src/networks/actors_bundle.rs @@ -110,7 +110,7 @@ pub static ACTOR_BUNDLES: LazyLock> = LazyLock::new(|| { }); #[serde_as] -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, PartialEq)] pub struct ActorBundleMetadata { pub network: NetworkChain, pub version: String, diff --git a/src/networks/mod.rs b/src/networks/mod.rs index fc3723107de1..44c716d5654b 100644 --- a/src/networks/mod.rs +++ b/src/networks/mod.rs @@ -7,6 +7,7 @@ use std::sync::LazyLock; use ahash::HashMap; use cid::Cid; use fil_actors_shared::v13::runtime::Policy; +use fvm_ipld_blockstore::Blockstore; use itertools::Itertools; use libp2p::Multiaddr; use serde::{Deserialize, Serialize}; @@ -20,6 +21,7 @@ use crate::db::SettingsStore; use crate::eth::EthChainId; use crate::shim::clock::{ChainEpoch, EPOCH_DURATION_SECONDS, EPOCHS_IN_DAY}; use crate::shim::econ::TokenAmount; +use crate::shim::machine::BuiltinActorManifest; use crate::shim::sector::{RegisteredPoStProofV3, RegisteredSealProofV3}; use crate::shim::version::NetworkVersion; use crate::utils::misc::env::env_or_default; @@ -231,6 +233,19 @@ pub struct HeightInfo { pub bundle: Option, } +pub struct HeightInfoWithActorManifest<'a> { + #[allow(dead_code)] + pub height: Height, + pub info: &'a HeightInfo, + pub manifest_cid: Cid, +} + +impl<'a> HeightInfoWithActorManifest<'a> { + pub fn manifest(&self, store: &impl Blockstore) -> anyhow::Result { + BuiltinActorManifest::load_manifest(store, &self.manifest_cid) + } +} + #[derive(Clone)] struct DrandPoint<'a> { pub height: ChainEpoch, @@ -422,6 +437,29 @@ impl ChainConfig { .map(|(height, _)| *height) } + /// Gets the latest network height prior to the given epoch that upgrades the actor bundle + pub fn network_height_with_actor_bundle<'a>( + &'a self, + epoch: ChainEpoch, + ) -> Option> { + if let Some((height, info, manifest_cid)) = self + .height_infos + .iter() + .sorted_by_key(|(_, info)| info.epoch) + .rev() + .filter_map(|(height, info)| info.bundle.map(|bundle| (*height, info, bundle))) + .find(|(_, info, _)| epoch > info.epoch) + { + Some(HeightInfoWithActorManifest { + height, + info, + manifest_cid, + }) + } else { + None + } + } + /// Returns the network version at the given epoch. /// If the epoch is before the first upgrade, the genesis network version is returned. pub fn network_version(&self, epoch: ChainEpoch) -> NetworkVersion { @@ -753,4 +791,18 @@ mod tests { assert_eq!(cfg.network_version(1_070_494 + 1), NetworkVersion::V21); assert_eq!(cfg.network_version_revision(1_070_494 + 1), 1); } + + #[test] + fn test_network_height_with_actor_bundle() { + let cfg = ChainConfig::mainnet(); + let info = cfg.network_height_with_actor_bundle(5_348_280 + 1).unwrap(); + assert_eq!(info.height, Height::GoldenWeek); + let info = cfg.network_height_with_actor_bundle(5_348_280).unwrap(); + // No actor bundle for Tock, so it should be Teep + assert_eq!(info.height, Height::Teep); + let info = cfg.network_height_with_actor_bundle(5_348_280 - 1).unwrap(); + assert_eq!(info.height, Height::Teep); + assert!(cfg.network_height_with_actor_bundle(1).is_none()); + assert!(cfg.network_height_with_actor_bundle(0).is_none()); + } } diff --git a/src/shim/machine/manifest.rs b/src/shim/machine/manifest.rs index 2c726b25af3f..9a5423c63e02 100644 --- a/src/shim/machine/manifest.rs +++ b/src/shim/machine/manifest.rs @@ -5,7 +5,10 @@ use std::collections::BTreeMap; -use crate::utils::db::CborStoreExt as _; +use crate::{ + networks::{ACTOR_BUNDLES_METADATA, ActorBundleMetadata}, + utils::db::CborStoreExt as _, +}; use anyhow::{Context as _, ensure}; use cid::Cid; use fvm_ipld_blockstore::Blockstore; @@ -187,6 +190,18 @@ impl BuiltinActorManifest { pub fn builtin_actors(&self) -> impl ExactSizeIterator + '_ { self.builtin2cid.iter().map(|(k, v)| (*k, *v)) // std::iter::Copied doesn't play well with the tuple here } + /// Get the actor bundle metadata + pub fn metadata(&self) -> anyhow::Result<&ActorBundleMetadata> { + ACTOR_BUNDLES_METADATA + .values() + .find(|v| &v.manifest == self) + .with_context(|| { + format!( + "actor bundle not found for system actor {}", + self.get_system() + ) + }) + } } macro_rules! exhaustive { @@ -304,4 +319,12 @@ mod test { serde_json::from_str(&serialized); assert!(deserialized.is_err()); } + + #[test] + fn test_manifest_metadata() { + for metadata in ACTOR_BUNDLES_METADATA.values() { + let manifest = &metadata.manifest; + assert_eq!(metadata, manifest.metadata().unwrap()); + } + } } diff --git a/src/state_manager/mod.rs b/src/state_manager/mod.rs index c2316a71e2ab..516a0a59ec73 100644 --- a/src/state_manager/mod.rs +++ b/src/state_manager/mod.rs @@ -204,6 +204,60 @@ where }) } + /// Returns the currently tracked heaviest tipset. + pub fn heaviest_tipset(&self) -> Arc { + self.chain_store().heaviest_tipset() + } + + /// Returns the currently tracked heaviest tipset and rewind to a most recent valid one if necessary. + /// A valid head has + /// - state tree in the blockstore + /// - actor bundle version in the state tree that matches chain configuration + pub fn maybe_rewind_heaviest_tipset(&self) -> anyhow::Result<()> { + while self.maybe_rewind_heaviest_tipset_once()? {} + Ok(()) + } + + fn maybe_rewind_heaviest_tipset_once(&self) -> anyhow::Result { + let head = self.heaviest_tipset(); + if let Some(info) = self + .chain_config() + .network_height_with_actor_bundle(head.epoch()) + { + let expected_height_info = info.info; + let expected_bundle = info.manifest(self.blockstore())?; + let expected_bundle_metadata = expected_bundle.metadata()?; + let state = self.get_state_tree(head.parent_state())?; + let bundle_metadata = state.get_actor_bundle_metadata()?; + if expected_bundle_metadata != bundle_metadata { + let current_epoch = head.epoch(); + let target_head = self.chain_index().tipset_by_height( + (expected_height_info.epoch - 1).max(0), + head, + ResolveNullTipset::TakeOlder, + )?; + let target_epoch = target_head.epoch(); + let bundle_version = &bundle_metadata.version; + let expected_bundle_version = &expected_bundle_metadata.version; + if target_epoch < current_epoch { + tracing::warn!( + "rewinding chain head from {current_epoch} to {target_epoch}, actor bundle: {bundle_version}, expected: {expected_bundle_version}" + ); + if self.blockstore().has(target_head.parent_state())? { + self.chain_store().set_heaviest_tipset(target_head)?; + return Ok(true); + } else { + anyhow::bail!( + "failed to rewind, state tree @ {target_epoch} is missing from blockstore: {}", + target_head.parent_state() + ); + } + } + } + } + Ok(false) + } + // Given the assumption that the heaviest tipset must always be validated, // we can populate our state cache by walking backwards through the // block-chain. A warm cache cuts 10-20 seconds from the first state @@ -211,7 +265,7 @@ where pub fn populate_cache(&self) { for (child, parent) in self .chain_index() - .chain(self.cs.heaviest_tipset()) + .chain(self.heaviest_tipset()) .tuple_windows() .take(DEFAULT_TIPSET_CACHE_SIZE.into()) { @@ -610,7 +664,7 @@ where message: &Message, tipset: Option>, ) -> Result { - let ts = tipset.unwrap_or_else(|| self.cs.heaviest_tipset()); + let ts = tipset.unwrap_or_else(|| self.heaviest_tipset()); let chain_rand = self.chain_rand(Arc::clone(&ts)); self.call_raw(message, chain_rand, &ts) } @@ -620,7 +674,7 @@ where tipset: Option>, msg: Message, ) -> anyhow::Result { - let ts = tipset.unwrap_or_else(|| self.cs.heaviest_tipset()); + let ts = tipset.unwrap_or_else(|| self.heaviest_tipset()); let from_a = self.resolve_to_key_addr(&msg.from, &ts).await?; @@ -664,7 +718,7 @@ where tipset: Option>, trace_config: VMTrace, ) -> Result<(InvocResult, ApplyRet, Duration), Error> { - let ts = tipset.unwrap_or_else(|| self.cs.heaviest_tipset()); + let ts = tipset.unwrap_or_else(|| self.heaviest_tipset()); let (st, _) = self .tipset_state(&ts) .await @@ -1077,7 +1131,7 @@ where let (sender, mut receiver) = oneshot::channel::<()>(); let message = crate::chain::get_chain_message(self.blockstore(), &msg_cid) .map_err(|err| Error::Other(format!("failed to load message {err:}")))?; - let current_tipset = self.cs.heaviest_tipset(); + let current_tipset = self.heaviest_tipset(); let maybe_message_receipt = self.tipset_executed_message(¤t_tipset, &message, true)?; if let Some(r) = maybe_message_receipt { @@ -1196,10 +1250,10 @@ where look_back_limit: Option, allow_replaced: Option, ) -> Result, Receipt)>, Error> { - let from = from.unwrap_or_else(|| self.chain_store().heaviest_tipset()); + let from = from.unwrap_or_else(|| self.heaviest_tipset()); let message = crate::chain::get_chain_message(self.blockstore(), &msg_cid) .map_err(|err| Error::Other(format!("failed to load message {err}")))?; - let current_tipset = self.cs.heaviest_tipset(); + let current_tipset = self.heaviest_tipset(); let maybe_message_receipt = self.tipset_executed_message(&from, &message, allow_replaced.unwrap_or(true))?; if let Some(r) = maybe_message_receipt { @@ -1496,7 +1550,7 @@ where /// This is suspected to be due something in the VM or its `WASM` runtime. #[tracing::instrument(skip(self))] pub fn validate_range(self: &Arc, epochs: RangeInclusive) -> anyhow::Result<()> { - let heaviest = self.cs.heaviest_tipset(); + let heaviest = self.heaviest_tipset(); let heaviest_epoch = heaviest.epoch(); let end = self .chain_index() @@ -1676,7 +1730,7 @@ where let next_epoch = epoch + 1; // Only check the immediate next epoch - this is the most likely place to find a child - let heaviest = self.cs.heaviest_tipset(); + let heaviest = self.heaviest_tipset(); if next_epoch > heaviest.epoch() { return None; }