diff --git a/Cargo.lock b/Cargo.lock index 6b340274..07f5b189 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "agave-feature-set" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be80c9787c7f30819e2999987cc6208c1ec6f775d7ed2b70f61a00a6e8acc0c8" +checksum = "b6b71300ed93a9dff1c3231c3f1417e242e3da38529ebc32f828bc8560bf4a2a" dependencies = [ "ahash", "solana-epoch-schedule", @@ -33,9 +33,9 @@ dependencies = [ [[package]] name = "agave-precompiles" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1a2453f1454c71842928844613289c9d6869ea46faaa30e7c7649e432a429" +checksum = "d601b722178ddb9390773fb521953f84cbd8e4b839bed9ad84c8daf8d008f291" dependencies = [ "agave-feature-set", "bincode", @@ -55,9 +55,9 @@ dependencies = [ [[package]] name = "agave-syscalls" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8605fba7ba3e97426ab19179d565a7cd9d6b5566ff49004784c99e302ac7953" +checksum = "02768cc7b0afe99306ba897adfac74e7d6b0d6e4dfe9ae60500cdaa73d179a2b" dependencies = [ "bincode", "libsecp256k1", @@ -93,7 +93,7 @@ dependencies = [ "solana-sysvar", "solana-sysvar-id", "solana-transaction-context", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -118,6 +118,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -194,9 +200,20 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" dependencies = [ - "ark-ec", - "ark-ff", - "ark-std", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bn254" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -205,10 +222,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "ark-ff", - "ark-poly", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", "itertools 0.10.5", @@ -216,16 +233,37 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "digest 0.10.7", "itertools 0.10.5", @@ -236,6 +274,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint 0.4.6", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -246,6 +304,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.87", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -259,27 +327,68 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "ark-poly" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" dependencies = [ - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", "derivative", "hashbrown 0.13.2", ] +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", +] + [[package]] name = "ark-serialize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", - "ark-std", + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec", "digest 0.10.7", "num-bigint 0.4.6", ] @@ -295,6 +404,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -305,6 +425,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -464,18 +594,18 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -954,6 +1084,18 @@ dependencies = [ "zeroize", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "either" version = "1.13.0" @@ -999,6 +1141,26 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "env_filter" version = "0.1.3" @@ -1287,6 +1449,15 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", +] + [[package]] name = "heck" version = "0.3.3" @@ -1521,8 +1692,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" dependencies = [ - "ark-bn254", - "ark-ff", + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "num-bigint 0.4.6", + "thiserror 1.0.68", +] + +[[package]] +name = "light-poseidon" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a1ccadd0bb5a32c196da536fd72c59183de24a055f6bf0513bf845fefab862" +dependencies = [ + "ark-bn254 0.5.0", + "ark-ff 0.5.0", "num-bigint 0.4.6", "thiserror 1.0.68", ] @@ -1545,9 +1728,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "memchr" @@ -2725,24 +2908,24 @@ dependencies = [ [[package]] name = "solana-bn254" -version = "3.0.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20a5f01e99addb316d95d4ed31aa6eacfda557fffc00ae316b919e8ba0fc5b91" +checksum = "8d08583be08d2d5f19aa21efbb6fbdb968ba7fd0de74562441437a7d776772bf" dependencies = [ - "ark-bn254", - "ark-ec", - "ark-ff", - "ark-serialize", + "ark-bn254 0.4.0", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", "bytemuck", "solana-define-syscall", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "solana-bpf-loader-program" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5a2b7914cebd827003d2a1c21cc48bcad2c1857a9ec34656a2caa578707f53a" +checksum = "5b5623a7c1e206334d95512c77b150e7825183fb5c155209ba24478005c6e743" dependencies = [ "agave-syscalls", "bincode", @@ -2791,9 +2974,9 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b2d4cca7050320d13653ab369e21a0573b4a4f5dd82c509b0640e87f34d84" +checksum = "8882d5338adf05dcddeec1e144c517fa7e8389a2500c87aef344fb4aef51d642" dependencies = [ "solana-fee-structure", "solana-program-runtime", @@ -2832,16 +3015,16 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2ca224d51d8a1cc20f221706968d8f851586e6b05937cb518bedc156596dee" +checksum = "134f67bd3031223df4aba035c503e4d14acacfc4cf19af10d10ec9c2605bb84f" dependencies = [ "bytemuck", "bytemuck_derive", "curve25519-dalek 4.1.3", "solana-define-syscall", "subtle", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -3084,12 +3267,11 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4ce5ca27d4b16be527583738bac230fa0e62867e6c8b4bd6345cf09a3c941c" +checksum = "4120a48590f01838002e0d52209ce7b5c5d5c7a673037612d94b10874118c6d2" dependencies = [ "log", - "qualifier_attr", "solana-account", "solana-bincode", "solana-bpf-loader-program", @@ -3193,14 +3375,16 @@ checksum = "2f1fef1f2ff2480fdbcc64bef5e3c47bec6e1647270db88b43f23e3a55f8d9cf" [[package]] name = "solana-poseidon" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794ff76c70d6f4c5d9c86c626069225c0066043405c0c9d6b96f00c8525dade5" +checksum = "d61d117bf88fd7f1271d5d889010c2cd5aad6a243b1fa1ac6243e29da058d7fe" dependencies = [ - "ark-bn254", - "light-poseidon", + "ark-bn254 0.4.0", + "ark-bn254 0.5.0", + "light-poseidon 0.2.0", + "light-poseidon 0.4.0", "solana-define-syscall", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -3257,9 +3441,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6ec3fec9e5f8c01aa76e0d63911af6acb4ee840b6f7ec5ddee284552c0de60" +checksum = "f9f39ac3dd9e437e47090ce888908cbe70c521d2f210d87a72d531a921f69cd0" dependencies = [ "base64 0.22.1", "bincode", @@ -3269,6 +3453,7 @@ dependencies = [ "rand 0.8.5", "serde", "solana-account", + "solana-account-info", "solana-clock", "solana-epoch-rewards", "solana-epoch-schedule", @@ -3276,12 +3461,14 @@ dependencies = [ "solana-hash 3.1.0", "solana-instruction", "solana-last-restart-slot", + "solana-loader-v3-interface", "solana-program-entrypoint", "solana-pubkey", "solana-rent", "solana-sbpf", "solana-sdk-ids", "solana-slot-hashes", + "solana-stable-layout", "solana-stake-interface", "solana-svm-callback", "solana-svm-feature-set", @@ -3294,6 +3481,7 @@ dependencies = [ "solana-sysvar", "solana-sysvar-id", "solana-transaction-context", + "thiserror 2.0.17", ] [[package]] @@ -3326,9 +3514,9 @@ checksum = "927e833259588ac8f860861db0f6e2668c3cc46d917798ade116858960acfe8a" [[package]] name = "solana-sbpf" -version = "0.12.2" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f224d906c14efc7ed7f42bc5fe9588f3f09db8cabe7f6023adda62a69678e1a" +checksum = "b15b079e08471a9dbfe1e48b2c7439c85aa2a055cbd54eddd8bd257b0a7dbb29" dependencies = [ "byteorder", "combine", @@ -3337,7 +3525,7 @@ dependencies = [ "log", "rand 0.8.5", "rustc-demangle", - "thiserror 2.0.16", + "thiserror 2.0.17", "winapi", ] @@ -3387,7 +3575,7 @@ checksum = "394a4470477d66296af5217970a905b1c5569032a7732c367fb69e5666c8607e" dependencies = [ "k256", "solana-define-syscall", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -3424,9 +3612,9 @@ dependencies = [ [[package]] name = "solana-serialize-utils" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7665da4f6e07b58c93ef6aaf9fb6a923fd11b0922ffc53ba74c3cadfa490f26" +checksum = "56e41dd8feea239516c623a02f0a81c2367f4b604d7965237fed0751aeec33ed" dependencies = [ "solana-instruction-error", "solana-pubkey", @@ -3543,28 +3731,22 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06f174d24c78d8874c4c28cb855bfe87f720c7e40362ea1b856c4a65abdc6209" +checksum = "0d88d84ef44bd57e0883378309eba19d7640a2e1ff0b8fd9456fd9dccfa8b497" dependencies = [ "agave-feature-set", "bincode", "log", "solana-account", - "solana-bincode", "solana-clock", "solana-config-interface", "solana-genesis-config", - "solana-instruction", "solana-native-token", - "solana-packet", - "solana-program-runtime", "solana-pubkey", "solana-rent", "solana-sdk-ids", "solana-stake-interface", - "solana-svm-log-collector", - "solana-svm-type-overrides", "solana-sysvar", "solana-transaction-context", "solana-vote-interface", @@ -3572,9 +3754,9 @@ dependencies = [ [[package]] name = "solana-svm-callback" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2211ecefc92a3d6db1206eca32aa579bb112eb1a2823ac227d8cbd5cdb0465" +checksum = "abff1c5d53112c33d6149d80888837f38d58553e5135a93e6eab5049f44dd3d7" dependencies = [ "solana-account", "solana-clock", @@ -3584,30 +3766,30 @@ dependencies = [ [[package]] name = "solana-svm-feature-set" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a35cded5bc9e32d84c98d81bb9811239d3aea03d0f5ef09aa2f1e8cdaf2d0ff" +checksum = "d848a90245dbaffeb8c43492eb902c2b988200a1b59b3959435d17abcea3eb3d" [[package]] name = "solana-svm-log-collector" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455455f9ef91bb738c2363284cd8b6f5956726b0a366ab85976dca23ee1611a4" +checksum = "8676611f604c9a1269a28f6a0082abacd32991f286d9801e4131688d4167b4d5" dependencies = [ "log", ] [[package]] name = "solana-svm-measure" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3c0ecb1caf08e9d70e41ca99bb18550e05e9a40dce8866fd1c360e67fa78c5" +checksum = "bec6414c96443785fd16fd9541cc20ea09b9bf245fc6afd4825d2d5e85104575" [[package]] name = "solana-svm-timings" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62606f820fe99b72ee8e26b8e20eed3c2ccc2f6e3146f537c4cb22a442c69170" +checksum = "eee0257a7fa2fba6fe920507e9bdfee80046ca42b6c02a832b3ffb11dbfa3004" dependencies = [ "eager", "enum-iterator", @@ -3616,9 +3798,9 @@ dependencies = [ [[package]] name = "solana-svm-transaction" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336583f8418964f7050b98996e13151857995604fe057c0d8f2f3512a16d3a8b" +checksum = "fb07ecaacaf5aea4088ebbb6ab5c94710fc595cd96c260c95141ba99a260a4a1" dependencies = [ "solana-hash 3.1.0", "solana-message", @@ -3630,9 +3812,9 @@ dependencies = [ [[package]] name = "solana-svm-type-overrides" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f802b43ced1f9c6a2bf3b8c740dd43e194f33b3c98a6b3e3d0f989f632ec3ccc" +checksum = "cddcdb9981c7838ceb16bb97929c5cab015b0bdcb12243720000f8e44c9a5af2" dependencies = [ "rand 0.8.5", ] @@ -3654,14 +3836,13 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c68c4e74ea2d55e59cab3346781156c456850a781f07cb6bc0fdbd52fba55b" +checksum = "d75fe21a77247c9f32f9f0cb4f90da9aea3d0f65f203efec0975894914ca241f" dependencies = [ "bincode", "log", "serde", - "serde_derive", "solana-account", "solana-bincode", "solana-fee-calculator", @@ -3746,14 +3927,13 @@ dependencies = [ [[package]] name = "solana-transaction-context" -version = "3.0.10" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9c6820c3a14bd07b2256640bd64af4a44ac49f505dca93cc11f77bc79cfd44a" +checksum = "1bd55fe81fbc36ee00fde8233764b1f60c141e93a069932f126b707a515b8199" dependencies = [ "bincode", "qualifier_attr", "serde", - "serde_derive", "solana-account", "solana-instruction", "solana-instructions-sysvar", @@ -3775,9 +3955,9 @@ dependencies = [ [[package]] name = "solana-vote-interface" -version = "3.0.0" +version = "4.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66631ddbe889dab5ec663294648cd1df395ec9df7a4476e7b3e095604cfdb539" +checksum = "db6e123e16bfdd7a81d71b4c4699e0b29580b619f4cd2ef5b6aae1eb85e8979f" dependencies = [ "bincode", "cfg_eval", @@ -3836,7 +4016,7 @@ dependencies = [ "solana-program-pack", "solana-pubkey", "solana-sdk-ids", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -3941,11 +4121,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -3961,9 +4141,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 60eb97cd..b9055525 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,9 +21,9 @@ edition = "2021" version = "0.7.2" [workspace.dependencies] -agave-feature-set = "3.0.10" -agave-precompiles = "3.0.10" -agave-syscalls = "~3.0.10" +agave-feature-set = "3.1.0" +agave-precompiles = "3.1.0" +agave-syscalls = "3.1.0" bincode = "1.3.3" bs58 = "0.5.1" chrono = "0.4.42" @@ -55,9 +55,9 @@ serde_yaml = "0.9.34" serial_test = "2.0" solana-account = "3.2.0" solana-account-info = "3.0" -solana-bpf-loader-program = "3.0.10" +solana-bpf-loader-program = "3.1.0" solana-clock = "3.0" -solana-compute-budget = "3.0.10" +solana-compute-budget = "3.1.0" solana-cpi = "3.0" solana-ed25519-program = "3.0" solana-epoch-rewards = "3.0" @@ -68,7 +68,7 @@ solana-instruction-error = { version = "2.0", features = ["serde"] } solana-keccak-hasher = { version = "3.0", features = ["sha3"] } solana-loader-v3-interface = "6.1.0" solana-loader-v4-interface = "3.1.0" -solana-loader-v4-program = "3.0.10" +solana-loader-v4-program = "3.1.0" solana-logger = "3.0" solana-native-token = "3.0" solana-precompile-error = "3.0" @@ -83,15 +83,15 @@ solana-secp256k1-program = "3.0" solana-secp256r1-program = "3.0" solana-slot-hashes = "3.0" solana-stake-interface = "2.0.1" -solana-stake-program = "3.0.10" -solana-svm-callback = "3.0.10" -solana-svm-log-collector = "3.0.10" -solana-svm-timings = "3.0.10" +solana-stake-program = "3.1.0" +solana-svm-callback = "3.1.0" +solana-svm-log-collector = "3.1.0" +solana-svm-timings = "3.1.0" solana-system-interface = "2.0" -solana-system-program = "3.0.10" +solana-system-program = "3.1.0" solana-sysvar = "3.0" solana-sysvar-id = "3.0" -solana-transaction-context = "~3.0.10" +solana-transaction-context = "3.1.0" spl-associated-token-account-interface = "2.0.0" spl-token-interface = "2.0.0" thiserror = "1.0.64" diff --git a/Makefile b/Makefile index 645b806c..6d7580bb 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ clippy-fix: @cargo +$(NIGHTLY_TOOLCHAIN) clippy --all --all-features --all-targets --fix --allow-dirty --allow-staged -- -D warnings check-features: - @cargo hack check --feature-powerset --no-dev-deps + @cargo hack --feature-powerset --no-dev-deps check build: @$(MAKE) build-test-programs diff --git a/fuzz/fixture/Cargo.toml b/fuzz/fixture/Cargo.toml index 3d4cb615..5e687afc 100644 --- a/fuzz/fixture/Cargo.toml +++ b/fuzz/fixture/Cargo.toml @@ -15,7 +15,7 @@ prost = { workspace = true } serde = { workspace = true, features = ["derive"] } solana-account = { workspace = true } solana-clock = { workspace = true } -solana-compute-budget = { workspace = true } +solana-compute-budget = { workspace = true, features = ["agave-unstable-api"] } solana-epoch-rewards = { workspace = true } solana-epoch-schedule = { workspace = true } solana-hash = { workspace = true } diff --git a/fuzz/fixture/src/context.rs b/fuzz/fixture/src/context.rs index 244b4827..ab3e8dae 100644 --- a/fuzz/fixture/src/context.rs +++ b/fuzz/fixture/src/context.rs @@ -66,11 +66,12 @@ impl From for Context { let feature_set: FeatureSet = value.feature_set.map(Into::into).unwrap_or_default(); let simd_0268_active = feature_set.is_active(&agave_feature_set::raise_cpi_nesting_limit_to_8::id()); + let simd_0339_active = + feature_set.is_active(&agave_feature_set::increase_cpi_account_info_limit::id()); - let compute_budget = value - .compute_budget - .map(Into::into) - .unwrap_or_else(|| ComputeBudget::new_with_defaults(simd_0268_active)); + let compute_budget = value.compute_budget.map(Into::into).unwrap_or_else(|| { + ComputeBudget::new_with_defaults(simd_0268_active, simd_0339_active) + }); Self { compute_budget, @@ -151,12 +152,15 @@ mod tests { ComputeBudget as ProtoComputeBudget, FeatureSet as ProtoFeatureSet, InstrContext as ProtoContext, }, + solana_pubkey::Pubkey, }; - fn proto_feature_set_with(feature_id: solana_pubkey::Pubkey) -> ProtoFeatureSet { - let discr = u64::from_le_bytes(feature_id.to_bytes()[0..8].try_into().unwrap()); + fn proto_feature_set_with(features: &[Pubkey]) -> ProtoFeatureSet { ProtoFeatureSet { - features: vec![discr], + features: features + .iter() + .map(|id| u64::from_le_bytes(id.to_bytes()[0..8].try_into().unwrap())) + .collect(), } } @@ -175,12 +179,13 @@ mod tests { #[test] fn test_defaults_use_feature_flag_when_active() { let mut proto = empty_proto_context(); - proto.feature_set = Some(proto_feature_set_with( + proto.feature_set = Some(proto_feature_set_with(&[ agave_feature_set::raise_cpi_nesting_limit_to_8::id(), - )); + agave_feature_set::increase_cpi_account_info_limit::id(), + ])); let ctx: Context = proto.into(); - let expected = ComputeBudget::new_with_defaults(true); + let expected = ComputeBudget::new_with_defaults(true, true); assert_eq!(ctx.compute_budget, expected); } @@ -188,7 +193,7 @@ mod tests { fn test_defaults_use_feature_flag_when_inactive() { let proto = empty_proto_context(); let ctx: Context = proto.into(); - let expected = ComputeBudget::new_with_defaults(false); + let expected = ComputeBudget::new_with_defaults(false, false); assert_eq!(ctx.compute_budget, expected); } @@ -202,9 +207,10 @@ mod tests { proto.compute_budget = Some(cb); // Whether the feature is present or not should not affect passthrough - proto.feature_set = Some(proto_feature_set_with( + proto.feature_set = Some(proto_feature_set_with(&[ agave_feature_set::raise_cpi_nesting_limit_to_8::id(), - )); + agave_feature_set::increase_cpi_account_info_limit::id(), + ])); let ctx: Context = proto.into(); assert_eq!(ctx.compute_budget.compute_unit_limit, 12345); diff --git a/fuzz/fixture/src/lib.rs b/fuzz/fixture/src/lib.rs index 678e3133..d1b3d939 100644 --- a/fuzz/fixture/src/lib.rs +++ b/fuzz/fixture/src/lib.rs @@ -112,7 +112,7 @@ mod tests { fn test_consistent_hashing() { const ITERATIONS: usize = 1000; - let compute_budget = ComputeBudget::new_with_defaults(true); + let compute_budget = ComputeBudget::new_with_defaults(true, true); let feature_set = FeatureSet::all_enabled(); let sysvars = Sysvars::default(); diff --git a/harness/Cargo.toml b/harness/Cargo.toml index 4ecc56c4..fbfa9d2f 100644 --- a/harness/Cargo.toml +++ b/harness/Cargo.toml @@ -32,8 +32,8 @@ serde = [ ] [dependencies] -agave-feature-set = { workspace = true } -agave-precompiles = { workspace = true, optional = true } +agave-feature-set = { workspace = true, features = ["agave-unstable-api"] } +agave-precompiles = { workspace = true, features = ["agave-unstable-api"], optional = true } agave-syscalls = { workspace = true } bincode = { workspace = true } serde = { workspace = true, features = ["derive"], optional = true } @@ -44,9 +44,9 @@ mollusk-svm-fuzz-fs = { workspace = true, optional = true } mollusk-svm-keys = { workspace = true } mollusk-svm-result = { workspace = true } solana-account = { workspace = true } -solana-bpf-loader-program = { workspace = true } +solana-bpf-loader-program = { workspace = true, features = ["agave-unstable-api"] } solana-clock = { workspace = true } -solana-compute-budget = { workspace = true } +solana-compute-budget = { workspace = true, features = ["agave-unstable-api"] } solana-epoch-rewards = { workspace = true } solana-epoch-schedule = { workspace = true } solana-hash = { workspace = true } @@ -54,7 +54,7 @@ solana-instruction = { workspace = true } solana-instruction-error = { workspace = true, features = ["serde"] } solana-loader-v3-interface = { workspace = true, features = ["serde"] } solana-loader-v4-interface = { workspace = true } -solana-loader-v4-program = { workspace = true, optional = true } +solana-loader-v4-program = { workspace = true, features = ["agave-unstable-api"], optional = true } solana-logger = { workspace = true } solana-precompile-error = { workspace = true } solana-program-error = { workspace = true } @@ -68,7 +68,7 @@ solana-stake-program = { workspace = true, optional = true } solana-svm-callback = { workspace = true } solana-svm-log-collector = { workspace = true } solana-svm-timings = { workspace = true } -solana-system-program = { workspace = true } +solana-system-program = { workspace = true, features = ["agave-unstable-api"] } solana-sysvar = { workspace = true } solana-sysvar-id = { workspace = true } solana-transaction-context = { workspace = true, features = ["dev-context-only-utils"] } diff --git a/harness/src/compile_accounts.rs b/harness/src/compile_accounts.rs index dabe12f2..0012d254 100644 --- a/harness/src/compile_accounts.rs +++ b/harness/src/compile_accounts.rs @@ -9,16 +9,16 @@ use { }, keys::KeyMap, }, - solana_account::{Account, WritableAccount}, + solana_account::{Account, AccountSharedData, WritableAccount}, solana_instruction::Instruction, solana_pubkey::Pubkey, - solana_transaction_context::{InstructionAccount, TransactionAccount}, + solana_transaction_context::InstructionAccount, }; pub struct CompiledAccounts { pub program_id_index: u16, pub instruction_accounts: Vec, - pub transaction_accounts: Vec, + pub transaction_accounts: Vec<(Pubkey, AccountSharedData)>, } pub fn compile_accounts<'a>( diff --git a/harness/src/fuzz/firedancer.rs b/harness/src/fuzz/firedancer.rs index afcddde9..ea45daf9 100644 --- a/harness/src/fuzz/firedancer.rs +++ b/harness/src/fuzz/firedancer.rs @@ -114,7 +114,7 @@ pub(crate) fn parse_fixture_context(context: &FuzzContext) -> ParsedFixtureConte let compute_budget = ComputeBudget { compute_unit_limit: *compute_units_available, - ..ComputeBudget::new_with_defaults(true) + ..ComputeBudget::new_with_defaults(true, true) }; let accounts = accounts diff --git a/harness/src/lib.rs b/harness/src/lib.rs index defd6540..620ac687 100644 --- a/harness/src/lib.rs +++ b/harness/src/lib.rs @@ -460,19 +460,25 @@ use { program::ProgramCache, sysvar::Sysvars, }, agave_feature_set::FeatureSet, + agave_syscalls::{ + create_program_runtime_environment_v1, create_program_runtime_environment_v2, + }, mollusk_svm_error::error::{MolluskError, MolluskPanic}, mollusk_svm_result::{Check, CheckContext, Config, InstructionResult}, - solana_account::{Account, AccountSharedData}, + solana_account::{Account, AccountSharedData, ReadableAccount}, solana_compute_budget::compute_budget::ComputeBudget, solana_hash::Hash, solana_instruction::{AccountMeta, Instruction}, - solana_program_runtime::invoke_context::{EnvironmentConfig, InvokeContext}, + solana_program_runtime::{ + invoke_context::{EnvironmentConfig, InvokeContext}, + loaded_programs::ProgramRuntimeEnvironments, + }, solana_pubkey::Pubkey, solana_svm_callback::InvokeContextCallback, solana_svm_log_collector::LogCollector, solana_svm_timings::ExecuteTimings, solana_transaction_context::{InstructionAccount, TransactionContext}, - std::{cell::RefCell, collections::HashSet, iter::once, rc::Rc}, + std::{cell::RefCell, collections::HashSet, iter::once, rc::Rc, sync::Arc}, }; pub(crate) const DEFAULT_LOADER_KEY: Pubkey = solana_sdk_ids::bpf_loader_upgradeable::id(); @@ -537,7 +543,7 @@ impl Default for Mollusk { solana_runtime::message_processor=debug,\ solana_runtime::system_instruction_processor=trace", ); - let compute_budget = ComputeBudget::new_with_defaults(true); + let compute_budget = ComputeBudget::new_with_defaults(true, true); #[cfg(feature = "fuzz")] let feature_set = { @@ -713,8 +719,26 @@ impl Mollusk { epoch_stake: &self.epoch_stake, feature_set: &self.feature_set, }; + let execution_budget = self.compute_budget.to_budget(); let runtime_features = self.feature_set.runtime_features(); let sysvar_cache = self.sysvars.setup_sysvar_cache(accounts); + + let program_runtime_environments = ProgramRuntimeEnvironments { + program_runtime_v1: Arc::new( + create_program_runtime_environment_v1( + &runtime_features, + &execution_budget, + /* reject_deployment_of_broken_elfs */ false, + /* debugging_features */ false, + ) + .unwrap(), + ), + program_runtime_v2: Arc::new(create_program_runtime_environment_v2( + &execution_budget, + /* debugging_features */ false, + )), + }; + let mut invoke_context = InvokeContext::new( &mut transaction_context, &mut program_cache, @@ -723,6 +747,8 @@ impl Mollusk { /* blockhash_lamports_per_signature */ 5000, // The default value &callback, &runtime_features, + &program_runtime_environments, + &program_runtime_environments, &sysvar_cache, ), self.logger.clone(), @@ -736,7 +762,7 @@ impl Mollusk { .configure_next_instruction_for_tests( program_id_index, instruction_accounts.clone(), - &instruction.data, + instruction.data.clone(), ) .expect("failed to configure next instruction"); @@ -774,12 +800,15 @@ impl Mollusk { transaction_context .find_index_of_account(pubkey) .map(|index| { - let resulting_account = transaction_context - .accounts() - .try_borrow(index) - .unwrap() - .clone() - .into(); + let account_ref = + transaction_context.accounts().try_borrow(index).unwrap(); + let resulting_account = Account { + lamports: account_ref.lamports(), + data: account_ref.data().to_vec(), + owner: *account_ref.owner(), + executable: account_ref.executable(), + rent_epoch: account_ref.rent_epoch(), + }; (*pubkey, resulting_account) }) .unwrap_or((*pubkey, account.clone())) diff --git a/harness/src/program.rs b/harness/src/program.rs index a4e43ac8..76c163a5 100644 --- a/harness/src/program.rs +++ b/harness/src/program.rs @@ -70,7 +70,7 @@ pub struct ProgramCache { entries_cache: Rc>>, // The function registry (syscalls) to use for verifying and loading // program ELFs. - pub program_runtime_environment: BuiltinProgram>, + pub program_runtime_environment: BuiltinProgram>, } impl ProgramCache { @@ -232,12 +232,6 @@ static BUILTINS: &[Builtin] = &[ name: "solana_loader_v4_program", entrypoint: solana_loader_v4_program::Entrypoint::vm, }, - #[cfg(feature = "all-builtins")] - Builtin { - program_id: solana_sdk_ids::stake::id(), - name: "solana_stake_program", - entrypoint: solana_stake_program::stake_instruction::Entrypoint::vm, - }, /* ... */ ]; diff --git a/harness/tests/bpf_program.rs b/harness/tests/bpf_program.rs index 51e4c0e6..59c49c42 100644 --- a/harness/tests/bpf_program.rs +++ b/harness/tests/bpf_program.rs @@ -152,7 +152,7 @@ fn test_transfer() { ], &[ Check::success(), - Check::compute_units(2534), + Check::compute_units(2480), Check::account(&payer) .lamports(payer_lamports - transfer_amount) .build(), @@ -256,7 +256,7 @@ fn test_close_account() { ], &[ Check::success(), - Check::compute_units(2609), + Check::compute_units(2555), Check::account(&key) .closed() // The rest is unnecessary, just testing. .data(&[]) @@ -376,7 +376,7 @@ fn test_cpi() { ], &[ Check::success(), - Check::compute_units(2371), + Check::compute_units(2317), Check::account(&key) .data(data) .lamports(lamports) diff --git a/keys/src/accounts.rs b/keys/src/accounts.rs index 328a49db..0b534c75 100644 --- a/keys/src/accounts.rs +++ b/keys/src/accounts.rs @@ -6,8 +6,7 @@ use { solana_account::{Account, AccountSharedData}, solana_instruction::Instruction, solana_pubkey::Pubkey, - solana_transaction_context::{IndexOfAccount, InstructionAccount, TransactionAccount}, - std::collections::HashMap, + solana_transaction_context::{IndexOfAccount, InstructionAccount}, }; // Helper struct to avoid cloning instruction data. @@ -53,16 +52,8 @@ pub fn compile_transaction_accounts_for_instruction<'a>( instruction: &Instruction, accounts: impl Iterator, stub_out_program_account: Option Account>>, -) -> Vec { - let len = key_map.len(); - let mut by_key: HashMap = HashMap::with_capacity(len); - - for (key, account) in accounts { - if key_map.contains_key(key) { - by_key.insert(*key, AccountSharedData::from(account.clone())); - } - } - +) -> Vec<(Pubkey, AccountSharedData)> { + let accounts: Vec<_> = accounts.collect(); key_map .keys() .map(|key| { @@ -71,8 +62,10 @@ pub fn compile_transaction_accounts_for_instruction<'a>( return (*key, stub_out_program_account().into()); } } - let account = by_key - .remove(key) + let account = accounts + .iter() + .find(|(k, _)| k == key) + .map(|(_, a)| AccountSharedData::from(a.clone())) .or_panic_with(MolluskError::AccountMissing(key)); (*key, account) }) @@ -84,16 +77,8 @@ pub fn compile_transaction_accounts<'a>( instructions: &[Instruction], accounts: impl Iterator, stub_out_program_account: Option Account>>, -) -> Vec { - let len = key_map.len(); - let mut by_key: HashMap = HashMap::with_capacity(len); - - for (key, account) in accounts { - if key_map.contains_key(key) { - by_key.insert(*key, AccountSharedData::from(account.clone())); - } - } - +) -> Vec<(Pubkey, AccountSharedData)> { + let accounts: Vec<_> = accounts.collect(); key_map .keys() .map(|key| { @@ -102,8 +87,10 @@ pub fn compile_transaction_accounts<'a>( return (*key, stub_out_program_account().into()); } } - let account = by_key - .remove(key) + let account = accounts + .iter() + .find(|(k, _)| k == key) + .map(|(_, a)| AccountSharedData::from(a.clone())) .or_panic_with(MolluskError::AccountMissing(key)); (*key, account) })