From 03b79e978bcb8ef3512064407dfa904a4a31d5e8 Mon Sep 17 00:00:00 2001 From: Copybara Bot Date: Tue, 16 Jun 2026 16:20:56 +0000 Subject: [PATCH] Sync cd993ed01aea032b062f609617e5eae2171dbffa FolderOrigin-RevId: cd993ed01aea032b062f609617e5eae2171dbffa --- Cargo.lock | 1141 +---------------- Cargo.toml | 45 +- README.md | 16 +- beam-apps/apps/uniswap/src/api.rs | 102 +- beam-apps/apps/uniswap/src/host.rs | 27 +- beam-apps/apps/uniswap/src/lib.rs | 84 +- beam-apps/apps/uniswap/src/plan.rs | 37 +- beam-apps/apps/uniswap/src/tests.rs | 95 +- .../apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../apps/uniswap/1.0.2/version.json.sig | 2 +- beam-apps/fixtures/broad-wildcard/index.json | 8 +- .../fixtures/broad-wildcard/index.json.sig | 2 +- .../apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../apps/uniswap/1.0.2/version.json.sig | 2 +- beam-apps/fixtures/invalid-digest/index.json | 6 +- .../fixtures/invalid-digest/index.json.sig | 2 +- .../apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../apps/uniswap/1.0.2/version.json.sig | 2 +- .../fixtures/malformed-permissions/index.json | 8 +- .../malformed-permissions/index.json.sig | 2 +- .../apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../apps/uniswap/1.0.2/version.json.sig | 2 +- beam-apps/fixtures/missing-fields/index.json | 8 +- .../fixtures/missing-fields/index.json.sig | 2 +- .../apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../apps/uniswap/1.0.2/version.json.sig | 2 +- .../fixtures/unsupported-beam/index.json | 8 +- .../fixtures/unsupported-beam/index.json.sig | 2 +- .../valid/apps/uniswap/1.0.2/manifest.json | 4 +- .../apps/uniswap/1.0.2/manifest.json.sig | 2 +- .../valid/apps/uniswap/1.0.2/module.wasm | Bin 381130 -> 403598 bytes .../valid/apps/uniswap/1.0.2/version.json.sig | 2 +- beam-apps/fixtures/valid/index.json | 8 +- beam-apps/fixtures/valid/index.json.sig | 2 +- docker/Dockerfile.payy-auth-api-bin | 86 ++ docker/docker-compose.payy-auth-phala.yml | 57 + docker/prelaunch.payy-auth-phala.sh | 339 +++++ pkg/aggregator-interface/Cargo.toml | 1 - pkg/aggregator/Cargo.toml | 1 - pkg/barretenberg-api-bin/Cargo.toml | 1 - pkg/barretenberg-api-client/Cargo.toml | 3 +- pkg/barretenberg-api-interface/Cargo.toml | 1 - pkg/barretenberg-api-server/Cargo.toml | 1 - pkg/barretenberg-api-tests/Cargo.toml | 1 - pkg/barretenberg-cli/Cargo.toml | 1 - pkg/barretenberg-interface/Cargo.toml | 1 - pkg/barretenberg-rs/Cargo.toml | 1 - pkg/beam-cli/Cargo.toml | 1 - pkg/beam-cli/src/apps/host.rs | 2 + pkg/beam-cli/src/apps/runtime.rs | 141 +- pkg/beam-cli/src/apps/runtime/command.rs | 184 +++ pkg/beam-cli/src/apps/runtime/debug.rs | 95 ++ pkg/beam-cli/src/apps/runtime/guest.rs | 51 +- pkg/block-store/Cargo.toml | 1 - pkg/bungee-interface/Cargo.toml | 1 - pkg/burn-substitutor/Cargo.toml | 1 - pkg/client-http-longpoll/Cargo.toml | 1 - pkg/client-http/Cargo.toml | 1 - pkg/constants/Cargo.toml | 1 - pkg/contextful-macros/Cargo.toml | 1 - pkg/contextful/Cargo.toml | 1 - pkg/contracts/Cargo.toml | 1 - pkg/country/Cargo.toml | 1 - pkg/currency/Cargo.toml | 1 - pkg/data/Cargo.toml | 1 - pkg/database/Cargo.toml | 1 - pkg/diesel-util/Cargo.toml | 1 - pkg/doomslug/Cargo.toml | 1 - pkg/eip7702/Cargo.toml | 1 - pkg/element/Cargo.toml | 1 - pkg/encrypt/Cargo.toml | 1 - pkg/eth-util/Cargo.toml | 1 - pkg/guild-client-http/Cargo.toml | 1 - pkg/guild-interface/Cargo.toml | 1 - pkg/hash-poseidon/Cargo.toml | 1 - pkg/hash/Cargo.toml | 1 - pkg/http-interface/Cargo.toml | 1 - pkg/json-store/Cargo.toml | 1 - pkg/json-with-logging/Cargo.toml | 1 - pkg/kyc/Cargo.toml | 1 - pkg/minimal-poseidon/Cargo.toml | 1 - pkg/network/Cargo.toml | 1 - pkg/node-client-http/Cargo.toml | 1 - pkg/node-interface/Cargo.toml | 1 - pkg/node/Cargo.toml | 1 - pkg/noir-abi-inputs-macro/Cargo.toml | 1 - pkg/notes-interface/Cargo.toml | 1 - pkg/p2p2/Cargo.toml | 1 - pkg/parse-link/Cargo.toml | 1 - pkg/payy-evm-client-alloy/Cargo.toml | 1 - pkg/payy-evm-client-interface/Cargo.toml | 1 - pkg/payy-evm-client-prover-bb/Cargo.toml | 1 - .../Cargo.toml | 1 - pkg/payy-evm-client/Cargo.toml | 1 - pkg/payy-evm-parse-link/Cargo.toml | 1 - pkg/payy-note/Cargo.toml | 1 - pkg/price-cache-interface/Cargo.toml | 1 - pkg/primitives/Cargo.toml | 4 +- pkg/prover/Cargo.toml | 1 - pkg/ramps-interface/Cargo.toml | 1 - pkg/rpc-error-convert/Cargo.toml | 1 - pkg/rpc/Cargo.toml | 1 - pkg/serde_yaml/Cargo.toml | 1 - pkg/smirk/Cargo.toml | 1 - pkg/solc-tooling/Cargo.toml | 1 - pkg/solid/Cargo.toml | 1 - pkg/sourcify-client-reqwest/Cargo.toml | 1 - pkg/sourcify-interface/Cargo.toml | 1 - pkg/test-spy-macros/Cargo.toml | 1 - pkg/test-spy/Cargo.toml | 1 - pkg/testutil/Cargo.toml | 1 - pkg/wallet-data-dep/Cargo.toml | 1 - pkg/wallet-primitives/Cargo.toml | 1 - pkg/wallet/Cargo.toml | 1 - pkg/whitelist-ips/Cargo.toml | 1 - pkg/wire-message-macro/Cargo.toml | 1 - pkg/wire-message/Cargo.toml | 1 - pkg/workspace-hack/Cargo.toml | 538 -------- pkg/workspace-hack/src/lib.rs | 1 - pkg/xtask/Cargo.toml | 1 - .../{test/metadata.rs => cargo_metadata.rs} | 94 +- pkg/xtask/src/git.rs | 6 +- pkg/xtask/src/lint/file_length.rs | 195 +++ pkg/xtask/src/lint/file_length/report.rs | 44 + pkg/xtask/src/lint/file_length/tests.rs | 150 +++ pkg/xtask/src/lint/mod.rs | 19 +- pkg/xtask/src/lint/steps/checks.rs | 62 +- pkg/xtask/src/lint/steps/clippy.rs | 68 + pkg/xtask/src/lint/steps/clippy/selection.rs | 198 +++ pkg/xtask/src/lint/steps/command.rs | 32 + pkg/xtask/src/lint/steps/hakari.rs | 182 --- pkg/xtask/src/lint/steps/mod.rs | 10 +- pkg/xtask/src/lint/steps/workspace_deps.rs | 78 +- pkg/xtask/src/main.rs | 2 + pkg/xtask/src/test/changes.rs | 76 -- pkg/xtask/src/test/graph.rs | 59 - pkg/xtask/src/test/mod.rs | 41 +- pkg/xtask/src/test/workspace.rs | 2 +- pkg/xtask/src/workspace_changes.rs | 147 +++ pkg/zk-circuits/Cargo.toml | 1 - pkg/zk-primitives/Cargo.toml | 1 - scripts/check-file-length.sh | 72 -- taplo.toml | 3 - 153 files changed, 2211 insertions(+), 2559 deletions(-) create mode 100644 docker/Dockerfile.payy-auth-api-bin create mode 100644 docker/docker-compose.payy-auth-phala.yml create mode 100644 docker/prelaunch.payy-auth-phala.sh create mode 100644 pkg/beam-cli/src/apps/runtime/command.rs create mode 100644 pkg/beam-cli/src/apps/runtime/debug.rs delete mode 100644 pkg/workspace-hack/Cargo.toml delete mode 100644 pkg/workspace-hack/src/lib.rs rename pkg/xtask/src/{test/metadata.rs => cargo_metadata.rs} (61%) create mode 100644 pkg/xtask/src/lint/file_length.rs create mode 100644 pkg/xtask/src/lint/file_length/report.rs create mode 100644 pkg/xtask/src/lint/file_length/tests.rs create mode 100644 pkg/xtask/src/lint/steps/clippy.rs create mode 100644 pkg/xtask/src/lint/steps/clippy/selection.rs delete mode 100644 pkg/xtask/src/lint/steps/hakari.rs delete mode 100644 pkg/xtask/src/test/changes.rs delete mode 100644 pkg/xtask/src/test/graph.rs create mode 100644 pkg/xtask/src/workspace_changes.rs delete mode 100755 scripts/check-file-length.sh diff --git a/Cargo.lock b/Cargo.lock index 52cf71f..3f416e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -356,7 +356,6 @@ dependencies = [ "tracing", "unimock", "web3", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -372,7 +371,6 @@ dependencies = [ "node-interface", "thiserror 1.0.69", "unimock", - "workspace-hack", "zk-primitives", ] @@ -383,7 +381,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -449,9 +446,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b163ff4acf0eac29af05a911397cc418a76e153467b859398adc26cb9335a611" dependencies = [ "alloy-primitives", - "alloy-rlp", "num_enum", - "serde", "strum 0.27.2", ] @@ -541,7 +536,6 @@ dependencies = [ "alloy-primitives", "alloy-sol-type-parser", "alloy-sol-types", - "derive_more 2.1.1", "itoa 1.0.17", "serde", "serde_json", @@ -582,9 +576,7 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "borsh", - "k256", "serde", - "serde_with", "thiserror 2.0.17", ] @@ -618,8 +610,6 @@ dependencies = [ "c-kzg", "derive_more 2.1.1", "either", - "ethereum_ssz", - "ethereum_ssz_derive", "serde", "serde_with", "sha2", @@ -719,7 +709,6 @@ dependencies = [ "const-hex", "derive_more 2.1.1", "foldhash 0.2.0", - "getrandom 0.4.1", "hashbrown 0.16.1", "indexmap 2.14.0", "itoa 1.0.17", @@ -748,17 +737,12 @@ dependencies = [ "alloy-network", "alloy-network-primitives", "alloy-primitives", - "alloy-pubsub", "alloy-rpc-client", - "alloy-rpc-types-debug", "alloy-rpc-types-eth", - "alloy-rpc-types-trace", "alloy-signer", "alloy-sol-types", "alloy-transport", "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", "async-stream", "async-trait", "auto_impl", @@ -779,28 +763,6 @@ dependencies = [ "wasmtimer", ] -[[package]] -name = "alloy-pubsub" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8bd82953194dec221aa4cbbbb0b1e2df46066fe9d0333ac25b43a311e122d13" -dependencies = [ - "alloy-json-rpc", - "alloy-primitives", - "alloy-transport", - "auto_impl", - "bimap", - "futures", - "parking_lot 0.12.5", - "serde", - "serde_json", - "tokio", - "tokio-stream", - "tower", - "tracing", - "wasmtimer", -] - [[package]] name = "alloy-rlp" version = "0.3.13" @@ -831,11 +793,8 @@ checksum = "f2792758a93ae32a32e9047c843d536e1448044f78422d71bf7d7c05149e103f" dependencies = [ "alloy-json-rpc", "alloy-primitives", - "alloy-pubsub", "alloy-transport", "alloy-transport-http", - "alloy-transport-ipc", - "alloy-transport-ws", "futures", "pin-project", "reqwest 0.12.28", @@ -856,7 +815,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79cff039bf01a17d76c0aace3a3a773d5f895eb4c68baaae729ec9da9e86c99c" dependencies = [ "alloy-primitives", - "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", "serde", @@ -873,38 +831,6 @@ dependencies = [ "alloy-serde", ] -[[package]] -name = "alloy-rpc-types-debug" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b21e1ad18ff1b31ff1030e046462ab8168cf8894e6778cd805c8bdfe2bd649" -dependencies = [ - "alloy-primitives", - "derive_more 2.1.1", - "serde", - "serde_with", -] - -[[package]] -name = "alloy-rpc-types-engine" -version = "1.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10620d600cc46538f613c561ac9a923843c6c74c61f054828dcdb8dd18c72ec4" -dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives", - "alloy-rlp", - "alloy-serde", - "derive_more 2.1.1", - "ethereum_ssz", - "ethereum_ssz_derive", - "jsonwebtoken", - "rand 0.8.5", - "serde", - "strum 0.27.2", -] - [[package]] name = "alloy-rpc-types-eth" version = "1.7.3" @@ -926,20 +852,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "alloy-rpc-types-trace" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad79f1e27e161943b5a4f99fe5534ef0849876214be411e0032c12f38e94daa" -dependencies = [ - "alloy-primitives", - "alloy-rpc-types-eth", - "alloy-serde", - "serde", - "serde_json", - "thiserror 2.0.17", -] - [[package]] name = "alloy-serde" version = "1.7.3" @@ -977,12 +889,9 @@ dependencies = [ "alloy-primitives", "alloy-signer", "async-trait", - "coins-bip32", - "coins-bip39", "k256", "rand 0.8.5", "thiserror 2.0.17", - "zeroize", ] [[package]] @@ -1097,43 +1006,6 @@ dependencies = [ "url", ] -[[package]] -name = "alloy-transport-ipc" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ef85688e5ac2da72afc804e0a1f153a1f309f05a864b1998bbbed7804dbaab" -dependencies = [ - "alloy-json-rpc", - "alloy-pubsub", - "alloy-transport", - "bytes", - "futures", - "interprocess", - "pin-project", - "serde", - "serde_json", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "alloy-transport-ws" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f00445db69d63298e2b00a0ea1d859f00e6424a3144ffc5eba9c31da995e16" -dependencies = [ - "alloy-pubsub", - "alloy-transport", - "futures", - "http 1.4.0", - "serde_json", - "tokio", - "tokio-tungstenite", - "tracing", - "ws_stream_wasm", -] - [[package]] name = "alloy-trie" version = "0.9.4" @@ -1157,7 +1029,7 @@ version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fa0c53e8c1e1ef4d01066b01c737fb62fc9397ab52c6e7bb5669f97d281b9bc" dependencies = [ - "darling 0.21.3", + "darling", "proc-macro2", "quote", "syn 2.0.112", @@ -1237,15 +1109,6 @@ dependencies = [ "object 0.32.2", ] -[[package]] -name = "arc-swap" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" -dependencies = [ - "rustversion", -] - [[package]] name = "argon2" version = "0.5.3" @@ -1266,7 +1129,6 @@ checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", "ark-ff 0.5.0", - "ark-r1cs-std", "ark-std 0.5.0", ] @@ -1444,35 +1306,6 @@ dependencies = [ "hashbrown 0.15.5", ] -[[package]] -name = "ark-r1cs-std" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" -dependencies = [ - "ark-ec", - "ark-ff 0.5.0", - "ark-relations", - "ark-std 0.5.0", - "educe", - "num-bigint", - "num-integer", - "num-traits", - "tracing", -] - -[[package]] -name = "ark-relations" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" -dependencies = [ - "ark-ff 0.5.0", - "ark-std 0.5.0", - "tracing", - "tracing-subscriber 0.2.25", -] - [[package]] name = "ark-serialize" version = "0.3.0" @@ -1645,19 +1478,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-compression" -version = "0.4.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "async-io" version = "2.6.0" @@ -1755,17 +1575,6 @@ dependencies = [ "syn 2.0.112", ] -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version 0.4.1", -] - [[package]] name = "asynchronous-codec" version = "0.6.2" @@ -1927,7 +1736,6 @@ dependencies = [ "rpc", "tokio", "tracing", - "workspace-hack", ] [[package]] @@ -1948,7 +1756,6 @@ dependencies = [ "tracing", "url", "webpki-roots 0.26.11", - "workspace-hack", ] [[package]] @@ -1960,7 +1767,6 @@ dependencies = [ "primitives", "serde", "thiserror 1.0.69", - "workspace-hack", ] [[package]] @@ -1975,7 +1781,6 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tracing", - "workspace-hack", ] [[package]] @@ -1996,7 +1801,6 @@ dependencies = [ "tower", "unimock", "url", - "workspace-hack", ] [[package]] @@ -2009,7 +1813,6 @@ dependencies = [ "tempfile", "tokio", "tracing", - "workspace-hack", ] [[package]] @@ -2019,7 +1822,6 @@ dependencies = [ "async-trait", "thiserror 1.0.69", "unimock", - "workspace-hack", ] [[package]] @@ -2032,7 +1834,6 @@ dependencies = [ "lazy_static", "polybase_bb_rs", "tokio", - "workspace-hack", ] [[package]] @@ -2125,15 +1926,8 @@ dependencies = [ "url", "wasmi", "web3", - "workspace-hack", ] -[[package]] -name = "bech32" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" - [[package]] name = "benchy" version = "0.1.1" @@ -2181,12 +1975,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bimap" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" - [[package]] name = "binary-merge" version = "0.1.2" @@ -2334,9 +2122,6 @@ name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" -dependencies = [ - "serde_core", -] [[package]] name = "bitmaps" @@ -2355,7 +2140,6 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", - "serde", "tap", "wyz", ] @@ -2420,15 +2204,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - [[package]] name = "block-store" version = "1.3.0" @@ -2442,7 +2217,6 @@ dependencies = [ "thiserror 1.0.69", "tracing", "wire-message", - "workspace-hack", ] [[package]] @@ -2559,7 +2333,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "sha2", "tinyvec", ] @@ -2600,7 +2373,6 @@ dependencies = [ "serde_urlencoded 0.7.1", "thiserror 1.0.69", "unimock", - "workspace-hack", ] [[package]] @@ -2621,7 +2393,6 @@ dependencies = [ "tokio", "tracing", "url", - "workspace-hack", "zk-primitives", ] @@ -2872,7 +2643,6 @@ dependencies = [ "serde_json", "tokio", "tracing", - "workspace-hack", ] [[package]] @@ -2886,7 +2656,6 @@ dependencies = [ "parking_lot 0.12.5", "rpc", "tokio", - "workspace-hack", ] [[package]] @@ -2928,57 +2697,6 @@ dependencies = [ "unicode-width 0.1.14", ] -[[package]] -name = "coins-bip32" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2073678591747aed4000dd468b97b14d7007f7936851d3f2f01846899f5ebf08" -dependencies = [ - "bs58 0.5.1", - "coins-core", - "digest 0.10.7", - "hmac", - "k256", - "serde", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-bip39" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b169b26623ff17e9db37a539fe4f15342080df39f129ef7631df7683d6d9d4" -dependencies = [ - "bitvec", - "coins-bip32", - "hmac", - "once_cell", - "pbkdf2", - "rand 0.8.5", - "sha2", - "thiserror 1.0.69", -] - -[[package]] -name = "coins-core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b962ad8545e43a28e14e87377812ba9ae748dd4fd963f4c10e9fcc6d13475b" -dependencies = [ - "base64 0.21.7", - "bech32", - "bs58 0.5.1", - "const-hex", - "digest 0.10.7", - "generic-array", - "ripemd", - "serde", - "sha2", - "sha3", - "thiserror 1.0.69", -] - [[package]] name = "color-eyre" version = "0.6.5" @@ -3023,26 +2741,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "compression-codecs" -version = "0.4.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2" -dependencies = [ - "brotli", - "compression-core", - "flate2", - "memchr", - "zstd", - "zstd-safe", -] - -[[package]] -name = "compression-core" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -3129,9 +2827,6 @@ checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "constants" version = "0.1.0" -dependencies = [ - "workspace-hack", -] [[package]] name = "contextful" @@ -3141,7 +2836,6 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "workspace-hack", ] [[package]] @@ -3150,7 +2844,6 @@ version = "0.1.0" dependencies = [ "quote", "syn 2.0.112", - "workspace-hack", ] [[package]] @@ -3178,7 +2871,6 @@ dependencies = [ "tokio", "tracing", "web3", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -3219,16 +2911,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -3252,7 +2934,6 @@ dependencies = [ "serde", "strum 0.27.2", "strum_macros 0.27.2", - "workspace-hack", ] [[package]] @@ -3297,12 +2978,6 @@ 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-deque" version = "0.8.6" @@ -3403,7 +3078,6 @@ dependencies = [ "strum_macros 0.27.2", "thiserror 1.0.69", "ts-rs", - "workspace-hack", ] [[package]] @@ -3446,38 +3120,14 @@ dependencies = [ "syn 2.0.112", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.112", + "darling_core", + "darling_macro", ] [[package]] @@ -3495,24 +3145,13 @@ dependencies = [ "syn 2.0.112", ] -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.112", -] - [[package]] name = "darling_macro" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core 0.21.3", + "darling_core", "quote", "syn 2.0.112", ] @@ -3548,7 +3187,6 @@ dependencies = [ "strum 0.27.2", "ts-rs", "uuid 1.19.0", - "workspace-hack", ] [[package]] @@ -3592,7 +3230,6 @@ dependencies = [ "serial_test", "tokio", "tokio-postgres", - "workspace-hack", ] [[package]] @@ -3733,35 +3370,15 @@ dependencies = [ [[package]] name = "derive_more" -version = "1.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "derive_more-impl 1.0.0", + "derive_more-impl", ] [[package]] -name = "derive_more" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl 2.1.1", -] - -[[package]] -name = "derive_more-impl" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.112", -] - -[[package]] -name = "derive_more-impl" +name = "derive_more-impl" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" @@ -3796,7 +3413,6 @@ name = "diesel-util" version = "0.1.0" dependencies = [ "diesel", - "workspace-hack", ] [[package]] @@ -3913,12 +3529,6 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8975ffdaa0ef3661bfe02dbdcc06c9f829dfafe6a3c474de366a8d5e44276921" -[[package]] -name = "doctest-file" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" - [[package]] name = "doomslug" version = "1.3.0" @@ -3930,7 +3540,6 @@ dependencies = [ "sha3", "thiserror 1.0.69", "tracing", - "workspace-hack", ] [[package]] @@ -4010,7 +3619,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd122633e4bef06db27737f21d3738fb89c8f6d5360d6d9d7635dda142a7757e" dependencies = [ - "darling 0.21.3", + "darling", "either", "heck 0.5.0", "proc-macro2", @@ -4127,7 +3736,6 @@ dependencies = [ "tokio", "tracing", "web3", - "workspace-hack", ] [[package]] @@ -4158,7 +3766,6 @@ dependencies = [ "serde_json", "test-strategy", "ts-rs", - "workspace-hack", ] [[package]] @@ -4173,7 +3780,6 @@ dependencies = [ "ff", "generic-array", "group", - "hkdf", "pem-rfc7468", "pkcs8", "rand_core 0.6.4", @@ -4204,7 +3810,6 @@ version = "0.1.0" dependencies = [ "crypto_secretbox", "thiserror 1.0.69", - "workspace-hack", "x25519-dalek 2.0.1", ] @@ -4286,7 +3891,6 @@ dependencies = [ "ethereum-types", "secp256k1 0.28.2", "sha3", - "workspace-hack", ] [[package]] @@ -4314,10 +3918,8 @@ checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ "crunchy", "fixed-hash", - "impl-codec", "impl-rlp", "impl-serde", - "scale-info", "tiny-keccak", ] @@ -4329,54 +3931,12 @@ checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ "ethbloom", "fixed-hash", - "impl-codec", "impl-rlp", "impl-serde", "primitive-types", - "scale-info", "uint 0.9.5", ] -[[package]] -name = "ethereum_serde_utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc1355dbb41fbbd34ec28d4fb2a57d9a70c67ac3c19f6a5ca4d4a176b9e997a" -dependencies = [ - "alloy-primitives", - "hex", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "ethereum_ssz" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dcddb2554d19cde19b099fadddde576929d7a4d0c1cd3512d1fd95cf174375c" -dependencies = [ - "alloy-primitives", - "ethereum_serde_utils", - "itertools 0.13.0", - "serde", - "serde_derive", - "smallvec", - "typenum", -] - -[[package]] -name = "ethereum_ssz_derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a657b6b3b7e153637dc6bdc6566ad9279d9ee11a15b12cfb24a2e04360637e9f" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.112", -] - [[package]] name = "ethnum" version = "1.5.2" @@ -4520,10 +4080,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cb01cd46b0cf372153850f4c6c272d9cbea2da513e07538405148f95bd789f3" dependencies = [ "atomic", - "parking_lot 0.12.5", "pear", "serde", - "tempfile", "toml 0.8.23", "uncased", "version_check", @@ -4778,10 +4336,6 @@ name = "futures-timer" version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" -dependencies = [ - "gloo-timers", - "send_wrapper 0.4.0", -] [[package]] name = "futures-util" @@ -4892,18 +4446,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "group" version = "0.13.0" @@ -4937,7 +4479,6 @@ dependencies = [ "thiserror 1.0.69", "tokio", "uuid 1.19.0", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -4965,7 +4506,6 @@ dependencies = [ "serde_json", "thiserror 1.0.69", "uuid 1.19.0", - "workspace-hack", "zk-primitives", ] @@ -5041,7 +4581,6 @@ dependencies = [ "rand_chacha 0.3.1", "rand_xorshift 0.4.0", "serde", - "workspace-hack", ] [[package]] @@ -5056,7 +4595,6 @@ dependencies = [ "rand_chacha 0.3.1", "rand_xorshift 0.4.0", "serde", - "workspace-hack", ] [[package]] @@ -5114,16 +4652,6 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "byteorder", - "num-traits", -] - [[package]] name = "headers" version = "0.3.9" @@ -5225,15 +4753,6 @@ dependencies = [ "paste", ] -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - [[package]] name = "hmac" version = "0.12.1" @@ -5344,15 +4863,8 @@ dependencies = [ "serde_json", "thiserror 1.0.69", "unimock", - "workspace-hack", ] -[[package]] -name = "http-range-header" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" - [[package]] name = "http-types" version = "2.12.0" @@ -5485,9 +4997,7 @@ dependencies = [ "http 1.4.0", "hyper 1.8.1", "hyper-util", - "log", "rustls 0.23.35", - "rustls-native-certs", "rustls-pki-types", "tokio", "tokio-rustls", @@ -5738,7 +5248,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" dependencies = [ "async-io", - "core-foundation 0.9.4", + "core-foundation", "fnv", "futures", "if-addrs", @@ -5869,7 +5379,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "block-padding", "generic-array", ] @@ -5906,21 +5415,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "interprocess" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bf2b0e0785c5394a7392f66d7c4fb9c653633c29b27a932280da3cb344c66a" -dependencies = [ - "doctest-file", - "futures-core", - "libc", - "recvmsg", - "tokio", - "widestring", - "windows-sys 0.52.0", -] - [[package]] name = "ipconfig" version = "0.3.2" @@ -5992,15 +5486,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -6061,7 +5546,6 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tracing", - "workspace-hack", ] [[package]] @@ -6072,7 +5556,6 @@ dependencies = [ "serde", "serde_json", "tracing", - "workspace-hack", ] [[package]] @@ -6130,21 +5613,6 @@ dependencies = [ "thiserror 2.0.17", ] -[[package]] -name = "jsonwebtoken" -version = "9.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" -dependencies = [ - "base64 0.22.1", - "js-sys", - "pem 3.0.6", - "ring 0.17.14", - "serde", - "serde_json", - "simple_asn1", -] - [[package]] name = "k256" version = "0.13.4" @@ -6194,16 +5662,6 @@ dependencies = [ "thiserror 1.0.69", "tokio", "ts-rs", - "workspace-hack", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata", ] [[package]] @@ -6656,7 +6114,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", - "libc", "pkg-config", "vcpkg", ] @@ -6709,7 +6166,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ "scopeguard", - "serde", ] [[package]] @@ -6896,7 +6352,6 @@ dependencies = [ "ff", "halo2curves", "lazy_static", - "workspace-hack", ] [[package]] @@ -7049,10 +6504,10 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.1.6", + "openssl-probe", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework", "security-framework-sys", "tempfile", ] @@ -7134,7 +6589,6 @@ dependencies = [ "ts-rs", "uuid 1.19.0", "veil", - "workspace-hack", ] [[package]] @@ -7259,10 +6713,9 @@ dependencies = [ "tokio-postgres", "tokio-stream", "tracing", - "tracing-subscriber 0.3.22", + "tracing-subscriber", "web3", "wire-message", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -7281,7 +6734,6 @@ dependencies = [ "serde", "tokio", "unimock", - "workspace-hack", "zk-primitives", ] @@ -7299,7 +6751,6 @@ dependencies = [ "thiserror 1.0.69", "ts-rs", "unimock", - "workspace-hack", "zk-primitives", ] @@ -7318,7 +6769,6 @@ dependencies = [ "serde", "serde_json", "syn 2.0.112", - "workspace-hack", ] [[package]] @@ -7534,7 +6984,6 @@ dependencies = [ "thiserror 1.0.69", "unimock", "uuid 1.19.0", - "workspace-hack", "zk-primitives", ] @@ -7573,17 +7022,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -7626,15 +7064,6 @@ dependencies = [ "syn 2.0.112", ] -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - [[package]] name = "nybbles" version = "0.4.8" @@ -7827,10 +7256,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -7882,21 +7307,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "openssl-probe" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" - -[[package]] -name = "openssl-src" -version = "300.5.5+3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1787d533e03597a7934fd0a765f0d28e94ecc5fb7789f8053b1e699a56f709" -dependencies = [ - "cc", -] - [[package]] name = "openssl-sys" version = "0.9.111" @@ -7905,7 +7315,6 @@ checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", - "openssl-src", "pkg-config", "vcpkg", ] @@ -8055,7 +7464,6 @@ dependencies = [ "tracing", "whitelist-ips", "wire-message", - "workspace-hack", ] [[package]] @@ -8067,7 +7475,6 @@ dependencies = [ "arrayvec", "bitvec", "byte-slice-cast", - "bytes", "const_format", "impl-trait-for-tuples", "parity-scale-codec-derive", @@ -8156,7 +7563,6 @@ dependencies = [ "thiserror 1.0.69", "ts-rs", "web3", - "workspace-hack", ] [[package]] @@ -8232,7 +7638,6 @@ dependencies = [ "sha3", "thiserror 1.0.69", "tokio", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -8246,7 +7651,6 @@ dependencies = [ "contextful", "payy-evm-client-interface", "tokio", - "workspace-hack", ] [[package]] @@ -8263,7 +7667,6 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "workspace-hack", "zk-primitives", ] @@ -8277,7 +7680,6 @@ dependencies = [ "element", "payy-evm-client-prover-interface", "tokio", - "workspace-hack", "zk-circuits", ] @@ -8290,7 +7692,6 @@ dependencies = [ "payy-evm-client-interface", "serde", "thiserror 1.0.69", - "workspace-hack", ] [[package]] @@ -8301,7 +7702,6 @@ dependencies = [ "element", "payy-evm-client-interface", "sha3", - "workspace-hack", "zk-primitives", ] @@ -8313,20 +7713,9 @@ dependencies = [ "serde", "serde_json", "unimock", - "workspace-hack", "zk-primitives", ] -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac", -] - [[package]] name = "pear" version = "0.2.9" @@ -8365,16 +7754,6 @@ dependencies = [ "base64 0.13.1", ] -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64 0.22.1", - "serde_core", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -8455,16 +7834,6 @@ dependencies = [ "serde", ] -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version 0.4.1", -] - [[package]] name = "phf" version = "0.11.3" @@ -8639,7 +8008,7 @@ dependencies = [ "num-bigint", "thiserror 1.0.69", "tracing", - "tracing-subscriber 0.3.22", + "tracing-subscriber", ] [[package]] @@ -8654,12 +8023,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - [[package]] name = "postgres-native-tls" version = "0.5.2" @@ -8769,7 +8132,6 @@ dependencies = [ "serde", "thiserror 1.0.69", "unimock", - "workspace-hack", ] [[package]] @@ -8791,7 +8153,6 @@ dependencies = [ "impl-codec", "impl-rlp", "impl-serde", - "scale-info", "uint 0.9.5", ] @@ -8819,7 +8180,6 @@ dependencies = [ "ts-rs", "uint 0.10.0", "web3", - "workspace-hack", ] [[package]] @@ -9118,7 +8478,6 @@ dependencies = [ "tokio", "tracing", "web3", - "workspace-hack", "zk-circuits", "zk-primitives", ] @@ -9313,7 +8672,6 @@ dependencies = [ "unimock", "uuid 1.19.0", "veil", - "workspace-hack", "zk-primitives", ] @@ -9516,7 +8874,6 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2988730ee014541157f48ce4dcc603940e00915edc3c7f9a8d78092256bb2493" dependencies = [ - "rand 0.9.2", "rustversion", ] @@ -9546,7 +8903,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" dependencies = [ - "pem 1.1.1", + "pem", "ring 0.16.20", "time", "yasna", @@ -9561,12 +8918,6 @@ dependencies = [ "rand_core 0.3.1", ] -[[package]] -name = "recvmsg" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" - [[package]] name = "redox_syscall" version = "0.2.16" @@ -9684,7 +9035,6 @@ version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "async-compression", "base64 0.21.7", "bytes", "encoding_rs", @@ -9711,7 +9061,6 @@ dependencies = [ "system-configuration 0.5.1", "tokio", "tokio-native-tls", - "tokio-util", "tower-service", "url", "wasm-bindgen", @@ -9749,7 +9098,6 @@ dependencies = [ "pin-project-lite", "quinn", "rustls 0.23.35", - "rustls-native-certs", "rustls-pki-types", "serde", "serde_json", @@ -9815,15 +9163,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "rlp" version = "0.5.2" @@ -9831,7 +9170,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ "bytes", - "rlp-derive", "rustc-hex", ] @@ -9845,17 +9183,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rmp" version = "0.8.15" @@ -9921,8 +9248,7 @@ dependencies = [ "tracing", "tracing-opentelemetry", "tracing-stackdriver", - "tracing-subscriber 0.3.22", - "workspace-hack", + "tracing-subscriber", ] [[package]] @@ -9933,7 +9259,6 @@ dependencies = [ "quote", "serde_json", "syn 2.0.112", - "workspace-hack", ] [[package]] @@ -10053,9 +9378,6 @@ name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -dependencies = [ - "rand 0.8.5", -] [[package]] name = "rustc-hex" @@ -10150,18 +9472,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" -dependencies = [ - "openssl-probe 0.2.0", - "rustls-pki-types", - "schannel", - "security-framework 3.5.1", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -10315,30 +9625,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scale-info" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" -dependencies = [ - "cfg-if", - "derive_more 1.0.0", - "parity-scale-codec", - "scale-info-derive", -] - -[[package]] -name = "scale-info-derive" -version = "2.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" -dependencies = [ - "proc-macro-crate 3.4.0", - "proc-macro2", - "quote", - "syn 2.0.112", -] - [[package]] name = "scc" version = "2.4.0" @@ -10498,20 +9784,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.10.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.10.1", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -10552,10 +9825,6 @@ name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" -dependencies = [ - "serde", - "serde_core", -] [[package]] name = "semver-parser" @@ -10566,18 +9835,6 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "sentry" version = "0.46.0" @@ -10679,7 +9936,7 @@ dependencies = [ "sentry-backtrace", "sentry-core", "tracing-core", - "tracing-subscriber 0.3.22", + "tracing-subscriber", ] [[package]] @@ -10886,7 +10143,7 @@ version = "3.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" dependencies = [ - "darling 0.21.3", + "darling", "proc-macro2", "quote", "syn 2.0.112", @@ -10897,7 +10154,6 @@ name = "serde_yaml" version = "0.9.36" dependencies = [ "serde_yaml_ng", - "workspace-hack", ] [[package]] @@ -11113,20 +10369,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.17", - "time", -] - -[[package]] -name = "siphasher" -version = "0.3.11" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" @@ -11218,7 +10462,6 @@ dependencies = [ "tokio", "tracing", "wire-message", - "workspace-hack", ] [[package]] @@ -11312,7 +10555,6 @@ dependencies = [ "reqwest 0.12.28", "sha2", "thiserror 1.0.69", - "workspace-hack", ] [[package]] @@ -11335,9 +10577,8 @@ dependencies = [ "tokio", "tokio-stream", "tracing", - "tracing-subscriber 0.3.22", + "tracing-subscriber", "uint 0.10.0", - "workspace-hack", ] [[package]] @@ -11360,7 +10601,6 @@ dependencies = [ "thiserror 1.0.69", "tokio", "url", - "workspace-hack", ] [[package]] @@ -11372,7 +10612,6 @@ dependencies = [ "serde", "serde_json", "thiserror 1.0.69", - "workspace-hack", ] [[package]] @@ -11768,7 +11007,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", + "core-foundation", "system-configuration-sys 0.5.0", ] @@ -11779,7 +11018,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.10.0", - "core-foundation 0.9.4", + "core-foundation", "system-configuration-sys 0.6.0", ] @@ -11790,7 +11029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags 2.10.0", - "core-foundation 0.9.4", + "core-foundation", "system-configuration-sys 0.6.0", ] @@ -11870,7 +11109,6 @@ dependencies = [ "serde", "test-spy-macros", "tokio", - "workspace-hack", ] [[package]] @@ -11880,7 +11118,6 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.112", - "workspace-hack", ] [[package]] @@ -11902,7 +11139,6 @@ dependencies = [ "once_cell", "reqwest 0.12.28", "tokio", - "workspace-hack", ] [[package]] @@ -11980,9 +11216,7 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa 1.0.17", - "libc", "num-conv", - "num_threads", "powerfmt", "serde_core", "time-core", @@ -12125,23 +11359,6 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "tokio-tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" -dependencies = [ - "futures-util", - "log", - "rustls 0.23.35", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite", - "webpki-roots 0.26.11", -] - [[package]] name = "tokio-util" version = "0.7.17" @@ -12153,7 +11370,6 @@ dependencies = [ "futures-io", "futures-sink", "pin-project-lite", - "slab", "tokio", ] @@ -12328,7 +11544,6 @@ checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "hdrhistogram", "indexmap 2.14.0", "pin-project-lite", "slab", @@ -12346,29 +11561,16 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "async-compression", - "base64 0.22.1", "bitflags 2.10.0", "bytes", - "futures-core", "futures-util", "http 1.4.0", "http-body 1.0.1", - "http-body-util", - "http-range-header", - "httpdate", "iri-string", - "mime", - "mime_guess", - "percent-encoding", "pin-project-lite", - "tokio", - "tokio-util", "tower", "tower-layer", "tower-service", - "tracing", - "uuid 1.19.0", ] [[package]] @@ -12423,7 +11625,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" dependencies = [ "tracing", - "tracing-subscriber 0.3.22", + "tracing-subscriber", ] [[package]] @@ -12452,7 +11654,7 @@ dependencies = [ "tracing", "tracing-core", "tracing-log", - "tracing-subscriber 0.3.22", + "tracing-subscriber", "web-time", ] @@ -12479,21 +11681,12 @@ dependencies = [ "thiserror 1.0.69", "time", "tracing-core", - "tracing-subscriber 0.3.22", + "tracing-subscriber", "url", "valuable", "valuable-serde", ] -[[package]] -name = "tracing-subscriber" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" -dependencies = [ - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.22" @@ -12521,7 +11714,6 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" dependencies = [ - "arc-swap", "serde", "stable_deref_trait", ] @@ -12603,25 +11795,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" -dependencies = [ - "bytes", - "data-encoding", - "http 1.4.0", - "httparse", - "log", - "rand 0.9.2", - "rustls 0.23.35", - "rustls-pki-types", - "sha1 0.10.6", - "thiserror 2.0.17", - "utf-8", -] - [[package]] name = "typenum" version = "1.20.0" @@ -13023,7 +12196,6 @@ dependencies = [ "serde_json", "tokio", "web3", - "workspace-hack", "zk-primitives", ] @@ -13042,7 +12214,6 @@ dependencies = [ "ts-rs", "uuid 1.19.0", "wallet-primitives", - "workspace-hack", "zk-primitives", ] @@ -13056,7 +12227,6 @@ dependencies = [ "serde_json", "sha3", "thiserror 1.0.69", - "workspace-hack", "zk-primitives", ] @@ -13467,7 +12637,6 @@ version = "1.3.0" dependencies = [ "libp2p", "tracing", - "workspace-hack", ] [[package]] @@ -13885,7 +13054,6 @@ dependencies = [ "strum 0.27.2", "strum_macros 0.27.2", "wire-message-macro", - "workspace-hack", ] [[package]] @@ -13895,7 +13063,6 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.112", - "workspace-hack", ] [[package]] @@ -13992,261 +13159,12 @@ dependencies = [ "wasmparser 0.244.0", ] -[[package]] -name = "workspace-hack" -version = "0.1.0" -dependencies = [ - "actix-router", - "aead", - "ahash", - "aho-corasick", - "allocator-api2", - "alloy-chains", - "alloy-consensus", - "alloy-dyn-abi", - "alloy-eip7702", - "alloy-eips", - "alloy-json-abi", - "alloy-primitives", - "alloy-provider", - "alloy-rlp", - "alloy-rpc-client", - "alloy-rpc-types", - "alloy-rpc-types-engine", - "alloy-rpc-types-eth", - "alloy-signer-local", - "alloy-sol-macro", - "alloy-sol-macro-expander", - "alloy-sol-macro-input", - "alloy-sol-type-parser", - "alloy-sol-types", - "alloy-transport-http", - "ark-bn254", - "ark-ec", - "ark-ff 0.5.0", - "ark-serialize 0.5.0", - "ark-std 0.5.0", - "arrayvec", - "async-compression", - "axum", - "base64 0.13.1", - "bindgen 0.71.1", - "bitflags 2.10.0", - "bitvec", - "blst", - "bs58 0.5.1", - "bumpalo", - "byteorder", - "bytes", - "c-kzg", - "cc", - "chrono", - "cipher", - "clang-sys", - "clap", - "clap_builder", - "compression-codecs", - "concurrent-queue", - "const-hex", - "crossbeam-epoch", - "crossbeam-utils", - "crunchy", - "crypto-common 0.1.7", - "curve25519-dalek 4.1.3", - "darling 0.21.3", - "darling_core 0.21.3", - "dashmap", - "data-encoding", - "der", - "derive_more 2.1.1", - "derive_more-impl 2.1.1", - "digest 0.10.7", - "ecdsa", - "ed25519", - "ed25519-dalek", - "either", - "elliptic-curve", - "errno", - "ethbloom", - "ethereum-types", - "ff", - "figment", - "foldhash 0.1.5", - "form_urlencoded", - "futures", - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-timer", - "futures-util", - "generic-array", - "getrandom 0.2.16", - "getrandom 0.3.4", - "group", - "hashbrown 0.13.2", - "hashbrown 0.14.5", - "hashbrown 0.15.5", - "hashbrown 0.16.1", - "hex", - "hmac", - "httparse", - "hyper 1.8.1", - "hyper-rustls", - "hyper-util", - "idna 1.1.0", - "indexmap 2.14.0", - "inout", - "insta", - "itertools 0.11.0", - "itertools 0.13.0", - "itertools 0.14.0", - "k256", - "keccak", - "lalrpop-util", - "lazy_static", - "libc", - "libm", - "libz-sys", - "linux-raw-sys 0.11.0", - "linux-raw-sys 0.4.15", - "lock_api", - "log", - "memchr", - "miniz_oxide", - "mio", - "native-tls", - "nom", - "num-bigint", - "num-integer", - "num-iter", - "num-traits", - "num_enum", - "num_enum_derive", - "nybbles", - "once_cell", - "openssl", - "openssl-sys", - "p256", - "parity-scale-codec", - "parking_lot 0.12.5", - "percent-encoding", - "phf_shared 0.11.3", - "portable-atomic", - "postgres-types", - "ppv-lite86", - "prettyplease", - "primitive-types", - "proc-macro2", - "prost 0.13.5", - "quote", - "rand 0.8.5", - "rand 0.9.2", - "rand_chacha 0.3.1", - "rand_chacha 0.9.0", - "rand_core 0.6.4", - "rand_core 0.9.3", - "regex", - "regex-automata", - "regex-syntax 0.8.8", - "reqwest 0.11.27", - "reqwest 0.12.28", - "ring 0.17.14", - "rlp 0.5.2", - "ruint", - "rustc-hash 2.1.1", - "rustc-hex", - "rustix 0.38.44", - "rustix 1.1.3", - "rustls 0.23.35", - "rustls-webpki", - "scopeguard", - "sec1", - "security-framework 2.11.1", - "security-framework 3.5.1", - "security-framework-sys", - "semver 1.0.27", - "serde", - "serde_core", - "serde_json", - "serde_spanned 1.0.4", - "serde_with", - "sha1 0.10.6", - "sha2", - "sha3", - "signature", - "similar", - "smallvec", - "socket2 0.5.10", - "socket2 0.6.1", - "spin 0.9.8", - "spki", - "strum 0.27.2", - "subtle", - "syn 1.0.109", - "syn 2.0.112", - "sync_wrapper 1.0.2", - "thiserror 2.0.17", - "time", - "tiny-keccak", - "tokio", - "tokio-postgres", - "tokio-rustls", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "toml 0.9.11+spec-1.1.0", - "tower", - "tower-http", - "tracing", - "tracing-core", - "tracing-subscriber 0.3.22", - "triomphe", - "unicode-bidi", - "unicode-normalization", - "url", - "uuid 1.19.0", - "winapi", - "windows-sys 0.48.0", - "windows-sys 0.52.0", - "windows-sys 0.59.0", - "windows-sys 0.60.2", - "windows-sys 0.61.2", - "winnow 0.7.14", - "x25519-dalek 2.0.1", - "zeroize", - "zstd", - "zstd-safe", - "zstd-sys", -] - [[package]] name = "writeable" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "ws_stream_wasm" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c173014acad22e83f16403ee360115b38846fe754e735c5d9d3803fe70c6abc" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version 0.4.1", - "send_wrapper 0.6.0", - "thiserror 2.0.17", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wyz" version = "0.5.1" @@ -14316,7 +13234,6 @@ dependencies = [ "thiserror 1.0.69", "toml 0.9.11+spec-1.1.0", "which", - "workspace-hack", ] [[package]] @@ -14498,7 +13415,6 @@ dependencies = [ "tokio", "unimock", "url", - "workspace-hack", "zk-primitives", ] @@ -14519,7 +13435,6 @@ dependencies = [ "sha3", "ts-rs", "web3", - "workspace-hack", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 58e0c49..295cd61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,9 +3,6 @@ resolver = "2" members = ["pkg/*", "app/packages/react-native-rust-bridge/cpp/rustbridge"] -[workspace.metadata.cargo-machete] -ignored = ["workspace-hack"] - [workspace.metadata.cargo-machete.renamed] async-stripe = "stripe" @@ -13,10 +10,6 @@ async-stripe = "stripe" [profile.dev] opt-level = 1 -[profile.dev.package.workspace-hack] -# Fixes some spurious rebuilds of workspace-hack -incremental = false - # `opt-level = 3` has a large impact on perf, but does impact compile times. However, we only apply it to dependencies, # so incremental compilation makes this choice essentially "free" after the first compile #[profile.dev.package."*"] @@ -58,6 +51,9 @@ currency = { path = "./pkg/currency" } database = { path = "./pkg/database", default-features = false } data = { path = "./pkg/data" } diesel-util = { path = "./pkg/diesel-util" } +dstack-client-http = { path = "./pkg/dstack-client-http" } +dstack-interface = { path = "./pkg/dstack-interface" } +dstack-test-support = { path = "./pkg/dstack-test-support" } doomslug = { path = "./pkg/doomslug" } document-ai-google = { path = "./pkg/document-ai-google" } document-ai-interface = { path = "./pkg/document-ai-interface" } @@ -111,13 +107,20 @@ price-cache-pg = { path = "./pkg/price-cache-pg" } posthog-interface = { path = "./pkg/posthog-interface" } posthog = { path = "./pkg/posthog" } kyc = { path = "./pkg/kyc" } +kms-core = { path = "./pkg/kms-core" } +kms-dev = { path = "./pkg/kms-dev" } +kms-interface = { path = "./pkg/kms-interface" } +kms-phala = { path = "./pkg/kms-phala" } +kms-test-support = { path = "./pkg/kms-test-support" } primitives = { path = "./pkg/primitives" } payy-auth-embedded-wallet-document = { path = "./pkg/payy-auth-embedded-wallet-document" } payy-auth-app-admission-interface = { path = "./pkg/payy-auth-app-admission-interface" } payy-auth-app-admission-catalog = { path = "./pkg/payy-auth-app-admission-catalog" } +payy-auth-app-catalog = { path = "./pkg/payy-auth-app-catalog" } payy-auth-app-catalog-interface = { path = "./pkg/payy-auth-app-catalog-interface" } -payy-auth-app-catalog-memory = { path = "./pkg/payy-auth-app-catalog-memory" } payy-auth-app-catalog-server = { path = "./pkg/payy-auth-app-catalog-server" } +payy-auth-app-catalog-storage-interface = { path = "./pkg/payy-auth-app-catalog-storage-interface" } +payy-auth-app-catalog-storage-memory = { path = "./pkg/payy-auth-app-catalog-storage-memory" } payy-auth-app-catalog-test-support = { path = "./pkg/payy-auth-app-catalog-test-support" } payy-auth-app-client-scope-interface = { path = "./pkg/payy-auth-app-client-scope-interface" } payy-auth-app-client-scope = { path = "./pkg/payy-auth-app-client-scope" } @@ -127,6 +130,7 @@ payy-auth-client-access-test-support = { path = "./pkg/payy-auth-client-access-t payy-auth-user-interface = { path = "./pkg/payy-auth-user-interface" } payy-auth-session-interface = { path = "./pkg/payy-auth-session-interface" } payy-auth-login-commit-interface = { path = "./pkg/payy-auth-login-commit-interface" } +payy-auth-login-commit = { path = "./pkg/payy-auth-login-commit" } payy-auth-login-commit-policy-catalog = { path = "./pkg/payy-auth-login-commit-policy-catalog" } payy-auth-login-commit-test-support = { path = "./pkg/payy-auth-login-commit-test-support" } payy-auth-refresh-session-core = { path = "./pkg/payy-auth-refresh-session-core" } @@ -139,16 +143,14 @@ payy-auth-passwordless-rate-limit-allow-all = { path = "./pkg/payy-auth-password payy-auth-passwordless-policy-catalog = { path = "./pkg/payy-auth-passwordless-policy-catalog" } payy-auth-passwordless-fail-closed = { path = "./pkg/payy-auth-passwordless-fail-closed" } payy-auth-passwordless-email = { path = "./pkg/payy-auth-passwordless-email" } -payy-auth-session-memory = { path = "./pkg/payy-auth-session-memory" } payy-auth-api-request-interface = { path = "./pkg/payy-auth-api-request-interface" } payy-auth-api-gate = { path = "./pkg/payy-auth-api-gate" } payy-auth-wallet-interface = { path = "./pkg/payy-auth-wallet-interface" } payy-auth-wallet = { path = "./pkg/payy-auth-wallet" } payy-auth-wallet-p256 = { path = "./pkg/payy-auth-wallet-p256" } -payy-auth-wallet-custody-local = { path = "./pkg/payy-auth-wallet-custody-local" } +payy-auth-wallet-custody-kms = { path = "./pkg/payy-auth-wallet-custody-kms" } payy-auth-wallet-storage-core = { path = "./pkg/payy-auth-wallet-storage-core" } -payy-auth-wallet-storage-json = { path = "./pkg/payy-auth-wallet-storage-json" } -payy-auth-wallet-storage-memory = { path = "./pkg/payy-auth-wallet-storage-memory" } +payy-auth-wallet-storage-sqlite = { path = "./pkg/payy-auth-wallet-storage-sqlite" } payy-auth-wallet-test-support = { path = "./pkg/payy-auth-wallet-test-support" } payy-auth-wallet-transaction-evm-json-rpc = { path = "./pkg/payy-auth-wallet-transaction-evm-json-rpc" } payy-auth-api-bin = { path = "./pkg/payy-auth-api-bin" } @@ -159,8 +161,9 @@ payy-auth-local = { path = "./pkg/payy-auth-local" } payy-auth-runtime-system = { path = "./pkg/payy-auth-runtime-system" } payy-auth-session = { path = "./pkg/payy-auth-session" } payy-auth-session-test-support = { path = "./pkg/payy-auth-session-test-support" } -payy-auth-session-storage-memory = { path = "./pkg/payy-auth-session-storage-memory" } +payy-auth-session-storage-sqlite = { path = "./pkg/payy-auth-session-storage-sqlite" } payy-auth-backend-interface = { path = "./pkg/payy-auth-backend-interface" } +payy-auth-user-projection = { path = "./pkg/payy-auth-user-projection" } payy-auth-api-server = { path = "./pkg/payy-auth-api-server" } prover = { path = "./pkg/prover" } providers-interface = { path = "./pkg/providers-interface" } @@ -235,7 +238,6 @@ reth-primitives-traits = { git = "https://github.com/paradigmxyz/reth", tag = "v reth-transaction-pool = { git = "https://github.com/paradigmxyz/reth", tag = "v1.10.2" } reth-node-builder = { git = "https://github.com/paradigmxyz/reth", tag = "v1.10.2" } -workspace-hack = "0.1" ts-rs = { version = "^11.1.0", features = ["format", "chrono-impl", "uuid-impl"] } actix-cors = "0.6.4" actix-server = "2.3.0" @@ -245,9 +247,12 @@ tower = "0.5" tower-http = "0.6" http-body-util = "0.1" hyper = "1" +hyper-util = { version = "0.1.20", features = ["client-legacy", "http1", "tokio"] } +hyperlocal = "0.9.1" veil = "0.2.0" alloy = { version = "1.0.24", features = ["std", "essentials", "reqwest-rustls-tls", "signers"] } alloy-consensus = "1.4.3" +alloy-dyn-abi = { version = "1.4.3", features = ["eip712"] } alloy-eips = "1.4.3" alloy-evm = "0.26.3" alloy-genesis = "1.4.3" @@ -306,11 +311,12 @@ diesel-async = "0.7.4" diesel_migrations = "2.3" tokio-postgres = { version = "0.7.16" } postgres-native-tls = "0.5.0" -native-tls = "0.2.15" +native-tls = { version = "0.2.15", default-features = false, features = ["alpn"] } derive_more = "0.99.17" dirs = "5.0.1" dotenvy = "0.15.7" duct = "1.1" +ed25519-dalek = "2.2.0" ethereum-types = "0.14.1" ethers-solc = "2.0.14" ethnum = "1.5.0" @@ -326,6 +332,7 @@ halo2curves = "0.1.0" hex = { version = "0.4", features = ["serde"] } hpke = "0.13.0" hmac = "0.12" +hkdf = "0.12.4" home = "0.5.11" indoc = "2" indexmap = { version = "2.14", features = ["serde"] } @@ -363,12 +370,17 @@ quickcheck = "1.0.3" rand = "0.8.5" rand_chacha = "0.3.1" rand_chacha_09 = { package = "rand_chacha", version = "0.9.0" } +rand_core_09 = { package = "rand_core", version = "0.9.3", default-features = false, features = [ + "os_rng", + "std", +] } rand_xorshift = "0.4" reqwest = { version = "0.12", features = ["json", "multipart", "stream"] } rlp = "0.6.1" rmp-serde = "1.3.1" rocksdb = "0.21" rpassword = "7.4.0" +rusqlite = { version = "0.39.0", features = ["bundled"] } rustc-hex = "2.1.0" rust-i18n = "3" rsa = { version = "0.9", features = ["sha1"] } @@ -437,7 +449,7 @@ tracing-opentelemetry = "0.32.0" x25519-dalek = { version = "2.0.1", features = ["static_secrets"] } # utilities for deriving stuff on macros -strum = "0.27" +strum = { version = "0.27", features = ["derive"] } strum_macros = "0.27.2" rayon = "1" derivative = "2" @@ -462,7 +474,6 @@ http = "1.4" [patch.crates-io] # rust-i18n uses a deprecated serde_yaml dependency, so we use our shim instead serde_yaml = { path = "pkg/serde_yaml" } -workspace-hack = { path = "pkg/workspace-hack" } [workspace.metadata.i18n] load-path = "./pkg/wallet-core/locales" diff --git a/README.md b/README.md index b472e08..f8d298c 100644 --- a/README.md +++ b/README.md @@ -361,17 +361,13 @@ cargo test integration_test docker build -f ./docker/Dockerfile.node --target tester . ``` -### Workspace hack crate +### Workspace dependencies -We use [`cargo-hakari`](https://docs.rs/cargo-hakari) to keep a unified `workspace-hack` crate in sync across all `Cargo.toml` files. Run the following after adding or modifying workspace dependencies and before opening a pull request: - -``` -cargo hakari generate -cargo hakari manage-deps --yes -``` - -The `Rust / Hakari Check` GitHub workflow enforces that the crate stays synchronized; if it fails, re-run the commands above and commit the resulting changes. -The main `Test` workflow also verifies `Cargo.lock` during its clippy run by adding `--locked` to `cargo hack clippy`; if that check reports that the lockfile needs updates, regenerate and commit `Cargo.lock` before retrying CI. +Workspace crates should inherit shared dependencies from the root +`[workspace.dependencies]` table. Run `cargo xtask lint` after changing +manifests; it validates workspace dependency inheritance across Cargo workspace +members. CI runs `cargo run --locked --bin xtask -q -- lint --check`, which +rejects stale `Cargo.lock` state during clippy. ## Contributing diff --git a/beam-apps/apps/uniswap/src/api.rs b/beam-apps/apps/uniswap/src/api.rs index c8f66cf..f9e872f 100644 --- a/beam-apps/apps/uniswap/src/api.rs +++ b/beam-apps/apps/uniswap/src/api.rs @@ -1,4 +1,4 @@ -use serde_json::{Value, json}; +use serde_json::{Number, Value, json}; use crate::{Error, Result}; @@ -55,58 +55,82 @@ pub fn check_approval_payload(request: &QuoteRequest) -> Value { pub fn quote_payload(request: &QuoteRequest) -> Value { json!({ "amount": request.amount, + "permitAmount": "EXACT", "protocols": ["V2", "V3", "V4"], "recipient": request.recipient, - "slippageTolerance": request.slippage_bps, + "routingPreference": "BEST_PRICE", + "slippageTolerance": slippage_tolerance(request.slippage_bps), + "swapper": request.wallet, "tokenIn": request.token_in, "tokenInChainId": request.chain_id, "tokenOut": request.token_out, "tokenOutChainId": request.chain_id, "type": "EXACT_INPUT", - "walletAddress": request.wallet, + "urgency": "normal", }) } -pub fn swap_payload(quote: &QuoteResponse, wallet: &str) -> Value { +pub fn swap_payload(quote: &QuoteResponse, _wallet: &str) -> Value { json!({ "quote": quote.quote, + "refreshGasPrice": true, "simulateTransaction": true, - "walletAddress": wallet, + "urgency": "normal", }) } pub fn parse_quote(value: Value, request: &QuoteRequest) -> Result { + let quote = value.get("quote").cloned().unwrap_or_else(|| value.clone()); validate_optional_field( - &value, + "e, &["tokenInChainId", "chainId"], + &[], &request.chain_id.to_string(), )?; - validate_optional_field(&value, &["tokenOutChainId"], &request.chain_id.to_string())?; - validate_optional_field(&value, &["tokenIn", "inputToken"], &request.token_in)?; - validate_optional_field(&value, &["tokenOut", "outputToken"], &request.token_out)?; - let amount_out = - first_string(&value, &["amountOut", "output", "quoteAmount"]).ok_or_else(|| { - Error::InvalidUniswapResponse { - reason: "quote missing output amount".to_string(), - } - })?; - let quote_id = first_string(&value, &["quoteId", "requestId", "routingId"]) + validate_optional_field( + "e, + &["tokenOutChainId"], + &[], + &request.chain_id.to_string(), + )?; + validate_optional_field( + "e, + &["tokenIn", "inputToken"], + &[&["input", "token"]], + &request.token_in, + )?; + validate_optional_field( + "e, + &["tokenOut", "outputToken"], + &[&["output", "token"]], + &request.token_out, + )?; + let amount_out = first_string_or_path( + "e, + &["amountOut", "quoteAmount"], + &[&["output", "amount"]], + ) + .ok_or_else(|| Error::InvalidUniswapResponse { + reason: "quote missing output amount".to_string(), + })?; + let quote_id = first_string("e, &["quoteId", "requestId", "routingId"]) + .or_else(|| first_string(&value, &["quoteId", "requestId", "routingId"])) .unwrap_or_else(|| "uniswap-quote".to_string()); - let route = first_string(&value, &["routing", "routeString", "route"]) + let route = first_string(&value, &["routing"]) + .or_else(|| first_string("e, &["routing", "routeString", "route"])) .unwrap_or_else(|| "classic".to_string()); - if route.to_ascii_lowercase().contains("dutch") - || route.to_ascii_lowercase().contains("uniswapx") - { + if is_order_route(&route) { return Err(Error::UnsupportedUniswapRoute { route }); } Ok(QuoteResponse { amount_out, - minimum_amount_out: first_string( - &value, + minimum_amount_out: first_string_or_path( + "e, &["amountOutMinimum", "minimumAmountOut", "minAmountOut"], + &[&["output", "minAmount"]], ), - quote: value, + quote, quote_id, route, valid_for_seconds: 180, @@ -140,8 +164,13 @@ pub fn approval_spender(data: &str) -> Option { Some(format!("0x{}", &data[8 + 24..8 + 64])) } -fn validate_optional_field(value: &Value, keys: &[&str], expected: &str) -> Result<()> { - let Some(actual) = first_string(value, keys) else { +fn validate_optional_field( + value: &Value, + keys: &[&str], + paths: &[&[&str]], + expected: &str, +) -> Result<()> { + let Some(actual) = first_string_or_path(value, keys, paths) else { return Ok(()); }; if !actual.eq_ignore_ascii_case(expected) { @@ -153,6 +182,16 @@ fn validate_optional_field(value: &Value, keys: &[&str], expected: &str) -> Resu Ok(()) } +fn slippage_tolerance(slippage_bps: u32) -> Value { + let value = f64::from(slippage_bps) / 100.0; + Value::Number(Number::from_f64(value).unwrap_or_else(|| Number::from(0))) +} + +fn is_order_route(route: &str) -> bool { + let route = route.to_ascii_lowercase(); + route.contains("dutch") || route.contains("uniswapx") || route == "priority" +} + fn parse_transaction(value: &Value) -> Option { Some(UniswapTransaction { data: first_string(value, &["data", "calldata", "input"])?, @@ -172,3 +211,16 @@ fn first_string(value: &Value, keys: &[&str]) -> Option { }) }) } + +fn first_string_or_path(value: &Value, keys: &[&str], paths: &[&[&str]]) -> Option { + first_string(value, keys).or_else(|| paths.iter().find_map(|path| path_string(value, path))) +} + +fn path_string(value: &Value, path: &[&str]) -> Option { + let value = path.iter().try_fold(value, |value, key| value.get(key))?; + match value { + Value::String(value) => Some(value.clone()), + Value::Number(value) => Some(value.to_string()), + _ => None, + } +} diff --git a/beam-apps/apps/uniswap/src/host.rs b/beam-apps/apps/uniswap/src/host.rs index 671c17d..9419add 100644 --- a/beam-apps/apps/uniswap/src/host.rs +++ b/beam-apps/apps/uniswap/src/host.rs @@ -5,6 +5,7 @@ use crate::{Error, Result, selector}; const HOST_API_VERSION: u32 = 1; const HOST_RESPONSE_CAPACITY: usize = 2 * 1024 * 1024; +const MAX_ERROR_BODY_CHARS: usize = 500; #[derive(Clone, Debug, Eq, PartialEq)] pub struct PlanContext { @@ -38,6 +39,8 @@ pub struct HostMetadata { pub app_version: String, pub chain: String, pub chain_id: u64, + #[serde(default)] + pub debug: bool, pub host_api_version: u32, pub manifest_sha256: String, pub now: u64, @@ -230,10 +233,18 @@ pub fn http_json(method: &str, url: &str, value: &Value) -> Result { name: "content-type".to_string(), value: "application/json".to_string(), }, + HttpHeader { + name: "accept".to_string(), + value: "application/json".to_string(), + }, HttpHeader { name: "x-api-key".to_string(), value: crate::public_api_key().to_string(), }, + HttpHeader { + name: "x-permit2-disabled".to_string(), + value: "true".to_string(), + }, ], body, }))?; @@ -243,8 +254,14 @@ pub fn http_json(method: &str, url: &str, value: &Value) -> Result { } })?; if !(200..300).contains(&response.status) { + let detail = error_body(&response.body) + .map(|body| format!(": {body}")) + .unwrap_or_default(); return Err(Error::HostCallFailed { - message: format!("{} returned status {}", response.url, response.status), + message: format!( + "{} returned status {}{}", + response.url, response.status, detail + ), }); } serde_json::from_slice(&response.body).map_err(|err| Error::InvalidHostResponse { @@ -252,6 +269,14 @@ pub fn http_json(method: &str, url: &str, value: &Value) -> Result { }) } +fn error_body(body: &[u8]) -> Option { + let body = core::str::from_utf8(body).ok()?.trim(); + if body.is_empty() { + return None; + } + Some(body.chars().take(MAX_ERROR_BODY_CHARS).collect()) +} + pub fn resolve_address(value: Option<&str>) -> Result { let response = host_call(HostRequest::ResolveAddress { value: value.map(str::to_string), diff --git a/beam-apps/apps/uniswap/src/lib.rs b/beam-apps/apps/uniswap/src/lib.rs index 2b5a361..0c8747e 100644 --- a/beam-apps/apps/uniswap/src/lib.rs +++ b/beam-apps/apps/uniswap/src/lib.rs @@ -94,12 +94,21 @@ fn run_guest(input_ptr: *const u8, input_len: usize) -> Result { } fn run_swap(invocation: GuestInvocation) -> Result { + let debug_enabled = invocation.metadata.debug; + debug(debug_enabled, "swap:start"); let args = SwapArgs::parse(&invocation.args)?; + debug(debug_enabled, "swap:args:parsed"); let chain = invocation.metadata.chain.clone(); let wallet = invocation.metadata.wallet.clone(); + debug(debug_enabled, "swap:recipient:resolve"); let recipient = host::resolve_address(args.recipient.as_deref())?; + debug(debug_enabled, "swap:recipient:resolved"); + debug(debug_enabled, "swap:sell-token:metadata"); let sell = host::token_metadata(&chain, &args.sell_token)?; + debug(debug_enabled, "swap:sell-token:metadata-loaded"); + debug(debug_enabled, "swap:buy-token:metadata"); let buy = host::token_metadata(&chain, &args.buy_token)?; + debug(debug_enabled, "swap:buy-token:metadata-loaded"); let amount_raw = amount_to_raw(&args.amount, sell.decimals)?; let min_receive_raw = args .min_receive @@ -115,37 +124,53 @@ fn run_swap(invocation: GuestInvocation) -> Result { token_out: buy.address.clone(), wallet: wallet.clone(), }; - let quote = parse_quote( - host::http_json( - "POST", - "https://trade-api.gateway.uniswap.org/v1/quote", - "e_payload("e_request), - )?, - "e_request, + debug(debug_enabled, "swap:quote:request"); + let quote_value = host::http_json( + "POST", + "https://trade-api.gateway.uniswap.org/v1/quote", + "e_payload("e_request), )?; + debug(debug_enabled, "swap:quote:response"); + let quote = parse_quote(quote_value, "e_request)?; + debug(debug_enabled, "swap:quote:parsed"); let approval = if sell.is_native { + debug(debug_enabled, "swap:approval:skipped-native-token"); None } else { + debug(debug_enabled, "swap:approval:request"); let value = host::http_json( "POST", "https://trade-api.gateway.uniswap.org/v1/check_approval", &check_approval_payload("e_request), )?; + debug(debug_enabled, "swap:approval:response"); Some(ApprovalResponse { transaction: find_transaction(&value), }) }; - let allowance = approval + let allowance = match approval .as_ref() .and_then(|approval| approval.transaction.as_ref()) .and_then(|transaction| approval_spender(&transaction.data)) - .map(|spender| host::allowance(&chain, &sell.address, &spender)) - .transpose()?; + { + Some(spender) => { + debug(debug_enabled, "swap:allowance:request"); + let allowance = host::allowance(&chain, &sell.address, &spender)?; + debug(debug_enabled, "swap:allowance:response"); + Some(allowance) + } + None => { + debug(debug_enabled, "swap:allowance:skipped"); + None + } + }; + debug(debug_enabled, "swap:swap:request"); let swap_value = host::http_json( "POST", "https://trade-api.gateway.uniswap.org/v1/swap", &swap_payload("e, &wallet), )?; + debug(debug_enabled, "swap:swap:response"); let mut swap = SwapResponse { transaction: find_transaction(&swap_value).ok_or_else(|| { Error::InvalidUniswapResponse { @@ -154,7 +179,9 @@ fn run_swap(invocation: GuestInvocation) -> Result { })?, raw: swap_value, }; + debug(debug_enabled, "swap:transaction:parsed"); if swap.transaction.gas_limit.is_none() || swap.transaction.gas_price.is_none() { + debug(debug_enabled, "swap:gas:request"); let (gas_limit, gas_price) = host::gas( &chain, &swap.transaction.to, @@ -163,10 +190,17 @@ fn run_swap(invocation: GuestInvocation) -> Result { )?; swap.transaction.gas_limit = swap.transaction.gas_limit.or(gas_limit); swap.transaction.gas_price = swap.transaction.gas_price.or(Some(gas_price)); + debug(debug_enabled, "swap:gas:response"); } - simulate_best_effort(&chain, approval.as_ref(), &swap); + debug(debug_enabled, "swap:simulation:start"); + simulate_best_effort(debug_enabled, &chain, approval.as_ref(), &swap); + debug(debug_enabled, "swap:simulation:complete"); + debug(debug_enabled, "swap:balance:request"); + let sell_balance = host::balance(&chain, &sell.address)?; + debug(debug_enabled, "swap:balance:response"); - build_swap_plan(SwapPlanInput { + debug(debug_enabled, "swap:plan:build"); + let plan = build_swap_plan(SwapPlanInput { allowance, amount_raw, args, @@ -175,18 +209,27 @@ fn run_swap(invocation: GuestInvocation) -> Result { expires_at: invocation.metadata.now, min_receive_raw, quote, - sell_balance: host::balance(&chain, &sell.address)?, + sell_balance, sell, approval, swap, - }) + })?; + debug(debug_enabled, "swap:plan:built"); + + Ok(plan) } -fn simulate_best_effort(chain: &str, approval: Option<&ApprovalResponse>, swap: &SwapResponse) { +fn simulate_best_effort( + debug_enabled: bool, + chain: &str, + approval: Option<&ApprovalResponse>, + swap: &SwapResponse, +) { if let Some(transaction) = approval .and_then(|approval| approval.transaction.as_ref()) .filter(|transaction| approval_spender(&transaction.data).is_some()) { + debug(debug_enabled, "swap:simulation:approval:request"); let spender = approval_spender(&transaction.data); if let Err(err) = host::simulate( chain, @@ -196,8 +239,11 @@ fn simulate_best_effort(chain: &str, approval: Option<&ApprovalResponse>, swap: spender.as_deref(), ) { let _ = host::diagnostic("warn", &format!("approval simulation skipped: {err}")); + } else { + debug(debug_enabled, "swap:simulation:approval:response"); } } + debug(debug_enabled, "swap:simulation:swap:request"); if let Err(err) = host::simulate( chain, &swap.transaction.to, @@ -206,6 +252,14 @@ fn simulate_best_effort(chain: &str, approval: Option<&ApprovalResponse>, swap: None, ) { let _ = host::diagnostic("warn", &format!("swap simulation skipped: {err}")); + } else { + debug(debug_enabled, "swap:simulation:swap:response"); + } +} + +fn debug(enabled: bool, message: &str) { + if enabled { + let _ = host::diagnostic("debug", message); } } diff --git a/beam-apps/apps/uniswap/src/plan.rs b/beam-apps/apps/uniswap/src/plan.rs index 3a63ca3..b716c47 100644 --- a/beam-apps/apps/uniswap/src/plan.rs +++ b/beam-apps/apps/uniswap/src/plan.rs @@ -131,15 +131,7 @@ fn swap_step(input: &SwapPlanInput) -> ActionStep { let transaction = &input.swap.transaction; ActionStep { kind: "transaction".to_string(), - metadata: json!({ - "buy": input.buy.label, - "quote_id": input.quote.quote_id, - "route": input.quote.route, - "sell": input.sell.label, - "slippage_bps": input.args.slippage_bps, - "swap": input.swap.raw, - "transaction": transaction_json(transaction), - }), + metadata: swap_metadata(input, transaction), selector: selector(&transaction.data), spender: None, summary: format!( @@ -151,6 +143,33 @@ fn swap_step(input: &SwapPlanInput) -> ActionStep { } } +fn swap_metadata(input: &SwapPlanInput, transaction: &UniswapTransaction) -> Value { + let mut metadata = json!({ + "buy": input.buy.label, + "quote_id": input.quote.quote_id, + "route": input.quote.route, + "sell": input.sell.label, + "slippage_bps": input.args.slippage_bps, + "transaction": transaction_json(transaction), + }); + if let Some(request_id) = raw_string(&input.swap.raw, "requestId") { + metadata["request_id"] = json!(request_id); + } + if let Some(gas_fee) = raw_string(&input.swap.raw, "gasFee") { + metadata["gas_fee"] = json!(gas_fee); + } + + metadata +} + +fn raw_string(value: &Value, key: &str) -> Option { + match value.get(key)? { + Value::Number(value) => Some(value.to_string()), + Value::String(value) => Some(value.clone()), + _ => None, + } +} + fn ensure_balance(input: &SwapPlanInput) -> Result<()> { if parse_uint(&input.sell_balance)? < parse_uint(&input.amount_raw)? { return Err(Error::InsufficientBalance { diff --git a/beam-apps/apps/uniswap/src/tests.rs b/beam-apps/apps/uniswap/src/tests.rs index 2742d68..47d6b7f 100644 --- a/beam-apps/apps/uniswap/src/tests.rs +++ b/beam-apps/apps/uniswap/src/tests.rs @@ -2,7 +2,8 @@ use serde_json::json; use crate::{ ApprovalResponse, PlanContext, QuoteRequest, SwapArgs, SwapPlanInput, SwapResponse, SwapToken, - UniswapTransaction, approval_spender, build_swap_plan, parse_quote, public_api_key, selector, + UniswapTransaction, approval_spender, build_swap_plan, parse_quote, public_api_key, + quote_payload, selector, swap_payload, }; #[test] @@ -73,6 +74,80 @@ fn public_api_key_is_embed_ready() { assert!(!key.contains('\r')); } +#[test] +fn quote_payload_uses_current_uniswap_schema() { + let payload = quote_payload("e_request()); + + assert_eq!( + payload["swapper"].as_str(), + Some("0x3333333333333333333333333333333333333333") + ); + assert_eq!(payload.get("walletAddress"), None); + assert_eq!(payload["slippageTolerance"].as_f64(), Some(0.5)); + assert_eq!(payload["permitAmount"].as_str(), Some("EXACT")); +} + +#[test] +fn quote_parser_accepts_nested_current_response() { + let request = quote_request(); + let quote = parse_quote( + json!({ + "requestId": "request-1", + "routing": "CLASSIC", + "quote": { + "chainId": 8453, + "input": { + "amount": "10000000", + "token": "0x1111111111111111111111111111111111111111", + }, + "output": { + "amount": "100", + "minAmount": "99", + "token": "0x0000000000000000000000000000000000000000", + }, + "quoteId": "quote-1", + "routeString": "[V3] USDC -- 0.05% ETH", + "swapper": "0x3333333333333333333333333333333333333333", + } + }), + &request, + ) + .expect("parse current quote response"); + + assert_eq!(quote.amount_out, "100"); + assert_eq!(quote.minimum_amount_out.as_deref(), Some("99")); + assert_eq!(quote.quote_id, "quote-1"); + assert_eq!(quote.route, "CLASSIC"); + assert_eq!( + quote.quote["swapper"].as_str(), + Some(request.wallet.as_str()) + ); +} + +#[test] +fn swap_payload_omits_legacy_wallet_address() { + let quote = parse_quote( + json!({ + "amountOut": "100", + "quoteId": "quote-1", + "route": "classic", + "tokenInChainId": 8453, + "tokenOutChainId": 8453, + "tokenIn": "0x1111111111111111111111111111111111111111", + "tokenOut": "0x0000000000000000000000000000000000000000", + }), + "e_request(), + ) + .expect("parse quote"); + + let payload = swap_payload("e, "0x3333333333333333333333333333333333333333"); + + assert_eq!(payload.get("walletAddress"), None); + assert_eq!(payload["simulateTransaction"].as_bool(), Some(true)); + assert_eq!(payload["refreshGasPrice"].as_bool(), Some(true)); + assert_eq!(payload["quote"]["quoteId"].as_str(), Some("quote-1")); +} + #[test] fn builds_approval_and_swap_action_plan() { let args = SwapArgs::parse(&[ @@ -120,7 +195,16 @@ fn builds_approval_and_swap_action_plan() { transaction: Some(transaction("0x095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000000000000000000000000000000000000000989680")), }), swap: SwapResponse { - raw: json!({ "transaction": { "to": "0x2222222222222222222222222222222222222222" } }), + raw: json!({ + "gasFee": "123", + "quote": { + "route": [ + { "protocol": "V3", "tokenIn": "USDC", "tokenOut": "ETH" }, + ], + }, + "requestId": "swap-request-1", + "transaction": { "to": "0x2222222222222222222222222222222222222222" }, + }), transaction: transaction("0x3593564c"), }, }) @@ -129,6 +213,13 @@ fn builds_approval_and_swap_action_plan() { assert_eq!(plan.steps.len(), 2); assert_eq!(plan.steps[0].kind, "erc20-approval"); assert_eq!(plan.steps[1].kind, "transaction"); + assert_eq!(plan.steps[1].metadata.get("swap"), None); + assert_eq!(plan.steps[1].metadata.get("quote"), None); + assert_eq!( + plan.steps[1].metadata["request_id"].as_str(), + Some("swap-request-1") + ); + assert_eq!(plan.steps[1].metadata["gas_fee"].as_str(), Some("123")); assert!( plan.bindings .iter() diff --git a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json index 64199df..123dc1e 100644 --- a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "0.2.1", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -219,6 +219,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:847162262ed6ee2a090a77fdc0b7caa2bf90cbfc385fb4f18b271c00a9558f36" + "value": "sha256:e27bed5240e9eeb775f4830f1e46149e514057c6e4b4ca3574f027fa12d9daa1" } } diff --git a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 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�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 diff --git a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/broad-wildcard/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/broad-wildcard/index.json b/beam-apps/fixtures/broad-wildcard/index.json index d6d0817..b3923c1 100644 --- a/beam-apps/fixtures/broad-wildcard/index.json +++ b/beam-apps/fixtures/broad-wildcard/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", - "module_sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "module_sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } } diff --git a/beam-apps/fixtures/broad-wildcard/index.json.sig b/beam-apps/fixtures/broad-wildcard/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/broad-wildcard/index.json.sig +++ b/beam-apps/fixtures/broad-wildcard/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json index 5ec8c40..4b4bf56 100644 --- a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "0.2.1", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -290,6 +290,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } } diff --git a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 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�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 diff --git a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/invalid-digest/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/invalid-digest/index.json b/beam-apps/fixtures/invalid-digest/index.json index d689508..ff3fde0 100644 --- a/beam-apps/fixtures/invalid-digest/index.json +++ b/beam-apps/fixtures/invalid-digest/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", "module_sha256": "sha256:0000000000000000000000000000000000000000000000000000000000000000", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:293d1e56cb7ac2c07c4136e2fd94afd9a8d175702bb8e8bd9c5afce93184fa7a" + "value": "sha256:1d37a1f8f1729015d06f67214042aed05298a44e21bc07c63c266cb19e3f421d" } } diff --git a/beam-apps/fixtures/invalid-digest/index.json.sig b/beam-apps/fixtures/invalid-digest/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/invalid-digest/index.json.sig +++ b/beam-apps/fixtures/invalid-digest/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json index 007c650..200fe0c 100644 --- a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "0.2.1", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -221,6 +221,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:bb1fb10740ad500c6a37064acf750be47297a8a8889c2d4df6333accbb5a8ff6" + "value": "sha256:8e136bd9b04f736be0593506305b42957f53f8ee94b21857275645315d52dc32" } } diff --git a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 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�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 diff --git a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/malformed-permissions/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/malformed-permissions/index.json b/beam-apps/fixtures/malformed-permissions/index.json index d6d0817..b3923c1 100644 --- a/beam-apps/fixtures/malformed-permissions/index.json +++ b/beam-apps/fixtures/malformed-permissions/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", - "module_sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "module_sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } } diff --git a/beam-apps/fixtures/malformed-permissions/index.json.sig b/beam-apps/fixtures/malformed-permissions/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/malformed-permissions/index.json.sig +++ b/beam-apps/fixtures/malformed-permissions/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json index e1b0e0b..475d76c 100644 --- a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "0.2.1", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -129,6 +129,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:2baa744c8f1d81ebe4e28aff957d05f1371ed81e22c604ed4fc4a9dabce0c1d8" + "value": "sha256:ce538d2a143e48a1d5dd7bd36896f3727f4148e589ddca7d601e6d5b4b5d5f9b" } } diff --git a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 zcmdqKdtemR`8U32W;eT=-6RVH2qeJl5+DHrsF$Sm)h30wo0p2;|(uuwHG&3 zR8-XH&`zw1K~PXoK~PXpsbt zNWw6bp;G1P3ZqQnp9KFX6;aAe7>R^3@W(JB23lc5%8XQ28j&*n8cF!6u__~zNt9J4 zqKQg_Z6c=vrJYMv;{lZhdMZa#5%~{Y#7w-Q<%micxeH9hCrhm4GY~Lo=pVt53D!PyG*nq3u{N=hsF{zAxIBlt?1cPZy{(`zOlF zEBaSfsv2aPYCyRvkErrkERjIlZxb^G;&tOPfi%Xw;3~zJ#G5Qr$^3CO773j zI^l%KInE4oQ0&wbPLKQ?zq0vXlplNS@zc+le(VXSA8)GEvB#ct!t@!({$%>uCzwX^ zLD0oksgs{m&#Tvr|4~n?XVe~hPPo&2MXfYjrc9fkLUWP%vO0RX@x34Z;QNoL z6~?KjoH^r+->D1LEOm*Rtu9v2su$EdYVuzD>^;eTRlTlWQ@=NEH|{k4$GGcf#?!`9 zW0`S>@r-es@vQN@@tkq1xx(CREHO7351W58UNT-aJ~n2XpBfjK7n>KEzcVi}uQ2DB zmz%T9OU-ukO7lWzGU8Pmap2>>lJg6b42Z}{hs_? zTU*33?CMs_XfP7|lg=!0de!wU$wHw9BZ{mmlB1kUW4)cfB+sho?CffbWUgyt8_K=> zZ)%`(eEG=!JvaJ0xBYLbzq6)1r~c}^Qhq?yr!!H{R@t~^+A6c%X--XzuYHy+UhT|G zEgz$sQT8m=YAFJTKLCypXN|OxvXoucY|K)YvZ9$Mo#WDd)shvzNT00KQ_iLeyf`0K z%>V_HQtogg?d4UWA&(h87DdOn=39~HnK4_DaKQ-$L!)!bklAJhN@ zg)X-BRAUCaI0pl`H8aqoLNM?Hn0H8K$%?;a9HpLg&gk8DppVN$%KqrOE)b)^?z|q) z%ze(h-i=j$+A=Tg`QAsVb5GiX;e3q!db(- zI^@~aV*uuiY7+9I>cOSuGAvh(a`#maFU_04yh+I0QT?jN$I7lR;v(n$zP0^)3hAt% zXRF_B>W|J-{c`C4gMQWMzpVcQfjpovL?OdJ?EaaPu+t}b<^4zU5yMMIvf(OgIM zrfF6~nvu0mu{yeC21KdNj_H;ePF z`LAkRU#Hjb%RF6X*j~QHLiHHyis4t6=8a<>#ML=w#Pa>L3vlwaGhYiZsD=21d7H%tV1twtA-|X~p(h0* zCKs=$Oj%55>!c)H?F<>2-ATc8alzw99u11zKXPw%x%2tRtKyr41MhL>jyeJ9pN=|G zUGE$^`bm(XwyCy{CW8zaSk!blu&K5}(o^YJ$}%%IIA=DE9IZJkz=BUwEutD}q=Uk| z*5N$fbWH(GH?5@ zmN~5=VsX-}In_>NG;mfdYqDGn0L~hF2xh>i$BroN^#JzDDWGZ`%)cw0nq8hb-XF*mHvn4Tw3O}DPJn6qZ?kt=zHuRbGA zdwE1GNUpiZN=~atSd}oU3LHZ#DxJB&*?+IG*-jF}Dr<`DFe;36B!#~1BHB6bUi*Nn zUf3(A+MQ4Lnu_0(C--;0yLVNcCld*h7ChM$sj*e-o)Jv&nd_aIdq1gea1Pt2$*VAT zpI*bf3K~3N12AQZYz;JRH7#_W`OtY{pSl2#9_waUfM&qI_n9K?jlthDCijC3&)mDl znK$`#^i^S>3 zQrc)R=H?Y3fgA=+NBvsT^b=%x4Mr|*$M>%Ql&Hl@>6DGkwsW&-J7Vt$Ya$U77C=*5 zRI8l;PJV9YLM$Fmhk^YKrT0^5~H((Kg*e(fX=`s@XT;qwNe1-qourq2zD)@&83 zvK4h!7K%eyqZ-M*yx&Of&3ap%X$K8U2OQsEbUDZTs%A7hjoazgTt6$G`738=zY{(| zy@YM-SAkgzGqH2;L8Iy(6XuL%HeP_T(<)+6FMsiq9CdKr0VM^Z;R38v0el540Rgf4 zcq~~>mJAwu+&SUk33bA&I^$94#qj34RJz<5c}PBAD1h;r9?`5;t6!=9us8%vaAJg{ zWI`_P8TGO97ox)`?N;BP1ikuTk~l_|_h}3@0|bil(1hFQ>xI%@8jMXOA-Sw6@^_W( z3mXtsD#Qs8-;e63xQgv#RL}IObQ0x7I^zw__(Oi)4F{tA#)Zc~=rH_o`~w?ZkAa*h zU=(+!@gQwrnO(qx*G2=|fB{};!)Z7)GgkO0BO1@&aH>e z?gqV3pbN7=p=(d>CbKF`I_bK6r=Uv%6MCrc+b3TABuSV)CJ<9i!a#$8O6431RkyFh zdKeCS4`!pZB%RlcL`!o`Eo79Rq^`CVC0Wq~S^Grcm_E6WBdH%`yp^nX^nvJD0vosrvIkP~4FXTJYuk+Gj%S-xP$Ob%gsJ9)W zz$Q>=nOCUOdkPsr`OH>P+*ElDhV+jS>prPtJ-rUkU8P>mFpE%nhSoM};*fS%bR?CS zZ$u>Fv9F_?*z1){t(<@Cg_5#Cc{5TTu$F5rVa1z`)r7V0o{^P&_V>o%BciO)T&r53 zu#uN0QbcA0)raL4$6>=wM^=F4BRt{He3A~f(dn2aWwM`$_w{<}EVGxYR@f1V!eps? zG>=1vabc#z$(_JN9PDy~v)hpkd6)p@Lcem*Pga3KzYZvR_!+r6!SLGfB>g@o=t$qr zC(?mSN#9EPl@rm|sVvNEDKy)wyu&Lj<^?7ukA5H!%J0kmJ^Fzg$^-h5k!0?oqoQC$ zurSCV%fNDvjLx8MTjM>0Hx6?E!XRraVHjYt+k73^(`SC$0s>&b`x9z+UYJ+H3vJza zVYbf;8Yk>EV1<;&3b3-4F&(%QnE+wV)tr#`S;3zJsZu~8aB1cS_O0zJ$QT9{um-KA zf>Bgp4Q)mFcHmcY# zB7PA1f*&}sky(TvP)PUz&z~2c^ z!THB=O?BM?l)9-lLzTI&u8j6^?CD*B=N?#vtKZ)ma{B+o@zJ^B;h#)bp4-tBuPA^D zAlvi!*`;|6gc{b8^WyQhl;%xf9^EC^oKTw-PrMa@v;F>}w^vW79TVgUb4F>q!fk0x zR5S1tm!M^6SH3hb@@L`ZzV)-g@P(fCvx&*|w0oq)@}CWZgXx8zO$c>cbK=M$+HV&O zEX>|gZ~BSVXzLdz?w7igdW#q|OPcFJ`%S=DHu_P5G_1vKELrIAuk%Fo)y*9(48D!=kgwRKlJ9l-b`I zd}f35N^HLnropFS_t;)#cGWTshA2U9tzBN`dOF4+Tcdce)3IlKMM+iz^Qk$^#PE`= zVB=_?Zdn1Pf1MbS{xBEoomc0_^5*%b^Uk#241?%_^9rst7&n}FE&lPPFYZjgppWzK zvqw7Hj)^-B=hRefDhwl=PWN>VJ7)^q;rab*oLkQ+Kejg}$EL_kS?$u@<+Zt8WuR_= zc{Du>#=bF`zuI8^*+_0XSIi!GyW|B62{zMU%vRzYkv8n@^xUzZ!;|S=pKDC$4yJuVE(8lqEFmYL3dnWh7mui@Ril#9~uKHyLr-_m3aZCtc-v z19YAy1klc@8|{D&7x|#1vwbxg61F;%tlk&!^g*{hjEu=XSpob`$l8Zp0A2ljbcw48 z2=DJ#5h`BdLx3E#+i0Rn%@pHE_?1%G0hk@^Xc0>Cj|onQUprQm<7Z@oL1RQUi@foa z?N0o`Qxh7{Wq#kl{s0f$fg0RagfGQZ$}TJIA`gNLkTtXrqPB+yYo=HiS*hD*u{SAH z$0zz2-H}9 zFh0miLu~r8iG+sQZ{j0qA{8`I7jEK%U-xyc{dKQtwWwZ&>e4Aj0_S@oUCY*z#jVX0 zVT}c?)fTrlJYR>FdZnwwEhWWB*ZVX1oJnTvf+r2Otz0X5cWLLjUuDm$3^ zuP;-nso;K$XD(!E!p70oW&81g9Vf_bFRLFgTti4J2_EBc28s603^`3nuf~+jsgw) zmcWrOl=q0)A3*h{XTJbcrEc2eL_Nf;eYZ3n&=%!$_#cj-EaU;s)PA9^h(Zs}Y5)m{ zp?KJyv)B0*`2pCfL6t22FKWW7#;C}d`rm**b6JR;&uO_F7Og&`z$Ip&m7&&PYN86$ zzDR&fWVF97jV(yR7O=J?=P~&uK zIMlbMShE*_ajivyNP%1PSvfVj$E5k7OK3r#VZ3JPjOb@o&@s>lu={O8R|8`rq9Dak zP#a6`UWMHqCSiYv>ahxx@~WjQIFV9TCgg46#%~@3@dvLx>uDd!J_7w@k9n!+ zyV;;O+^TFg9_4c&_s{UehS3^6D?A5mU9+*0@4Y;)8@zAgb*t5$XsgQeM8g}`$#R1l zJePE)nc*ekt(wbcKhLvU(*nhe_r8wvyHk$gR*&aGCD{HT#qm$_>ktn=*@}bd=@VtR zM;lt1i1vw6+W6l=OQ#?wJBaxAI;Uy(X*_o^bv->)UYA?04Z0gZSSv3mO^mzsoLc38h6P?X7zUJJlEMqZX|= z>Y^57~Q8?zxz;5YJs~4Onw)7Z#LPbNiCcKr3o{DNg0=och$+WwxcZ zJ4epGF#gE`l(fs8SLW20--?w*1R+#?QqKIVvIzcN|A)TL)XSUkD|^|b+WT%|(K3Wr zEt-jfIkTcSfJWyJ-Q+xd$w1@Lo1Ay?_{&XB^3oAw+vc;hvKQWhXXZWDKp0(vG1=}R z2b-hIXAh5Gu#j~G7!mk%U#75KNQ3K`|l4f;GpgeY1Ir7 zIO)L->|F4Np$QGU@;h4phfr;Ha*TUu2!r)bMTb?XLq{=a7*3gworxXawc2k6r#Bmi z!_jQm*bQnnjuuA3A8gHKu634o9HXvsDzBMfth~iJ;F{5Dh4b@knt-AO*F61g-Jq2% zvn?v4nLuX_ktk4~u>0*uV`MFxZ;3$XgCCjDRY(B0B4KqQ0dLE0b{_xZQHaH=ySBDL z2f1MSNqW0z&=Bby;xyva6&Wky@0lEX?LjFG%5c$%E3X~B?|X%IH7HvO2^y45g#-=C zhC%{BS%0%L^tzFG&&e6HJ+#TY6`fX*grATqSVKvR7W1dQP5euqa%B>c-N}Z1jcdb- z*U391d9_x=_D1SLy9J290eh$G~@p_$~~C^pzv=3 zd57mP0`W#3Rmek*g{Tu)3kEk#p$n$8IR{@~PRf7p`UX(G?fU+pe8=^t4Do4$DVuI& zQYE4{8lczV|2?#m)6L%VTJZN5^RoEcF|R4`7&jOVnvSSD8gyihP4j9{>XUigoVRY^ z-~Hw9>GJpY@^{S*!@XEz-S1J({2Qv{M|&-lcQQn8Z08{S)%~B`SvyD*P?wip1x~-$ z`JL=(t<-$CGYihEnqOO`M~9_`OcifCd(5xhL#IV)#q>1dnQffIkdxua;6jE;xBs?<)nCd4$W z45gf>@9g7r-k8YG=DeGkM|J{@5$FnzYPCCxQeojKdvvS4xG1%bsS{f5)kUcdOnnpz zb!|~HT>MJ*Z#RUJu`}R|Sa7ZJaHaF;f`dYKjBnfQ<{Z8-(d>t}(=PE<3c{zkdJ~pa zoHw}?UbA%g(5cfoD&d}+}*2aj0=*8?V z0G@>Fnp@6NkO>&R>AZeZHm?`V`Y$^94IFF{Md?91>w-;KOu>!D)D|;?)D4L9VQ-l$ zNhxmP2_*1c_Ee)GsL{}xc|dA_3j`|s{p+z%0xO>*xn5*mmfb?K8ESsC6|;T>oTGE1gy^J}lE-8Tmt{Ei%>yXd$J{(3yMneIqTeu-Ojfo; zYqC*n!`+Jhu*qgcorO1FW30Z>*=JGCxaYVXq&OHzfWY5Z8Uf4p5Cd@lL^v1-+t`fX$Weq;5aP(5=yQIU&sdb8h`3@X>^;*3vk zbjIA?zxKiftXPHo(Z%_57dXe=-oN=;$!EjcVGZ38YT38IMgJA`dGiA2w%cp!mPl3F z*BeoFd8q1&1ZdrSi6KX-d*6VTUH9o-OCRYi*$@L=FW8O zhaOasz?vq4VL8Dd{mz|ShyC%+(`$UYRTaUFBG!sSN`_jo@=#;LP0leZ8*B7xL2+x{ zu*hTcWf_C*yOn*MWh;9H1w{X{z+d%3PYP^Z*{hG=0ytH-@WxF}=B}V+q(U&Y!m(89 z)|7L^U3&-8UXEN!`@Fl32&Ey`8EIeKH72$2L2wBan}MS!EqDLgTFZATyd>;eD6(eb zB>b2J*9fDTp!@#k?)p$edZ8X$Ram^2i$ia_bMUGcp zNQ;@!o#8K7{%Ud;l|_;oxToS)P~2+G+$Y6>s-&DyNZK1X+iVUg3tI3La3~9o60yX` z14lC3Byn<$K?!NkE#Rj$7gve*eY}C?y2Ey(|phH0a{JOt>o@T z0z0G_PMRU(nOmKo-_x2e5_}8WBgI-DQ&&0si3xk%L!d!szMdUWu4HyVN}{-CFkfJ} zrAkD%(v~nx=g0Rp2c-LIzsoX^?vM8!vUe1m5uO?7bIHLI!o-lZ0WA(=1N#o1v4MAx zHtN)`DX}#|Q-!nv-5&#Uc{)^P>G7N>@C#jJF8664v$w#0>ACbtQX2W0dwtr+xNRR3 zh5CbML!{?$Jko>bt!QDMpgA#KlODftKoJ5`Ff>AQ26CfW_|8$=`SltxGybrqp|>VH z+lQq@BpJ^7H3ND_y{RBZW+eQE^Vym`qC}&!`~8zA7IQ?%U*%Z_{=!L*rFe2!cK?0> zHM#hwM8_T|NI7?idXn;a5B$bh`=C?z;9zyFGx5QKX1N zz^Po-&-vGbH9^lwPuvG~-2*?}vt4`APgnJD$WMo@Q_oK~>0z!Cj(*rGkpx0ojENYc zF1t$t0W2;@@JdrkWMg^KF!RRwLrM3Dy-A&ti`P3JKRhxR0pe0**yA24paLgHB<&ZE zObnIN%C75?I=v#-sBya{scPr5M^-{)mOXmN-Uu=+5*Y^m=At?=5Scg_lp^DsSMm;# zDRcJx)6PXk8U_=^3nGJn;YLG52EQmWSNI|m_eG|M(kHu34jo z)&8@;kti@#n{i66tX>!_Lm%@%XZ^>$omU<&8>`($3~|Rs8Q~HGQ{s>jhXAJvV^ueF9P&N(wO^Q5j(mcmO|)HB9ZC*r&*uT21bJWk7f3eY$Zm|;ti~ay>@83xc!-c z1gSuO#$>jh&LuHX#_fM2hb>{*X6YDjoTFOE4F-V-n+z+e|9q)JIKvH33>&>vJoHa` z`i)3Q+BlAdrqFp4>cPcEKLoa2I-PA#3Yt|U`P85Z$49rHWV852&dgJO#n0wnxJfnaSVU0BU% zt87Xq=w8{v*enzVHVYKZXbwlOjo4_R9ngTLvN0TNyVc38%kGB_#t2>wJ92=A&C2Q{ zkA{R;qye9H1V9n97?d*ymP^BDKpcssl6HQ%Zb)7gmn|r5;L~K;9vuw!III|Tn?R50 zb%yP3FA*ENQEcndh1d{jU&Jv-B1nidMrQL3t_58uZ)bu^*v;f&GgfMhT;~--0^a5p zRkC^7Pxp>hG^~m#IE4Y%!IUJ?31v?N$ENT^ZaZ?Sk%aJccq69FK~kI1LI&sNV${mV zY=nU$2wb{tiY#SElpz>Yjgf^u5VH4mfTrzKJh0&fP9x_|!W-mkf_@v1Hwe}^Jizax z^;-iTC|QpO`XasYCQ{timZvodNhSl}FZA#tKp0``O_5HOi`iw^m`6^E*<4Ded7Ls= zN#_jZ5ewv8RZGOQB=TL7u{YilL6p2*hJnaAIJ>GfMLS+pa}EqF7;xk0YTnM%)D8nQdqw z--v)NeSQ^#2P{w`nYm=v#|@Nvc&2bt zki}|;Smoyc$F$q=8(Wrvgo}Jb_H|Vn?kE6x_vCvk-YMWa@bu+d&PsUljZi^fzR^F* zVpv)$AdUb~YXL{rAzUhv5YVnHgr5cEG(xktnClhg9wXqGyQB!UDB^OZMe5}B3JhU( zIh)pJr}4CvM`--eHn@M*7VKiR=)GK2rb3coaRYgwyfhl4(UP&!+2`rnJcT848^hqr z=#aQ=78h7$_T`~uIBS>;$fiK5z~K}LvUV3G$J1!S^Dv-D9WeN{RN>%GS}ja13>nQd z8k-=o31lan1E0y{DFPmO0AVqCmP(#bYFQ{xI9?Pcc^g2G0uWfx#8=J2IWjzoS&dz` zA1)PO?{G z9-9~GP;Oqle9)0aW(f)9WO4>K9I$FG>Bqq=kmN%h^W%Jm~V<*2>DVq!CG)$)rjqld&ic(<$3?oaqD56+l&1 z(Rxz8<1ENf$bd#r_WT9x)H^bb8U`{DJER&TktwgQzwj?_y!*n+&5XBBrBo40*Gs9IaH-YZlV-_& z-5`{5v%9FleKjv=(k-Mp2b4YLrf*k2fq8t!?P?ny$K9cJaqf6ARv`;X1GWn1dgq}R z_fD-|i7I->&^>=Qb%$Eyjv24U1nVp=qEU9$DdSat72mvqrJr=+jX691tbTE>-1taP z+}liXrvLq5>_lZ-)JT_q->nGvwyRQ#KQeyKAmA~$JwA+j+SzPGt1|}^`^z@NGisUw(EOXf`CPU_thZ*~g znSc$yonUTYrk*iOT4!vLO8}|XwnTdInoH5QI|Gc=-5z7xs{yM`U`(&HSfnOW;hdE-R2*17eKAHbUs zd-H-C&5-Cz<`~k{I7d$EbiTO<3V!)kt@GiVY(QU7L;BwPZ(T<&V|bXX^|!*D2lnX=}EC#}cGCUusE|- zH>L7lk~O%^-Wl?S8um7`)xL%NVAp4!^owjW;Xgvr?PeCna)YtM1U3x>TE%=64@1JR zQuGcIt0Kzxk=Dhsgpx)a|FwtUzGg?;8AZ>Rl z-mga(+OF>(fZ_l8{e~YcUW%q+NnvSAE?>%kk;{A;usfMcA!tWS$Z0ph>WldcqsHG( z+-me!J!byaBhDejfFsVVy?Ps#uO<&jM~h-xF&P;4MwG{XGOx)Y_VoTW<_gpP3wzDR ztRxS-XDc}qV4oBrf&>C?n2mfQly3uv$7T$BgV~x{Pe4kUDew6*kq)2$jNBrYp)7kj zm`qH2z3!58ivn4S_!G^~0*#lkh+XN^n0DDVVgk=Cd;$df0Vz`vl<72%herX|r#0O?dmaD!o1R`yrZvYg1Jw{bZNxFhx$*-G zh}JpyyT!)|Gl7|RMY(BmJ?)W;9la>vmIvU@j?!I8Wiwk;&KxtyGO=LdbRbmrI?z0T zO6&j!Qgn94@1Y$%ye>VYf@XAe=(WuM6yWgcJzl^OPy&mV1`;rjJ7Y9>!T>geL;+;q?T;WaC$)V*9-;*ld*-mg@C&-}MHoWKzF(5cAygdXfWeGi zVf4@68;uqdo>Kmt1uEg}Ab+;w=K&Oi#b&l#s+if{z%L_;6TrCy?K?}h^Kk0(@>hMx zNSh%a4w|wZnA#AQ9kN7EvLg;4SUlkok_Df2&j0XGFY*ZELWsvUXTyheO@Z|!v2#dA zW*6EHt~b!>f{ZRF`_cDQmvi1n`^Q(`4vJ;&avuL^iv--#89D}M6wC59)JkC@<-8e} ziS%uXhn`5GwMAH{ceFA(mWU8mP4BM{g0 zt4{}cS4F~nl)^d&`PNSd>6<+Lsg1`PwmTi4d<%WP`AN(8bzYys3h47uug|WY`vj`L zNuS>R8lLA)3}>-afE;LCcyWoG&qBy)hfZT5vLW92eSaW#(O6=xv6_83cm3-2U3a+A;xyD za?bv|WjqxDDM-O41w~l^Zms{jQIJCa4JhcDh28w1fEyu^kZam~v+nfRm9}`~bK+LB zEANictft3;cZ|iL;oiBe>ywdb$Ku3{d$sq&DIDQ_E%hjYAN~|0^Dd-*yk>si zje_kuf9CMKnK_%+u{&Nx(GzLhJ#;{5>hL9knF?iRBM*>bKHm@`B!BO;n<;-Bt zEzH7&!5elSqpv_s>T%I|C>9>Q*6(^eU65Bj}^FXbyzdD@)v3+rB4IMk~iKb_wGgqcI&gy?!uMdrZB zJERYB1);}jp#&aX3Py&z$xt=NjI9AZ-c`>zdgK#Hs`cl^M<4AXt835fNV@)`N9$ejIXtuZ4Au;JL zH`TCm#Ag{2ju~;^HPwjSZ8+OIK}Qao^F2=L_$c6M9{Jq~=j%rOJF>-SiOhHHsH%yt z)ibJlTvSb{=nr?4iKDwUsM629DT?LFrrTYsO7+Xn61Ic1`lF(&djRQaWe4(6pRM&& z+XfsRC``qb#Qkam3K!3nu>QPKGKI->Qa23;UhAfO@b>)+Uf4<}nAUjc%PRNv^0x~N zfy3444yptPWiwXIlv#24b5yO>|2KqO+`5Ay1+vf_j3}CN33~-bp;=IX`opfyEO#G^ zsUi7QLCZ#Vh_r05WgLAWqh~ENl$?h9Eh3g>AtWahK^xkZ!nv*9IJKo0imxp5w01A* z@E80y=@%^Q%`{%O?(t+?6%2 z=34=TssM!h3Jn#;(mbugvYNfIEMQfRrI`&~Tij5_Z)nxzay3WgaTJf+DmaUNP{;-5L=b*4$4J6MP#PjP z`EOcyYW)$1c(+{O1V_71q*djpTJ{~Y23obg&~HP-OW96lrC)8ki8!-b*Q`*x?zV%m zlem1?TY9l{Vd+JM$`xBD*NZXd&})aEUHC}~;#w+0mP!GTlDz@h+#<&1 zE_y*6WW(ad$xBXhps$!{yCI>S1csXF@EmP)1wiB29pcWV@%RVo9ogBVPI9eEHPG0s z2ha*6g$JNHqJu~UJG7hPdl4gN>m9`V-Nd`-F7#i9Te-QFsWFS;Noa+3%M^enM`1$k za67Biu-;;3g#p^)4yjbN#_VN!a-z-*AvAyoy%fXKPW4m_4>tD!PdVY49VNQUK?Jmh zHVf3iGC;#4;SOamGXi!7+Va5cEE>IG5Mg!Dm>}rl_QTXm=k`KA7ZVKGTtzOeIG7Gh zFIbJfgB$Sogx6(7UQOI@vM+<){^*H;D} zZP35dbibN`7 zO-)U(aJh|zD>^g(be~28TIZxk`KfQaUm#U$r}RjAA5+ENN2DN{o_itwQ8OqIAbv57 z`fw`BC5lsaS}xf5;iekki&^=e8;pL#2Ghmm07_|1a1zaBE(=4>PA)LSVUxGliHTV_ z5?6u+@G%>Jx3oR%@qu0Idwh!OM-dDh+K?_qjM!*l1m*<~Vqh&cx(y~%oML5ng8%Z8 za`ihY*SnXigE+6g&n_sY`TxrKR=h!1> z#!EVeLMtkl7e)lv)caI}=!d&kS{Ur5nLDnCe`)Ge@!~ zg=c`OvDX0kQbLn{9Ee9zg>gZJ@m__Qy5#i(RKqAw5h}(vWu7mn)g4Aq?Q=L$q@!&E z6dbT_h14%yZ@|Hd#66;J`LKyk&#ss z2dRBjOFQ?jnsGi4V{A62>c=EJX6p>xpotgm5Mw`>29SyKmN2=N4_12yT^k7NWY?b# z#z*x&be|fch8Ueo-S>y6vBqXt_7-S+tvkt5dm#50mKwTikzNS69}@%HA*OLs3bFoN!4qw5kkG-UYApA5r*(~lkyMT0uF@Vwr1XTpT13)bjeUPQ5@to?w3PV zOl@~#_3F?7D1EMZyF0yJ9jxAUZ>xuKu+^PBOobxrc@d;|pWV}tK0!0Ehlj$l2abQk z#%>H;|CHsX$XZ$^l>aDKEM3dou3_qX-8w$*7pl&!Y*5Yr*S({gQ14F{_5Nq+eW-iK z2sJ)9bl{C$CacFZYj0GCe6uEt@mg@P1Fu-~%E+RE z*XKhcYl!^MGI!fZwNJN>_a5bUJltJAN}UR-4j$bzRS!lwc>ToDYL9#oUqYNpY>OVI ztN(48Kv+D(NZJ`$GUt_APod7-1DjOm*D(LMF={kM_M$Gs-6MyQ9~hw^H&dTtdWg3dDnM#U;r)Zy(HstJP;`yzM=f6ynH8Q1f|nXQ#npe*+kK8w?_=*le~%}MQ$z*= zUK@~qJ?n@^fMvP3%~(;cZRIMAX22S?JMIQE#rR0&?Yh%67SUyIYchg9gzZ-`XkRun!wG;U3VNnUteD5DgoVkiqvO^r0H^%x7V zDbiX`#70tAG{y{^Xi6X!FB!z)C5z(lwAcG2nzN^7=5cm5CIbR+_u^;{(Hta@_A9N| z&L>QZ)pE=s${0s1UJ(od!D2W>IkYJZQF?RS`Io8wc^h@;oU%LpT2hB5OFex(Os*G} zhyO>;W{>uhM;9gIf(~7Jd{Hv^TPIH{O2!2r5I=1Dv3&cc~x zFQagJ*&AOW*kcVwht)53MR8&j#W55NSz>kA1qP2me5@$w{>`&C@WNv*2FU_djf+aw zlBfL5DBk;pWZp@#p(vdIqCxUTyr9l%ani$xWR{S;%v>7HqB{}`5oLHTjAr3s)CBCz zM{`N7WN>vRz0)|^Mej5MDhM8Yz4T6dni3vrUF}ruQ$l0-L}Wo4@qQe0MDrbA$l)X^ z=w$cD=Oi}pB>MFljQvOR@3_n@0Ja=Z7c-c@YC1;1DH^=7jxmDgviHgg*l22WDgR8W%7NfT0_G zpmAn~Kzl9u;2MAt)##AqStQ(v2v~(baetp?X2Ju2u*%Fc$ z?4L$(7!U0po#nad*+!n@Abacx6%#%|Iw>%FRagumZb*kP+8ssdT_`Cb1LzmS_s48+ z!R{ElDN5uPw2v0>Yn$G?g&-FylC=1;i$Q^uZDB|xZYdFs@hqP_EW{@;vN{32@_x@o z9Kt5=H#N#u?{_Eo5GS2{ya3$H7s3?ie;c4%%+bL8v{asBbivHsQY5x03z_G?j9l1; zJtr@I(_SD*{v4a#;O?mGp%I|%1~@cwEsp?+o{vPpLP!a-kf!va1V6`z-Uvf*tj(}H z1dBNaV=yN;*@n#%d9^Aiz-U(|0Q2dFNDx~P`M}^|st#&c9H84kJmOg0i+qCgv!K=_ zLWIP`_|YWVAxb`$@uJA)ka{83G%w=^)vZK+_<}7e{_7>%W68`W_5i~gJpX89S}t9Y z=NQnu*Y=|kZ(pp@+!D=J0_ABMs^lPD4%NI8WP$Y@5`=Rdo@9C5KBOMqv}G=sf&(iA zUvn)-ICG}V2r?j{c^*W6Nr=uX+E7pv9UX(#Yq4ikOzUT%TZ?GD&ir~>dkyQc)8w}o zK?jrUYt4KS-8+#^q7&aCqEo04A5|ba6H1BxXOlD$qJtIhA@M=UjUe_qj}cbmDMJ)U z@Eg2^m={4@n}?VHiJIRLF>OGz2iqJTtq|8Pt?w}O5VI?nV>6t2%wXzM8Byh3^y2`G!(Goq9{=vO2raLG zGDgU_OfM`6T|y;}3gMEXvt#+-J6k{maKJ;B+q~5X5AOTSBMjJpxgNlsllixXx4=f= zqN`R@g~0P(;36x!C|jk6Aq04WC54(OWaf70 zq0)k6P9aj4T(uG`!`K1MVOmIp$9hx$ZG-mVCSfp3cVI%u5qff{dw=R@Seo`2n@5MOx9xzEmf}erN!$_;rPKE2w}CKLnfTd7+B(cbsk)$GK&QOSZ4`ZXLdW3y~hxq zqRiZ>LA2YF(pou6U6%~(ENL^@Vzwm>5x4eauCJXUv7&O%Jvhi-6Gy;W0C*?fX!v3N z3A`!T`S(&e79U=FS&�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 diff --git a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/missing-fields/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/missing-fields/index.json b/beam-apps/fixtures/missing-fields/index.json index d6d0817..b3923c1 100644 --- a/beam-apps/fixtures/missing-fields/index.json +++ b/beam-apps/fixtures/missing-fields/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", - "module_sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "module_sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } } diff --git a/beam-apps/fixtures/missing-fields/index.json.sig b/beam-apps/fixtures/missing-fields/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/missing-fields/index.json.sig +++ b/beam-apps/fixtures/missing-fields/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json index 4c68d88..b418ab9 100644 --- a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "999.0.0", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -290,6 +290,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:0b2b6fa6ae3017fbc1316892bd357652c70f66a9b3f9dabe7e313946c604b07f" + "value": "sha256:29e99d1f0d955b6002cc80bc9f4e3c4d7fb80d62da8e153b582ba18529d0a0a0" } } diff --git a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 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�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 diff --git a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/unsupported-beam/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/unsupported-beam/index.json b/beam-apps/fixtures/unsupported-beam/index.json index d6d0817..b3923c1 100644 --- a/beam-apps/fixtures/unsupported-beam/index.json +++ b/beam-apps/fixtures/unsupported-beam/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", - "module_sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "module_sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } } diff --git a/beam-apps/fixtures/unsupported-beam/index.json.sig b/beam-apps/fixtures/unsupported-beam/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/unsupported-beam/index.json.sig +++ b/beam-apps/fixtures/unsupported-beam/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json index 5ec8c40..4b4bf56 100644 --- a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json +++ b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json @@ -7,7 +7,7 @@ "description": "Prepare public Uniswap swaps through Beam-mediated HTTP, chain, approval, and transaction planning.", "min_beam_version": "0.2.1", "wasm": { - "sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "entrypoint": "beam_app_main" }, "catalog": { @@ -290,6 +290,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } } diff --git a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json.sig b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json.sig index d927149..53eeada 100644 --- a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json.sig +++ b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/manifest.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:a7bac552c206a4a3a86a0261d6e8efe4e374b62780e692669d4055c7f2933178" + "value": "sha256:a529b79e6b23e784176b3f2f78334d26b5d7b8dba15b66262829eda3b15d360b" } diff --git a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/module.wasm b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/module.wasm index 852d9755acaa73b734bd177a42f6ffae1a3c956a..4d88a6a4cb99b2b7e47a0aecdc0e349e4ce27f9d 100644 GIT binary patch delta 111283 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 delta 99319 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�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 diff --git a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/version.json.sig b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/version.json.sig index 2a5951d..250c2e2 100644 --- a/beam-apps/fixtures/valid/apps/uniswap/1.0.2/version.json.sig +++ b/beam-apps/fixtures/valid/apps/uniswap/1.0.2/version.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } diff --git a/beam-apps/fixtures/valid/index.json b/beam-apps/fixtures/valid/index.json index d6d0817..b3923c1 100644 --- a/beam-apps/fixtures/valid/index.json +++ b/beam-apps/fixtures/valid/index.json @@ -12,13 +12,13 @@ "version": "1.0.2", "min_beam_version": "0.2.1", "manifest_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/manifest.json", - "manifest_sha256": "sha256:07b1223ee0855508eb0c46743a3345e96422f97a7cf12175c504bfee8850341b", + "manifest_sha256": "sha256:b3bee997c062dbf20de57c4176a010b3578bf4a5e7c8a57017733bd5a95e2b73", "module_url": "https://registry.beam.payy.network/apps/uniswap/1.0.2/module.wasm", - "module_sha256": "sha256:18aa6e8845772beccef895e83bbf2d1f3783d24fbf0fb8feee75d1eacfa1a7f9", + "module_sha256": "sha256:58c5dbc8343f5281392269b72e0193b2c39f6a4b36942df1bea464699a36cdc2", "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:c066a56b6703a1d421195be37474192a11a960ce259991ff3cb91fd2f062c8de" + "value": "sha256:447860c5bbc66e4f9b418bb2c67155a5c276812828da8c417a20387882fee0dc" } } ] @@ -27,6 +27,6 @@ "signature": { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } } diff --git a/beam-apps/fixtures/valid/index.json.sig b/beam-apps/fixtures/valid/index.json.sig index 1593252..4193503 100644 --- a/beam-apps/fixtures/valid/index.json.sig +++ b/beam-apps/fixtures/valid/index.json.sig @@ -1,5 +1,5 @@ { "algorithm": "sha256-dev", "key_id": "payy-dev-2026-05", - "value": "sha256:02b57fe91af9b8247f4b71214bbe382ea4b09a63461bd05c5e59e61987a5c98d" + "value": "sha256:f1ad11d143f310620be1bc78a9d02fb7db7ec51d05acae195c1115167aef3dee" } diff --git a/docker/Dockerfile.payy-auth-api-bin b/docker/Dockerfile.payy-auth-api-bin new file mode 100644 index 0000000..e236626 --- /dev/null +++ b/docker/Dockerfile.payy-auth-api-bin @@ -0,0 +1,86 @@ +FROM rust:1-bookworm AS builder +ARG SCCACHE_GCS_BUCKET +ARG SCCACHE_GCS_KEY_PREFIX +ARG SCCACHE_BUCKET +ARG SCCACHE_S3_KEY_PREFIX +ARG SCCACHE_REGION +ARG SCCACHE_ENDPOINT +ARG SCCACHE_S3_USE_SSL + +# libclang is required by bindgen (zstd-sys, aws-lc-sys build scripts); +# cmake is required by aws-lc-sys. +RUN apt-get update \ + && apt-get install -y --no-install-recommends libclang-dev cmake \ + && rm -rf /var/lib/apt/lists/* + +# Conditional sccache setup: only if remote cache settings are provided +RUN if [ -n "$SCCACHE_GCS_BUCKET" ] || [ -n "$SCCACHE_BUCKET" ]; then \ + wget https://github.com/mozilla/sccache/releases/download/v0.10.0/sccache-v0.10.0-x86_64-unknown-linux-musl.tar.gz && \ + tar -xzf sccache-v0.10.0-x86_64-unknown-linux-musl.tar.gz && \ + mv sccache-v0.10.0-x86_64-unknown-linux-musl/sccache /usr/local/cargo/bin/sccache && \ + rm -rf sccache-v0.10.0-x86_64-unknown-linux-musl sccache-v0.10.0-x86_64-unknown-linux-musl.tar.gz && \ + chmod +x /usr/local/cargo/bin/sccache; \ + fi +ENV SCCACHE_GCS_BUCKET=$SCCACHE_GCS_BUCKET +ENV SCCACHE_GCS_KEY_PREFIX=$SCCACHE_GCS_KEY_PREFIX +ENV SCCACHE_GCS_RW_MODE=READ_WRITE +ENV SCCACHE_BUCKET=$SCCACHE_BUCKET +ENV SCCACHE_S3_KEY_PREFIX=$SCCACHE_S3_KEY_PREFIX +ENV SCCACHE_REGION=$SCCACHE_REGION +ENV SCCACHE_ENDPOINT=$SCCACHE_ENDPOINT +ENV SCCACHE_S3_USE_SSL=$SCCACHE_S3_USE_SSL + +WORKDIR /build + +COPY rust-toolchain.toml ./ +COPY .cargo/config.toml .cargo/config.toml +COPY Cargo.toml Cargo.lock ./ +COPY pkg ./pkg + +# The workspace lists the react-native rust bridge as a member; it is not part +# of this binary's dependency closure and its sources are outside the copied +# context, so drop it from the member list. +RUN sed 's|, "app/packages/react-native-rust-bridge/cpp/rustbridge"||g' Cargo.toml > Cargo.toml.tmp \ + && mv Cargo.toml.tmp Cargo.toml + +# Ensure the toolchain specified in rust-toolchain.toml is installed +RUN rustup show + +RUN --mount=type=secret,id=gcs_sa_key_base64,required=false \ + --mount=type=secret,id=aws_access_key_id,required=false \ + --mount=type=secret,id=aws_secret_access_key,required=false \ + if [ -n "$SCCACHE_BUCKET" ] && [ -n "$SCCACHE_ENDPOINT" ] && [ -f /run/secrets/aws_access_key_id ] && [ -f /run/secrets/aws_secret_access_key ]; then \ + echo "Using sccache with S3"; \ + AWS_ACCESS_KEY_ID="$(cat /run/secrets/aws_access_key_id)" \ + AWS_SECRET_ACCESS_KEY="$(cat /run/secrets/aws_secret_access_key)" \ + RUSTC_WRAPPER=/usr/local/cargo/bin/sccache cargo build --release -p payy-auth-api-bin; \ + elif [ -n "$SCCACHE_GCS_BUCKET" ] && [ -f /run/secrets/gcs_sa_key_base64 ]; then \ + echo "Using sccache with GCS"; \ + base64 -d /run/secrets/gcs_sa_key_base64 > /tmp/sccache-gcs-key.json && \ + SCCACHE_GCS_KEY_PATH=/tmp/sccache-gcs-key.json \ + RUSTC_WRAPPER=/usr/local/cargo/bin/sccache cargo build --release -p payy-auth-api-bin && \ + rm -f /tmp/sccache-gcs-key.json; \ + else \ + echo "Skipping sccache (missing required vars)"; \ + cargo build --release -p payy-auth-api-bin; \ + fi + +FROM debian:bookworm-slim + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ca-certificates libssl3 \ + && rm -rf /var/lib/apt/lists/* + +RUN adduser --disabled-password --gecos "" --uid 1001 payy + +# Wallet storage mount point; first use of a named volume copies this +# ownership so the non-root user can write. +RUN install -d -o payy -g payy /data + +COPY --from=builder /build/target/release/payy-auth-api-bin /usr/local/bin/payy-auth-api-bin + +USER payy + +EXPOSE 8787 + +CMD ["payy-auth-api-bin"] diff --git a/docker/docker-compose.payy-auth-phala.yml b/docker/docker-compose.payy-auth-phala.yml new file mode 100644 index 0000000..8e6b8a3 --- /dev/null +++ b/docker/docker-compose.payy-auth-phala.yml @@ -0,0 +1,57 @@ +# Phala Cloud / dstack deployment manifest for payy-auth-api-bin. +# +# The compose text is part of the attested measurement, so pin the image by +# digest: a mutable tag lets image contents drift under an unchanged compose +# hash. The payy-auth.release.phala.yaml workflow substitutes the digest of +# the freshly pushed image before deploying; for a manual deploy, replace the +# placeholder with a real digest yourself. +services: + payy-auth: + image: ghcr.io/polybase/payy-auth-api-bin@sha256:REPLACE_WITH_DIGEST + ports: + - "8787:8787" + volumes: + # dstack guest agent socket; kms-phala fetches all key material from it + # at startup and the binary fails closed when it is unavailable. + - /var/run/dstack.sock:/var/run/dstack.sock + # Wallet lifecycle facts and KMS custody allocations persist here so + # wallets survive restarts and upgrades. Records hold no private key + # material, and the CVM's data disk is LUKS-encrypted by dstack. + - payy-auth-data:/data + environment: + PAYY_AUTH_KMS: phala + PAYY_AUTH_STORAGE_DIR: /data + # The default bind address is 127.0.0.1, which the dstack gateway cannot + # reach from outside the container. + PAYY_AUTH_API_ADDR: 0.0.0.0:8787 + # Public deployment profile: this origin becomes the JWT issuer, PAT + # audience, and trusted wallet-RPC origin, and requests must carry an + # allowlisted Origin header (curl smokes included). The hostname is the + # dstack gateway name for this CVM: -.. + PAYY_AUTH_PUBLIC_ORIGIN: https://3964805fd025d1d17e4bf900849d6eadf892ab0f-8787.dstack-pha-prod9.phala.network + # EVM eth_sendTransaction broadcast endpoints, one entry per chain the + # deployment can send on. The Alchemy URLs embed the same kind of + # publicly-shipped API key the app bundle already ships to browsers, so + # they are not secrets and are safe in this attested compose text. A + # non-public backend RPC would instead have to be passed as an encrypted + # dstack env var (like the DSTACK_DOCKER_* pull credentials), never baked + # in here. Each app_id must match the seeded app id (PAYY_AUTH_APP_ID, + # default app-local). + PAYY_AUTH_EVM_RPC_ENDPOINTS: >- + [ + {"app_id": "app-local", "caip2": "eip155:1", "endpoint_id": "ethereum-mainnet", "base_url": "https://eth-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"}, + {"app_id": "app-local", "caip2": "eip155:137", "endpoint_id": "polygon-mainnet", "base_url": "https://polygon-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"}, + {"app_id": "app-local", "caip2": "eip155:8453", "endpoint_id": "base-mainnet", "base_url": "https://base-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"}, + {"app_id": "app-local", "caip2": "eip155:42161", "endpoint_id": "arbitrum-one", "base_url": "https://arb-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"}, + {"app_id": "app-local", "caip2": "eip155:10", "endpoint_id": "optimism-mainnet", "base_url": "https://opt-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"}, + {"app_id": "app-local", "caip2": "eip155:43114", "endpoint_id": "avalanche-c-chain", "base_url": "https://avax-mainnet.g.alchemy.com/v2/tM35lzH9DscymagwCy2GQ"} + ] + # Smoke-box only: re-exposes plaintext login codes at + # GET /_local/passwordless/emails, which the public profile hides by + # default. Remove as soon as real email delivery lands or this CVM + # serves anyone but us. + PAYY_AUTH_DEV_INBOX: "1" + restart: unless-stopped + +volumes: + payy-auth-data: diff --git a/docker/prelaunch.payy-auth-phala.sh b/docker/prelaunch.payy-auth-phala.sh new file mode 100644 index 0000000..591dc69 --- /dev/null +++ b/docker/prelaunch.payy-auth-phala.sh @@ -0,0 +1,339 @@ +#!/bin/bash +# Phala Cloud pre-launch script for the payy-auth CVM. +# +# Based on the dashboard-generated "Phala Cloud Pre-Launch Script v0.0.15", +# with fixes: +# 1. GHCR pull-access verification handles digest-pinned images +# (repo@sha256:...); the original mangled the repo path and always got +# HTTP 404 for digest refs. +# 2. `unset $VAR` -> `unset VAR` in the SSH key section; the original +# expanded key material as identifier names, which fails under `set -e`. +# +# The payy-auth.release.phala.yaml workflow passes this file on every deploy +# via `phala deploy --pre-launch-script`, so this copy is canonical. +echo "----------------------------------------------" +echo "Running Phala Cloud Pre-Launch Script v0.0.15-payy.1" +echo "----------------------------------------------" +set -e + +# Function: notify host + +notify_host() { + if command -v dstack-util >/dev/null 2>&1; then + dstack-util notify-host -e "$1" -d "$2" + else + tdxctl notify-host -e "$1" -d "$2" + fi +} + +notify_host_hoot_info() { + notify_host "boot.progress" "$1" +} + +notify_host_hoot_error() { + notify_host "boot.error" "$1" +} + +# Function: Perform Docker cleanup +perform_cleanup() { + echo "Pruning unused images" + docker image prune -af + echo "Pruning unused volumes" + docker volume prune -f + notify_host_hoot_info "docker cleanup completed" +} + +# Function: Check Docker login status without exposing credentials +check_docker_login() { + local registry="$1" + + # When registry is specified, check auth entry for that registry in Docker config + if [[ -n "$registry" ]]; then + local docker_config_path="${DOCKER_CONFIG:-$HOME/.docker}/config.json" + if [[ -f "$docker_config_path" ]] && grep -q "$registry" "$docker_config_path"; then + return 0 + else + return 1 + fi + fi + + # Fallback check when no explicit registry is provided + if docker info 2>/dev/null | grep -q "Username"; then + return 0 + else + return 1 + fi +} + +# Main logic starts here +echo "Starting login process..." + +# Check if Docker credentials exist +if [[ -n "$DSTACK_DOCKER_USERNAME" && -n "$DSTACK_DOCKER_PASSWORD" ]]; then + echo "Docker credentials found" + DOCKER_REGISTRY_TARGET="${DSTACK_DOCKER_REGISTRY:-docker.io}" + echo "Target Docker registry: $DOCKER_REGISTRY_TARGET" + + # Check if already logged in + if check_docker_login "$DSTACK_DOCKER_REGISTRY"; then + echo "Already logged in to Docker registry: $DOCKER_REGISTRY_TARGET" + else + echo "Logging in to Docker registry: $DOCKER_REGISTRY_TARGET" + # Login without exposing password in process list + if [[ -n "$DSTACK_DOCKER_REGISTRY" ]]; then + echo "$DSTACK_DOCKER_PASSWORD" | docker login -u "$DSTACK_DOCKER_USERNAME" --password-stdin "$DSTACK_DOCKER_REGISTRY" + else + echo "$DSTACK_DOCKER_PASSWORD" | docker login -u "$DSTACK_DOCKER_USERNAME" --password-stdin + fi + + if [ $? -eq 0 ]; then + echo "Docker login successful: $DOCKER_REGISTRY_TARGET" + else + echo "Docker login failed: $DOCKER_REGISTRY_TARGET" + notify_host_hoot_error "docker login failed" + exit 1 + fi + fi +# Check if AWS ECR credentials exist +elif [[ -n "$DSTACK_AWS_ACCESS_KEY_ID" && -n "$DSTACK_AWS_SECRET_ACCESS_KEY" && -n "$DSTACK_AWS_REGION" && -n "$DSTACK_AWS_ECR_REGISTRY" ]]; then + echo "AWS ECR credentials found" + + # Check if AWS CLI is installed + if [ ! -f "./aws/dist/aws" ]; then + notify_host_hoot_info "awscli not installed, installing..." + echo "AWS CLI not installed, installing..." + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.24.14.zip" -o "awscliv2.zip" + echo "6ff031a26df7daebbfa3ccddc9af1450 awscliv2.zip" | md5sum -c + if [ $? -ne 0 ]; then + echo "MD5 checksum failed" + notify_host_hoot_error "awscli install failed" + exit 1 + fi + unzip awscliv2.zip &> /dev/null + else + echo "AWS CLI is already installed: ./aws/dist/aws" + fi + + # Set AWS credentials as environment variables + export AWS_ACCESS_KEY_ID="$DSTACK_AWS_ACCESS_KEY_ID" + export AWS_SECRET_ACCESS_KEY="$DSTACK_AWS_SECRET_ACCESS_KEY" + export AWS_DEFAULT_REGION="$DSTACK_AWS_REGION" + + # Set session token if provided (for temporary credentials) + if [[ -n "$DSTACK_AWS_SESSION_TOKEN" ]]; then + echo "AWS session token found, using temporary credentials" + export AWS_SESSION_TOKEN="$DSTACK_AWS_SESSION_TOKEN" + fi + + # Test AWS credentials before attempting ECR login + echo "Testing AWS credentials..." + if ! ./aws/dist/aws sts get-caller-identity &> /dev/null; then + echo "AWS credentials test failed" + # For session token credentials, this might be expected if they're expired + # Log warning but don't fail startup + if [[ -n "$DSTACK_AWS_SESSION_TOKEN" ]]; then + echo "Warning: AWS temporary credentials may have expired, continuing startup" + notify_host_hoot_info "AWS temporary credentials may have expired" + else + echo "AWS credentials test failed" + notify_host_hoot_error "Invalid AWS credentials" + exit 1 + fi + else + echo "Logging in to AWS ECR..." + ./aws/dist/aws ecr get-login-password --region $DSTACK_AWS_REGION | docker login --username AWS --password-stdin "$DSTACK_AWS_ECR_REGISTRY" + if [ $? -eq 0 ]; then + echo "AWS ECR login successful" + notify_host_hoot_info "AWS ECR login successful" + else + echo "AWS ECR login failed" + # For session token credentials, don't fail startup if login fails + if [[ -n "$DSTACK_AWS_SESSION_TOKEN" ]]; then + echo "Warning: AWS ECR login failed with temporary credentials, continuing startup" + notify_host_hoot_info "AWS ECR login failed with temporary credentials" + else + notify_host_hoot_error "AWS ECR login failed" + exit 1 + fi + fi + fi +fi + +perform_cleanup + +# +# GHCR image pull access verification (pure HTTP, no docker daemon) +# +if [[ "$DOCKER_REGISTRY_TARGET" == "ghcr.io" && -n "$DSTACK_DOCKER_USERNAME" && -n "$DSTACK_DOCKER_PASSWORD" ]]; then + COMPOSE_IMAGES=$(grep 'image:' /dstack/docker-compose.yaml 2>/dev/null | awk '{print $2}' | tr -d '"'"'" || true) + for img in $COMPOSE_IMAGES; do + [[ "$img" != ghcr.io/* ]] && continue + ref="${img#ghcr.io/}" + # Digest-pinned refs (repo@sha256:...) use the digest as the manifest + # reference; tag refs (repo:tag) use the tag, defaulting to latest. + if [[ "$ref" == *@* ]]; then + repo="${ref%%@*}" + reference="${ref#*@}" + else + repo="${ref%%:*}" + reference="${ref##*:}" + [[ "$reference" == "$ref" ]] && reference="latest" + fi + echo "Verifying GHCR pull access: $img" + token=$(curl -sf -u "$DSTACK_DOCKER_USERNAME:$DSTACK_DOCKER_PASSWORD" "https://ghcr.io/token?service=ghcr.io&scope=repository:${repo}:pull" | jq -r '.token // empty' || true) + if [[ -z "$token" ]]; then + echo "ERROR: GHCR token exchange failed for $img" + notify_host_hoot_error "GHCR token exchange failed: $img" + exit 1 + fi + http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $token" -H "Accept: application/vnd.oci.image.index.v1+json,application/vnd.oci.image.manifest.v1+json,application/vnd.docker.distribution.manifest.list.v2+json,application/vnd.docker.distribution.manifest.v2+json" "https://ghcr.io/v2/${repo}/manifests/${reference}") + if [[ "$http_code" != "200" ]]; then + echo "ERROR: GHCR pull access denied for $img (HTTP $http_code)" + notify_host_hoot_error "GHCR pull access denied: $img (HTTP $http_code)" + exit 1 + fi + echo "GHCR pull access OK: $img" + done +fi + +# +# Pull latest images from docker-compose.yaml so existing CVMs pick up new tags. +# Pull is fail-soft: short-lived tokens may expire between login and pull, but +# falling back to already-cached images is preferable to blocking boot. +# +echo "Images before pull:" +docker images --format '{{.Repository}}:{{.Tag}} {{.ID}} ({{.CreatedSince}})' + +echo "Pulling latest images from /dstack/docker-compose.yaml..." +if docker compose -f /dstack/docker-compose.yaml pull; then + echo "docker compose pull completed" + notify_host_hoot_info "docker compose pull completed" +else + echo "WARNING: docker compose pull failed; continuing with existing images" + notify_host_hoot_info "docker compose pull failed; using existing images" +fi + +echo "Images after pull:" +docker images --format '{{.Repository}}:{{.Tag}} {{.ID}} ({{.CreatedSince}})' + +# +# Set root password. +# +echo "Setting root password.." + +# Check if password files are writable +PASSWD_WRITABLE=true +if [ ! -w /etc/passwd ]; then + echo "Warning: /etc/passwd is read-only" + PASSWD_WRITABLE=false +fi +if [ ! -w /etc/shadow ]; then + echo "Warning: /etc/shadow is read-only" + PASSWD_WRITABLE=false +fi + +if [ "$PASSWD_WRITABLE" = "false" ]; then + echo "Skipping password setup due to read-only file system" +else + # Check if chpasswd is available + if command -v chpasswd >/dev/null 2>&1; then + echo "Using chpasswd method" + + if [ -n "$DSTACK_ROOT_PASSWORD" ]; then + echo "Setting root password from user.." + echo "root:$DSTACK_ROOT_PASSWORD" | chpasswd + unset DSTACK_ROOT_PASSWORD + echo "Root password set/updated from DSTACK_ROOT_PASSWORD" + elif [ -z "$(grep '^root:' /etc/shadow 2>/dev/null | cut -d: -f2)" ]; then + echo "Setting random root password.." + DSTACK_ROOT_PASSWORD=$( + LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | dd bs=1 count=32 2>/dev/null + ) + echo "root:$DSTACK_ROOT_PASSWORD" | chpasswd + unset DSTACK_ROOT_PASSWORD + echo "Root password set (random auto-init)" + else + echo "Root password already set; no changes." + fi + else + echo "Using passwd method" + + if [ -n "$DSTACK_ROOT_PASSWORD" ]; then + echo "Setting root password from user.." + echo "$DSTACK_ROOT_PASSWORD" | passwd --stdin root 2>/dev/null \ + || printf '%s\n%s\n' "$DSTACK_ROOT_PASSWORD" "$DSTACK_ROOT_PASSWORD" | passwd root + unset DSTACK_ROOT_PASSWORD + echo "Root password set/updated from DSTACK_ROOT_PASSWORD" + elif [ -z "$(grep '^root:' /etc/shadow 2>/dev/null | cut -d: -f2)" ]; then + echo "Setting random root password.." + DSTACK_ROOT_PASSWORD=$( + LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | dd bs=1 count=32 2>/dev/null + ) + echo "$DSTACK_ROOT_PASSWORD" | passwd --stdin root 2>/dev/null \ + || printf '%s\n%s\n' "$DSTACK_ROOT_PASSWORD" "$DSTACK_ROOT_PASSWORD" | passwd root + unset DSTACK_ROOT_PASSWORD + echo "Root password set (random auto-init)" + else + echo "Root password already set; no changes." + fi + fi +fi + +# +# Set SSH authorized keys +# +if mkdir -p /home/root/.ssh 2>/dev/null; then + if [[ -n "$DSTACK_ROOT_PUBLIC_KEY" ]]; then + echo "$DSTACK_ROOT_PUBLIC_KEY" > /home/root/.ssh/authorized_keys + unset DSTACK_ROOT_PUBLIC_KEY + echo "Root public key set" + fi + if [[ -n "$DSTACK_AUTHORIZED_KEYS" ]]; then + echo "$DSTACK_AUTHORIZED_KEYS" > /home/root/.ssh/authorized_keys + unset DSTACK_AUTHORIZED_KEYS + echo "Root authorized_keys set" + fi + + if [[ -f /dstack/user_config ]] && jq empty /dstack/user_config 2>/dev/null; then + if [[ $(jq 'has("ssh_authorized_keys")' /dstack/user_config 2>/dev/null) == "true" ]]; then + jq -j '.ssh_authorized_keys' /dstack/user_config >> /home/root/.ssh/authorized_keys + # Remove duplicates if there are multiple keys + if [[ $(cat /home/root/.ssh/authorized_keys | wc -l) -gt 1 ]]; then + sort -u /home/root/.ssh/authorized_keys > /home/root/.ssh/authorized_keys.tmp + mv /home/root/.ssh/authorized_keys.tmp /home/root/.ssh/authorized_keys + fi + echo "Set root authorized_keys from user preferences, total" $(cat /home/root/.ssh/authorized_keys | wc -l) "keys" + fi + fi +else + echo "Warning: Cannot create /home/root/.ssh directory (read-only file system?)" + echo "Skipping SSH key setup" +fi + +if [[ -S /var/run/dstack.sock ]]; then + export DSTACK_APP_ID=$(curl -s --unix-socket /var/run/dstack.sock http://dstack/Info | jq -j .app_id) +elif [[ -S /var/run/tappd.sock ]]; then + export DSTACK_APP_ID=$(curl -s --unix-socket /var/run/tappd.sock http://dstack/prpc/Tappd.Info | jq -j .app_id) +fi +# Check if DSTACK_GATEWAY_DOMAIN is not set, try to get it from user_config or app-compose.json +# Priority: user_config > app-compose.json +if [[ -z "$DSTACK_GATEWAY_DOMAIN" ]]; then + # First try to get from /dstack/user_config if it exists and is valid JSON + if [[ -f /dstack/user_config ]] && jq empty /dstack/user_config 2>/dev/null; then + if [[ $(jq 'has("default_gateway_domain")' /dstack/user_config 2>/dev/null) == "true" ]]; then + export DSTACK_GATEWAY_DOMAIN=$(jq -j '.default_gateway_domain' /dstack/user_config) + fi + fi + + # If still not set, try to get from app-compose.json + if [[ -z "$DSTACK_GATEWAY_DOMAIN" ]] && [[ $(jq 'has("default_gateway_domain")' app-compose.json) == "true" ]]; then + export DSTACK_GATEWAY_DOMAIN=$(jq -j '.default_gateway_domain' app-compose.json) + fi +fi +if [[ -n "$DSTACK_GATEWAY_DOMAIN" ]]; then + export DSTACK_APP_DOMAIN=$DSTACK_APP_ID"."$DSTACK_GATEWAY_DOMAIN +fi + +echo "----------------------------------------------" +echo "Script execution completed" +echo "----------------------------------------------" diff --git a/pkg/aggregator-interface/Cargo.toml b/pkg/aggregator-interface/Cargo.toml index 37c6cc9..84cc7cf 100644 --- a/pkg/aggregator-interface/Cargo.toml +++ b/pkg/aggregator-interface/Cargo.toml @@ -14,4 +14,3 @@ zk-primitives = { workspace = true } async-trait = { workspace = true } thiserror = { workspace = true } unimock = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/aggregator/Cargo.toml b/pkg/aggregator/Cargo.toml index e35e3d7..655cab2 100644 --- a/pkg/aggregator/Cargo.toml +++ b/pkg/aggregator/Cargo.toml @@ -24,7 +24,6 @@ futures = { workspace = true } async-trait = { workspace = true } tracing = { workspace = true } thiserror = { workspace = true } -workspace-hack.workspace = true web3 = { workspace = true } unimock = { workspace = true } diff --git a/pkg/barretenberg-api-bin/Cargo.toml b/pkg/barretenberg-api-bin/Cargo.toml index 234f025..e3b0eab 100644 --- a/pkg/barretenberg-api-bin/Cargo.toml +++ b/pkg/barretenberg-api-bin/Cargo.toml @@ -12,4 +12,3 @@ clap = { workspace = true } rpc = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-api-client/Cargo.toml b/pkg/barretenberg-api-client/Cargo.toml index 1293e57..4d40c9a 100644 --- a/pkg/barretenberg-api-client/Cargo.toml +++ b/pkg/barretenberg-api-client/Cargo.toml @@ -9,7 +9,7 @@ barretenberg-api-interface = { workspace = true } barretenberg-interface = { workspace = true } contextful = { workspace = true } thiserror = { workspace = true } -rustls = { workspace = true } +rustls = { workspace = true, features = ["ring"] } tokio-rustls = { workspace = true } webpki-roots = { workspace = true } httparse = { workspace = true } @@ -18,4 +18,3 @@ serde_json = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } url = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-api-interface/Cargo.toml b/pkg/barretenberg-api-interface/Cargo.toml index 7199715..06048d2 100644 --- a/pkg/barretenberg-api-interface/Cargo.toml +++ b/pkg/barretenberg-api-interface/Cargo.toml @@ -9,4 +9,3 @@ barretenberg-interface = { workspace = true } thiserror = { workspace = true } primitives = { workspace = true } serde = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-api-server/Cargo.toml b/pkg/barretenberg-api-server/Cargo.toml index 703c4dd..d022376 100644 --- a/pkg/barretenberg-api-server/Cargo.toml +++ b/pkg/barretenberg-api-server/Cargo.toml @@ -12,4 +12,3 @@ serde_json = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-api-tests/Cargo.toml b/pkg/barretenberg-api-tests/Cargo.toml index 320c1f8..01e6bb1 100644 --- a/pkg/barretenberg-api-tests/Cargo.toml +++ b/pkg/barretenberg-api-tests/Cargo.toml @@ -18,4 +18,3 @@ tokio = { workspace = true } tower = { workspace = true, features = ["util"] } unimock = { workspace = true } url = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-cli/Cargo.toml b/pkg/barretenberg-cli/Cargo.toml index 57cbdd9..a6f7588 100644 --- a/pkg/barretenberg-cli/Cargo.toml +++ b/pkg/barretenberg-cli/Cargo.toml @@ -10,4 +10,3 @@ tempfile = { workspace = true } tracing = { workspace = true } async-trait = { workspace = true } tokio = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-interface/Cargo.toml b/pkg/barretenberg-interface/Cargo.toml index 9567313..c741738 100644 --- a/pkg/barretenberg-interface/Cargo.toml +++ b/pkg/barretenberg-interface/Cargo.toml @@ -7,4 +7,3 @@ edition = "2024" thiserror = { workspace = true } unimock = { workspace = true } async-trait = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/barretenberg-rs/Cargo.toml b/pkg/barretenberg-rs/Cargo.toml index c651764..b731499 100644 --- a/pkg/barretenberg-rs/Cargo.toml +++ b/pkg/barretenberg-rs/Cargo.toml @@ -10,7 +10,6 @@ lazy_static = { workspace = true } async-trait = { workspace = true } contextful = { workspace = true } tokio = { workspace = true } -workspace-hack.workspace = true [features] default = [] diff --git a/pkg/beam-cli/Cargo.toml b/pkg/beam-cli/Cargo.toml index 29bacbc..6f974e4 100644 --- a/pkg/beam-cli/Cargo.toml +++ b/pkg/beam-cli/Cargo.toml @@ -46,7 +46,6 @@ tokio = { workspace = true } url = { workspace = true } wasmi = { workspace = true } web3 = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] insta = { workspace = true } diff --git a/pkg/beam-cli/src/apps/host.rs b/pkg/beam-cli/src/apps/host.rs index 38eee14..f342d8e 100644 --- a/pkg/beam-cli/src/apps/host.rs +++ b/pkg/beam-cli/src/apps/host.rs @@ -33,6 +33,8 @@ pub struct HostMetadata { pub app_version: String, pub chain: String, pub chain_id: u64, + #[serde(default)] + pub debug: bool, pub host_api_version: u32, pub manifest_sha256: String, pub now: u64, diff --git a/pkg/beam-cli/src/apps/runtime.rs b/pkg/beam-cli/src/apps/runtime.rs index 8a175e6..6e8ff04 100644 --- a/pkg/beam-cli/src/apps/runtime.rs +++ b/pkg/beam-cli/src/apps/runtime.rs @@ -2,29 +2,30 @@ use std::path::Path; use contextful::ResultContextExt; -use serde::{Deserialize, Serialize}; -use serde_json::Value; use wasmi::{Config, Engine, Linker, Module, Store}; use crate::{ apps::{ Error, Result, host::HostMetadata, - model::{ActionPlan, AppManifest, InstalledApp}, + model::{AppManifest, InstalledApp}, store::now, }, - output::{CommandOutput, OutputMode}, runtime::BeamApp, }; +mod command; +mod debug; mod guest; -use guest::{HostState, guest_alloc, register_host_imports, typed_func, unpack_ptr_len}; +pub use command::GuestCommandResult; +use command::{CommandRun, run_guest_command}; +use debug::{app_debug, app_debug_enabled}; +use guest::{HostState, register_host_imports, typed_func}; const WASM_MAGIC: &[u8; 4] = b"\0asm"; -const HOST_API_VERSION: u32 = 1; -const MAX_GUEST_RESPONSE_BYTES: usize = 2 * 1024 * 1024; -const WASM_FUEL: u64 = 30_000_000; +pub(super) const HOST_API_VERSION: u32 = 1; +pub(super) const WASM_FUEL: u64 = 30_000_000; pub fn validate_wasm_module(app_id: &str, entrypoint: &str, path: &Path) -> Result<()> { let bytes = std::fs::read(path).context("read beam app wasm module")?; @@ -99,81 +100,25 @@ impl AppRuntime { module_path: &Path, args: &[String], ) -> Result { - let bytes = std::fs::read(module_path).context("read beam app wasm module")?; - let module = Module::new(&self.engine, &bytes).context("compile beam app wasm module")?; + app_debug(&format!( + "run command start app={} version={} args={}", + manifest.id, + manifest.version, + args.len() + )); let metadata = self.metadata(app, manifest, installed).await?; - let invocation = GuestInvocation { + run_guest_command(CommandRun { + app: app.clone(), args: args.to_vec(), - host_api_version: HOST_API_VERSION, - metadata: metadata.clone(), - output_mode: output_mode_label(app.output_mode).to_string(), - }; - let mut store = Store::new( - &self.engine, - HostState::new(app.clone(), manifest.permissions.clone(), metadata), - ); - store - .set_fuel(WASM_FUEL) - .context("set beam app wasm fuel")?; - store.limiter(|state| &mut state.limits); - let mut linker = >::new(&self.engine); - register_host_imports(&mut linker)?; - let instance = linker - .instantiate_and_start(&mut store, &module) - .context("instantiate beam app wasm module")?; - - let memory = - instance - .get_memory(&store, "memory") - .ok_or_else(|| Error::MissingWasmExport { - app: manifest.id.clone(), - export: "memory".to_string(), - })?; - let alloc = typed_func::(&store, &instance, "beam_alloc", &manifest.id)?; - let free = typed_func::<(i32, i32), ()>(&store, &instance, "beam_free", &manifest.id)?; - let main = typed_func::<(i32, i32), i64>( - &store, - &instance, - &manifest.wasm.entrypoint, - &manifest.id, - )?; - let input = serde_json::to_vec(&invocation).context("serialize beam app invocation")?; - let input_ptr = guest_alloc(&mut store, &alloc, input.len())?; - memory - .write(&mut store, input_ptr, &input) - .context("write beam app invocation")?; - let packed = main - .call(&mut store, (input_ptr as i32, input.len() as i32)) - .context("call beam app command")?; - free.call(&mut store, (input_ptr as i32, input.len() as i32)) - .context("free beam app invocation")?; - let (output_ptr, output_len) = unpack_ptr_len(packed)?; - if output_len > MAX_GUEST_RESPONSE_BYTES { - return Err(Error::InvalidGuestOutput { - reason: format!("guest response too large: {output_len} bytes"), - }); - } - let mut output = vec![0_u8; output_len]; - memory - .read(&store, output_ptr, &mut output) - .context("read beam app command output")?; - free.call(&mut store, (output_ptr as i32, output_len as i32)) - .context("free beam app command output")?; - - let response = - serde_json::from_slice::(&output).context("decode beam app output")?; - match response { - GuestResponse::ActionPlan { plan } => Ok(GuestCommandResult::ActionPlan(*plan)), - GuestResponse::Output { value } => { - let text = value - .get("message") - .and_then(Value::as_str) - .unwrap_or("App command completed") - .to_string(); - Ok(GuestCommandResult::Output(CommandOutput::new(text, value))) - } - GuestResponse::Error { message } => Err(Error::GuestCommandFailed { message }), - } + engine: self.engine.clone(), + entrypoint: manifest.wasm.entrypoint.clone(), + manifest_id: manifest.id.clone(), + metadata, + module_path: module_path.to_path_buf(), + output_mode: app.output_mode, + permissions: manifest.permissions.clone(), + runtime_handle: tokio::runtime::Handle::current(), + }) } async fn metadata( @@ -192,6 +137,7 @@ impl AppRuntime { app_version: manifest.version.clone(), chain: chain.entry.key, chain_id: chain.entry.chain_id, + debug: app_debug_enabled(), host_api_version: HOST_API_VERSION, manifest_sha256: installed.manifest_sha256.clone(), now: now(), @@ -200,36 +146,3 @@ impl AppRuntime { }) } } - -#[derive(Debug)] -pub enum GuestCommandResult { - ActionPlan(ActionPlan), - Output(CommandOutput), -} - -#[derive(Serialize)] -struct GuestInvocation { - args: Vec, - host_api_version: u32, - metadata: HostMetadata, - output_mode: String, -} - -#[derive(Deserialize)] -#[serde(tag = "kind", rename_all = "kebab-case")] -enum GuestResponse { - ActionPlan { plan: Box }, - Output { value: Value }, - Error { message: String }, -} - -fn output_mode_label(mode: OutputMode) -> &'static str { - match mode { - OutputMode::Default => "default", - OutputMode::Json => "json", - OutputMode::Yaml => "yaml", - OutputMode::Markdown => "markdown", - OutputMode::Compact => "compact", - OutputMode::Quiet => "quiet", - } -} diff --git a/pkg/beam-cli/src/apps/runtime/command.rs b/pkg/beam-cli/src/apps/runtime/command.rs new file mode 100644 index 0000000..ed3f465 --- /dev/null +++ b/pkg/beam-cli/src/apps/runtime/command.rs @@ -0,0 +1,184 @@ +use std::{path::PathBuf, thread}; + +use contextful::ResultContextExt; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use tokio::runtime::Handle; +use wasmi::{Engine, Linker, Module, Store}; + +use crate::{ + apps::{ + Error, Result, + host::HostMetadata, + model::{ActionPlan, AppPermissions}, + }, + output::{CommandOutput, OutputMode}, + runtime::BeamApp, +}; + +use super::{ + HOST_API_VERSION, WASM_FUEL, + debug::app_debug, + guest::{HostState, guest_alloc, register_host_imports, typed_func, unpack_ptr_len}, +}; + +const MAX_GUEST_RESPONSE_BYTES: usize = 2 * 1024 * 1024; +// wasmi uses native stack while interpreting long guest calls; run app execution +// off the main thread with enough headroom for JSON-heavy app flows. +const WASM_THREAD_STACK_BYTES: usize = 512 * 1024 * 1024; + +pub(super) struct CommandRun { + pub(super) app: BeamApp, + pub(super) args: Vec, + pub(super) engine: Engine, + pub(super) entrypoint: String, + pub(super) manifest_id: String, + pub(super) metadata: HostMetadata, + pub(super) module_path: PathBuf, + pub(super) output_mode: OutputMode, + pub(super) permissions: AppPermissions, + pub(super) runtime_handle: Handle, +} + +#[derive(Debug)] +pub enum GuestCommandResult { + ActionPlan(ActionPlan), + Output(CommandOutput), +} + +pub(super) fn run_guest_command(input: CommandRun) -> Result { + let thread_name = format!("beam-app-wasm-{}", input.manifest_id); + let thread = thread::Builder::new() + .name(thread_name) + .stack_size(WASM_THREAD_STACK_BYTES) + .spawn(|| run_guest_command_on_thread(input)) + .context("spawn beam app wasm thread")?; + + thread.join().map_err(|_| Error::InvalidGuestOutput { + reason: "beam app wasm thread panicked".to_string(), + })? +} + +fn run_guest_command_on_thread(input: CommandRun) -> Result { + let bytes = std::fs::read(&input.module_path).context("read beam app wasm module")?; + app_debug(&format!("wasm module read bytes={}", bytes.len())); + let module = Module::new(&input.engine, &bytes).context("compile beam app wasm module")?; + app_debug("wasm module compiled"); + let invocation = GuestInvocation { + args: input.args, + host_api_version: HOST_API_VERSION, + metadata: input.metadata.clone(), + output_mode: output_mode_label(input.output_mode).to_string(), + }; + let mut store = Store::new( + &input.engine, + HostState::new( + input.app, + input.permissions, + input.metadata, + input.runtime_handle, + ), + ); + store + .set_fuel(WASM_FUEL) + .context("set beam app wasm fuel")?; + store.limiter(|state| &mut state.limits); + let mut linker = >::new(&input.engine); + register_host_imports(&mut linker)?; + let instance = linker + .instantiate_and_start(&mut store, &module) + .context("instantiate beam app wasm module")?; + app_debug("wasm module instantiated"); + + let memory = instance + .get_memory(&store, "memory") + .ok_or_else(|| Error::MissingWasmExport { + app: input.manifest_id.clone(), + export: "memory".to_string(), + })?; + let alloc = typed_func::(&store, &instance, "beam_alloc", &input.manifest_id)?; + let free = typed_func::<(i32, i32), ()>(&store, &instance, "beam_free", &input.manifest_id)?; + let main = + typed_func::<(i32, i32), i64>(&store, &instance, &input.entrypoint, &input.manifest_id)?; + let input_json = serde_json::to_vec(&invocation).context("serialize beam app invocation")?; + app_debug(&format!( + "guest invocation serialized bytes={}", + input_json.len() + )); + let input_ptr = guest_alloc(&mut store, &alloc, input_json.len())?; + memory + .write(&mut store, input_ptr, &input_json) + .context("write beam app invocation")?; + app_debug("calling guest entrypoint"); + let packed = main + .call(&mut store, (input_ptr as i32, input_json.len() as i32)) + .context("call beam app command")?; + app_debug("guest entrypoint returned"); + free.call(&mut store, (input_ptr as i32, input_json.len() as i32)) + .context("free beam app invocation")?; + read_guest_response(&mut store, &memory, &free, packed) +} + +fn read_guest_response( + store: &mut Store, + memory: &wasmi::Memory, + free: &wasmi::TypedFunc<(i32, i32), ()>, + packed: i64, +) -> Result { + let (output_ptr, output_len) = unpack_ptr_len(packed)?; + app_debug(&format!("guest output ptr={output_ptr} bytes={output_len}")); + if output_len > MAX_GUEST_RESPONSE_BYTES { + return Err(Error::InvalidGuestOutput { + reason: format!("guest response too large: {output_len} bytes"), + }); + } + let mut output = vec![0_u8; output_len]; + memory + .read(&*store, output_ptr, &mut output) + .context("read beam app command output")?; + free.call(store, (output_ptr as i32, output_len as i32)) + .context("free beam app command output")?; + + let response = + serde_json::from_slice::(&output).context("decode beam app output")?; + app_debug("guest output decoded"); + match response { + GuestResponse::ActionPlan { plan } => Ok(GuestCommandResult::ActionPlan(*plan)), + GuestResponse::Output { value } => { + let text = value + .get("message") + .and_then(Value::as_str) + .unwrap_or("App command completed") + .to_string(); + Ok(GuestCommandResult::Output(CommandOutput::new(text, value))) + } + GuestResponse::Error { message } => Err(Error::GuestCommandFailed { message }), + } +} + +#[derive(Serialize)] +struct GuestInvocation { + args: Vec, + host_api_version: u32, + metadata: HostMetadata, + output_mode: String, +} + +#[derive(Deserialize)] +#[serde(tag = "kind", rename_all = "kebab-case")] +enum GuestResponse { + ActionPlan { plan: Box }, + Output { value: Value }, + Error { message: String }, +} + +fn output_mode_label(mode: OutputMode) -> &'static str { + match mode { + OutputMode::Default => "default", + OutputMode::Json => "json", + OutputMode::Yaml => "yaml", + OutputMode::Markdown => "markdown", + OutputMode::Compact => "compact", + OutputMode::Quiet => "quiet", + } +} diff --git a/pkg/beam-cli/src/apps/runtime/debug.rs b/pkg/beam-cli/src/apps/runtime/debug.rs new file mode 100644 index 0000000..1595a49 --- /dev/null +++ b/pkg/beam-cli/src/apps/runtime/debug.rs @@ -0,0 +1,95 @@ +use std::env; + +use serde_json::Value; + +use crate::apps::host::HostRequest; + +pub(super) fn app_debug_enabled() -> bool { + env::var("BEAM_APP_DEBUG") + .map(|value| { + let value = value.to_ascii_lowercase(); + matches!(value.as_str(), "1" | "true" | "yes" | "on") + }) + .unwrap_or(false) +} + +pub(super) fn app_debug(message: &str) { + if app_debug_enabled() { + eprintln!("[beam-cli/apps/debug] {message}"); + } +} + +pub(super) fn host_request_summary(request: &HostRequest) -> String { + match request { + HostRequest::AppMetadata => "app-metadata".to_string(), + HostRequest::Args { args } => format!("args count={}", args.len()), + HostRequest::StructuredOutput { value } => { + format!("structured-output {}", value_shape(value)) + } + HostRequest::Diagnostic { level, message } => { + format!("diagnostic level={level} message={message}") + } + HostRequest::HttpFetch(request) => format!( + "http-fetch method={} url={} request_bytes={}", + request.method, + request.url, + request.body.len() + ), + HostRequest::ChainRead(request) => format!( + "chain-read operation={:?} chain={} target={} selector={}", + request.operation, + request.chain, + optional_value(&request.target), + optional_value(&request.selector) + ), + HostRequest::SimulateTransaction(transaction) => format!( + "simulate-transaction chain={} target={} selector={} spender={}", + transaction.chain, + transaction.target, + optional_value(&transaction.selector), + optional_value(&transaction.spender) + ), + HostRequest::SubmitTransaction(transaction) => format!( + "submit-transaction chain={} target={} selector={}", + transaction.chain, + transaction.target, + optional_value(&transaction.selector) + ), + HostRequest::PollReceipt { tx_hash } => format!("poll-receipt tx_hash={tx_hash}"), + HostRequest::ResolveAddress { value } => { + format!("resolve-address provided={}", value.is_some()) + } + HostRequest::AppStorageGet { key } => format!("storage-get key={key}"), + HostRequest::AppStorageSet { key, value } => { + format!("storage-set key={key} {}", value_shape(value)) + } + HostRequest::AppStorageRemove { key } => format!("storage-remove key={key}"), + } +} + +pub(super) fn host_value_summary(value: &Value) -> String { + if let Some(status) = value.get("status").and_then(Value::as_u64) { + let body_bytes = value + .get("body") + .and_then(Value::as_array) + .map(Vec::len) + .unwrap_or_default(); + return format!("status={status} response_bytes={body_bytes}"); + } + value_shape(value) +} + +fn value_shape(value: &Value) -> String { + match value { + Value::Array(values) => format!("array_len={}", values.len()), + Value::Object(values) => format!("object_keys={}", values.len()), + Value::String(value) => format!("string_len={}", value.len()), + Value::Number(_) => "number".to_string(), + Value::Bool(_) => "bool".to_string(), + Value::Null => "null".to_string(), + } +} + +fn optional_value(value: &Option) -> &str { + value.as_deref().unwrap_or("") +} diff --git a/pkg/beam-cli/src/apps/runtime/guest.rs b/pkg/beam-cli/src/apps/runtime/guest.rs index 4cf1394..24e8ed1 100644 --- a/pkg/beam-cli/src/apps/runtime/guest.rs +++ b/pkg/beam-cli/src/apps/runtime/guest.rs @@ -16,6 +16,8 @@ use crate::{ runtime::BeamApp, }; +use super::debug::{app_debug, app_debug_enabled, host_request_summary, host_value_summary}; + const MAX_WASM_MEMORY_BYTES: usize = 64 * 1024 * 1024; pub(super) struct HostState { @@ -24,11 +26,17 @@ pub(super) struct HostState { pub(super) limits: StoreLimits, metadata: Option, permissions: Option, + runtime_handle: Option, structured_output: Option, } impl HostState { - pub(super) fn new(app: BeamApp, permissions: AppPermissions, metadata: HostMetadata) -> Self { + pub(super) fn new( + app: BeamApp, + permissions: AppPermissions, + metadata: HostMetadata, + runtime_handle: Handle, + ) -> Self { Self { app: Some(app), diagnostics: Vec::new(), @@ -37,6 +45,7 @@ impl HostState { .build(), metadata: Some(metadata), permissions: Some(permissions), + runtime_handle: Some(runtime_handle), structured_output: None, } } @@ -50,6 +59,7 @@ impl HostState { .build(), metadata: None, permissions: None, + runtime_handle: None, structured_output: None, } } @@ -148,6 +158,10 @@ fn host_call( .context("read beam app host request")?; let request = serde_json::from_slice::(&request_bytes) .context("decode beam app host request")?; + let request_summary = app_debug_enabled().then(|| host_request_summary(&request)); + if let Some(summary) = &request_summary { + app_debug(&format!("host call start {summary}")); + } let app = caller .data() .app @@ -172,18 +186,33 @@ fn host_call( })?; let mut structured_output = caller.data().structured_output.clone(); let mut diagnostics = caller.data().diagnostics.clone(); - let result = tokio::task::block_in_place(|| { - Handle::current().block_on(handle_host_request( - &app, - &permissions, - &metadata, - request, - &mut structured_output, - &mut diagnostics, - )) - }); + let runtime_handle = + caller + .data() + .runtime_handle + .clone() + .ok_or_else(|| Error::InvalidHostRequest { + reason: "host runtime handle missing".to_string(), + })?; + let result = runtime_handle.block_on(handle_host_request( + &app, + &permissions, + &metadata, + request, + &mut structured_output, + &mut diagnostics, + )); caller.data_mut().structured_output = structured_output; caller.data_mut().diagnostics = diagnostics; + if let Some(summary) = &request_summary { + match &result { + Ok(value) => app_debug(&format!( + "host call ok {summary}; {}", + host_value_summary(value) + )), + Err(error) => app_debug(&format!("host call error {summary}; {error}")), + } + } let response = match result { Ok(value) => HostCallResponse::ok(value), Err(error) => HostCallResponse::error(format_error_chain(&error)), diff --git a/pkg/block-store/Cargo.toml b/pkg/block-store/Cargo.toml index 867c98b..feb914b 100644 --- a/pkg/block-store/Cargo.toml +++ b/pkg/block-store/Cargo.toml @@ -15,7 +15,6 @@ borsh = { workspace = true } rocksdb = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] tempdir = { workspace = true } diff --git a/pkg/bungee-interface/Cargo.toml b/pkg/bungee-interface/Cargo.toml index ce9b91e..445f2a2 100644 --- a/pkg/bungee-interface/Cargo.toml +++ b/pkg/bungee-interface/Cargo.toml @@ -16,7 +16,6 @@ serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } unimock = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] insta = { workspace = true } diff --git a/pkg/burn-substitutor/Cargo.toml b/pkg/burn-substitutor/Cargo.toml index 02c1612..8a9e065 100644 --- a/pkg/burn-substitutor/Cargo.toml +++ b/pkg/burn-substitutor/Cargo.toml @@ -20,4 +20,3 @@ serde = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } -workspace-hack = { workspace = true } diff --git a/pkg/client-http-longpoll/Cargo.toml b/pkg/client-http-longpoll/Cargo.toml index 77d53d0..0174aa1 100644 --- a/pkg/client-http-longpoll/Cargo.toml +++ b/pkg/client-http-longpoll/Cargo.toml @@ -12,4 +12,3 @@ async-stream = { workspace = true } tokio = { workspace = true } chrono = { workspace = true } futures = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/client-http/Cargo.toml b/pkg/client-http/Cargo.toml index 9d9b1bf..ed88dbd 100644 --- a/pkg/client-http/Cargo.toml +++ b/pkg/client-http/Cargo.toml @@ -13,4 +13,3 @@ serde = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/constants/Cargo.toml b/pkg/constants/Cargo.toml index 97216b3..ed8dd56 100644 --- a/pkg/constants/Cargo.toml +++ b/pkg/constants/Cargo.toml @@ -4,4 +4,3 @@ version = "0.1.0" edition = "2024" [dependencies] -workspace-hack.workspace = true diff --git a/pkg/contextful-macros/Cargo.toml b/pkg/contextful-macros/Cargo.toml index e9b595e..bcfb8db 100644 --- a/pkg/contextful-macros/Cargo.toml +++ b/pkg/contextful-macros/Cargo.toml @@ -12,4 +12,3 @@ proc-macro = true [dependencies] quote = { workspace = true } syn = { workspace = true, features = ["full"] } -workspace-hack.workspace = true diff --git a/pkg/contextful/Cargo.toml b/pkg/contextful/Cargo.toml index ec0c526..725f0bd 100644 --- a/pkg/contextful/Cargo.toml +++ b/pkg/contextful/Cargo.toml @@ -9,7 +9,6 @@ repository = "https://github.com/polybase/zk-rollup" [dependencies] serde = { workspace = true } contextful-macros = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/contracts/Cargo.toml b/pkg/contracts/Cargo.toml index 1768773..3f12c37 100644 --- a/pkg/contracts/Cargo.toml +++ b/pkg/contracts/Cargo.toml @@ -22,7 +22,6 @@ thiserror = { workspace = true } tokio = { workspace = true } web3 = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] zk-circuits = { workspace = true } diff --git a/pkg/country/Cargo.toml b/pkg/country/Cargo.toml index 2038ea9..549ec50 100644 --- a/pkg/country/Cargo.toml +++ b/pkg/country/Cargo.toml @@ -10,7 +10,6 @@ diesel = ["dep:diesel"] serde = { workspace = true } strum_macros = { workspace = true } strum = { workspace = true } -workspace-hack.workspace = true diesel = { workspace = true, optional = true } diff --git a/pkg/currency/Cargo.toml b/pkg/currency/Cargo.toml index fc1c5af..a58f79d 100644 --- a/pkg/currency/Cargo.toml +++ b/pkg/currency/Cargo.toml @@ -17,7 +17,6 @@ strum_macros = { workspace = true } strum = { workspace = true } thiserror = { workspace = true } ts-rs = { workspace = true, optional = true } -workspace-hack.workspace = true [package.metadata.cargo-machete] ignored = ["strum"] diff --git a/pkg/data/Cargo.toml b/pkg/data/Cargo.toml index 7a491f4..2963782 100644 --- a/pkg/data/Cargo.toml +++ b/pkg/data/Cargo.toml @@ -36,6 +36,5 @@ serde_json = { workspace = true } strum = { workspace = true } ts-rs = { workspace = true, optional = true } uuid = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] diff --git a/pkg/database/Cargo.toml b/pkg/database/Cargo.toml index ace3eb1..9d6a460 100644 --- a/pkg/database/Cargo.toml +++ b/pkg/database/Cargo.toml @@ -9,7 +9,6 @@ diesel = ["dep:diesel"] [dependencies] diesel = { workspace = true, optional = true, features = ["postgres"] } -workspace-hack.workspace = true [dev-dependencies] contextful = { workspace = true } diff --git a/pkg/diesel-util/Cargo.toml b/pkg/diesel-util/Cargo.toml index e7aac15..6964586 100644 --- a/pkg/diesel-util/Cargo.toml +++ b/pkg/diesel-util/Cargo.toml @@ -8,4 +8,3 @@ diesel = ["dep:diesel"] [dependencies] diesel = { workspace = true, optional = true } -workspace-hack.workspace = true diff --git a/pkg/doomslug/Cargo.toml b/pkg/doomslug/Cargo.toml index 75d4173..6544485 100644 --- a/pkg/doomslug/Cargo.toml +++ b/pkg/doomslug/Cargo.toml @@ -14,4 +14,3 @@ borsh = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } sha3 = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/eip7702/Cargo.toml b/pkg/eip7702/Cargo.toml index 277a2b6..7393fee 100644 --- a/pkg/eip7702/Cargo.toml +++ b/pkg/eip7702/Cargo.toml @@ -20,7 +20,6 @@ hex = { workspace = true } test-spy = { workspace = true } tracing = { workspace = true } client-http = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] testutil = { workspace = true } diff --git a/pkg/element/Cargo.toml b/pkg/element/Cargo.toml index f45e0a7..5518218 100644 --- a/pkg/element/Cargo.toml +++ b/pkg/element/Cargo.toml @@ -14,7 +14,6 @@ rand = { workspace = true, optional = true } serde = { workspace = true, optional = true, features = ["derive"] } borsh = { workspace = true, optional = true } ts-rs = { workspace = true, optional = true } -workspace-hack.workspace = true [dev-dependencies] test-strategy = { workspace = true } diff --git a/pkg/encrypt/Cargo.toml b/pkg/encrypt/Cargo.toml index ccc1878..29b114b 100644 --- a/pkg/encrypt/Cargo.toml +++ b/pkg/encrypt/Cargo.toml @@ -8,4 +8,3 @@ edition = "2024" thiserror = { workspace = true } crypto_secretbox = { workspace = true } x25519-dalek = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/eth-util/Cargo.toml b/pkg/eth-util/Cargo.toml index db35c46..ef33cb0 100644 --- a/pkg/eth-util/Cargo.toml +++ b/pkg/eth-util/Cargo.toml @@ -8,4 +8,3 @@ element = { workspace = true } sha3 = { workspace = true } secp256k1 = { workspace = true } ethereum-types = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/guild-client-http/Cargo.toml b/pkg/guild-client-http/Cargo.toml index 3e9cc09..9d4b62b 100644 --- a/pkg/guild-client-http/Cargo.toml +++ b/pkg/guild-client-http/Cargo.toml @@ -24,7 +24,6 @@ reqwest = { workspace = true } parking_lot = { workspace = true } thiserror = { workspace = true } uuid = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] tokio = { workspace = true, features = ["rt", "macros"] } diff --git a/pkg/guild-interface/Cargo.toml b/pkg/guild-interface/Cargo.toml index 011bb0b..54f4327 100644 --- a/pkg/guild-interface/Cargo.toml +++ b/pkg/guild-interface/Cargo.toml @@ -25,7 +25,6 @@ serde_json = { workspace = true } thiserror = { workspace = true } uuid = { workspace = true } kyc = { workspace = true } -workspace-hack.workspace = true [features] ts-rs = [ diff --git a/pkg/hash-poseidon/Cargo.toml b/pkg/hash-poseidon/Cargo.toml index 5e37a79..d5fea4f 100644 --- a/pkg/hash-poseidon/Cargo.toml +++ b/pkg/hash-poseidon/Cargo.toml @@ -8,7 +8,6 @@ element = { workspace = true } minimal-poseidon = { workspace = true } serde = { workspace = true } hex = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] insta = { workspace = true } diff --git a/pkg/hash/Cargo.toml b/pkg/hash/Cargo.toml index f6c241e..8f6d2ac 100644 --- a/pkg/hash/Cargo.toml +++ b/pkg/hash/Cargo.toml @@ -10,7 +10,6 @@ rand = { workspace = true, optional = true } serde = { workspace = true } hex = { workspace = true } bn254_blackbox_solver = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] insta = { workspace = true } diff --git a/pkg/http-interface/Cargo.toml b/pkg/http-interface/Cargo.toml index d61bfba..1e4cc93 100644 --- a/pkg/http-interface/Cargo.toml +++ b/pkg/http-interface/Cargo.toml @@ -12,4 +12,3 @@ serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } unimock = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/json-store/Cargo.toml b/pkg/json-store/Cargo.toml index df12a8d..3c61e12 100644 --- a/pkg/json-store/Cargo.toml +++ b/pkg/json-store/Cargo.toml @@ -9,7 +9,6 @@ serde_json = { workspace = true } tokio = { workspace = true } thiserror = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] tokio = { workspace = true, features = ["test-util"] } diff --git a/pkg/json-with-logging/Cargo.toml b/pkg/json-with-logging/Cargo.toml index 0dc7cf3..7663763 100644 --- a/pkg/json-with-logging/Cargo.toml +++ b/pkg/json-with-logging/Cargo.toml @@ -8,4 +8,3 @@ actix-web = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/kyc/Cargo.toml b/pkg/kyc/Cargo.toml index eb3c950..a93a2c0 100644 --- a/pkg/kyc/Cargo.toml +++ b/pkg/kyc/Cargo.toml @@ -21,7 +21,6 @@ base64 = { workspace = true } diesel = { workspace = true, optional = true } ts-rs = { workspace = true, optional = true } -workspace-hack.workspace = true [dev-dependencies] tokio = { workspace = true } diff --git a/pkg/minimal-poseidon/Cargo.toml b/pkg/minimal-poseidon/Cargo.toml index 2a3edbf..6626f51 100644 --- a/pkg/minimal-poseidon/Cargo.toml +++ b/pkg/minimal-poseidon/Cargo.toml @@ -7,4 +7,3 @@ edition = "2024" halo2curves = { workspace = true, features = ["derive_serde"] } ff = { workspace = true } lazy_static = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/network/Cargo.toml b/pkg/network/Cargo.toml index 82b53fe..4d30784 100644 --- a/pkg/network/Cargo.toml +++ b/pkg/network/Cargo.toml @@ -16,7 +16,6 @@ strum = { workspace = true } thiserror = { workspace = true } uuid = { workspace = true, features = ["serde"] } veil = { workspace = true } -workspace-hack.workspace = true [dependencies.ts-rs] workspace = true diff --git a/pkg/node-client-http/Cargo.toml b/pkg/node-client-http/Cargo.toml index 5174c99..6b0229f 100644 --- a/pkg/node-client-http/Cargo.toml +++ b/pkg/node-client-http/Cargo.toml @@ -14,7 +14,6 @@ zk-primitives = { workspace = true } async-trait = { workspace = true } serde = { workspace = true } reqwest = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } diff --git a/pkg/node-interface/Cargo.toml b/pkg/node-interface/Cargo.toml index 64dbf70..c61aa7d 100644 --- a/pkg/node-interface/Cargo.toml +++ b/pkg/node-interface/Cargo.toml @@ -15,7 +15,6 @@ serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } unimock = { workspace = true } -workspace-hack.workspace = true [dependencies.ts-rs] workspace = true diff --git a/pkg/node/Cargo.toml b/pkg/node/Cargo.toml index d097d4b..6044bc6 100644 --- a/pkg/node/Cargo.toml +++ b/pkg/node/Cargo.toml @@ -64,7 +64,6 @@ tokio-postgres = { workspace = true } postgres-native-tls = { workspace = true } native-tls = { workspace = true } scopeguard = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] dotenvy = { workspace = true } diff --git a/pkg/noir-abi-inputs-macro/Cargo.toml b/pkg/noir-abi-inputs-macro/Cargo.toml index a8df1a1..2fd21c3 100644 --- a/pkg/noir-abi-inputs-macro/Cargo.toml +++ b/pkg/noir-abi-inputs-macro/Cargo.toml @@ -16,4 +16,3 @@ quote = { workspace = true } syn = { workspace = true, features = ["full"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/notes-interface/Cargo.toml b/pkg/notes-interface/Cargo.toml index 143f16a..60f5df7 100644 --- a/pkg/notes-interface/Cargo.toml +++ b/pkg/notes-interface/Cargo.toml @@ -29,7 +29,6 @@ thiserror = { workspace = true } unimock = { workspace = true } uuid = { workspace = true } zk-primitives = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/p2p2/Cargo.toml b/pkg/p2p2/Cargo.toml index 00c2b34..69a8fe6 100644 --- a/pkg/p2p2/Cargo.toml +++ b/pkg/p2p2/Cargo.toml @@ -20,4 +20,3 @@ borsh = { workspace = true } wire-message = { workspace = true } strum = { workspace = true } whitelist-ips = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/parse-link/Cargo.toml b/pkg/parse-link/Cargo.toml index 47e9834..d7f1c8c 100644 --- a/pkg/parse-link/Cargo.toml +++ b/pkg/parse-link/Cargo.toml @@ -14,7 +14,6 @@ thiserror = { workspace = true } web3 = { workspace = true } ts-rs = { workspace = true, optional = true } hash = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/payy-evm-client-alloy/Cargo.toml b/pkg/payy-evm-client-alloy/Cargo.toml index e70dccf..e9f4299 100644 --- a/pkg/payy-evm-client-alloy/Cargo.toml +++ b/pkg/payy-evm-client-alloy/Cargo.toml @@ -9,4 +9,3 @@ async-trait = { workspace = true } contextful = { workspace = true } payy-evm-client-interface = { workspace = true } tokio = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/payy-evm-client-interface/Cargo.toml b/pkg/payy-evm-client-interface/Cargo.toml index 28949b8..cabf2a1 100644 --- a/pkg/payy-evm-client-interface/Cargo.toml +++ b/pkg/payy-evm-client-interface/Cargo.toml @@ -14,7 +14,6 @@ num-traits = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } zk-primitives = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/payy-evm-client-prover-bb/Cargo.toml b/pkg/payy-evm-client-prover-bb/Cargo.toml index e682943..772345f 100644 --- a/pkg/payy-evm-client-prover-bb/Cargo.toml +++ b/pkg/payy-evm-client-prover-bb/Cargo.toml @@ -10,7 +10,6 @@ contextful = { workspace = true } element = { workspace = true } payy-evm-client-prover-interface = { workspace = true } zk-circuits = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] tokio = { workspace = true } diff --git a/pkg/payy-evm-client-prover-interface/Cargo.toml b/pkg/payy-evm-client-prover-interface/Cargo.toml index 530e606..c8e69a6 100644 --- a/pkg/payy-evm-client-prover-interface/Cargo.toml +++ b/pkg/payy-evm-client-prover-interface/Cargo.toml @@ -9,4 +9,3 @@ contextful = { workspace = true } payy-evm-client-interface = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/payy-evm-client/Cargo.toml b/pkg/payy-evm-client/Cargo.toml index 53138be..f8ff52c 100644 --- a/pkg/payy-evm-client/Cargo.toml +++ b/pkg/payy-evm-client/Cargo.toml @@ -32,7 +32,6 @@ thiserror = { workspace = true } tokio = { workspace = true } zk-circuits = { workspace = true } zk-primitives = { workspace = true } -workspace-hack.workspace = true [features] default = ["bb-cli"] diff --git a/pkg/payy-evm-parse-link/Cargo.toml b/pkg/payy-evm-parse-link/Cargo.toml index 5608b46..5f85e3f 100644 --- a/pkg/payy-evm-parse-link/Cargo.toml +++ b/pkg/payy-evm-parse-link/Cargo.toml @@ -9,4 +9,3 @@ element = { workspace = true } payy-evm-client-interface = { workspace = true } sha3 = { workspace = true } zk-primitives = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/payy-note/Cargo.toml b/pkg/payy-note/Cargo.toml index 9f187e6..15cdd12 100644 --- a/pkg/payy-note/Cargo.toml +++ b/pkg/payy-note/Cargo.toml @@ -8,7 +8,6 @@ element = { workspace = true } serde = { workspace = true } unimock = { workspace = true } zk-primitives = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/price-cache-interface/Cargo.toml b/pkg/price-cache-interface/Cargo.toml index 1b36909..6551600 100644 --- a/pkg/price-cache-interface/Cargo.toml +++ b/pkg/price-cache-interface/Cargo.toml @@ -12,4 +12,3 @@ currency = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } unimock = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/primitives/Cargo.toml b/pkg/primitives/Cargo.toml index b2c5e31..d68b3d5 100644 --- a/pkg/primitives/Cargo.toml +++ b/pkg/primitives/Cargo.toml @@ -25,12 +25,14 @@ web3 = { workspace = true } futures = { workspace = true } thiserror = { workspace = true } diesel = { workspace = true, optional = true } -workspace-hack.workspace = true [dependencies.ts-rs] workspace = true optional = true +[dev-dependencies] +tokio = { workspace = true, features = ["macros", "rt", "test-util", "time"] } + [features] ts-rs = ["dep:ts-rs"] diesel = ["dep:diesel"] diff --git a/pkg/prover/Cargo.toml b/pkg/prover/Cargo.toml index f832d68..96314e9 100644 --- a/pkg/prover/Cargo.toml +++ b/pkg/prover/Cargo.toml @@ -22,7 +22,6 @@ borsh = { workspace = true } # TODO: why are we using this instead of hex lib? rustc-hex = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] expect-test = { workspace = true } diff --git a/pkg/ramps-interface/Cargo.toml b/pkg/ramps-interface/Cargo.toml index 1c154a9..da6adea 100644 --- a/pkg/ramps-interface/Cargo.toml +++ b/pkg/ramps-interface/Cargo.toml @@ -51,4 +51,3 @@ zk-primitives = { workspace = true } diesel = { workspace = true, optional = true } diesel-util = { workspace = true, optional = true } ts-rs = { workspace = true, optional = true } -workspace-hack.workspace = true diff --git a/pkg/rpc-error-convert/Cargo.toml b/pkg/rpc-error-convert/Cargo.toml index 234b65a..7545116 100644 --- a/pkg/rpc-error-convert/Cargo.toml +++ b/pkg/rpc-error-convert/Cargo.toml @@ -11,4 +11,3 @@ serde_json = { workspace = true } syn = { workspace = true, features = ["full"] } quote = { workspace = true } proc-macro2 = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/rpc/Cargo.toml b/pkg/rpc/Cargo.toml index 9e3f368..03353e6 100644 --- a/pkg/rpc/Cargo.toml +++ b/pkg/rpc/Cargo.toml @@ -25,7 +25,6 @@ strum_macros = { workspace = true } strum = { workspace = true } rpc-error-convert = { workspace = true } contextful = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] thiserror = { workspace = true } diff --git a/pkg/serde_yaml/Cargo.toml b/pkg/serde_yaml/Cargo.toml index 2f0b0c2..3cccf95 100644 --- a/pkg/serde_yaml/Cargo.toml +++ b/pkg/serde_yaml/Cargo.toml @@ -10,4 +10,3 @@ path = "lib.rs" [dependencies] serde_yaml_ng = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/smirk/Cargo.toml b/pkg/smirk/Cargo.toml index ab9b44a..367f86a 100644 --- a/pkg/smirk/Cargo.toml +++ b/pkg/smirk/Cargo.toml @@ -20,7 +20,6 @@ strum = { workspace = true } rayon = { workspace = true } dashmap = { workspace = true } tracing = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] serde_json = { workspace = true } diff --git a/pkg/solc-tooling/Cargo.toml b/pkg/solc-tooling/Cargo.toml index 7c1458c..08300af 100644 --- a/pkg/solc-tooling/Cargo.toml +++ b/pkg/solc-tooling/Cargo.toml @@ -10,4 +10,3 @@ hex = { workspace = true } home = { workspace = true } sha2 = { workspace = true } reqwest = { workspace = true, features = ["blocking"] } -workspace-hack.workspace = true diff --git a/pkg/solid/Cargo.toml b/pkg/solid/Cargo.toml index d45f0dc..5abe1e6 100644 --- a/pkg/solid/Cargo.toml +++ b/pkg/solid/Cargo.toml @@ -19,7 +19,6 @@ tokio = { workspace = true } tokio-stream = { workspace = true } uint = { workspace = true } borsh = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] proptest = { workspace = true } diff --git a/pkg/sourcify-client-reqwest/Cargo.toml b/pkg/sourcify-client-reqwest/Cargo.toml index ae16a93..16cec2d 100644 --- a/pkg/sourcify-client-reqwest/Cargo.toml +++ b/pkg/sourcify-client-reqwest/Cargo.toml @@ -12,7 +12,6 @@ serde_json = { workspace = true } sourcify-interface = { workspace = true } thiserror = { workspace = true } url = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] httpmock = { workspace = true } diff --git a/pkg/sourcify-interface/Cargo.toml b/pkg/sourcify-interface/Cargo.toml index 28fda9a..1847b98 100644 --- a/pkg/sourcify-interface/Cargo.toml +++ b/pkg/sourcify-interface/Cargo.toml @@ -9,4 +9,3 @@ contextful = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/test-spy-macros/Cargo.toml b/pkg/test-spy-macros/Cargo.toml index 528b157..2c020e2 100644 --- a/pkg/test-spy-macros/Cargo.toml +++ b/pkg/test-spy-macros/Cargo.toml @@ -10,4 +10,3 @@ proc-macro = true quote = { workspace = true } proc-macro2 = { workspace = true } syn = { workspace = true, features = ["full", "extra-traits"] } -workspace-hack.workspace = true diff --git a/pkg/test-spy/Cargo.toml b/pkg/test-spy/Cargo.toml index 7118b29..4cb949c 100644 --- a/pkg/test-spy/Cargo.toml +++ b/pkg/test-spy/Cargo.toml @@ -9,7 +9,6 @@ edition = "2024" test-spy-macros = { workspace = true } parking_lot = { workspace = true } serde = { workspace = true, features = ["derive"] } -workspace-hack.workspace = true [dev-dependencies] async-trait = { workspace = true } diff --git a/pkg/testutil/Cargo.toml b/pkg/testutil/Cargo.toml index 63082cc..362a8c4 100644 --- a/pkg/testutil/Cargo.toml +++ b/pkg/testutil/Cargo.toml @@ -7,4 +7,3 @@ edition = "2024" once_cell = { workspace = true } reqwest = { workspace = true } tokio = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/wallet-data-dep/Cargo.toml b/pkg/wallet-data-dep/Cargo.toml index 17f4a91..829a548 100644 --- a/pkg/wallet-data-dep/Cargo.toml +++ b/pkg/wallet-data-dep/Cargo.toml @@ -15,7 +15,6 @@ chrono = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } uuid = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] insta = { workspace = true, features = ["yaml", "redactions"] } diff --git a/pkg/wallet-primitives/Cargo.toml b/pkg/wallet-primitives/Cargo.toml index 40f2243..5d7a263 100644 --- a/pkg/wallet-primitives/Cargo.toml +++ b/pkg/wallet-primitives/Cargo.toml @@ -12,4 +12,3 @@ serde = { workspace = true } serde_json = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/wallet/Cargo.toml b/pkg/wallet/Cargo.toml index 2dc2429..b91b244 100644 --- a/pkg/wallet/Cargo.toml +++ b/pkg/wallet/Cargo.toml @@ -17,4 +17,3 @@ serde_json = { workspace = true } tokio = { workspace = true } web3 = { workspace = true } clap = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/whitelist-ips/Cargo.toml b/pkg/whitelist-ips/Cargo.toml index d933719..23e0302 100644 --- a/pkg/whitelist-ips/Cargo.toml +++ b/pkg/whitelist-ips/Cargo.toml @@ -8,4 +8,3 @@ edition = "2024" [dependencies] libp2p.workspace = true tracing.workspace = true -workspace-hack.workspace = true diff --git a/pkg/wire-message-macro/Cargo.toml b/pkg/wire-message-macro/Cargo.toml index 8331974..8c3c8fd 100644 --- a/pkg/wire-message-macro/Cargo.toml +++ b/pkg/wire-message-macro/Cargo.toml @@ -10,4 +10,3 @@ proc-macro = true quote = { workspace = true } proc-macro2 = { workspace = true } syn = { workspace = true, features = ["full"] } -workspace-hack.workspace = true diff --git a/pkg/wire-message/Cargo.toml b/pkg/wire-message/Cargo.toml index 85e60bc..c386a41 100644 --- a/pkg/wire-message/Cargo.toml +++ b/pkg/wire-message/Cargo.toml @@ -11,7 +11,6 @@ wire-message-macro = { workspace = true } strum = { workspace = true } strum_macros = { workspace = true } static_assertions = { workspace = true } -workspace-hack.workspace = true [features] test-api = [] diff --git a/pkg/workspace-hack/Cargo.toml b/pkg/workspace-hack/Cargo.toml deleted file mode 100644 index 08a07b3..0000000 --- a/pkg/workspace-hack/Cargo.toml +++ /dev/null @@ -1,538 +0,0 @@ -[package] -name = "workspace-hack" -version = "0.1.0" -edition = "2024" -description = "Workspace hack crate maintained by cargo-hakari" -publish = false - -[features] -default = [] - -### BEGIN HAKARI SECTION -[dependencies] -actix-router = { version = "0.5", default-features = false, features = ["http", "unicode"] } -aead = { version = "0.5", features = ["alloc", "getrandom"] } -ahash = { version = "0.8", default-features = false, features = ["runtime-rng"] } -aho-corasick = { version = "1" } -allocator-api2 = { version = "0.2" } -alloy-chains = { version = "0.2", default-features = false, features = ["rlp", "serde", "std"] } -alloy-consensus = { version = "1", features = ["k256", "kzg", "serde", "serde-bincode-compat"] } -alloy-dyn-abi = { version = "1", features = ["eip712"] } -alloy-eip7702 = { version = "0.6", default-features = false, features = ["k256", "serde", "serde-bincode-compat", "std"] } -alloy-eips = { version = "1", features = ["k256", "kzg", "serde", "serde-bincode-compat", "ssz"] } -alloy-json-abi = { version = "1", features = ["serde_json"] } -alloy-primitives = { version = "1", features = ["k256", "map-indexmap", "rand", "rlp", "serde"] } -alloy-provider = { version = "1", default-features = false, features = ["debug-api", "ipc", "reqwest", "ws"] } -alloy-rlp = { version = "0.3", features = ["arrayvec", "core-error", "core-net", "derive"] } -alloy-rpc-client = { version = "1", default-features = false, features = ["ipc", "reqwest", "ws"] } -alloy-rpc-types = { version = "1", default-features = false, features = ["engine", "eth"] } -alloy-rpc-types-engine = { version = "1", features = ["kzg", "ssz"] } -alloy-rpc-types-eth = { version = "1", features = ["serde-bincode-compat"] } -alloy-signer-local = { version = "1", default-features = false, features = ["mnemonic"] } -alloy-sol-type-parser = { version = "1", default-features = false, features = ["eip712", "serde", "std"] } -alloy-sol-types = { version = "1", features = ["eip712-serde", "json"] } -alloy-transport-http = { version = "1", default-features = false, features = ["reqwest", "reqwest-rustls-tls"] } -ark-bn254 = { version = "0.5", default-features = false, features = ["curve", "std"] } -ark-ec = { version = "0.5", default-features = false, features = ["std"] } -ark-ff = { version = "0.5", default-features = false, features = ["asm", "std"] } -ark-serialize = { version = "0.5", default-features = false, features = ["derive", "std"] } -ark-std = { version = "0.5", default-features = false, features = ["std"] } -arrayvec = { version = "0.7", features = ["serde"] } -async-compression = { version = "0.4", default-features = false, features = ["brotli", "gzip", "tokio", "zlib", "zstd"] } -axum = { version = "0.7", features = ["macros"] } -base64 = { version = "0.13", features = ["alloc"] } -bitflags = { version = "2", default-features = false, features = ["serde", "std"] } -bitvec = { version = "1", features = ["serde"] } -blst = { version = "0.3", features = ["portable"] } -bs58 = { version = "0.5", features = ["check"] } -bumpalo = { version = "3", features = ["allocator-api2", "collections"] } -byteorder = { version = "1", features = ["i128"] } -bytes = { version = "1", features = ["serde"] } -c-kzg = { version = "2", features = ["serde"] } -chrono = { version = "0.4", features = ["serde"] } -cipher = { version = "0.4", default-features = false, features = ["block-padding", "zeroize"] } -clap = { version = "4", features = ["derive", "env", "string"] } -clap_builder = { version = "4", default-features = false, features = ["color", "env", "help", "std", "string", "suggestions", "usage"] } -compression-codecs = { version = "0.4", default-features = false, features = ["brotli", "gzip", "zlib", "zstd"] } -concurrent-queue = { version = "2" } -const-hex = { version = "1", features = ["core-error", "hex", "serde"] } -crossbeam-epoch = { version = "0.9" } -crossbeam-utils = { version = "0.8" } -crunchy = { version = "0.2", features = ["limit_256", "std"] } -crypto-common = { version = "0.1", default-features = false, features = ["getrandom", "std"] } -curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "digest", "precomputed-tables", "zeroize"] } -dashmap = { version = "6", default-features = false, features = ["inline"] } -data-encoding = { version = "2" } -der = { version = "0.7", default-features = false, features = ["oid", "pem", "std"] } -derive_more = { version = "2", features = ["full"] } -digest = { version = "0.10", features = ["mac", "oid", "std"] } -ecdsa = { version = "0.16", default-features = false, features = ["pem", "serde", "signing", "std", "verifying"] } -ed25519 = { version = "2", default-features = false, features = ["alloc", "pkcs8", "std"] } -ed25519-dalek = { version = "2", features = ["pkcs8", "rand_core"] } -either = { version = "1", features = ["serde", "use_std"] } -elliptic-curve = { version = "0.13", default-features = false, features = ["ecdh", "hazmat", "pem", "serde", "std"] } -ethbloom = { version = "0.13", default-features = false, features = ["codec", "rlp", "serialize", "std"] } -ethereum-types = { version = "0.14", features = ["codec"] } -ff = { version = "0.13" } -figment = { version = "0.10", default-features = false, features = ["env", "test", "toml"] } -foldhash = { version = "0.1" } -form_urlencoded = { version = "1" } -futures = { version = "0.3", features = ["bilock", "thread-pool", "unstable"] } -futures-channel = { version = "0.3", features = ["sink", "unstable"] } -futures-core = { version = "0.3", features = ["unstable"] } -futures-executor = { version = "0.3", features = ["thread-pool"] } -futures-io = { version = "0.3", features = ["unstable"] } -futures-sink = { version = "0.3" } -futures-task = { version = "0.3", default-features = false, features = ["std", "unstable"] } -futures-timer = { version = "3", default-features = false, features = ["wasm-bindgen"] } -futures-util = { version = "0.3", features = ["bilock", "channel", "io", "sink", "unstable"] } -generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "zeroize"] } -getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] } -group = { version = "0.13" } -hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15" } -hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] } -hashbrown-594e8ee84c453af0 = { package = "hashbrown", version = "0.13", features = ["raw"] } -hashbrown-986da7b5efc2b80e = { package = "hashbrown", version = "0.16", features = ["serde"] } -hex = { version = "0.4", features = ["serde"] } -hmac = { version = "0.12", default-features = false, features = ["reset"] } -httparse = { version = "1" } -hyper = { version = "1", features = ["client", "http1", "http2", "server"] } -hyper-util = { version = "0.1", features = ["client-legacy", "server-auto", "service"] } -idna = { version = "1", default-features = false, features = ["compiled_data", "std"] } -indexmap = { version = "2", features = ["serde"] } -inout = { version = "0.1", default-features = false, features = ["block-padding"] } -insta = { version = "1", features = ["json", "redactions", "yaml"] } -itertools-582f2526e08bb6a0 = { package = "itertools", version = "0.14" } -itertools-594e8ee84c453af0 = { package = "itertools", version = "0.13" } -itertools-a6292c17cd707f01 = { package = "itertools", version = "0.11" } -k256 = { version = "0.13", features = ["serde"] } -keccak = { version = "0.1", default-features = false, features = ["asm"] } -lalrpop-util = { version = "0.20" } -lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] } -libc = { version = "0.2" } -libm = { version = "0.2" } -libz-sys = { version = "1", default-features = false, features = ["libc", "static"] } -lock_api = { version = "0.4", features = ["arc_lock", "serde"] } -log = { version = "0.4", default-features = false, features = ["std"] } -memchr = { version = "2" } -mio = { version = "1", features = ["net", "os-ext"] } -native-tls = { version = "0.2", default-features = false, features = ["alpn"] } -nom = { version = "7" } -num-bigint = { version = "0.4", features = ["serde"] } -num-integer = { version = "0.1", features = ["i128"] } -num-iter = { version = "0.1", default-features = false, features = ["i128", "std"] } -num-traits = { version = "0.2", features = ["i128", "libm"] } -num_enum = { version = "0.7" } -nybbles = { version = "0.4", default-features = false, features = ["rlp", "serde", "std"] } -once_cell = { version = "1", features = ["critical-section"] } -p256 = { version = "0.13", features = ["ecdh"] } -parity-scale-codec = { version = "3", features = ["bytes", "derive", "max-encoded-len"] } -parking_lot = { version = "0.12", features = ["arc_lock", "send_guard", "serde"] } -percent-encoding = { version = "2" } -phf_shared = { version = "0.11" } -portable-atomic = { version = "1" } -postgres-types = { version = "0.2", default-features = false, features = ["with-uuid-1"] } -ppv-lite86 = { version = "0.2", default-features = false, features = ["simd", "std"] } -primitive-types = { version = "0.12", default-features = false, features = ["byteorder", "rlp", "rustc-hex", "scale-info", "serde_no_std", "std"] } -proc-macro2 = { version = "1", features = ["span-locations"] } -prost = { version = "0.13", features = ["prost-derive"] } -rand-274715c4dabd11b0 = { package = "rand", version = "0.9", features = ["serde"] } -rand-c38e5c1d305a1b54 = { package = "rand", version = "0.8", features = ["serde", "small_rng"] } -rand_chacha-274715c4dabd11b0 = { package = "rand_chacha", version = "0.9" } -rand_chacha-468e82937335b1c9 = { package = "rand_chacha", version = "0.3" } -rand_core-274715c4dabd11b0 = { package = "rand_core", version = "0.9", default-features = false, features = ["os_rng", "serde", "std"] } -rand_core-3b31131e45eafb45 = { package = "rand_core", version = "0.6", default-features = false, features = ["std"] } -regex = { version = "1" } -regex-automata = { version = "0.4", default-features = false, features = ["dfa-build", "dfa-onepass", "hybrid", "meta", "nfa", "perf", "std", "unicode"] } -regex-syntax = { version = "0.8" } -reqwest-5ef9efb8ec2df382 = { package = "reqwest", version = "0.12", features = ["blocking", "json", "multipart", "rustls-tls", "rustls-tls-native-roots", "stream"] } -reqwest-a6292c17cd707f01 = { package = "reqwest", version = "0.11", default-features = false, features = ["default-tls", "gzip", "json"] } -ring = { version = "0.17", features = ["std"] } -rlp = { version = "0.5", features = ["derive"] } -ruint = { version = "1", default-features = false, features = ["alloy-rlp", "rand-09", "serde", "std"] } -rustc-hash = { version = "2", features = ["rand"] } -rustc-hex = { version = "2" } -rustls = { version = "0.23", features = ["ring"] } -rustls-webpki = { version = "0.103", default-features = false, features = ["aws-lc-rs", "ring", "std"] } -scopeguard = { version = "1" } -sec1 = { version = "0.7", features = ["pem", "serde", "std", "subtle"] } -semver = { version = "1", features = ["serde"] } -serde = { version = "1", features = ["alloc", "derive", "rc"] } -serde_core = { version = "1", features = ["alloc", "rc"] } -serde_json = { version = "1", features = ["alloc", "float_roundtrip", "raw_value", "unbounded_depth"] } -serde_spanned = { version = "1", default-features = false, features = ["serde", "std"] } -serde_with = { version = "3", features = ["base64"] } -sha1 = { version = "0.10", features = ["oid"] } -sha2 = { version = "0.10", features = ["compress", "oid"] } -sha3 = { version = "0.10", features = ["asm"] } -signature = { version = "2", default-features = false, features = ["digest", "rand_core", "std"] } -similar = { version = "2", features = ["inline"] } -smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union"] } -socket2-3b31131e45eafb45 = { package = "socket2", version = "0.6", default-features = false, features = ["all"] } -socket2-d8f496e17d97b5cb = { package = "socket2", version = "0.5", default-features = false, features = ["all"] } -spin = { version = "0.9", default-features = false, features = ["once", "rwlock", "spin_mutex", "std"] } -spki = { version = "0.7", default-features = false, features = ["pem", "std"] } -strum = { version = "0.27", features = ["derive"] } -subtle = { version = "2" } -sync_wrapper = { version = "1", default-features = false, features = ["futures"] } -thiserror = { version = "2" } -time = { version = "0.3", features = ["formatting", "local-offset", "macros", "parsing"] } -tiny-keccak = { version = "2", features = ["keccak", "sha3"] } -tokio = { version = "1", features = ["full", "test-util"] } -tokio-postgres = { version = "0.7", features = ["with-uuid-1"] } -tokio-rustls = { version = "0.26", features = ["ring"] } -tokio-stream = { version = "0.1", features = ["sync"] } -tokio-util = { version = "0.7", features = ["codec", "compat", "io", "time"] } -toml = { version = "0.9" } -tower = { version = "0.5", default-features = false, features = ["full", "log"] } -tracing = { version = "0.1", features = ["log", "valuable"] } -tracing-core = { version = "0.1", features = ["valuable"] } -tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } -triomphe = { version = "0.1", features = ["arc-swap"] } -unicode-bidi = { version = "0.3" } -unicode-normalization = { version = "0.1" } -url = { version = "2", features = ["serde"] } -uuid = { version = "1", features = ["serde", "v4"] } -winnow = { version = "0.7" } -x25519-dalek = { version = "2", features = ["static_secrets"] } -zeroize = { version = "1", features = ["zeroize_derive"] } -zstd = { version = "0.13", features = ["experimental"] } -zstd-safe = { version = "7", default-features = false, features = ["arrays", "experimental", "legacy", "std", "zdict_builder"] } -zstd-sys = { version = "2", features = ["experimental", "std"] } - -[build-dependencies] -actix-router = { version = "0.5", default-features = false, features = ["http", "unicode"] } -aead = { version = "0.5", features = ["alloc", "getrandom"] } -ahash = { version = "0.8", default-features = false, features = ["runtime-rng"] } -aho-corasick = { version = "1" } -allocator-api2 = { version = "0.2" } -alloy-chains = { version = "0.2", default-features = false, features = ["rlp", "serde", "std"] } -alloy-consensus = { version = "1", features = ["k256", "kzg", "serde", "serde-bincode-compat"] } -alloy-dyn-abi = { version = "1", features = ["eip712"] } -alloy-eip7702 = { version = "0.6", default-features = false, features = ["k256", "serde", "serde-bincode-compat", "std"] } -alloy-eips = { version = "1", features = ["k256", "kzg", "serde", "serde-bincode-compat", "ssz"] } -alloy-json-abi = { version = "1", features = ["serde_json"] } -alloy-primitives = { version = "1", features = ["k256", "map-indexmap", "rand", "rlp", "serde"] } -alloy-provider = { version = "1", default-features = false, features = ["debug-api", "ipc", "reqwest", "ws"] } -alloy-rlp = { version = "0.3", features = ["arrayvec", "core-error", "core-net", "derive"] } -alloy-rpc-client = { version = "1", default-features = false, features = ["ipc", "reqwest", "ws"] } -alloy-rpc-types = { version = "1", default-features = false, features = ["engine", "eth"] } -alloy-rpc-types-engine = { version = "1", features = ["kzg", "ssz"] } -alloy-rpc-types-eth = { version = "1", features = ["serde-bincode-compat"] } -alloy-signer-local = { version = "1", default-features = false, features = ["mnemonic"] } -alloy-sol-macro = { version = "1", default-features = false, features = ["json"] } -alloy-sol-macro-expander = { version = "1", default-features = false, features = ["json"] } -alloy-sol-macro-input = { version = "1", default-features = false, features = ["json"] } -alloy-sol-type-parser = { version = "1", default-features = false, features = ["eip712", "serde", "std"] } -alloy-sol-types = { version = "1", features = ["eip712-serde", "json"] } -alloy-transport-http = { version = "1", default-features = false, features = ["reqwest", "reqwest-rustls-tls"] } -ark-bn254 = { version = "0.5", default-features = false, features = ["curve", "std"] } -ark-ec = { version = "0.5", default-features = false, features = ["std"] } -ark-ff = { version = "0.5", default-features = false, features = ["asm", "std"] } -ark-serialize = { version = "0.5", default-features = false, features = ["derive", "std"] } -ark-std = { version = "0.5", default-features = false, features = ["std"] } -arrayvec = { version = "0.7", features = ["serde"] } -async-compression = { version = "0.4", default-features = false, features = ["brotli", "gzip", "tokio", "zlib", "zstd"] } -axum = { version = "0.7", features = ["macros"] } -base64 = { version = "0.13", features = ["alloc"] } -bindgen = { version = "0.71" } -bitflags = { version = "2", default-features = false, features = ["serde", "std"] } -bitvec = { version = "1", features = ["serde"] } -blst = { version = "0.3", features = ["portable"] } -bs58 = { version = "0.5", features = ["check"] } -bumpalo = { version = "3", features = ["allocator-api2", "collections"] } -byteorder = { version = "1", features = ["i128"] } -bytes = { version = "1", features = ["serde"] } -c-kzg = { version = "2", features = ["serde"] } -cc = { version = "1", default-features = false, features = ["parallel"] } -chrono = { version = "0.4", features = ["serde"] } -cipher = { version = "0.4", default-features = false, features = ["block-padding", "zeroize"] } -clang-sys = { version = "1", default-features = false, features = ["clang_11_0", "runtime"] } -clap = { version = "4", features = ["derive", "env", "string"] } -clap_builder = { version = "4", default-features = false, features = ["color", "env", "help", "std", "string", "suggestions", "usage"] } -compression-codecs = { version = "0.4", default-features = false, features = ["brotli", "gzip", "zlib", "zstd"] } -concurrent-queue = { version = "2" } -const-hex = { version = "1", features = ["core-error", "hex", "serde"] } -crossbeam-epoch = { version = "0.9" } -crossbeam-utils = { version = "0.8" } -crunchy = { version = "0.2", features = ["limit_256", "std"] } -crypto-common = { version = "0.1", default-features = false, features = ["getrandom", "std"] } -curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "digest", "precomputed-tables", "zeroize"] } -darling = { version = "0.21", features = ["serde"] } -darling_core = { version = "0.21", default-features = false, features = ["serde", "suggestions"] } -dashmap = { version = "6", default-features = false, features = ["inline"] } -data-encoding = { version = "2" } -der = { version = "0.7", default-features = false, features = ["oid", "pem", "std"] } -derive_more = { version = "2", features = ["full"] } -derive_more-impl = { version = "2", features = ["add", "add_assign", "as_ref", "constructor", "debug", "deref", "deref_mut", "display", "eq", "error", "from", "from_str", "index", "index_mut", "into", "into_iterator", "is_variant", "mul", "mul_assign", "not", "sum", "try_from", "try_into", "try_unwrap", "unwrap"] } -digest = { version = "0.10", features = ["mac", "oid", "std"] } -ecdsa = { version = "0.16", default-features = false, features = ["pem", "serde", "signing", "std", "verifying"] } -ed25519 = { version = "2", default-features = false, features = ["alloc", "pkcs8", "std"] } -ed25519-dalek = { version = "2", features = ["pkcs8", "rand_core"] } -either = { version = "1", features = ["serde", "use_std"] } -elliptic-curve = { version = "0.13", default-features = false, features = ["ecdh", "hazmat", "pem", "serde", "std"] } -ethbloom = { version = "0.13", default-features = false, features = ["codec", "rlp", "serialize", "std"] } -ethereum-types = { version = "0.14", features = ["codec"] } -ff = { version = "0.13" } -figment = { version = "0.10", default-features = false, features = ["env", "test", "toml"] } -foldhash = { version = "0.1" } -form_urlencoded = { version = "1" } -futures = { version = "0.3", features = ["bilock", "thread-pool", "unstable"] } -futures-channel = { version = "0.3", features = ["sink", "unstable"] } -futures-core = { version = "0.3", features = ["unstable"] } -futures-executor = { version = "0.3", features = ["thread-pool"] } -futures-io = { version = "0.3", features = ["unstable"] } -futures-sink = { version = "0.3" } -futures-task = { version = "0.3", default-features = false, features = ["std", "unstable"] } -futures-timer = { version = "3", default-features = false, features = ["wasm-bindgen"] } -futures-util = { version = "0.3", features = ["bilock", "channel", "io", "sink", "unstable"] } -generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "zeroize"] } -getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] } -group = { version = "0.13" } -hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15" } -hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] } -hashbrown-594e8ee84c453af0 = { package = "hashbrown", version = "0.13", features = ["raw"] } -hashbrown-986da7b5efc2b80e = { package = "hashbrown", version = "0.16", features = ["serde"] } -hex = { version = "0.4", features = ["serde"] } -hmac = { version = "0.12", default-features = false, features = ["reset"] } -httparse = { version = "1" } -hyper = { version = "1", features = ["client", "http1", "http2", "server"] } -hyper-util = { version = "0.1", features = ["client-legacy", "server-auto", "service"] } -idna = { version = "1", default-features = false, features = ["compiled_data", "std"] } -indexmap = { version = "2", features = ["serde"] } -inout = { version = "0.1", default-features = false, features = ["block-padding"] } -insta = { version = "1", features = ["json", "redactions", "yaml"] } -itertools-582f2526e08bb6a0 = { package = "itertools", version = "0.14" } -itertools-594e8ee84c453af0 = { package = "itertools", version = "0.13" } -itertools-a6292c17cd707f01 = { package = "itertools", version = "0.11" } -k256 = { version = "0.13", features = ["serde"] } -keccak = { version = "0.1", default-features = false, features = ["asm"] } -lalrpop-util = { version = "0.20" } -lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] } -libc = { version = "0.2" } -libm = { version = "0.2" } -libz-sys = { version = "1", default-features = false, features = ["libc", "static"] } -lock_api = { version = "0.4", features = ["arc_lock", "serde"] } -log = { version = "0.4", default-features = false, features = ["std"] } -memchr = { version = "2" } -mio = { version = "1", features = ["net", "os-ext"] } -native-tls = { version = "0.2", default-features = false, features = ["alpn"] } -nom = { version = "7" } -num-bigint = { version = "0.4", features = ["serde"] } -num-integer = { version = "0.1", features = ["i128"] } -num-iter = { version = "0.1", default-features = false, features = ["i128", "std"] } -num-traits = { version = "0.2", features = ["i128", "libm"] } -num_enum = { version = "0.7" } -num_enum_derive = { version = "0.7", default-features = false, features = ["std"] } -nybbles = { version = "0.4", default-features = false, features = ["rlp", "serde", "std"] } -once_cell = { version = "1", features = ["critical-section"] } -p256 = { version = "0.13", features = ["ecdh"] } -parity-scale-codec = { version = "3", features = ["bytes", "derive", "max-encoded-len"] } -parking_lot = { version = "0.12", features = ["arc_lock", "send_guard", "serde"] } -percent-encoding = { version = "2" } -phf_shared = { version = "0.11" } -portable-atomic = { version = "1" } -postgres-types = { version = "0.2", default-features = false, features = ["with-uuid-1"] } -ppv-lite86 = { version = "0.2", default-features = false, features = ["simd", "std"] } -prettyplease = { version = "0.2", default-features = false, features = ["verbatim"] } -primitive-types = { version = "0.12", default-features = false, features = ["byteorder", "rlp", "rustc-hex", "scale-info", "serde_no_std", "std"] } -proc-macro2 = { version = "1", features = ["span-locations"] } -prost = { version = "0.13", features = ["prost-derive"] } -quote = { version = "1" } -rand-274715c4dabd11b0 = { package = "rand", version = "0.9", features = ["serde"] } -rand-c38e5c1d305a1b54 = { package = "rand", version = "0.8", features = ["serde", "small_rng"] } -rand_chacha-274715c4dabd11b0 = { package = "rand_chacha", version = "0.9" } -rand_chacha-468e82937335b1c9 = { package = "rand_chacha", version = "0.3" } -rand_core-274715c4dabd11b0 = { package = "rand_core", version = "0.9", default-features = false, features = ["os_rng", "serde", "std"] } -rand_core-3b31131e45eafb45 = { package = "rand_core", version = "0.6", default-features = false, features = ["std"] } -regex = { version = "1" } -regex-automata = { version = "0.4", default-features = false, features = ["dfa-build", "dfa-onepass", "hybrid", "meta", "nfa", "perf", "std", "unicode"] } -regex-syntax = { version = "0.8" } -reqwest-5ef9efb8ec2df382 = { package = "reqwest", version = "0.12", features = ["blocking", "json", "multipart", "rustls-tls", "rustls-tls-native-roots", "stream"] } -reqwest-a6292c17cd707f01 = { package = "reqwest", version = "0.11", default-features = false, features = ["default-tls", "gzip", "json"] } -ring = { version = "0.17", features = ["std"] } -rlp = { version = "0.5", features = ["derive"] } -ruint = { version = "1", default-features = false, features = ["alloy-rlp", "rand-09", "serde", "std"] } -rustc-hash = { version = "2", features = ["rand"] } -rustc-hex = { version = "2" } -rustls = { version = "0.23", features = ["ring"] } -rustls-webpki = { version = "0.103", default-features = false, features = ["aws-lc-rs", "ring", "std"] } -scopeguard = { version = "1" } -sec1 = { version = "0.7", features = ["pem", "serde", "std", "subtle"] } -semver = { version = "1", features = ["serde"] } -serde = { version = "1", features = ["alloc", "derive", "rc"] } -serde_core = { version = "1", features = ["alloc", "rc"] } -serde_json = { version = "1", features = ["alloc", "float_roundtrip", "raw_value", "unbounded_depth"] } -serde_spanned = { version = "1", default-features = false, features = ["serde", "std"] } -serde_with = { version = "3", features = ["base64"] } -sha1 = { version = "0.10", features = ["oid"] } -sha2 = { version = "0.10", features = ["compress", "oid"] } -sha3 = { version = "0.10", features = ["asm"] } -signature = { version = "2", default-features = false, features = ["digest", "rand_core", "std"] } -similar = { version = "2", features = ["inline"] } -smallvec = { version = "1", default-features = false, features = ["const_new", "serde", "union"] } -socket2-3b31131e45eafb45 = { package = "socket2", version = "0.6", default-features = false, features = ["all"] } -socket2-d8f496e17d97b5cb = { package = "socket2", version = "0.5", default-features = false, features = ["all"] } -spin = { version = "0.9", default-features = false, features = ["once", "rwlock", "spin_mutex", "std"] } -spki = { version = "0.7", default-features = false, features = ["pem", "std"] } -strum = { version = "0.27", features = ["derive"] } -subtle = { version = "2" } -syn-dff4ba8e3ae991db = { package = "syn", version = "1", features = ["extra-traits", "full", "visit"] } -syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } -sync_wrapper = { version = "1", default-features = false, features = ["futures"] } -thiserror = { version = "2" } -time = { version = "0.3", features = ["formatting", "local-offset", "macros", "parsing"] } -tiny-keccak = { version = "2", features = ["keccak", "sha3"] } -tokio = { version = "1", features = ["full", "test-util"] } -tokio-postgres = { version = "0.7", features = ["with-uuid-1"] } -tokio-rustls = { version = "0.26", features = ["ring"] } -tokio-stream = { version = "0.1", features = ["sync"] } -tokio-util = { version = "0.7", features = ["codec", "compat", "io", "time"] } -toml = { version = "0.9" } -tower = { version = "0.5", default-features = false, features = ["full", "log"] } -tracing = { version = "0.1", features = ["log", "valuable"] } -tracing-core = { version = "0.1", features = ["valuable"] } -tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } -triomphe = { version = "0.1", features = ["arc-swap"] } -unicode-bidi = { version = "0.3" } -unicode-normalization = { version = "0.1" } -url = { version = "2", features = ["serde"] } -uuid = { version = "1", features = ["serde", "v4"] } -winnow = { version = "0.7" } -x25519-dalek = { version = "2", features = ["static_secrets"] } -zeroize = { version = "1", features = ["zeroize_derive"] } -zstd = { version = "0.13", features = ["experimental"] } -zstd-safe = { version = "7", default-features = false, features = ["arrays", "experimental", "legacy", "std", "zdict_builder"] } -zstd-sys = { version = "2", features = ["experimental", "std"] } - -[target.x86_64-unknown-linux-gnu.dependencies] -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -linux-raw-sys-9fbad63c4bcf4a8f = { package = "linux-raw-sys", version = "0.4", default-features = false, features = ["elf", "errno", "general", "ioctl", "no_std", "prctl", "system"] } -linux-raw-sys-a6292c17cd707f01 = { package = "linux-raw-sys", version = "0.11", default-features = false, features = ["auxvec", "elf", "errno", "general", "ioctl", "no_std", "prctl", "system"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -openssl = { version = "0.10", features = ["vendored"] } -openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] } -rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["param", "process", "system", "thread"] } -rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "param", "process", "system", "thread"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.x86_64-unknown-linux-gnu.build-dependencies] -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -linux-raw-sys-9fbad63c4bcf4a8f = { package = "linux-raw-sys", version = "0.4", default-features = false, features = ["elf", "errno", "general", "ioctl", "no_std", "prctl", "system"] } -linux-raw-sys-a6292c17cd707f01 = { package = "linux-raw-sys", version = "0.11", default-features = false, features = ["auxvec", "elf", "errno", "general", "ioctl", "no_std", "prctl", "system"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -openssl = { version = "0.10", features = ["vendored"] } -openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] } -rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["param", "process", "system", "thread"] } -rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "param", "process", "system", "thread"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-darwin.dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-7b89eefb6aaa9bf3 = { package = "security-framework", version = "3", features = ["OSX_10_14"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-darwin.build-dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-7b89eefb6aaa9bf3 = { package = "security-framework", version = "3", features = ["OSX_10_14"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-ios.dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-ios.build-dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-ios-sim.dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.aarch64-apple-ios-sim.build-dependencies] -errno = { version = "0.3" } -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -libc = { version = "0.2", default-features = false, features = ["extra_traits"] } -miniz_oxide = { version = "0.8", default-features = false, features = ["simd", "with-alloc"] } -security-framework-f595c2ba2a3f28df = { package = "security-framework", version = "2", features = ["alpn"] } -security-framework-sys = { version = "2", features = ["OSX_10_14"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } - -[target.x86_64-pc-windows-msvc.dependencies] -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } -winapi = { version = "0.3", default-features = false, features = ["cfg", "consoleapi", "errhandlingapi", "evntrace", "fileapi", "handleapi", "in6addr", "inaddr", "knownfolders", "libloaderapi", "memoryapi", "minwinbase", "minwindef", "ntsecapi", "ntstatus", "objbase", "processenv", "processthreadsapi", "profileapi", "psapi", "shlobj", "std", "synchapi", "sysinfoapi", "winbase", "wincon", "windef", "winerror", "winioctl", "winnt", "ws2ipdef", "ws2tcpip"] } -windows-sys-4db8c43aad08e7ae = { package = "windows-sys", version = "0.60", features = ["Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Input_KeyboardAndMouse"] } -windows-sys-73dcd821b1037cfd = { package = "windows-sys", version = "0.59", features = ["Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Memory", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_UI_Input_KeyboardAndMouse"] } -windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_Environment", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell"] } -windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", features = ["Win32_Foundation", "Win32_Globalization", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Diagnostics_Debug", "Win32_System_Memory", "Win32_System_Registry", "Win32_System_Time", "Win32_UI_Shell"] } -windows-sys-d4189bed749088b6 = { package = "windows-sys", version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Networking_WinSock", "Win32_Security_Authentication_Identity", "Win32_Security_Credentials", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Console", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] } - -[target.x86_64-pc-windows-msvc.build-dependencies] -getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] } -hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "native-tokio", "ring", "tls12", "webpki-tokio"] } -hyper-util = { version = "0.1", default-features = false, features = ["client-proxy", "client-proxy-system"] } -tokio-tungstenite = { version = "0.26", features = ["rustls-tls-native-roots", "rustls-tls-webpki-roots"] } -tower-http = { version = "0.6", features = ["full"] } -winapi = { version = "0.3", default-features = false, features = ["cfg", "consoleapi", "errhandlingapi", "evntrace", "fileapi", "handleapi", "in6addr", "inaddr", "knownfolders", "libloaderapi", "memoryapi", "minwinbase", "minwindef", "ntsecapi", "ntstatus", "objbase", "processenv", "processthreadsapi", "profileapi", "psapi", "shlobj", "std", "synchapi", "sysinfoapi", "winbase", "wincon", "windef", "winerror", "winioctl", "winnt", "ws2ipdef", "ws2tcpip"] } -windows-sys-4db8c43aad08e7ae = { package = "windows-sys", version = "0.60", features = ["Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Input_KeyboardAndMouse"] } -windows-sys-73dcd821b1037cfd = { package = "windows-sys", version = "0.59", features = ["Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_IO", "Win32_System_Memory", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_UI_Input_KeyboardAndMouse"] } -windows-sys-b21d60becc0929df = { package = "windows-sys", version = "0.52", features = ["Win32_Foundation", "Win32_Networking_WinSock", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_Environment", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell"] } -windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", features = ["Win32_Foundation", "Win32_Globalization", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Diagnostics_Debug", "Win32_System_Memory", "Win32_System_Registry", "Win32_System_Time", "Win32_UI_Shell"] } -windows-sys-d4189bed749088b6 = { package = "windows-sys", version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Wdk_System_IO", "Win32_Networking_WinSock", "Win32_Security_Authentication_Identity", "Win32_Security_Credentials", "Win32_Security_Cryptography", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_Console", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell", "Win32_UI_WindowsAndMessaging"] } - -### END HAKARI SECTION diff --git a/pkg/workspace-hack/src/lib.rs b/pkg/workspace-hack/src/lib.rs deleted file mode 100644 index 9ac8670..0000000 --- a/pkg/workspace-hack/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -// Workspace hack crate intentionally empty. diff --git a/pkg/xtask/Cargo.toml b/pkg/xtask/Cargo.toml index d131d28..6ef8d2c 100644 --- a/pkg/xtask/Cargo.toml +++ b/pkg/xtask/Cargo.toml @@ -21,4 +21,3 @@ serde_json = { workspace = true } indoc = { workspace = true } solc-tooling = { workspace = true } toml = { workspace = true } -workspace-hack.workspace = true diff --git a/pkg/xtask/src/test/metadata.rs b/pkg/xtask/src/cargo_metadata.rs similarity index 61% rename from pkg/xtask/src/test/metadata.rs rename to pkg/xtask/src/cargo_metadata.rs index c8c0736..9a05367 100644 --- a/pkg/xtask/src/test/metadata.rs +++ b/pkg/xtask/src/cargo_metadata.rs @@ -11,20 +11,28 @@ use crate::error::{Result, XTaskError}; pub struct Metadata { packages: HashMap, workspace_members: Vec, - workspace_member_set: HashSet, - resolve: HashMap>, } #[derive(Debug)] pub struct Package { pub name: String, manifest_dir_abs: PathBuf, + manifest_path_abs: PathBuf, + workspace_dependency_ids: Vec, } impl Package { pub fn manifest_dir_abs(&self) -> &Path { &self.manifest_dir_abs } + + pub fn manifest_path_abs(&self) -> &Path { + &self.manifest_path_abs + } + + pub fn workspace_dependency_ids(&self) -> &[String] { + &self.workspace_dependency_ids + } } impl Metadata { @@ -41,29 +49,12 @@ impl Metadata { pub fn package_by_name(&self, name: &str) -> Option<&Package> { self.packages.values().find(|package| package.name == name) } - - pub fn workspace_member_ids(&self) -> &[String] { - &self.workspace_members - } - - pub fn is_workspace_member(&self, id: &str) -> bool { - self.workspace_member_set.contains(id) - } - - pub fn dependencies_for(&self, id: &str) -> impl Iterator { - self.resolve - .get(id) - .map(|deps| deps.iter()) - .into_iter() - .flatten() - } } #[derive(Deserialize)] struct RawMetadata { packages: Vec, workspace_members: Vec, - resolve: Option, } #[derive(Deserialize)] @@ -71,22 +62,28 @@ struct RawPackage { id: String, name: String, manifest_path: PathBuf, + #[serde(default)] + dependencies: Vec, } #[derive(Deserialize)] -struct RawResolve { - nodes: Vec, +struct RawDependency { + path: Option, } -#[derive(Deserialize)] -struct RawNode { +struct WorkspaceRawPackage { id: String, - dependencies: Vec, + name: String, + manifest_dir_abs: PathBuf, + manifest_path_abs: PathBuf, + dependencies: Vec, } -pub fn load_metadata(repo_root: &Path) -> Result { - let output = Command::new("cargo") - .args(["metadata", "--format-version", "1"]) +pub fn load_workspace_metadata(repo_root: &Path) -> Result { + let mut command = Command::new("cargo"); + command.args(["metadata", "--format-version", "1", "--no-deps"]); + + let output = command .current_dir(repo_root) .output() .context("spawn cargo metadata command")?; @@ -105,7 +102,7 @@ pub fn load_metadata(repo_root: &Path) -> Result { .cloned() .collect::>(); - let mut packages = HashMap::new(); + let mut raw_workspace_packages = Vec::new(); for raw_package in raw.packages { if !workspace_member_set.contains(&raw_package.id) { continue; @@ -127,32 +124,45 @@ pub fn load_metadata(repo_root: &Path) -> Result { path: manifest_dir_abs.clone(), })?; + raw_workspace_packages.push(WorkspaceRawPackage { + id: raw_package.id, + name: raw_package.name, + manifest_dir_abs, + manifest_path_abs: raw_package.manifest_path, + dependencies: raw_package.dependencies, + }); + } + + let package_id_by_manifest_dir = raw_workspace_packages + .iter() + .map(|package| (package.manifest_dir_abs.clone(), package.id.clone())) + .collect::>(); + + let mut packages = HashMap::new(); + for raw_package in raw_workspace_packages { + let workspace_dependency_ids = raw_package + .dependencies + .iter() + .filter_map(|dependency| dependency.path.as_ref()) + .filter_map(|path| package_id_by_manifest_dir.get(path)) + .cloned() + .collect::>(); + packages.insert( raw_package.id.clone(), Package { name: raw_package.name, - manifest_dir_abs, + manifest_dir_abs: raw_package.manifest_dir_abs, + manifest_path_abs: raw_package.manifest_path_abs, + workspace_dependency_ids, }, ); } - let resolve_nodes = raw - .resolve - .map(|resolve| { - resolve - .nodes - .into_iter() - .map(|node| (node.id, node.dependencies)) - .collect() - }) - .unwrap_or_default(); - let workspace_members = raw.workspace_members; Ok(Metadata { packages, workspace_members, - workspace_member_set, - resolve: resolve_nodes, }) } diff --git a/pkg/xtask/src/git.rs b/pkg/xtask/src/git.rs index 5fc29a5..cfadacc 100644 --- a/pkg/xtask/src/git.rs +++ b/pkg/xtask/src/git.rs @@ -15,7 +15,7 @@ pub fn collect_changed_files(repo_root: &Path) -> Result> { if line.len() < 4 { continue; } - if !include_unstaged_status(line) { + if !include_changed_status(line) { continue; } let path = line[3..].trim(); @@ -106,7 +106,7 @@ fn git_output(repo_root: &Path, args: &[&str]) -> Result { Ok(String::from_utf8(output.stdout).context("parse git stdout as utf-8")?) } -fn include_unstaged_status(line: &str) -> bool { +fn include_changed_status(line: &str) -> bool { if line.len() < 2 { return false; } @@ -121,6 +121,6 @@ fn include_unstaged_status(line: &str) -> bool { match (first, second) { ('?', '?') => true, ('!', '!') => false, - (_, status) => status != ' ', + (index_status, worktree_status) => index_status != ' ' || worktree_status != ' ', } } diff --git a/pkg/xtask/src/lint/file_length.rs b/pkg/xtask/src/lint/file_length.rs new file mode 100644 index 0000000..b371fe1 --- /dev/null +++ b/pkg/xtask/src/lint/file_length.rs @@ -0,0 +1,195 @@ +use std::fs::{self, File}; +use std::io::{BufRead, BufReader}; +use std::path::{Path, PathBuf}; +use std::time::Instant; + +use contextful::ResultContextExt; + +use crate::error::Result; +use crate::lint::steps::StepResult; + +mod report; + +use report::{Violation, render_failure}; + +const DEFAULT_LIMIT: usize = 200; +const MAX_OVERRIDE_SCAN_LINES: usize = 20; +const TARGET_DIR: &str = "pkg"; + +pub fn run(repo_root: &Path) -> Result { + let start = Instant::now(); + let target_dir = repo_root.join(TARGET_DIR); + + if !target_dir.is_dir() { + return Ok(StepResult::failed( + "File length", + format!("pkg directory not found at {}", target_dir.display()), + start.elapsed(), + )); + } + + let files = collect_rust_files(&target_dir)?; + if files.is_empty() { + return Ok(StepResult::success( + "File length", + "No Rust files found under pkg/.".to_owned(), + start.elapsed(), + )); + } + + let mut checked_files = 0usize; + let mut violations = Vec::new(); + + for path in files { + match inspect_file(&path)? { + FileInspection::Generated => {} + FileInspection::Checked { line_count, limit } => { + checked_files += 1; + if line_count > limit { + violations.push(Violation { + path, + line_count, + limit, + }); + } + } + } + } + + if violations.is_empty() { + return Ok(StepResult::success( + "File length", + format!("Checked {checked_files} Rust file(s); all within length limits"), + start.elapsed(), + )); + } + + let summary = format!("{} file(s) exceed configured limits", violations.len()); + + Ok(StepResult::failed("File length", summary, start.elapsed()) + .with_extra_output(render_failure(repo_root, &violations))) +} + +fn collect_rust_files(target_dir: &Path) -> Result> { + let mut files = Vec::new(); + collect_rust_files_in(target_dir, &mut files)?; + files.sort(); + Ok(files) +} + +fn collect_rust_files_in(dir: &Path, files: &mut Vec) -> Result<()> { + let entries = fs::read_dir(dir).with_context(|| format!("list {}", dir.display()))?; + + for entry in entries { + let entry = entry.with_context(|| format!("iterate {}", dir.display()))?; + let path = entry.path(); + let file_type = entry + .file_type() + .with_context(|| format!("read file type for {}", path.display()))?; + + if file_type.is_dir() { + collect_rust_files_in(&path, files)?; + } else if file_type.is_file() && path.extension().and_then(|ext| ext.to_str()) == Some("rs") + { + files.push(path); + } + } + + Ok(()) +} + +enum FileInspection { + Generated, + Checked { line_count: usize, limit: usize }, +} + +fn inspect_file(path: &Path) -> Result { + let file = File::open(path).with_context(|| format!("open {}", path.display()))?; + let mut reader = BufReader::new(file); + let mut buffer = Vec::new(); + let mut logical_line = 0usize; + let mut line_count = 0usize; + let mut limit = DEFAULT_LIMIT; + let mut override_seen = false; + + loop { + buffer.clear(); + let bytes_read = reader + .read_until(b'\n', &mut buffer) + .with_context(|| format!("read {}", path.display()))?; + if bytes_read == 0 { + break; + } + + logical_line += 1; + if buffer.ends_with(b"\n") { + line_count += 1; + } + + if logical_line == 1 && is_generated_line(&buffer) { + return Ok(FileInspection::Generated); + } + + if logical_line <= MAX_OVERRIDE_SCAN_LINES + && !override_seen + && let Some(override_limit) = parse_override_limit(&buffer) + { + limit = override_limit; + override_seen = true; + } + } + + Ok(FileInspection::Checked { line_count, limit }) +} + +fn is_generated_line(line: &[u8]) -> bool { + let line = line_without_ending(line); + let Some(rest) = line.strip_prefix(b"//") else { + return false; + }; + + trim_ascii_start(rest).starts_with(b"@generated") +} + +fn parse_override_limit(line: &[u8]) -> Option { + let mut rest = trim_ascii_start(line_without_ending(line)).strip_prefix(b"//")?; + rest = trim_ascii_start(rest); + rest = rest.strip_prefix(b"lint-long-file-override")?; + rest = strip_required_ascii_whitespace(rest)?; + rest = rest.strip_prefix(b"allow-max-lines")?; + rest = trim_ascii_start(rest).strip_prefix(b"=")?; + rest = trim_ascii_start(rest); + + let digit_count = rest.iter().take_while(|byte| byte.is_ascii_digit()).count(); + if digit_count == 0 { + return None; + } + + std::str::from_utf8(&rest[..digit_count]) + .ok()? + .parse::() + .ok() +} + +fn strip_required_ascii_whitespace(bytes: &[u8]) -> Option<&[u8]> { + bytes + .first() + .filter(|byte| byte.is_ascii_whitespace()) + .map(|_| trim_ascii_start(bytes)) +} + +fn trim_ascii_start(bytes: &[u8]) -> &[u8] { + let first_non_whitespace = bytes + .iter() + .position(|byte| !byte.is_ascii_whitespace()) + .unwrap_or(bytes.len()); + &bytes[first_non_whitespace..] +} + +fn line_without_ending(line: &[u8]) -> &[u8] { + let line = line.strip_suffix(b"\n").unwrap_or(line); + line.strip_suffix(b"\r").unwrap_or(line) +} + +#[cfg(test)] +mod tests; diff --git a/pkg/xtask/src/lint/file_length/report.rs b/pkg/xtask/src/lint/file_length/report.rs new file mode 100644 index 0000000..dd16602 --- /dev/null +++ b/pkg/xtask/src/lint/file_length/report.rs @@ -0,0 +1,44 @@ +use std::path::{Path, PathBuf}; + +pub struct Violation { + pub path: PathBuf, + pub line_count: usize, + pub limit: usize, +} + +pub fn render_failure(repo_root: &Path, violations: &[Violation]) -> Vec { + let mut lines = Vec::new(); + lines.push( + "File length check failed. The following files exceed their configured limits:".to_owned(), + ); + lines.push(String::new()); + + for violation in violations { + lines.push(format!( + "- {} has {} lines (limit {})", + relative_display(repo_root, &violation.path), + violation.line_count, + violation.limit + )); + } + + lines.push(String::new()); + lines.push("Primary hint: Refactor large files to reduce their length.".to_owned()); + lines.push( + "Secondary hint: If the additional length is justified, add an override comment at the top of the file." + .to_owned(), + ); + lines.push( + " Example override comment: '// lint-long-file-override allow-max-lines=300' to bump the limit to 300 lines" + .to_owned(), + ); + lines.push(" Bump the limits in increments of 100.".to_owned()); + lines +} + +pub fn relative_display(repo_root: &Path, path: &Path) -> String { + path.strip_prefix(repo_root) + .unwrap_or(path) + .to_string_lossy() + .replace('\\', "/") +} diff --git a/pkg/xtask/src/lint/file_length/tests.rs b/pkg/xtask/src/lint/file_length/tests.rs new file mode 100644 index 0000000..3f94b9c --- /dev/null +++ b/pkg/xtask/src/lint/file_length/tests.rs @@ -0,0 +1,150 @@ +use std::fs; +use std::path::Path; + +use tempfile::tempdir; + +use super::{ + DEFAULT_LIMIT, FileInspection, collect_rust_files, inspect_file, parse_override_limit, + report::relative_display, +}; + +#[test] +fn collects_rust_files_recursively_in_sorted_order() { + let temp = tempdir().expect("tempdir"); + write_file(temp.path().join("pkg/z.rs"), ""); + write_file(temp.path().join("pkg/a/nested.rs"), ""); + write_file(temp.path().join("pkg/a/ignored.txt"), ""); + + let files = collect_rust_files(&temp.path().join("pkg")).expect("collect files"); + let relative = files + .iter() + .map(|path| relative_display(temp.path(), path)) + .collect::>(); + + assert_eq!(relative, vec!["pkg/a/nested.rs", "pkg/z.rs"]); +} + +#[test] +fn detects_default_limit_violation() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("long.rs"); + write_file(&path, lines(DEFAULT_LIMIT + 1)); + + let FileInspection::Checked { line_count, limit } = inspect_file(&path).expect("inspect file") + else { + panic!("file should be checked"); + }; + + assert_eq!(line_count, DEFAULT_LIMIT + 1); + assert_eq!(limit, DEFAULT_LIMIT); +} + +#[test] +fn honors_override_in_first_twenty_lines() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("overridden.rs"); + let source = format!( + " // lint-long-file-override allow-max-lines = 250\n{}", + lines(DEFAULT_LIMIT + 1) + ); + write_file(&path, source); + + let FileInspection::Checked { line_count, limit } = inspect_file(&path).expect("inspect file") + else { + panic!("file should be checked"); + }; + + assert_eq!(line_count, DEFAULT_LIMIT + 2); + assert_eq!(limit, 250); +} + +#[test] +fn uses_first_override_in_first_twenty_lines() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("multiple_overrides.rs"); + let source = format!( + "// lint-long-file-override allow-max-lines=250\n// lint-long-file-override allow-max-lines=300\n{}", + lines(DEFAULT_LIMIT + 1) + ); + write_file(&path, source); + + let FileInspection::Checked { limit, .. } = inspect_file(&path).expect("inspect file") else { + panic!("file should be checked"); + }; + + assert_eq!(limit, 250); +} + +#[test] +fn ignores_override_after_first_twenty_lines() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("late_override.rs"); + let source = format!( + "{}// lint-long-file-override allow-max-lines=300\n", + lines(20) + ); + write_file(&path, source); + + let FileInspection::Checked { limit, .. } = inspect_file(&path).expect("inspect file") else { + panic!("file should be checked"); + }; + + assert_eq!(limit, DEFAULT_LIMIT); +} + +#[test] +fn skips_generated_first_line_files() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("generated.rs"); + write_file( + &path, + format!("// @generated\n{}", lines(DEFAULT_LIMIT + 1)), + ); + + assert!(matches!( + inspect_file(&path).expect("inspect file"), + FileInspection::Generated + )); +} + +#[test] +fn preserves_wc_line_count_semantics() { + let temp = tempdir().expect("tempdir"); + let path = temp.path().join("partial.rs"); + write_file(&path, "one\ntwo"); + + let FileInspection::Checked { line_count, .. } = inspect_file(&path).expect("inspect file") + else { + panic!("file should be checked"); + }; + + assert_eq!(line_count, 1); +} + +#[test] +fn parses_override_limit_like_the_shell_pattern() { + assert_eq!( + parse_override_limit(b"\t// lint-long-file-override allow-max-lines = 300"), + Some(300) + ); + assert_eq!( + parse_override_limit(b"// lint-long-file-overrideallow-max-lines=300"), + None + ); + assert_eq!( + parse_override_limit(b"// lint-long-file-override allow-max-lines = nope"), + None + ); +} + +fn lines(count: usize) -> String { + "line\n".repeat(count) +} + +fn write_file(path: impl AsRef, contents: impl AsRef<[u8]>) { + let path = path.as_ref(); + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).expect("create parent dir"); + } + fs::write(path, contents).expect("write file"); +} diff --git a/pkg/xtask/src/lint/mod.rs b/pkg/xtask/src/lint/mod.rs index c27fc86..5247428 100644 --- a/pkg/xtask/src/lint/mod.rs +++ b/pkg/xtask/src/lint/mod.rs @@ -1,4 +1,5 @@ // lint-long-file-override allow-max-lines=250 +mod file_length; mod i18n; mod steps; @@ -8,7 +9,7 @@ use clap::{ArgGroup, Args, ValueEnum}; use crate::error::{Result, XTaskError, workspace_root}; use crate::lint::steps::{ - StepResult, print_step, run_ast_grep, run_claude_doc, run_clippy, run_file_length, run_hakari, + StepResult, print_step, run_ast_grep, run_claude_doc, run_clippy, run_file_length, run_i18n_consistency, run_rustfmt, run_spec_lint, run_taplo_check, run_taplo_fmt, run_workspace_deps, }; @@ -31,8 +32,6 @@ pub enum LinterType { FileLength, /// Internationalization locale consistency I18nConsistency, - /// Cargo Hakari workspace-hack consistency - Hakari, /// Workspace dependency inheritance validator WorkspaceDeps, } @@ -67,6 +66,12 @@ pub enum LintMode { CheckOnly, } +impl LintMode { + pub fn is_check_only(self) -> bool { + matches!(self, LintMode::CheckOnly) + } +} + pub fn run_lint(args: LintArgs) -> Result<()> { let repo_root = workspace_root()?; println!("Running xtask lint..."); @@ -133,17 +138,11 @@ fn run_sync_linters( LinterType::WorkspaceDeps, Box::new(|| run_workspace_deps(repo_root)), )?; - run_conditional_linter( - filters, - results, - LinterType::Hakari, - Box::new(|| run_hakari(repo_root, mode)), - )?; run_conditional_linter( filters, results, LinterType::Clippy, - Box::new(|| run_clippy(repo_root)), + Box::new(|| run_clippy(repo_root, mode)), )?; Ok(()) diff --git a/pkg/xtask/src/lint/steps/checks.rs b/pkg/xtask/src/lint/steps/checks.rs index b12c623..ef2c2b6 100644 --- a/pkg/xtask/src/lint/steps/checks.rs +++ b/pkg/xtask/src/lint/steps/checks.rs @@ -1,10 +1,10 @@ -// lint-long-file-override allow-max-lines=240 use std::io::ErrorKind; use std::path::Path; use std::time::Instant; use crate::error::{Result, XTaskError}; +use crate::lint::file_length; use crate::lint::i18n; use crate::lint::steps::{StepResult, run_command}; @@ -67,67 +67,9 @@ pub fn run_ast_grep(repo_root: &Path) -> Result { } pub fn run_file_length(repo_root: &Path) -> Result { - let start = Instant::now(); - let status = match run_command(repo_root, "scripts/check-file-length.sh", &[]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "File length", - "scripts/check-file-length.sh not found; skipping length check".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if status.success() { - Ok(StepResult::success( - "File length", - "All files within length limits".to_string(), - start.elapsed(), - )) - } else { - Ok(StepResult::failed( - "File length", - "scripts/check-file-length.sh reported issues".to_string(), - start.elapsed(), - )) - } + file_length::run(repo_root) } pub fn run_i18n_consistency(repo_root: &Path) -> Result { i18n::run(repo_root) } - -pub fn run_clippy(repo_root: &Path) -> Result { - let start = Instant::now(); - let status = match run_command( - repo_root, - "cargo", - &["clippy", "--all-targets", "--quiet", "--", "-D", "warnings"], - ) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "Cargo clippy", - "cargo not found; skipping clippy step".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if status.success() { - Ok(StepResult::success( - "Cargo clippy", - "All checks passed".to_string(), - start.elapsed(), - )) - } else { - Ok(StepResult::failed( - "Cargo clippy", - "cargo clippy reported issues".to_string(), - start.elapsed(), - )) - } -} diff --git a/pkg/xtask/src/lint/steps/clippy.rs b/pkg/xtask/src/lint/steps/clippy.rs new file mode 100644 index 0000000..3349a5a --- /dev/null +++ b/pkg/xtask/src/lint/steps/clippy.rs @@ -0,0 +1,68 @@ +mod selection; + +use std::io::ErrorKind; +use std::path::Path; +use std::time::Instant; + +use crate::error::{Result, XTaskError}; +use crate::lint::LintMode; +use crate::lint::steps::clippy::selection::{ + ClippySelection, build_clippy_args, print_selection, select_clippy_packages, + selection_failure_detail, selection_success_detail, +}; +use crate::lint::steps::{StepResult, run_command_with_env}; + +pub fn run_clippy(repo_root: &Path, mode: LintMode) -> Result { + let start = Instant::now(); + let target_dir = repo_root.join("target/clippy"); + let target_dir = target_dir.to_string_lossy(); + let selection = select_clippy_packages(repo_root, mode)?; + if let ClippySelection::Skip { detail } = &selection { + return Ok(StepResult::skipped( + "Cargo clippy", + detail.clone(), + start.elapsed(), + )); + } + + let Some(args) = build_clippy_args(mode, &selection) else { + return Ok(StepResult::skipped( + "Cargo clippy", + "No clippy command selected".to_owned(), + start.elapsed(), + )); + }; + + print_selection(&selection); + let args_ref = args.iter().map(String::as_str).collect::>(); + let status = match run_command_with_env( + repo_root, + "cargo", + &args_ref, + &[("CARGO_TARGET_DIR", target_dir.as_ref())], + ) { + Ok(status) => status, + Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { + return Ok(StepResult::skipped( + "Cargo clippy", + "cargo not found; skipping clippy step".to_owned(), + start.elapsed(), + )); + } + Err(error) => return Err(error), + }; + + if status.success() { + Ok(StepResult::success( + "Cargo clippy", + selection_success_detail(&selection), + start.elapsed(), + )) + } else { + Ok(StepResult::failed( + "Cargo clippy", + selection_failure_detail(&selection), + start.elapsed(), + )) + } +} diff --git a/pkg/xtask/src/lint/steps/clippy/selection.rs b/pkg/xtask/src/lint/steps/clippy/selection.rs new file mode 100644 index 0000000..88f1d54 --- /dev/null +++ b/pkg/xtask/src/lint/steps/clippy/selection.rs @@ -0,0 +1,198 @@ +use std::collections::BTreeSet; +use std::path::Path; + +use crate::cargo_metadata::load_workspace_metadata; +use crate::error::Result; +use crate::git::collect_changed_files; +use crate::lint::LintMode; +use crate::workspace_changes::{ + DependencyGraph, RootManifestBehavior, calculate_affected_crates, determine_changed_crates, + sorted_list, +}; + +pub enum ClippySelection { + Workspace { + reason: String, + }, + Packages { + direct: BTreeSet, + additional: BTreeSet, + packages: Vec, + unmatched: Vec, + }, + Skip { + detail: String, + }, +} + +pub fn select_clippy_packages(repo_root: &Path, mode: LintMode) -> Result { + if mode.is_check_only() { + return Ok(ClippySelection::Workspace { + reason: "--check runs the full workspace".to_owned(), + }); + } + + let changed_files = collect_changed_files(repo_root)?; + if changed_files.is_empty() { + return Ok(ClippySelection::Skip { + detail: "No changed files detected".to_owned(), + }); + } + + if let Some(path) = changed_files + .iter() + .find(|path| is_global_clippy_input(Path::new(path))) + { + return Ok(ClippySelection::Workspace { + reason: format!("{path} affects workspace clippy configuration"), + }); + } + + let metadata = load_workspace_metadata(repo_root)?; + let changed = determine_changed_crates( + &metadata, + repo_root, + &changed_files, + RootManifestBehavior::TreatAsUnmatched, + ); + + if changed.direct.is_empty() { + if changed_files.contains("Cargo.toml") { + return Ok(ClippySelection::Workspace { + reason: "root Cargo.toml changed without package changes".to_owned(), + }); + } + + if changed_files.contains("Cargo.lock") { + return Ok(ClippySelection::Workspace { + reason: "Cargo.lock changed without a package change".to_owned(), + }); + } + + if has_rust_relevant_unmatched(&changed.unmatched) { + return Ok(ClippySelection::Workspace { + reason: format!( + "Rust-relevant files outside workspace crates changed: {}", + changed.unmatched.join(", ") + ), + }); + } + + return Ok(ClippySelection::Skip { + detail: "No changed workspace crates detected".to_owned(), + }); + } + + let graph = DependencyGraph::build(&metadata); + let affected = calculate_affected_crates(&graph, &changed.direct); + let packages = affected.ordered_package_names(); + + Ok(ClippySelection::Packages { + direct: affected.direct, + additional: affected.additional, + packages, + unmatched: changed.unmatched, + }) +} + +pub fn build_clippy_args(mode: LintMode, selection: &ClippySelection) -> Option> { + let mut args = vec!["clippy".to_owned()]; + if mode.is_check_only() { + args.push("--locked".to_owned()); + } + + match selection { + ClippySelection::Workspace { .. } => { + args.push("--workspace".to_owned()); + } + ClippySelection::Packages { packages, .. } => { + for package in packages { + args.push("--package".to_owned()); + args.push(package.clone()); + } + } + ClippySelection::Skip { .. } => return None, + } + + args.extend([ + "--all-targets".to_owned(), + "--quiet".to_owned(), + "--".to_owned(), + "-D".to_owned(), + "warnings".to_owned(), + ]); + Some(args) +} + +pub fn print_selection(selection: &ClippySelection) { + match selection { + ClippySelection::Workspace { reason } => { + println!("Running full workspace clippy: {reason}"); + } + ClippySelection::Packages { + direct, + additional, + unmatched, + .. + } => { + println!( + "Changed crates for clippy: {}", + sorted_list(direct).join(", ") + ); + if !additional.is_empty() { + println!( + "Transitively affected crates for clippy: {}", + sorted_list(additional).join(", ") + ); + } + if !unmatched.is_empty() { + println!( + "Non-crate changes did not widen clippy scope: {}", + unmatched.join(", ") + ); + } + } + ClippySelection::Skip { .. } => {} + } +} + +pub fn selection_success_detail(selection: &ClippySelection) -> String { + match selection { + ClippySelection::Workspace { .. } => "All workspace checks passed".to_owned(), + ClippySelection::Packages { packages, .. } => { + format!("All checks passed for {} affected crate(s)", packages.len()) + } + ClippySelection::Skip { detail } => detail.clone(), + } +} + +pub fn selection_failure_detail(selection: &ClippySelection) -> String { + match selection { + ClippySelection::Workspace { .. } => "cargo clippy reported workspace issues".to_owned(), + ClippySelection::Packages { packages, .. } => { + format!( + "cargo clippy reported issues for {} affected crate(s)", + packages.len() + ) + } + ClippySelection::Skip { detail } => detail.clone(), + } +} + +fn is_global_clippy_input(path: &Path) -> bool { + matches!( + path.to_str(), + Some("clippy.toml") + | Some("rust-toolchain") + | Some("rust-toolchain.toml") + | Some(".cargo/config") + | Some(".cargo/config.toml") + ) +} + +fn has_rust_relevant_unmatched(paths: &[String]) -> bool { + paths.iter().any(|path| { + let path = Path::new(path); + path.extension().is_some_and(|extension| extension == "rs") + }) +} diff --git a/pkg/xtask/src/lint/steps/command.rs b/pkg/xtask/src/lint/steps/command.rs index a3f3497..e42d759 100644 --- a/pkg/xtask/src/lint/steps/command.rs +++ b/pkg/xtask/src/lint/steps/command.rs @@ -5,11 +5,43 @@ use contextful::ResultContextExt; use crate::error::Result; +const CARGO_PACKAGE_ENV_VARS: &[&str] = &[ + "CARGO_BIN_NAME", + "CARGO_CRATE_NAME", + "CARGO_MANIFEST_DIR", + "CARGO_MANIFEST_LINKS", + "CARGO_MANIFEST_PATH", + "CARGO_PRIMARY_PACKAGE", + "OUT_DIR", +]; + pub fn run_command(repo_root: &Path, program: &'static str, args: &[&str]) -> Result { + run_command_with_env(repo_root, program, args, &[]) +} + +pub fn run_command_with_env( + repo_root: &Path, + program: &'static str, + args: &[&str], + envs: &[(&str, &str)], +) -> Result { let mut command = Command::new(program); command.current_dir(repo_root); command.args(args); + // Nested tools should not observe xtask's own Cargo package metadata. + for (key, _) in std::env::vars() { + if key.starts_with("CARGO_PKG_") { + command.env_remove(key); + } + } + for key in CARGO_PACKAGE_ENV_VARS { + command.env_remove(key); + } + for (key, value) in envs { + command.env(key, value); + } + if program == "taplo" { // Taplo logs at info level by default; force a quieter level for lint output. command.env("TAPLO_LOG", "warn"); diff --git a/pkg/xtask/src/lint/steps/hakari.rs b/pkg/xtask/src/lint/steps/hakari.rs deleted file mode 100644 index 2cb4529..0000000 --- a/pkg/xtask/src/lint/steps/hakari.rs +++ /dev/null @@ -1,182 +0,0 @@ -use std::collections::BTreeSet; -use std::io::ErrorKind; -use std::path::Path; -use std::time::Instant; - -use crate::error::{Result, XTaskError}; -use crate::git::{capture_file_contents, collect_changed_files, summarize_file_updates}; - -use crate::lint::LintMode; -use crate::lint::steps::{StepResult, run_command}; - -fn ensure_hakari_installed(repo_root: &Path, start: Instant) -> Result> { - let version_status = match run_command(repo_root, "cargo", &["hakari", "--version"]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(Some(StepResult::skipped( - "Cargo Hakari", - "cargo not found; skipping hakari step".to_string(), - start.elapsed(), - ))); - } - Err(error) => return Err(error), - }; - - if version_status.success() { - return Ok(None); - } - - if version_status.code() == Some(101) { - return Ok(Some(StepResult::skipped( - "Cargo Hakari", - "cargo hakari not installed; install via `cargo install cargo-hakari --locked`." - .to_string(), - start.elapsed(), - ))); - } - - Ok(Some(StepResult::failed( - "Cargo Hakari", - "cargo hakari --version failed; see output above.".to_string(), - start.elapsed(), - ))) -} - -pub fn run_hakari(repo_root: &Path, mode: LintMode) -> Result { - let start = Instant::now(); - - if let Some(step) = ensure_hakari_installed(repo_root, start)? { - return Ok(step); - } - - if matches!(mode, LintMode::CheckOnly) { - return run_hakari_check_only(repo_root, start); - } - - run_hakari_manage_deps(repo_root, start) -} - -fn run_hakari_check_only(repo_root: &Path, start: Instant) -> Result { - let generate_status = match run_command(repo_root, "cargo", &["hakari", "generate", "--diff"]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "Cargo Hakari", - "cargo not found; skipping hakari step".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if !generate_status.success() { - return Ok(StepResult::failed( - "Cargo Hakari", - "workspace-hack crate is out of date; run `cargo hakari generate`.".to_string(), - start.elapsed(), - )); - } - - let manage_status = - match run_command(repo_root, "cargo", &["hakari", "manage-deps", "--dry-run"]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "Cargo Hakari", - "cargo not found; skipping hakari step".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if !manage_status.success() { - return Ok(StepResult::failed( - "Cargo Hakari", - "workspace-hack dependencies need updates; run `cargo hakari manage-deps --yes`." - .to_string(), - start.elapsed(), - )); - } - - Ok(StepResult::success( - "Cargo Hakari", - "Workspace hack crate is up to date".to_string(), - start.elapsed(), - )) -} - -fn run_hakari_manage_deps(repo_root: &Path, start: Instant) -> Result { - let before_set = collect_changed_files(repo_root)? - .into_iter() - .filter(|path| is_relevant_path(path)) - .collect::>(); - let before_contents = capture_file_contents(repo_root, &before_set)?; - - let generate_status = match run_command(repo_root, "cargo", &["hakari", "generate"]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "Cargo Hakari", - "cargo not found; skipping hakari step".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if !generate_status.success() { - return Ok(StepResult::failed( - "Cargo Hakari", - "cargo hakari generate failed; see output above.".to_string(), - start.elapsed(), - )); - } - - let manage_status = match run_command(repo_root, "cargo", &["hakari", "manage-deps", "--yes"]) { - Ok(status) => status, - Err(XTaskError::Io(source)) if source.kind() == ErrorKind::NotFound => { - return Ok(StepResult::skipped( - "Cargo Hakari", - "cargo not found; skipping hakari step".to_string(), - start.elapsed(), - )); - } - Err(error) => return Err(error), - }; - - if !manage_status.success() { - return Ok(StepResult::failed( - "Cargo Hakari", - "cargo hakari manage-deps failed; see output above.".to_string(), - start.elapsed(), - )); - } - - let after_set = collect_changed_files(repo_root)? - .into_iter() - .filter(|path| is_relevant_path(path)) - .collect::>(); - - let updated = summarize_file_updates(repo_root, &before_set, &before_contents, &after_set)?; - - if updated.is_empty() { - Ok(StepResult::success( - "Cargo Hakari", - "Workspace hack crate already up to date".to_string(), - start.elapsed(), - )) - } else { - let detail = format!("Updated {} file(s) via cargo hakari", updated.len()); - Ok(StepResult::fixed( - "Cargo Hakari", - detail, - updated, - start.elapsed(), - )) - } -} - -fn is_relevant_path(path: &str) -> bool { - path.ends_with(".toml") || path == "Cargo.lock" || path.contains("workspace-hack") -} diff --git a/pkg/xtask/src/lint/steps/mod.rs b/pkg/xtask/src/lint/steps/mod.rs index 1a8b180..6f002fc 100644 --- a/pkg/xtask/src/lint/steps/mod.rs +++ b/pkg/xtask/src/lint/steps/mod.rs @@ -1,19 +1,17 @@ mod checks; mod claude; +mod clippy; mod command; mod formatting; -mod hakari; mod result; mod spec_lint; mod workspace_deps; -pub use checks::{ - run_ast_grep, run_clippy, run_file_length, run_i18n_consistency, run_taplo_check, -}; +pub use checks::{run_ast_grep, run_file_length, run_i18n_consistency, run_taplo_check}; pub use claude::run_claude_doc; -pub use command::run_command; +pub use clippy::run_clippy; +pub use command::{run_command, run_command_with_env}; pub use formatting::{run_rustfmt, run_taplo_fmt}; -pub use hakari::run_hakari; pub use result::{StepResult, print_step}; pub use spec_lint::run_spec_lint; pub use workspace_deps::run_workspace_deps; diff --git a/pkg/xtask/src/lint/steps/workspace_deps.rs b/pkg/xtask/src/lint/steps/workspace_deps.rs index 359dec7..7a7d3a9 100644 --- a/pkg/xtask/src/lint/steps/workspace_deps.rs +++ b/pkg/xtask/src/lint/steps/workspace_deps.rs @@ -7,8 +7,8 @@ use std::time::Instant; use contextful::ResultContextExt; use toml::Value; +use crate::cargo_metadata::load_workspace_metadata; use crate::error::Result; - use crate::lint::steps::StepResult; const DEPENDENCY_TABLE_KEYS: &[&str] = &["dependencies", "dev-dependencies", "build-dependencies"]; @@ -31,7 +31,7 @@ pub fn run_workspace_deps(repo_root: &Path) -> Result { if violations.is_empty() { return Ok(StepResult::success( "Workspace dependencies", - "All crate dependencies inherit from the workspace".to_string(), + "All workspace crate dependencies inherit from the workspace".to_string(), start.elapsed(), )); } @@ -69,28 +69,11 @@ pub fn run_workspace_deps(repo_root: &Path) -> Result { } fn collect_package_manifests(repo_root: &Path) -> Result> { - let mut manifests = Vec::new(); - let pkg_dir = repo_root.join("pkg"); - let entries = fs::read_dir(&pkg_dir).with_context(|| format!("list {}", pkg_dir.display()))?; - - for entry in entries { - let entry = entry.with_context(|| format!("iterate {}", pkg_dir.display()))?; - let metadata = entry - .metadata() - .with_context(|| format!("load metadata for {}", entry.path().display()))?; - if !metadata.is_dir() { - continue; - } - - if entry.file_name() == "workspace-hack" { - continue; - } - - let manifest_path = entry.path().join("Cargo.toml"); - if manifest_path.exists() { - manifests.push(manifest_path); - } - } + let metadata = load_workspace_metadata(repo_root)?; + let mut manifests = metadata + .workspace_packages() + .map(|package| package.manifest_path_abs().to_path_buf()) + .collect::>(); manifests.sort(); Ok(manifests) @@ -99,16 +82,47 @@ fn collect_package_manifests(repo_root: &Path) -> Result> { fn check_manifest(repo_root: &Path, manifest_path: &Path, manifest: &Value) -> Vec { let mut violations = Vec::new(); + let Some(table) = manifest.as_table() else { + return violations; + }; + + check_dependency_tables(repo_root, manifest_path, table, None, &mut violations); + + if let Some(targets) = table.get("target").and_then(Value::as_table) { + for (target, target_value) in targets { + let Some(target_table) = target_value.as_table() else { + continue; + }; + + check_dependency_tables( + repo_root, + manifest_path, + target_table, + Some(&format!("target.{target}")), + &mut violations, + ); + } + } + + violations +} + +fn check_dependency_tables( + repo_root: &Path, + manifest_path: &Path, + table: &toml::value::Table, + section_prefix: Option<&str>, + violations: &mut Vec, +) { for section in DEPENDENCY_TABLE_KEYS { - let Some(table) = manifest.get(*section).and_then(Value::as_table) else { + let Some(dependencies) = table.get(*section).and_then(Value::as_table) else { continue; }; + let section_display = section_prefix + .map(|prefix| format!("{prefix}.{section}")) + .unwrap_or_else(|| (*section).to_owned()); - for (dependency, value) in table { - if dependency == "workspace-hack" { - continue; - } - + for (dependency, value) in dependencies { if dependency_uses_workspace(value) { continue; } @@ -117,13 +131,11 @@ fn check_manifest(repo_root: &Path, manifest_path: &Path, manifest: &Value) -> V repo_root, manifest_path, dependency, - section, + §ion_display, value, )); } } - - violations } fn dependency_uses_workspace(value: &Value) -> bool { diff --git a/pkg/xtask/src/main.rs b/pkg/xtask/src/main.rs index 6625857..721e421 100644 --- a/pkg/xtask/src/main.rs +++ b/pkg/xtask/src/main.rs @@ -1,3 +1,4 @@ +mod cargo_metadata; mod error; mod git; mod lint; @@ -5,6 +6,7 @@ mod noir_fixtures; mod revi; mod setup; mod test; +mod workspace_changes; use clap::{Parser, Subcommand}; diff --git a/pkg/xtask/src/test/changes.rs b/pkg/xtask/src/test/changes.rs deleted file mode 100644 index d439a63..0000000 --- a/pkg/xtask/src/test/changes.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::collections::BTreeSet; -use std::path::Path; - -use crate::test::metadata::Metadata; - -pub struct ChangedCrates { - pub direct: BTreeSet, - pub unmatched: Vec, - pub touches_all: bool, -} - -pub fn determine_changed_crates( - metadata: &Metadata, - repo_root: &Path, - changed_files: &BTreeSet, -) -> ChangedCrates { - let mut direct = BTreeSet::new(); - let mut unmatched = Vec::new(); - let mut touches_all = false; - - for path_str in changed_files { - let path = Path::new(path_str); - if touches_workspace_manifest(path) { - touches_all = true; - break; - } - - let absolute_path = repo_root.join(path); - let mut matched = false; - - for package in metadata.workspace_packages() { - if absolute_path.starts_with(package.manifest_dir_abs()) { - direct.insert(package.name.clone()); - matched = true; - } - } - - if !matched { - unmatched.push(path_str.clone()); - } - } - - if touches_all { - direct = metadata - .workspace_packages() - .map(|package| package.name.clone()) - .collect(); - unmatched.clear(); - } - - ChangedCrates { - direct, - unmatched, - touches_all, - } -} - -pub fn sorted_list(set: &BTreeSet) -> Vec { - set.iter().cloned().collect() -} - -fn touches_workspace_manifest(path: &Path) -> bool { - if path.ends_with("Cargo.toml") && path.parent().is_none() { - return true; - } - - if path.ends_with("Cargo.lock") { - // A small change like adding a feature or dependency to a single crate - // can update the Cargo.lock for the whole workspace, - // but there is no point in running all tests in that case. - // So this is purposely commented out. - // return true; - } - - false -} diff --git a/pkg/xtask/src/test/graph.rs b/pkg/xtask/src/test/graph.rs deleted file mode 100644 index 95556ce..0000000 --- a/pkg/xtask/src/test/graph.rs +++ /dev/null @@ -1,59 +0,0 @@ -use std::collections::{BTreeSet, HashMap, HashSet, VecDeque}; - -use crate::test::metadata::Metadata; - -#[derive(Debug)] -pub struct DependencyGraph { - reverse: HashMap>, -} - -impl DependencyGraph { - pub fn build(metadata: &Metadata) -> Self { - let mut reverse = HashMap::>::new(); - - for member_id in metadata.workspace_member_ids() { - if let Some(package) = metadata.package_for_id(member_id) { - reverse.entry(package.name.clone()).or_default(); - - for dependency_id in metadata.dependencies_for(member_id) { - if !metadata.is_workspace_member(dependency_id) { - continue; - } - - if let Some(dep_package) = metadata.package_for_id(dependency_id) { - reverse - .entry(dep_package.name.clone()) - .or_default() - .insert(package.name.clone()); - } - } - } - } - - DependencyGraph { reverse } - } - - pub fn dependents_of(&self, crate_name: &str) -> Option<&BTreeSet> { - self.reverse.get(crate_name) - } -} - -pub fn calculate_affected_crates( - graph: &DependencyGraph, - changed_crates: &BTreeSet, -) -> BTreeSet { - let mut visited = changed_crates.iter().cloned().collect::>(); - let mut queue = changed_crates.iter().cloned().collect::>(); - - while let Some(crate_name) = queue.pop_front() { - if let Some(dependents) = graph.dependents_of(&crate_name) { - for dependent in dependents { - if visited.insert(dependent.clone()) { - queue.push_back(dependent.clone()); - } - } - } - } - - visited.into_iter().collect() -} diff --git a/pkg/xtask/src/test/mod.rs b/pkg/xtask/src/test/mod.rs index 0ef6eec..3c07f6b 100644 --- a/pkg/xtask/src/test/mod.rs +++ b/pkg/xtask/src/test/mod.rs @@ -1,9 +1,5 @@ -mod changes; -mod graph; -mod metadata; mod workspace; -use std::collections::BTreeSet; use std::process::Command; use clap::Args; @@ -12,10 +8,12 @@ use contextful::ResultContextExt; use crate::error::{Result, XTaskError, workspace_root}; use crate::git::collect_changed_files; -use crate::test::changes::{ChangedCrates, determine_changed_crates, sorted_list}; -use crate::test::graph::DependencyGraph; -use crate::test::metadata::{Metadata, load_metadata}; +use crate::cargo_metadata::{Metadata, load_workspace_metadata}; use crate::test::workspace::{CompiledWorkspace, compile_package_tests}; +use crate::workspace_changes::{ + ChangedCrates, DependencyGraph, RootManifestBehavior, calculate_affected_crates, + determine_changed_crates, sorted_list, +}; fn prepare_execution_order( graph: &DependencyGraph, @@ -29,29 +27,19 @@ fn prepare_execution_order( return None; } - let direct_list = sorted_list(&changed.direct); + let affected = calculate_affected_crates(graph, &changed.direct); + let direct_list = sorted_list(&affected.direct); println!("Changed crates: {}", direct_list.join(", ")); - let affected = graph::calculate_affected_crates(graph, &changed.direct) - .into_iter() - .collect::>(); - let additional = affected - .iter() - .filter(|crate_name| !changed.direct.contains(*crate_name)) - .cloned() - .collect::>(); - - if !additional.is_empty() { - let additional_list = sorted_list(&additional); + if !affected.additional.is_empty() { + let additional_list = sorted_list(&affected.additional); println!( "Transitively affected crates: {}", additional_list.join(", ") ); } - let mut execution_order = direct_list.clone(); - execution_order.extend(sorted_list(&additional)); - Some(execution_order) + Some(affected.ordered_package_names()) } fn run_execution_order( @@ -135,8 +123,13 @@ pub fn run_test(_args: TestArgs) -> Result<()> { return Ok(()); } - let metadata = load_metadata(&repo_root)?; - let changed = determine_changed_crates(&metadata, &repo_root, &changed_files); + let metadata = load_workspace_metadata(&repo_root)?; + let changed = determine_changed_crates( + &metadata, + &repo_root, + &changed_files, + RootManifestBehavior::TouchesAll, + ); if changed.touches_all { println!("Detected root manifest change; all workspace crate tests will run"); diff --git a/pkg/xtask/src/test/workspace.rs b/pkg/xtask/src/test/workspace.rs index 6e943a2..87128a3 100644 --- a/pkg/xtask/src/test/workspace.rs +++ b/pkg/xtask/src/test/workspace.rs @@ -7,7 +7,7 @@ use serde::Deserialize; use crate::error::{Result, XTaskError}; -use crate::test::metadata::Metadata; +use crate::cargo_metadata::Metadata; pub struct CompiledWorkspace { test_binaries: HashMap>, diff --git a/pkg/xtask/src/workspace_changes.rs b/pkg/xtask/src/workspace_changes.rs new file mode 100644 index 0000000..cba62dc --- /dev/null +++ b/pkg/xtask/src/workspace_changes.rs @@ -0,0 +1,147 @@ +use std::collections::{BTreeSet, HashMap, HashSet, VecDeque}; +use std::path::Path; + +use crate::cargo_metadata::Metadata; + +pub struct ChangedCrates { + pub direct: BTreeSet, + pub unmatched: Vec, + pub touches_all: bool, +} + +#[derive(Clone, Copy)] +pub enum RootManifestBehavior { + TouchesAll, + TreatAsUnmatched, +} + +pub struct AffectedCrates { + pub direct: BTreeSet, + pub additional: BTreeSet, +} + +impl AffectedCrates { + pub fn ordered_package_names(&self) -> Vec { + let mut package_names = sorted_list(&self.direct); + package_names.extend(sorted_list(&self.additional)); + package_names + } +} + +#[derive(Debug)] +pub struct DependencyGraph { + reverse: HashMap>, +} + +impl DependencyGraph { + pub fn build(metadata: &Metadata) -> Self { + let mut reverse = HashMap::>::new(); + + for package in metadata.workspace_packages() { + reverse.entry(package.name.clone()).or_default(); + + for dependency_id in package.workspace_dependency_ids() { + if let Some(dep_package) = metadata.package_for_id(dependency_id) { + reverse + .entry(dep_package.name.clone()) + .or_default() + .insert(package.name.clone()); + } + } + } + + DependencyGraph { reverse } + } + + pub fn dependents_of(&self, crate_name: &str) -> Option<&BTreeSet> { + self.reverse.get(crate_name) + } +} + +pub fn determine_changed_crates( + metadata: &Metadata, + repo_root: &Path, + changed_files: &BTreeSet, + root_manifest_behavior: RootManifestBehavior, +) -> ChangedCrates { + let mut direct = BTreeSet::new(); + let mut unmatched = Vec::new(); + let mut touches_all = false; + + for path_str in changed_files { + let path = Path::new(path_str); + if is_root_manifest(path) { + match root_manifest_behavior { + RootManifestBehavior::TouchesAll => { + touches_all = true; + break; + } + RootManifestBehavior::TreatAsUnmatched => {} + } + } + + let absolute_path = repo_root.join(path); + let mut matched = false; + + for package in metadata.workspace_packages() { + if absolute_path.starts_with(package.manifest_dir_abs()) { + direct.insert(package.name.clone()); + matched = true; + } + } + + if !matched { + unmatched.push(path_str.clone()); + } + } + + if touches_all { + direct = metadata + .workspace_packages() + .map(|package| package.name.clone()) + .collect(); + unmatched.clear(); + } + + ChangedCrates { + direct, + unmatched, + touches_all, + } +} + +pub fn calculate_affected_crates( + graph: &DependencyGraph, + changed_crates: &BTreeSet, +) -> AffectedCrates { + let mut visited = changed_crates.iter().cloned().collect::>(); + let mut queue = changed_crates.iter().cloned().collect::>(); + + while let Some(crate_name) = queue.pop_front() { + if let Some(dependents) = graph.dependents_of(&crate_name) { + for dependent in dependents { + if visited.insert(dependent.clone()) { + queue.push_back(dependent.clone()); + } + } + } + } + + let additional = visited + .into_iter() + .filter(|crate_name| !changed_crates.contains(crate_name)) + .collect::>(); + + AffectedCrates { + direct: changed_crates.clone(), + additional, + } +} + +pub fn sorted_list(set: &BTreeSet) -> Vec { + set.iter().cloned().collect() +} + +fn is_root_manifest(path: &Path) -> bool { + path.ends_with("Cargo.toml") && path.parent().is_none() +} diff --git a/pkg/zk-circuits/Cargo.toml b/pkg/zk-circuits/Cargo.toml index d0ad2ed..b6bab49 100644 --- a/pkg/zk-circuits/Cargo.toml +++ b/pkg/zk-circuits/Cargo.toml @@ -28,7 +28,6 @@ flate2 = { workspace = true } async-trait = { workspace = true } tokio = { workspace = true } paste = { workspace = true } -workspace-hack.workspace = true [dev-dependencies] smirk = { workspace = true } diff --git a/pkg/zk-primitives/Cargo.toml b/pkg/zk-primitives/Cargo.toml index be0797f..05ba46c 100644 --- a/pkg/zk-primitives/Cargo.toml +++ b/pkg/zk-primitives/Cargo.toml @@ -17,7 +17,6 @@ rand = { workspace = true } serde = { workspace = true, features = ["derive"] } sha3 = { workspace = true } web3 = { workspace = true } -workspace-hack.workspace = true [dependencies.ts-rs] workspace = true diff --git a/scripts/check-file-length.sh b/scripts/check-file-length.sh deleted file mode 100755 index c7bf057..0000000 --- a/scripts/check-file-length.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT_DIR="$(git rev-parse --show-toplevel)" -TARGET_DIR="$ROOT_DIR/pkg" -DEFAULT_LIMIT=200 -OVERRIDE_PATTERN='^[[:space:]]*//[[:space:]]*lint-long-file-override[[:space:]]+allow-max-lines[[:space:]]*=[[:space:]]*([0-9]+)' - -if [[ ! -d "$TARGET_DIR" ]]; then - echo "pkg directory not found at $TARGET_DIR" >&2 - exit 1 -fi - -violations=() - -# Track whether we discovered any Rust files without relying on mapfile (which -# is unavailable on macOS's default bash 3.2). -found_files=0 - -while IFS= read -r file; do - found_files=1 - - limit=$DEFAULT_LIMIT - - if head -n 1 "$file" | grep -Eq '^//[[:space:]]*@generated'; then - continue - fi - - override_line="$(head -n 20 "$file" | grep -E "$OVERRIDE_PATTERN" || true)" - if [[ -n "$override_line" ]]; then - if [[ $override_line =~ $OVERRIDE_PATTERN ]]; then - limit="${BASH_REMATCH[1]}" - fi - fi - - line_count=$(wc -l < "$file") - # Trim whitespace that wc emits - line_count="${line_count//[[:space:]]/}" - - if [[ "$line_count" =~ ^[0-9]+$ ]] && [[ "$limit" =~ ^[0-9]+$ ]]; then - if (( line_count > limit )); then - relative_path="${file#$ROOT_DIR/}" - violations+=("$relative_path has $line_count lines (limit $limit)") - fi - else - echo "Unable to determine line limit or count for $file" >&2 - exit 1 - fi - -done < <(find "$TARGET_DIR" -type f -name '*.rs' -print | sort) - -if [[ $found_files -eq 0 ]]; then - echo "No Rust files found under pkg/." - exit 0 -fi - -if [[ ${#violations[@]} -ne 0 ]]; then - echo "❌ File length check failed. The following files exceed their configured limits:" - echo "" - for violation in "${violations[@]}"; do - echo "- $violation" - done - echo "" - echo "Primary hint: Refactor large files to reduce their length." - echo "Secondary hint: If the additional length is justified, add an override comment at the top of the file." - echo " Example override comment: '// lint-long-file-override allow-max-lines=300' to bump the limit to 300 lines" - echo " Bump the limits in increments of 100." - echo "" - exit 1 -fi - -echo "✅ All Rust files in pkg/ comply with the file length limits." diff --git a/taplo.toml b/taplo.toml index 58b734c..740728c 100644 --- a/taplo.toml +++ b/taplo.toml @@ -11,9 +11,6 @@ include = [ "*.toml", ] -# Exclude generated workspace hack manifest from formatting -exclude = ["pkg/workspace-hack/Cargo.toml"] - # Global formatting rules [formatting] # Don't align entries (key = value) to the same column