diff --git a/Cargo.lock b/Cargo.lock index 66d418219a..84ed42dc22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -157,7 +157,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -168,7 +168,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -243,9 +243,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" dependencies = [ "aws-lc-sys", "zeroize", @@ -253,9 +253,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.1" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" +checksum = "f50037ee5e1e41e7b8f9d161680a725bd1626cb6f8c7e901f91f942850852fe7" dependencies = [ "cc", "cmake", @@ -662,9 +662,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -684,9 +684,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck", "proc-macro2", @@ -737,7 +737,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1053,36 +1053,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "curl" -version = "0.4.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" -dependencies = [ - "curl-sys", - "libc", - "openssl-probe 0.1.6", - "openssl-sys", - "schannel", - "socket2 0.6.3", - "windows-sys 0.59.0", -] - -[[package]] -name = "curl-sys" -version = "0.4.87+curl-8.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a460380f0ef783703dcbe909107f39c162adeac050d73c850055118b5b6327" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.59.0", -] - [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -1338,9 +1308,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.17.0-rc.16" +version = "0.17.0-rc.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91bbdd377139884fafcad8dc43a760a3e1e681aa26db910257fa6535b70e1829" +checksum = "dc4bf51f0534ed6e59a0f2f26272b64ba55c470133f8424c2adfd1c4d59d9988" dependencies = [ "der 0.8.0", "digest 0.11.2", @@ -1383,9 +1353,9 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" -version = "0.14.0-rc.30" +version = "0.14.0-rc.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d7a0bfd012613a7bcfe02cbfccf2b846e9ef9e1bccb641c48d461253cfb034d" +checksum = "b148a81cede8f4023248f980cffdf7611c46f2add469c6980e815b7c5b764ba5" dependencies = [ "base16ct", "crypto-bigint", @@ -1495,7 +1465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2525,6 +2495,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + [[package]] name = "jsonwebtoken" version = "9.3.1" @@ -2542,9 +2523,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.14.0-rc.8" +version = "0.14.0-rc.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2c6c227649d5ec80eaae541f1736232641a0bcdb3062a52b34edb42054158" +checksum = "1b382cbfd43caf55991a93850ce538aa1aa67bb264af367d22dfe7937c4e997d" dependencies = [ "cpubits", "ecdsa", @@ -2917,7 +2898,7 @@ dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.2.1", + "openssl-probe", "openssl-sys", "schannel", "security-framework", @@ -3085,9 +3066,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" -version = "5.3.3" +version = "5.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" +checksum = "9f3bab717c29a857abf75fcef718d441ec7cb2725f937343c734740a985d37fd" dependencies = [ "is-wsl", "libc", @@ -3096,9 +3077,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.77" +version = "0.10.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe4646e360ec77dff7dde40ed3d6c5fee52d156ef4a62f53973d38294dad87f" +checksum = "f38c4372413cdaaf3cc79dd92d29d7d9f5ab09b51b10dded508fb90bb70b9222" dependencies = [ "bitflags 2.11.1", "cfg-if", @@ -3120,12 +3101,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "openssl-probe" version = "0.2.1" @@ -3134,9 +3109,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.113" +version = "0.9.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad2f2c0eba47118757e4c6d2bff2838f3e0523380021356e7875e858372ce644" +checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6" dependencies = [ "cc", "libc", @@ -3315,7 +3290,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand 0.8.5", + "rand 0.8.6", ] [[package]] @@ -3623,9 +3598,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "rand_core 0.6.4", ] @@ -4013,9 +3988,9 @@ dependencies = [ [[package]] name = "rtoolbox" -version = "0.0.4" +version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327b72899159dfae8060c51a1f6aebe955245bcd9cc4997eed0f623caea022e4" +checksum = "50a0e551c1e27e1731aba276dbeaeac73f53c7cd34d1bda485d02bd1e0f36844" dependencies = [ "libc", "windows-sys 0.59.0", @@ -4092,7 +4067,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -4117,7 +4092,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.2.1", + "openssl-probe", "rustls-pki-types", "schannel", "security-framework", @@ -4151,7 +4126,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -4162,9 +4137,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.12" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "aws-lc-rs", "ring", @@ -4739,6 +4714,7 @@ dependencies = [ "snarkos-node-tcp", "snarkos-utilities", "snarkvm", + "snarkvm-slipstream-plugin-manager", "time", "tokio", "tokio-stream", @@ -4962,6 +4938,7 @@ dependencies = [ "snarkos-node-router", "snarkos-node-sync", "snarkvm", + "snarkvm-slipstream-plugin-manager", "time", "tokio", "tower", @@ -5099,7 +5076,7 @@ dependencies = [ [[package]] name = "snarkvm" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "dotenvy", @@ -5122,7 +5099,7 @@ dependencies = [ [[package]] name = "snarkvm-algorithms" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5150,7 +5127,7 @@ dependencies = [ [[package]] name = "snarkvm-algorithms-cuda" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "blst", "cc", @@ -5161,7 +5138,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5175,7 +5152,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-account" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-network", "snarkvm-circuit-types", @@ -5185,7 +5162,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-algorithms" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-types", "snarkvm-console-algorithms", @@ -5195,7 +5172,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-collections" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-types", @@ -5205,7 +5182,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-environment" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5225,12 +5202,12 @@ dependencies = [ [[package]] name = "snarkvm-circuit-environment-witness" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" [[package]] name = "snarkvm-circuit-network" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-collections", @@ -5241,7 +5218,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-program" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5255,7 +5232,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-address", @@ -5270,7 +5247,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-address" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5283,7 +5260,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-boolean" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-console-types-boolean", @@ -5292,7 +5269,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-field" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5302,7 +5279,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-group" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5314,7 +5291,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-integers" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5326,7 +5303,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-scalar" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5337,7 +5314,7 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-string" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5349,7 +5326,7 @@ dependencies = [ [[package]] name = "snarkvm-console" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-account", "snarkvm-console-algorithms", @@ -5362,7 +5339,7 @@ dependencies = [ [[package]] name = "snarkvm-console-account" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "bs58", "snarkvm-console-network", @@ -5373,7 +5350,7 @@ dependencies = [ [[package]] name = "snarkvm-console-algorithms" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "blake2s_simd", "hex", @@ -5389,7 +5366,7 @@ dependencies = [ [[package]] name = "snarkvm-console-collections" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "locktick", @@ -5403,7 +5380,7 @@ dependencies = [ [[package]] name = "snarkvm-console-network" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "enum-iterator", @@ -5423,7 +5400,7 @@ dependencies = [ [[package]] name = "snarkvm-console-network-environment" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "bech32", @@ -5441,7 +5418,7 @@ dependencies = [ [[package]] name = "snarkvm-console-program" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "enum-iterator", "enum_index", @@ -5462,7 +5439,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-address", @@ -5477,7 +5454,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-address" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5488,7 +5465,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-boolean" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", ] @@ -5496,7 +5473,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-field" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5506,7 +5483,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-group" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5517,7 +5494,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-integers" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5528,7 +5505,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-scalar" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5539,7 +5516,7 @@ dependencies = [ [[package]] name = "snarkvm-console-types-string" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5550,7 +5527,7 @@ dependencies = [ [[package]] name = "snarkvm-curves" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "rand 0.10.1", "rustc_version", @@ -5563,7 +5540,7 @@ dependencies = [ [[package]] name = "snarkvm-fields" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5580,7 +5557,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5612,7 +5589,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-authority" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "rand 0.10.1", @@ -5624,7 +5601,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-block" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5647,7 +5624,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-committee" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5666,7 +5643,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-ledger-narwhal-batch-certificate", "snarkvm-ledger-narwhal-batch-header", @@ -5679,7 +5656,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-certificate" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5692,7 +5669,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-header" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5705,7 +5682,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-data" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "bytes", "serde_json", @@ -5716,7 +5693,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-subdag" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5731,7 +5708,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "bytes", "serde_json", @@ -5744,7 +5721,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission-id" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "snarkvm-console", "snarkvm-ledger-puzzle", @@ -5753,7 +5730,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-puzzle" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5768,12 +5745,13 @@ dependencies = [ "serde_json", "snarkvm-algorithms", "snarkvm-console", + "snarkvm-utilities", ] [[package]] name = "snarkvm-ledger-puzzle-epoch" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5796,7 +5774,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-query" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "async-trait", @@ -5813,7 +5791,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-store" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std-storage", "anyhow", @@ -5832,6 +5810,7 @@ dependencies = [ "snarkvm-ledger-committee", "snarkvm-ledger-narwhal-batch-certificate", "snarkvm-ledger-puzzle", + "snarkvm-slipstream-plugin-manager", "snarkvm-synthesizer-program", "snarkvm-synthesizer-snark", "snarkvm-utilities", @@ -5841,7 +5820,7 @@ dependencies = [ [[package]] name = "snarkvm-ledger-test-helpers" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5859,7 +5838,7 @@ dependencies = [ [[package]] name = "snarkvm-metrics" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "metrics", ] @@ -5867,19 +5846,19 @@ dependencies = [ [[package]] name = "snarkvm-parameters" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", "cfg-if", "colored 3.1.1", - "curl", "hex", "lazy_static", "locktick", "parking_lot", "paste", "rand 0.10.1", + "reqwest", "serde_json", "sha2 0.10.9", "snarkvm-curves", @@ -5887,10 +5866,35 @@ dependencies = [ "thiserror 2.0.18", ] +[[package]] +name = "snarkvm-slipstream-plugin-interface" +version = "4.6.0" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" +dependencies = [ + "anyhow", + "tracing", +] + +[[package]] +name = "snarkvm-slipstream-plugin-manager" +version = "4.6.0" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" +dependencies = [ + "anyhow", + "json5", + "libloading", + "parking_lot", + "serde_json", + "snarkvm-slipstream-plugin-interface", + "thiserror 2.0.18", + "tokio", + "tracing", +] + [[package]] name = "snarkvm-synthesizer" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -5925,7 +5929,7 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-error" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "anyhow", "snarkvm-circuit-environment", @@ -5936,7 +5940,7 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-process" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "colored 3.1.1", @@ -5963,7 +5967,7 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-program" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "enum-iterator", "indexmap 2.14.0", @@ -5984,7 +5988,7 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-snark" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "bincode", "serde_json", @@ -5997,7 +6001,7 @@ dependencies = [ [[package]] name = "snarkvm-utilities" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "aleo-std", "anyhow", @@ -6020,7 +6024,7 @@ dependencies = [ [[package]] name = "snarkvm-utilities-derives" version = "4.6.0" -source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=8c5ef1f5849cf12e2e00b2b4ca5cea152db48402#8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e#951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" dependencies = [ "proc-macro2", "quote 1.0.45", @@ -6044,7 +6048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6281,7 +6285,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6365,16 +6369,26 @@ dependencies = [ ] [[package]] -name = "test-log-macros" -version = "0.2.19" +name = "test-log-core" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" +checksum = "37d4d41320b48bc4a211a9021678fcc0c99569b594ea31c93735b8e517102b4c" dependencies = [ "proc-macro2", "quote 1.0.45", "syn 2.0.117", ] +[[package]] +name = "test-log-macros" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9beb9249a81e430dffd42400a49019bcf548444f1968ff23080a625de0d4d320" +dependencies = [ + "syn 2.0.117", + "test-log-core", +] + [[package]] name = "test-strategy" version = "0.3.1" @@ -6547,9 +6561,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.51.1" +version = "1.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" dependencies = [ "bytes", "libc", @@ -6668,7 +6682,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6893,9 +6907,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "ucd-trie" @@ -7043,9 +7057,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ "atomic", "getrandom 0.4.2", @@ -7116,11 +7130,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -7129,7 +7143,7 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] @@ -7243,18 +7257,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" dependencies = [ "rustls-pki-types", ] @@ -7374,7 +7388,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -7692,9 +7706,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" [[package]] name = "wit-bindgen" @@ -7705,6 +7719,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" diff --git a/Cargo.toml b/Cargo.toml index 6069891aaa..eccf11fb56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,10 +46,15 @@ version = "1.0.1" default-features = false [workspace.dependencies.snarkvm] -#path = "../snarkVM" git = "https://github.com/ProvableHQ/snarkVM.git" -rev = "8c5ef1f5849cf12e2e00b2b4ca5cea152db48402" -#version = "=4.6.0" +# Latest stream_plugin_testing commit +rev = "951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" +default-features = false + +[workspace.dependencies.snarkvm-slipstream-plugin-manager] +git = "https://github.com/ProvableHQ/snarkVM.git" +# Latest stream_plugin_testing commit +rev = "951cb1bc5ea305747cad56ef7ef2b5f1d0dfe01e" default-features = false [workspace.dependencies.anyhow] @@ -268,6 +273,7 @@ path = "snarkos/main.rs" default = [ "snarkos-cli/metrics", "snarkos-node-metrics", "snarkos-node/metrics", "snarkos-node-cdn/metrics" ] history = [ "snarkos-node/history" ] history-staking-rewards = [ "snarkos-node/history-staking-rewards" ] +slipstream-plugins = [ "snarkos-node/slipstream-plugins", "snarkos-cli/slipstream-plugins" ] telemetry = [ "snarkos-node/telemetry" ] cuda = [ "snarkos-account/cuda", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3c320dc678..aad726f224 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -19,6 +19,7 @@ edition = "2024" [features] default = [ ] async = [ ] +slipstream-plugins = [ "snarkos-node/slipstream-plugins" ] locktick = [ "dep:locktick", "snarkos-display/locktick", diff --git a/cli/src/commands/start.rs b/cli/src/commands/start.rs index 8e2e510b58..6dbf581357 100644 --- a/cli/src/commands/start.rs +++ b/cli/src/commands/start.rs @@ -297,6 +297,12 @@ pub struct Start { /// If the flag is set, the node will attempt to automatically migrate the node data to the new format. #[clap(long)] pub auto_migrate_node_data: bool, + + /// Paths to Slipstream plugin config files (JSON5). May be repeated for multiple plugins. + /// Requires the node to be compiled with --features slipstream-plugins. + #[cfg(feature = "slipstream-plugins")] + #[clap(long = "slipstream-config", value_name = "PATH", verbatim_doc_comment)] + pub slipstream_configs: Vec, } impl Start { @@ -844,11 +850,17 @@ impl Start { // Register the signal handler. let signal_handler = SignalHandler::new(); + // Collect slipstream plugin config paths (empty slice when feature is disabled). + #[cfg(feature = "slipstream-plugins")] + let slipstream_configs: &[PathBuf] = &self.slipstream_configs; + #[cfg(not(feature = "slipstream-plugins"))] + let slipstream_configs: &[PathBuf] = &[]; + // Initialize the node. let node = match node_type { - NodeType::Validator => Node::new_validator(node_ip, self.bft, rest_ip, self.rest_rps, account, &trusted_peers, &trusted_validators, genesis, cdn, storage_mode, node_data_dir, self.trusted_peers_only, self.auto_db_checkpoints.clone(), dev_txs, self.dev, signal_handler.clone()).await, + NodeType::Validator => Node::new_validator(node_ip, self.bft, rest_ip, self.rest_rps, account, &trusted_peers, &trusted_validators, genesis, cdn, storage_mode, node_data_dir, self.trusted_peers_only, self.auto_db_checkpoints.clone(), dev_txs, self.dev, slipstream_configs, signal_handler.clone()).await, NodeType::Prover => Node::new_prover(node_ip, account, &trusted_peers, genesis, node_data_dir, self.trusted_peers_only, self.dev, signal_handler.clone()).await, - NodeType::Client => Node::new_client(node_ip, rest_ip, self.rest_rps, account, &trusted_peers, genesis, cdn, storage_mode, node_data_dir, self.trusted_peers_only, self.auto_db_checkpoints.clone(), self.dev, signal_handler.clone()).await, + NodeType::Client => Node::new_client(node_ip, rest_ip, self.rest_rps, account, &trusted_peers, genesis, cdn, storage_mode, node_data_dir, self.trusted_peers_only, self.auto_db_checkpoints.clone(), self.dev, slipstream_configs, signal_handler.clone()).await, NodeType::BootstrapClient => Node::new_bootstrap_client(node_ip, account, *genesis.header(), self.dev).await, }?; diff --git a/docs/slipstream_plugins.md b/docs/slipstream_plugins.md new file mode 100644 index 0000000000..302be68553 --- /dev/null +++ b/docs/slipstream_plugins.md @@ -0,0 +1,181 @@ +# Slipstream Plugins + +Slipstream is a plugin system that lets operators stream canonical mapping updates and staking +rewards from snarkOS nodes to external services (databases, metrics pipelines, etc.) in +real time, without modifying node code. + +--- + +## Overview + +Slipstream plugins are dynamically loaded shared libraries (`.so` / `.dylib` / `.dll`) that +implement the `SlipstreamPlugin` trait from `snarkvm-slipstream-plugin-interface`. The plugin +manager inside `snarkVM`'s `FinalizeStore` calls plugin hooks every time canonical finalize runs. + +Plugins can subscribe to: + +- **Mapping updates** — every key/value write that occurs during canonical finalize. +- **Staking rewards** — per-staker reward notifications + +Only **Validator** and **Client** nodes finalize blocks and therefore support plugins. +Prover nodes do not. + +--- + +## Building a Plugin + +Use `snarkvm-slipstream-plugin-interface` as a dependency and implement the `SlipstreamPlugin` +trait. Compile your crate as a `cdylib`: + +```toml +# Cargo.toml +[lib] +crate-type = ["cdylib"] + +[dependencies] +snarkvm-slipstream-plugin-interface = { git = "https://github.com/ProvableHQ/snarkVM.git", branch = "stream_plugin_testing" } +``` + +Export the constructor with the exact symbol name `_create_plugin`: + +```rust +#[no_mangle] +pub extern "C" fn _create_plugin() -> *mut dyn SlipstreamPlugin { + Box::into_raw(Box::new(MyPlugin::new())) +} +``` + +See `slipstream-plugin-postgres` in the snarkVM repository for a complete reference +implementation. + +--- + +## Plugin Config File (JSON5) + +Each plugin is configured via a JSON5 file. The required field is `libpath`, which can be +absolute or relative to the config file's directory. + +```json5 +{ + // Required: path to the compiled .so / .dylib + libpath: "./libslipstream_postgres_example.so", + + // Optional: override the plugin name reported by name() + name: "postgres", + + // Plugin-specific fields (passed verbatim to on_load) + connection_string: "postgres://user:pass@localhost/aleo", + batch_size: 100, +} +``` + +--- + +## Starting a Node with Plugins + +Compile snarkOS with the `slipstream-plugins` feature + +```bash +cargo build --features slipstream-plugins +``` + +Pass one or more `--slipstream-config` flags at startup: + +```bash +# Single plugin +snarkos start --client \ + --slipstream-config ~/.aleo/plugins/postgres/plugin.json5 + +# Multiple plugins +snarkos start --validator \ + --slipstream-config ~/.aleo/plugins/postgres/plugin.json5 \ + --slipstream-config ~/.aleo/plugins/metrics/plugin.json5 +``` + +Plugins are loaded synchronously before the REST server starts. If any plugin fails to load, +the node exits with an error. + +--- + +## Runtime Management via REST API + +All endpoints require a valid JWT token (`Authorization: Bearer `). + +### List loaded plugins + +``` +GET /{network}/slipstream/plugins +``` + +Response (200): +```json +["postgres", "metrics"] +``` + +### Load a plugin at runtime + +``` +POST /{network}/slipstream/plugins +Content-Type: application/json + +{ "config_file": "/path/to/plugin.json5" } +``` + +Response (200): +```json +{ "loaded": "postgres" } +``` + +Returns **422 Unprocessable Entity** if a plugin with that name is already loaded. + +### Unload a plugin + +``` +DELETE /{network}/slipstream/plugins/{name} +``` + +Response (200): +```json +{ "unloaded": true } +``` + +Returns **404 Not Found** if no plugin with that name is loaded. + +### Reload a plugin (not yet implemented) + +`PUT /{network}/slipstream/plugins/{name}` is not currently available. To update a plugin's +config during runtime, unload it with DELETE and reload it with POST. Otherwise, stop the snarkos service, update the config, and restart it, pointing at the new config. + +--- + +## Example: curl Commands + +```bash +JWT="" +BASE="http://localhost:3030/mainnet" + +# List +curl -H "Authorization: Bearer $JWT" "$BASE/slipstream/plugins" + +# Load +curl -X POST -H "Authorization: Bearer $JWT" \ + -H "Content-Type: application/json" \ + -d '{"config_file":"/path/to/plugin.json5"}' \ + "$BASE/slipstream/plugins" + +# Unload +curl -X DELETE -H "Authorization: Bearer $JWT" \ + "$BASE/slipstream/plugins/postgres" +``` + +--- + +## Notes + +- Plugins are loaded in startup order and unloaded in reverse order on shutdown. +- The `on_unload` method is called on every plugin during graceful shutdown. +- Plugin errors during `notify_mapping_update` / `notify_staking_reward` are logged as warnings + and never propagated to the node — a misbehaving plugin cannot crash the node. +- The plugin manager uses a `std::sync::RwLock`; `notify_*` calls acquire a read lock, while + load/unload/reload operations acquire the write lock. Avoid long-running operations inside + plugin callbacks. diff --git a/node/Cargo.toml b/node/Cargo.toml index e31f7075e1..8b1678c4d3 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -38,8 +38,9 @@ metrics = [ "snarkos-node-router/metrics", "snarkos-node-tcp/metrics" ] -history = [ "snarkos-node-rest/history" ] -history-staking-rewards = [ "snarkos-node-rest/history-staking-rewards" ] +history = [ "snarkos-node-rest/history", "snarkvm/history" ] +history-staking-rewards = [ "snarkos-node-rest/history-staking-rewards", "snarkvm/history-staking-rewards" ] +slipstream-plugins = [ "dep:snarkvm-slipstream-plugin-manager", "snarkos-node-rest/slipstream-plugins", "snarkvm/slipstream-plugins" ] telemetry = [ "snarkos-node-bft/telemetry", "snarkos-node-consensus/telemetry", "snarkos-node-rest/telemetry" ] cuda = [ "snarkvm/cuda", @@ -137,6 +138,10 @@ workspace = true [dependencies.snarkvm] workspace = true +[dependencies.snarkvm-slipstream-plugin-manager] +workspace = true +optional = true + [dependencies.time] workspace = true diff --git a/node/rest/Cargo.toml b/node/rest/Cargo.toml index 7bd645087d..3e6c9744a6 100644 --- a/node/rest/Cargo.toml +++ b/node/rest/Cargo.toml @@ -18,8 +18,9 @@ edition = "2024" [features] default = [ ] -history = [ "snarkvm/history" ] -history-staking-rewards = [ "snarkvm/history-staking-rewards" ] +history = [ "dep:snarkvm-slipstream-plugin-manager", "snarkvm/history" ] +history-staking-rewards = [ "dep:snarkvm-slipstream-plugin-manager", "snarkvm/history-staking-rewards" ] +slipstream-plugins = [ "dep:snarkvm-slipstream-plugin-manager", "snarkvm/slipstream-plugins" ] telemetry = [ "snarkos-node-consensus/telemetry" ] cuda = [ "snarkvm/cuda", "snarkos-node-consensus/cuda", "snarkos-node-router/cuda" ] locktick = [ @@ -96,6 +97,10 @@ workspace = true [dependencies.snarkvm] workspace = true +[dependencies.snarkvm-slipstream-plugin-manager] +workspace = true +optional = true + [dependencies.rand] workspace = true diff --git a/node/rest/src/lib.rs b/node/rest/src/lib.rs index fb96cb492d..32de7daf8e 100644 --- a/node/rest/src/lib.rs +++ b/node/rest/src/lib.rs @@ -137,7 +137,7 @@ impl, R: Routing> Rest { fn build_routes(&self, rest_rps: u32) -> axum::Router { let cors = CorsLayer::new() .allow_origin(Any) - .allow_methods([Method::GET, Method::POST, Method::OPTIONS]) + .allow_methods([Method::GET, Method::POST, Method::DELETE, Method::OPTIONS]) .allow_headers([CONTENT_TYPE]); // Prepare the rate limiting setup. @@ -259,6 +259,17 @@ impl, R: Routing> Rest { #[cfg(feature = "history")] let routes = routes.route("/program/{id}/mapping/{name}/{key}/history/{height}", get(Self::get_history)); + // If the `slipstream-plugins` feature is enabled, + // enable the Slipstream plugin management endpoints (no auth required). + #[cfg(feature = "slipstream-plugins")] + let routes = routes + .route("/slipstream/plugins", get(Self::slipstream_list_plugins).post(Self::slipstream_load_plugin)) + .route( + "/slipstream/plugins/{name}", + // TODO: PUT (reload) is not yet implemented. + axum::routing::delete(Self::slipstream_unload_plugin), + ); + // If the `history-staking-rewards` feature is enabled, enable the additional endpoint. #[cfg(feature = "history-staking-rewards")] let routes = routes.route("/staking/rewards/{address}/{height}", get(Self::get_staking_reward)); diff --git a/node/rest/src/routes.rs b/node/rest/src/routes.rs index b814536d78..31d9e28a95 100644 --- a/node/rest/src/routes.rs +++ b/node/rest/src/routes.rs @@ -1093,4 +1093,88 @@ impl, R: Routing> Rest { None => Err(RestError::service_unavailable(anyhow!("Route isn't available for this node type"))), } } + + /// GET /{network}/slipstream/plugins + #[cfg(feature = "slipstream-plugins")] + pub(crate) async fn slipstream_list_plugins( + State(rest): State, + ) -> Result { + use snarkvm_slipstream_plugin_manager::slipstream_manager::SlipstreamPluginManagerError; + + let mgr_arc = rest.ledger.vm().finalize_store().slipstream_plugin_manager(); + let mgr_guard = mgr_arc.read(); + let manager = mgr_guard + .as_ref() + .ok_or_else(|| RestError::service_unavailable(anyhow!("No Slipstream plugin manager is installed")))?; + let plugins = manager + .list_plugins() + .map_err(|e: SlipstreamPluginManagerError| RestError::internal_server_error(anyhow!(e)))?; + Ok((StatusCode::OK, ErasedJson::pretty(plugins))) + } + + /// POST /{network}/slipstream/plugins + #[cfg(feature = "slipstream-plugins")] + pub(crate) async fn slipstream_load_plugin( + State(rest): State, + Json(body): Json, + ) -> Result { + use snarkvm_slipstream_plugin_manager::slipstream_manager::SlipstreamPluginManagerError; + + let config_file = body + .get("config_file") + .and_then(|v| v.as_str()) + .ok_or_else(|| RestError::bad_request(anyhow!("Missing required field: config_file")))? + .to_owned(); + let mgr_arc = rest.ledger.vm().finalize_store().slipstream_plugin_manager(); + if mgr_arc.read().is_none() { + return Err(RestError::service_unavailable(anyhow!("No Slipstream plugin manager is installed"))); + } + let name = tokio::task::spawn_blocking(move || -> Result { + // Safety: manager is set exactly once and never cleared; verified Some above. + mgr_arc.write().as_mut().expect("plugin manager verified present").load_plugin(&config_file) + }) + .await + .map_err(|e| RestError::internal_server_error(anyhow!("Task join error: {e}")))? + .map_err(|e| match e { + SlipstreamPluginManagerError::PluginAlreadyLoaded(_) => RestError::unprocessable_entity(anyhow!("{e}")), + other => RestError::internal_server_error(anyhow!("{other}")), + })?; + Ok((StatusCode::OK, ErasedJson::pretty(serde_json::json!({ "loaded": name })))) + } + + /// DELETE /{network}/slipstream/plugins/{name} + #[cfg(feature = "slipstream-plugins")] + pub(crate) async fn slipstream_unload_plugin( + State(rest): State, + Path(name): Path, + ) -> Result { + use snarkvm_slipstream_plugin_manager::slipstream_manager::SlipstreamPluginManagerError; + + let mgr_arc = rest.ledger.vm().finalize_store().slipstream_plugin_manager(); + if mgr_arc.read().is_none() { + return Err(RestError::service_unavailable(anyhow!("No Slipstream plugin manager is installed"))); + } + tokio::task::spawn_blocking(move || -> anyhow::Result<()> { + // Safety: manager is set exactly once and never cleared; verified Some above. + mgr_arc.write().as_mut().expect("plugin manager verified present").unload_plugin(&name).map_err( + |e: SlipstreamPluginManagerError| match e { + SlipstreamPluginManagerError::PluginNotLoaded(_) => anyhow!("404: {e}"), + other => anyhow!("{other}"), + }, + ) + }) + .await + .map_err(|e| RestError::internal_server_error(anyhow!("Task join error: {e}")))? + .map_err(|e| { + let msg = e.to_string(); + if msg.starts_with("404: ") { + RestError::not_found(anyhow!("{}", &msg[5..])) + } else { + RestError::internal_server_error(e) + } + })?; + Ok((StatusCode::OK, ErasedJson::pretty(serde_json::json!({ "unloaded": true })))) + } + + // TODO: PUT /{network}/slipstream/plugins/{name} (reload) is not yet implemented. } diff --git a/node/src/client/mod.rs b/node/src/client/mod.rs index 0ee4b42350..73efa71607 100644 --- a/node/src/client/mod.rs +++ b/node/src/client/mod.rs @@ -144,6 +144,7 @@ impl> Client { node_data_dir: NodeDataDir, trusted_peers_only: bool, dev: Option, + slipstream_configs: &[std::path::PathBuf], signal_handler: Arc, ) -> Result { // Initialize the ledger. @@ -155,6 +156,17 @@ impl> Client { } .with_context(|| "Failed to initialize the ledger")?; + // Initialize the Slipstream plugin manager (if any config files were provided). + #[cfg(feature = "slipstream-plugins")] + if !slipstream_configs.is_empty() { + let manager = + snarkvm_slipstream_plugin_manager::SlipstreamPluginManager::from_config_files(slipstream_configs) + .context("Failed to initialize Slipstream plugin manager")?; + ledger.vm().finalize_store().set_slipstream_plugin_manager(manager); + let num_plugins = slipstream_configs.len(); + tracing::info!(target: "slipstream", "Slipstream plugin manager registered ({num_plugins} plugin(s))"); + } + // Initialize the ledger service. let ledger_service = Arc::new(CoreLedgerService::::new(ledger.clone(), signal_handler.clone())); // Initialize the node router. @@ -544,6 +556,12 @@ impl> NodeInterface for Client { // Shut down the node. trace!("Shutting down the node..."); + // Shut down the Slipstream plugin service. + #[cfg(feature = "slipstream-plugins")] + if let Some(manager) = self.ledger.vm().finalize_store().slipstream_plugin_manager().write().as_mut() { + manager.unload(); + } + // Abort the tasks. trace!("Shutting down the client..."); self.handles.lock().iter().for_each(|handle| handle.abort()); diff --git a/node/src/node.rs b/node/src/node.rs index 2c303e5097..f42b0d7851 100644 --- a/node/src/node.rs +++ b/node/src/node.rs @@ -98,6 +98,7 @@ impl Node { auto_db_checkpoints: Option, dev_txs: bool, dev: Option, + slipstream_configs: &[PathBuf], signal_handler: Arc, ) -> Result { let validator = Arc::new( @@ -116,6 +117,7 @@ impl Node { trusted_peers_only, dev_txs, dev, + slipstream_configs, signal_handler, ) .await?, @@ -173,6 +175,7 @@ impl Node { trusted_peers_only: bool, auto_db_checkpoints: Option, dev: Option, + slipstream_configs: &[PathBuf], signal_handler: Arc, ) -> Result { let client = Arc::new( @@ -188,6 +191,7 @@ impl Node { node_data_dir, trusted_peers_only, dev, + slipstream_configs, signal_handler, ) .await?, diff --git a/node/src/prover/mod.rs b/node/src/prover/mod.rs index 85d43faa55..fa1b73703a 100644 --- a/node/src/prover/mod.rs +++ b/node/src/prover/mod.rs @@ -200,7 +200,7 @@ impl> Prover { // If the node is not connected to any peers, then skip this iteration. if self.router.number_of_connected_peers() == 0 { debug!("Skipping an iteration of the puzzle (no connected peers)"); - tokio::time::sleep(Duration::from_secs(N::ANCHOR_TIME as u64)).await; + tokio::time::sleep(Duration::from_secs(N::REWARD_ANCHOR_TIME as u64)).await; continue; } diff --git a/node/src/validator/mod.rs b/node/src/validator/mod.rs index fbbf78b13d..1a08cc20b3 100644 --- a/node/src/validator/mod.rs +++ b/node/src/validator/mod.rs @@ -92,6 +92,7 @@ impl> Validator { trusted_peers_only: bool, dev_txs: bool, dev: Option, + slipstream_configs: &[std::path::PathBuf], signal_handler: Arc, ) -> Result { // Initialize the ledger. @@ -103,6 +104,17 @@ impl> Validator { } .with_context(|| "Failed to initialize the ledger")?; + // Initialize the Slipstream plugin manager (if any config files were provided). + #[cfg(feature = "slipstream-plugins")] + if !slipstream_configs.is_empty() { + let manager = + snarkvm_slipstream_plugin_manager::SlipstreamPluginManager::from_config_files(slipstream_configs) + .context("Failed to initialize Slipstream plugin manager")?; + ledger.vm().finalize_store().set_slipstream_plugin_manager(manager); + let num_plugins = slipstream_configs.len(); + tracing::info!(target: "slipstream", "Slipstream plugin manager registered ({num_plugins} plugin(s))"); + } + // Initialize the ledger service. let ledger_service = Arc::new(CoreLedgerService::new(ledger.clone(), signal_handler.clone())); @@ -469,6 +481,12 @@ impl> NodeInterface for Validator { // Shut down the node. trace!("Shutting down the node..."); + // Shut down the Slipstream plugin manager. + #[cfg(feature = "slipstream-plugins")] + if let Some(manager) = self.ledger.vm().finalize_store().slipstream_plugin_manager().write().as_mut() { + manager.unload(); + } + // Abort the tasks. trace!("Shutting down the validator..."); self.handles.lock().iter().for_each(|handle| handle.abort()); @@ -539,6 +557,7 @@ mod tests { false, dev_txs, None, + &[], SignalHandler::new(), ) .await diff --git a/node/tests/common/node.rs b/node/tests/common/node.rs index 44485fa03b..43e25e6b37 100644 --- a/node/tests/common/node.rs +++ b/node/tests/common/node.rs @@ -37,6 +37,7 @@ pub async fn client() -> Client> NodeDataDir::new_test(None), false, // Connect to untrusted peers. None, + &[], // No Slipstream plugins. SignalHandler::new(), ) .await @@ -74,6 +75,7 @@ pub async fn validator() -> Validator