diff --git a/Cargo.lock b/Cargo.lock index a63eda6..5b357b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 4 [[package]] name = "account-compression" version = "1.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "aligned-sized", "anchor-lang", @@ -37,9 +37,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -77,61 +77,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "agave-feature-set" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "973a83d0d66d1f04647d1146a07736864f0742300b56bf2a5aadf5ce7b22fe47" -dependencies = [ - "ahash", - "solana-epoch-schedule", - "solana-feature-set-interface", - "solana-hash", - "solana-pubkey", - "solana-sha256-hasher", -] - -[[package]] -name = "agave-precompiles" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591ddfc881b44f1eb740b5f6b64c953ba46b003cf0cd49d56268bc70594f655d" -dependencies = [ - "agave-feature-set", - "bincode", - "bytemuck", - "digest 0.10.7", - "ed25519-dalek", - "lazy_static", - "libsecp256k1", - "openssl", - "sha3", - "solana-ed25519-program", - "solana-message", - "solana-precompile-error", - "solana-pubkey", - "solana-sdk-ids", - "solana-secp256k1-program", - "solana-secp256r1-program", -] - -[[package]] -name = "agave-reserved-account-keys" -version = "2.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498ae700a5abcfe54d26333c3c1e58c729150d30166940e1f38eafbfe595237e" -dependencies = [ - "agave-feature-set", - "lazy_static", - "solana-pubkey", - "solana-sdk-ids", -] - [[package]] name = "agave-transaction-view" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe519820242ff25cf40fbd44b7c3ee585674de332a1f43fc2a0923975194c472" +checksum = "aba2aec0682aa448f93db9b93df8fb331c119cb4d66fe9ba61d6b42dd3a91105" dependencies = [ "solana-hash", "solana-message", @@ -168,11 +118,11 @@ dependencies = [ [[package]] name = "aligned-sized" version = "1.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -405,6 +355,15 @@ dependencies = [ "libc", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -422,7 +381,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -477,7 +436,7 @@ dependencies = [ "ark-std 0.5.0", "educe 0.6.0", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "itertools 0.13.0", "num-bigint 0.4.6", "num-integer", @@ -542,7 +501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -568,7 +527,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -596,7 +555,7 @@ dependencies = [ "ark-std 0.5.0", "educe 0.6.0", "fnv", - "hashbrown 0.15.3", + "hashbrown 0.15.4", ] [[package]] @@ -643,7 +602,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -743,9 +702,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b37fc50485c4f3f736a4fb14199f6d5f5ba008d7f28fe710306c92780f004c07" +checksum = "d615619615a650c571269c00dca41db04b9210037fa76ed8239f70404ab56985" dependencies = [ "brotli", "flate2", @@ -774,7 +733,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -971,7 +930,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1028,9 +987,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" [[package]] name = "bv" @@ -1044,9 +1003,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" dependencies = [ "bytemuck_derive", ] @@ -1059,7 +1018,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1111,14 +1070,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" dependencies = [ "serde", - "toml 0.8.22", + "toml 0.8.23", ] [[package]] name = "cc" -version = "1.2.25" +version = "1.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +checksum = "956a5e21988b87f372569b66183b78babf23ebc2e744b733e4350a752c4dafac" dependencies = [ "jobserver", "libc", @@ -1133,9 +1092,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "cfg_aliases" @@ -1151,7 +1110,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1412,7 +1371,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1436,7 +1395,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1447,7 +1406,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1568,7 +1527,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1591,7 +1550,7 @@ checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1662,7 +1621,7 @@ dependencies = [ "enum-ordinalize 4.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1703,7 +1662,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1716,7 +1675,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1736,7 +1695,7 @@ checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -1860,9 +1819,9 @@ checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5" [[package]] name = "flate2" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -1901,7 +1860,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "forester-utils" version = "1.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "anchor-lang", @@ -1926,7 +1885,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "rand 0.8.5", - "reqwest 0.12.19", + "reqwest 0.12.20", "serde", "serde_json", "solana-sdk", @@ -2012,7 +1971,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -2093,7 +2052,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2163,8 +2122,7 @@ dependencies = [ [[package]] name = "groth16-solana" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88b742ab45083ea752bcece9bb0a1f8b9bdff52013a5f6b4dce77ac2b59f34c" +source = "git+https://github.com/lightprotocol/groth16-solana.git?rev=a18e0f4d3be6c24214fd293e2e7a998b160cda9b#a18e0f4d3be6c24214fd293e2e7a998b160cda9b" dependencies = [ "ark-bn254 0.5.0", "ark-ec 0.5.0", @@ -2245,9 +2203,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ "allocator-api2", ] @@ -2278,9 +2236,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -2458,9 +2416,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.6" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", "hyper 1.6.0", @@ -2503,9 +2461,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8" +checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" dependencies = [ "base64 0.22.1", "bytes", @@ -2723,7 +2681,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.3", + "hashbrown 0.15.4", "serde", ] @@ -2792,6 +2750,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -2938,7 +2905,7 @@ dependencies = [ [[package]] name = "light-account-checks" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "solana-account-info", "solana-program-error", @@ -2950,7 +2917,7 @@ dependencies = [ [[package]] name = "light-batched-merkle-tree" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "aligned-sized", "borsh 0.10.4", @@ -2974,7 +2941,7 @@ dependencies = [ [[package]] name = "light-bloom-filter" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "bitvec", "fastmurmur3", @@ -2998,12 +2965,13 @@ dependencies = [ [[package]] name = "light-client" version = "0.9.1" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "async-trait", "base64 0.13.1", "borsh 0.10.4", "bs58", + "bytemuck", "lazy_static", "light-compressed-account", "light-concurrent-merkle-tree", @@ -3015,8 +2983,10 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "photon-api", + "rand 0.8.5", "solana-account", "solana-account-decoder-client-types", + "solana-address-lookup-table-interface", "solana-banks-client", "solana-clock", "solana-commitment-config", @@ -3041,7 +3011,7 @@ dependencies = [ [[package]] name = "light-compressed-account" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "anchor-lang", "borsh 0.10.4", @@ -3077,7 +3047,7 @@ dependencies = [ [[package]] name = "light-compressed-token" version = "1.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "anchor-lang", @@ -3097,7 +3067,7 @@ dependencies = [ [[package]] name = "light-compressed-token-client" version = "0.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "anchor-lang", @@ -3122,7 +3092,7 @@ dependencies = [ [[package]] name = "light-compressed-token-sdk" version = "0.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "anchor-lang", "borsh 0.10.4", @@ -3136,7 +3106,7 @@ dependencies = [ [[package]] name = "light-concurrent-merkle-tree" version = "2.0.1" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "borsh 0.10.4", "light-bounded-vec", @@ -3149,7 +3119,7 @@ dependencies = [ [[package]] name = "light-hash-set" version = "2.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "light-hasher", "num-bigint 0.4.6", @@ -3161,7 +3131,7 @@ dependencies = [ [[package]] name = "light-hasher" version = "3.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "ark-bn254 0.5.0", "ark-ff 0.5.0", @@ -3179,7 +3149,7 @@ dependencies = [ [[package]] name = "light-heap" version = "1.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "anchor-lang", ] @@ -3187,7 +3157,7 @@ dependencies = [ [[package]] name = "light-indexed-array" version = "0.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "light-hasher", "num-bigint 0.4.6", @@ -3198,7 +3168,7 @@ dependencies = [ [[package]] name = "light-indexed-merkle-tree" version = "2.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "light-bounded-vec", "light-concurrent-merkle-tree", @@ -3213,18 +3183,18 @@ dependencies = [ [[package]] name = "light-macros" version = "2.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] name = "light-merkle-tree-metadata" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "anchor-lang", "borsh 0.10.4", @@ -3240,7 +3210,7 @@ dependencies = [ [[package]] name = "light-merkle-tree-reference" version = "2.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "light-hasher", "light-indexed-array", @@ -3276,12 +3246,13 @@ dependencies = [ [[package]] name = "light-program-test" version = "0.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "anchor-lang", "async-trait", "borsh 0.10.4", + "bytemuck", "forester-utils", "light-batched-merkle-tree", "light-client", @@ -3296,14 +3267,17 @@ dependencies = [ "light-prover-client", "light-registry", "light-sdk", + "litesvm", "log", "num-bigint 0.4.6", "num-traits", "photon-api", - "reqwest 0.12.19", + "rand 0.8.5", + "reqwest 0.12.20", + "solana-account", "solana-banks-client", + "solana-compute-budget", "solana-instruction", - "solana-program-test", "solana-pubkey", "solana-rpc-client-api", "solana-sdk", @@ -3315,7 +3289,7 @@ dependencies = [ [[package]] name = "light-prover-client" version = "1.3.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "ark-bn254 0.5.0", "ark-serialize 0.5.0", @@ -3337,7 +3311,7 @@ dependencies = [ [[package]] name = "light-registry" version = "1.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "aligned-sized", @@ -3352,7 +3326,7 @@ dependencies = [ [[package]] name = "light-sdk" version = "0.12.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "anchor-lang", "borsh 0.10.4", @@ -3375,20 +3349,20 @@ dependencies = [ [[package]] name = "light-sdk-macros" version = "0.6.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "ark-bn254 0.5.0", "light-hasher", "light-poseidon 0.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] name = "light-sparse-merkle-tree" version = "0.1.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "light-hasher", "light-indexed-array", @@ -3400,7 +3374,7 @@ dependencies = [ [[package]] name = "light-system-program-anchor" version = "1.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "account-compression", "aligned-sized", @@ -3413,7 +3387,7 @@ dependencies = [ [[package]] name = "light-verifier" version = "2.0.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "groth16-solana", "light-compressed-account", @@ -3425,7 +3399,7 @@ dependencies = [ [[package]] name = "light-zero-copy" version = "0.2.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ "solana-program-error", "thiserror 2.0.12", @@ -3444,6 +3418,69 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[package]] +name = "litesvm" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7e5f4462f34439adcfcab58099bc7a89c67a17f8240b84a993b8b705c1becb" +dependencies = [ + "ansi_term", + "bincode", + "indexmap 2.9.0", + "itertools 0.14.0", + "log", + "solana-account", + "solana-address-lookup-table-interface", + "solana-bpf-loader-program", + "solana-builtins", + "solana-clock", + "solana-compute-budget", + "solana-compute-budget-instruction", + "solana-config-program", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-feature-set", + "solana-fee", + "solana-fee-structure", + "solana-hash", + "solana-instruction", + "solana-instructions-sysvar", + "solana-keypair", + "solana-last-restart-slot", + "solana-loader-v3-interface", + "solana-loader-v4-interface", + "solana-log-collector", + "solana-measure", + "solana-message", + "solana-native-token", + "solana-nonce", + "solana-nonce-account", + "solana-precompiles", + "solana-program-error", + "solana-program-runtime", + "solana-pubkey", + "solana-rent", + "solana-reserved-account-keys", + "solana-sdk-ids", + "solana-sha256-hasher", + "solana-signature", + "solana-signer", + "solana-slot-hashes", + "solana-slot-history", + "solana-stake-interface", + "solana-svm-transaction", + "solana-system-interface", + "solana-system-program", + "solana-sysvar", + "solana-sysvar-id", + "solana-timings", + "solana-transaction", + "solana-transaction-context", + "solana-transaction-error", + "solana-vote-program", + "thiserror 2.0.12", +] + [[package]] name = "lock_api" version = "0.4.13" @@ -3487,9 +3524,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" @@ -3545,9 +3582,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -3559,7 +3596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] @@ -3729,7 +3766,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -3779,7 +3816,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.5.1", + "hermit-abi 0.5.2", "libc", ] @@ -3801,7 +3838,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -3863,7 +3900,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -3872,15 +3909,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "openssl-src" -version = "300.5.0+3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" -dependencies = [ - "cc", -] - [[package]] name = "openssl-sys" version = "0.9.109" @@ -3889,7 +3917,6 @@ checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", - "openssl-src", "pkg-config", "vcpkg", ] @@ -3984,9 +4011,9 @@ dependencies = [ [[package]] name = "photon-api" version = "0.50.0" -source = "git+https://github.com/lightprotocol/light-protocol?rev=128b191ba#128b191baa2005ecd98c9f7b0b5e49fa13f61236" +source = "git+https://github.com/lightprotocol/light-protocol?rev=52437b6f281225b8546b2671ccc6dae2b3d5f0b6#52437b6f281225b8546b2671ccc6dae2b3d5f0b6" dependencies = [ - "reqwest 0.12.19", + "reqwest 0.12.20", "serde", "serde_derive", "serde_json", @@ -4012,7 +4039,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -4047,9 +4074,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" @@ -4170,20 +4197,20 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "web-sys", "winapi", ] @@ -4491,9 +4518,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.19" +version = "0.12.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2f8e5513d63f2e5b386eb5106dc67eaf3f84e95258e210489136b8b92ad6119" +checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" dependencies = [ "base64 0.22.1", "bytes", @@ -4505,16 +4532,14 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.6.0", - "hyper-rustls 0.27.6", + "hyper-rustls 0.27.7", "hyper-tls 0.6.0", "hyper-util", - "ipnet", "js-sys", "log", "mime", "mime_guess", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", "rustls-pki-types", @@ -4564,9 +4589,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -4851,7 +4876,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -4868,9 +4893,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -4914,7 +4939,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -4977,16 +5002,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" version = "1.4.5" @@ -5035,9 +5050,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" @@ -5069,9 +5084,9 @@ dependencies = [ [[package]] name = "solana-account-decoder-client-types" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c5d7d0f1581d98a869f2569122ded67e0735f3780d787b3e7653bdcd1708a2" +checksum = "9b3485b583fcc58b5fa121fa0b4acb90061671fb1a9769493e8b4ad586581f47" dependencies = [ "base64 0.22.1", "bs58", @@ -5098,9 +5113,9 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611e285c3d1c7ea383498a7a55d462a475614af9e3201fa9bf78a18b9f49ad67" +checksum = "d65a1a23a53cae19cb92bab2cbdd9e289e5210bb12175ce27642c94adf74b220" dependencies = [ "ahash", "bincode", @@ -5139,7 +5154,6 @@ dependencies = [ "solana-rayon-threadlimit", "solana-sdk", "solana-svm-transaction", - "solana-transaction-context", "static_assertions", "tar", "tempfile", @@ -5165,11 +5179,10 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ba90bbe1e9a7354763520ae5fa5f610712250a65891cf54d490b1fcc486244" +checksum = "c758a82a60e5fcc93b3ee00615b0e244295aa8b2308475ea2b48f4900862a2e0" dependencies = [ - "agave-feature-set", "bincode", "bytemuck", "log", @@ -5178,6 +5191,7 @@ dependencies = [ "solana-address-lookup-table-interface", "solana-bincode", "solana-clock", + "solana-feature-set", "solana-instruction", "solana-log-collector", "solana-packet", @@ -5199,16 +5213,15 @@ dependencies = [ [[package]] name = "solana-banks-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f32510172470e5d3c2c4fbb125024fe715bb903a368df0085a1098f3b693bd" +checksum = "420dc40674f4a4df1527277033554b1a1b84a47e780cdb7dad151426f5292e55" dependencies = [ "borsh 1.5.7", "futures", "solana-banks-interface", "solana-program", "solana-sdk", - "solana-transaction-context", "tarpc", "thiserror 2.0.12", "tokio", @@ -5217,29 +5230,28 @@ dependencies = [ [[package]] name = "solana-banks-interface" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d07549f0e8d1dbe90117f1595ed77539e3766d3203b3b5c47f999a80c3c754e" +checksum = "02f8a6b6dc15262f14df6da7332e7dc7eb5fa04c86bf4dfe69385b71c2860d19" dependencies = [ "serde", "serde_derive", "solana-sdk", - "solana-transaction-context", "tarpc", ] [[package]] name = "solana-banks-server" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80a4350984a3c140b99d444e2b92ee8decac88a8def73cd0ca02e655eb3463" +checksum = "8ea32797f631ff60b3eb3c793b0fddd104f5ffdf534bf6efcc59fbe30cd23b15" dependencies = [ - "agave-feature-set", "bincode", "crossbeam-channel", "futures", "solana-banks-interface", "solana-client", + "solana-feature-set", "solana-runtime", "solana-runtime-transaction", "solana-sdk", @@ -5286,9 +5298,9 @@ dependencies = [ [[package]] name = "solana-bn254" -version = "2.2.2" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4420f125118732833f36facf96a27e7b78314b2d642ba07fa9ffdacd8d79e243" +checksum = "9abc69625158faaab02347370b91c0d8e0fe347bf9287239f0fbe8f5864d91da" dependencies = [ "ark-bn254 0.4.0", "ark-ec 0.4.2", @@ -5311,12 +5323,10 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1732daafbfb0b265998fb55ec223680b95a241eea9209c76427a55491bf4903" +checksum = "0cbc2581d0f39cd7698e46baa06fc5e8928b323a85ed3a4fdbdfe0d7ea9fc152" dependencies = [ - "agave-feature-set", - "agave-precompiles", "bincode", "libsecp256k1", "qualifier_attr", @@ -5331,6 +5341,7 @@ dependencies = [ "solana-compute-budget", "solana-cpi", "solana-curve25519", + "solana-feature-set", "solana-hash", "solana-instruction", "solana-keccak-hasher", @@ -5340,6 +5351,7 @@ dependencies = [ "solana-measure", "solana-packet", "solana-poseidon", + "solana-precompiles", "solana-program-entrypoint", "solana-program-memory", "solana-program-runtime", @@ -5360,9 +5372,9 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063cbccec587c959c8381b6f334588b512e31d44afe993020f5e2999572f8dcd" +checksum = "12484b98db9e154d8189a7f632fe0766440abe4e58c5426f47157ece5b8730f3" dependencies = [ "bv", "bytemuck", @@ -5380,15 +5392,15 @@ dependencies = [ [[package]] name = "solana-builtins" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31cf8956aa23f0837856697c26f74aa76397c8536bce886837d8cf59c06e140a" +checksum = "9ab1c09b653992c685c56c611004a1c96e80e76b31a2a2ecc06c47690646b98a" dependencies = [ - "agave-feature-set", "solana-address-lookup-table-program", "solana-bpf-loader-program", "solana-compute-budget-program", "solana-config-program", + "solana-feature-set", "solana-loader-v4-program", "solana-program-runtime", "solana-pubkey", @@ -5402,11 +5414,10 @@ dependencies = [ [[package]] name = "solana-builtins-default-costs" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a9aaf602cc61c84932675690fa61d711b5a4879789b74a3162ffcbd255177" +checksum = "c4ee734c35b736e632aa3b1367f933d93ee7b4129dd1e20ca942205d4834054e" dependencies = [ - "agave-feature-set", "ahash", "lazy_static", "log", @@ -5415,6 +5426,7 @@ dependencies = [ "solana-bpf-loader-program", "solana-compute-budget-program", "solana-config-program", + "solana-feature-set", "solana-loader-v4-program", "solana-pubkey", "solana-sdk-ids", @@ -5425,9 +5437,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a6ae5a74f13425eb0f8503b9a2c0bf59581e98deeee2d0555dfe6f05502c9" +checksum = "1e25b7073890561a6b7875a921572fc4a9a2c78b3e60fb8e0a7ee4911961f8bd" dependencies = [ "async-trait", "bincode", @@ -5526,9 +5538,9 @@ dependencies = [ [[package]] name = "solana-compute-budget" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7da7ab5302549d9c6bf399c69a7072abeca78d252d9b7a146be34bf6f8b51e6" +checksum = "eab40b24943ca51f1214fcf7979807640ea82a8387745f864cf3cd93d1337b01" dependencies = [ "solana-fee-structure", "solana-program-entrypoint", @@ -5536,16 +5548,16 @@ dependencies = [ [[package]] name = "solana-compute-budget-instruction" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73d8b8697c1cd4e183999162a7c1cb7d7f5674f9e802f97d5d2e439bd7f683f0" +checksum = "0a6ef2a514cde8dce77495aefd23671dc46f638f504765910424436bc745dc04" dependencies = [ - "agave-feature-set", "log", "solana-borsh", "solana-builtins-default-costs", "solana-compute-budget", "solana-compute-budget-interface", + "solana-feature-set", "solana-instruction", "solana-packet", "solana-pubkey", @@ -5570,9 +5582,9 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5179f59ab76e2441cfc10e185185326dd4f9389c7acb140b286128f8721c26" +checksum = "5ba922073c64647fe62f032787d34d50a8152533b5a5c85608ae1b2afb00ab63" dependencies = [ "qualifier_attr", "solana-program-runtime", @@ -5580,9 +5592,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4072ff53d982deb87be1c15136b0aa9ead472f15eaefdd23d8174d49371e0112" +checksum = "0ab5647203179631940e0659a635e5d3f514ba60f6457251f8f8fbf3830e56b0" dependencies = [ "bincode", "chrono", @@ -5604,9 +5616,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240bc217ca05f3e1d1d88f1cfda14b785a02288a630419e4a0ecd6b4fa5094b7" +checksum = "0392439ea05772166cbce3bebf7816bdcc3088967039c7ce050cea66873b1c50" dependencies = [ "async-trait", "bincode", @@ -5628,11 +5640,10 @@ dependencies = [ [[package]] name = "solana-cost-model" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb844530eafa481dc45f434e1684b09fcb594b3a72896caa969ef53df1ed653" +checksum = "a675ead1473b32a7a5735801608b35cbd8d3f5057ca8dbafdd5976146bb7e9e4" dependencies = [ - "agave-feature-set", "ahash", "lazy_static", "log", @@ -5643,6 +5654,7 @@ dependencies = [ "solana-compute-budget", "solana-compute-budget-instruction", "solana-compute-budget-interface", + "solana-feature-set", "solana-fee-structure", "solana-metrics", "solana-packet", @@ -5671,9 +5683,9 @@ dependencies = [ [[package]] name = "solana-curve25519" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cf33066cc9a741ff4cc4d171a4a816ea06f9826516b7360d997179a1b3244f" +checksum = "f213e3a853a23814dee39d730cd3a5583b7b1e6b37b2cd4d940bbe62df7acc16" dependencies = [ "bytemuck", "bytemuck_derive", @@ -5711,9 +5723,9 @@ dependencies = [ [[package]] name = "solana-ed25519-program" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0fc717048fdbe5d2ee7d673d73e6a30a094002f4a29ca7630ac01b6bddec04" +checksum = "a1feafa1691ea3ae588f99056f4bdd1293212c7ece28243d7da257c443e84753" dependencies = [ "bytemuck", "bytemuck_derive", @@ -5814,9 +5826,9 @@ dependencies = [ [[package]] name = "solana-feature-set" -version = "2.2.5" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93b93971e289d6425f88e6e3cb6668c4b05df78b3c518c249be55ced8efd6b6d" +checksum = "89e1d3b52b4a014efeaaab67f14e40af3972a4be61c523d612860db8e3145529" dependencies = [ "ahash", "lazy_static", @@ -5826,23 +5838,13 @@ dependencies = [ "solana-sha256-hasher", ] -[[package]] -name = "solana-feature-set-interface" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02007757246e40f10aa936dae4fa27efbf8dbd6a59575a12ccc802c1aea6e708" -dependencies = [ - "ahash", - "solana-pubkey", -] - [[package]] name = "solana-fee" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c2ee19fe65b4564b0bf7436f5a609871ddc8fc32b8507c648e46b670052819" +checksum = "ee323b500b445d45624ad99a08b12b37c9964ac12debf2cde9ddfad9b06e0073" dependencies = [ - "agave-feature-set", + "solana-feature-set", "solana-fee-structure", "solana-svm-transaction", ] @@ -5941,9 +5943,9 @@ dependencies = [ [[package]] name = "solana-inline-spl" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaac98c150932bba4bfbef5b52fae9ef445f767d66ded2f1398382149bc94f69" +checksum = "951545bd7d0ab4a878cfc7375ac9f1a475cb6936626677b2ba1d25e7b9f3910b" dependencies = [ "bytemuck", "solana-pubkey", @@ -6030,9 +6032,9 @@ dependencies = [ [[package]] name = "solana-lattice-hash" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45cf3899226bc7b729b13d7f65e34120eb5bc9b83b1d2aadfdcbd84473db9030" +checksum = "5fff3aab7ad7578d0bd2ac32d232015e535dfe268e35d45881ab22db0ba61c1e" dependencies = [ "base64 0.22.1", "blake3", @@ -6086,9 +6088,9 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae52276c26e48d494affc7730c2c1e837ae794519e48ab6b22ed3ccf4751f32" +checksum = "81b24999844b09096c79567c1298617efe084860149d875b702ef76e2faa2462" dependencies = [ "log", "qualifier_attr", @@ -6112,31 +6114,29 @@ dependencies = [ [[package]] name = "solana-log-collector" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45d5713845622a6059a172ea390c2a7f7eb50355cfb0cfa18a38a18ecb39c2f1" +checksum = "4aa28cd428e0af919d2fafd31c646835622abfd7ed4dba4df68e3c00f461bc66" dependencies = [ "log", ] [[package]] name = "solana-logger" -version = "2.3.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8e777ec1afd733939b532a42492d888ec7c88d8b4127a5d867eb45c6eb5cd5" +checksum = "593dbcb81439d37b02757e90bd9ab56364de63f378c55db92a6fbd6a2e47ab36" dependencies = [ "env_logger", "lazy_static", - "libc", "log", - "signal-hook", ] [[package]] name = "solana-measure" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9566e754d9b9bcdee7b4aae38e425d47abf8e4f00057208868cb3ab9bee7feae" +checksum = "8f1fced2cfeff80f0214af86bc27bc6e798465a45b70329c3b468bb75957c082" [[package]] name = "solana-message" @@ -6163,9 +6163,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02311660a407de41df2d5ef4e4118dac7b51cfe81a52362314ea51b091ee4150" +checksum = "89db46736ae1929db9629d779485052647117f3fcc190755519853b705f6dba5" dependencies = [ "crossbeam-channel", "gethostname", @@ -6196,9 +6196,9 @@ checksum = "33e9de00960197412e4be3902a6cd35e60817c511137aca6c34c66cd5d4017ec" [[package]] name = "solana-net-utils" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c27f0e0bbb972456ed255f81135378ecff3a380252ced7274fa965461ab99977" +checksum = "0752a7103c1a5bdbda04aa5abc78281232f2eda286be6edf8e44e27db0cca2a1" dependencies = [ "anyhow", "bincode", @@ -6280,9 +6280,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97222a3fda48570754ce114e43ca56af34741098c357cb8d3cb6695751e60330" +checksum = "3f0962d3818fc942a888f7c2d530896aeaf6f2da2187592a67bbdc8cf8a54192" dependencies = [ "ahash", "bincode", @@ -6322,9 +6322,9 @@ dependencies = [ [[package]] name = "solana-poseidon" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a31fc6ac2590217b63ecab02f23df0d5a38ecaa3e69d7194f57a0f30645e9d9" +checksum = "8ad1ea160d08dc423c35021fa3e437a5783eb256f5ab8bc3024e27db913acf42" dependencies = [ "ark-bn254 0.4.0", "light-poseidon 0.2.0", @@ -6334,9 +6334,9 @@ dependencies = [ [[package]] name = "solana-precompile-error" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff64daa2933c22982b323d88d0cdf693201ef56ac381ae16737fd5f579e07d6" +checksum = "4d87b2c1f5de77dfe2b175ee8dd318d196aaca4d0f66f02842f80c852811f9f8" dependencies = [ "num-traits", "solana-decode-error", @@ -6344,9 +6344,9 @@ dependencies = [ [[package]] name = "solana-precompiles" -version = "2.2.2" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e92768a57c652edb0f5d1b30a7d0bc64192139c517967c18600debe9ae3832" +checksum = "6a460ab805ec063802105b463ecb5eb02c3ffe469e67a967eea8a6e778e0bc06" dependencies = [ "lazy_static", "solana-ed25519-program", @@ -6505,12 +6505,10 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbde7b061921dcff2bf8e0f1af120fa94f2fb0e3a1c2ec1e7900432bb72cbcd" +checksum = "6c3d36fed5548b1a8625eb071df6031a95aa69f884e29bf244821e53c49372bc" dependencies = [ - "agave-feature-set", - "agave-precompiles", "base64 0.22.1", "bincode", "enum-iterator", @@ -6524,12 +6522,14 @@ dependencies = [ "solana-compute-budget", "solana-epoch-rewards", "solana-epoch-schedule", + "solana-feature-set", "solana-hash", "solana-instruction", "solana-last-restart-slot", "solana-log-collector", "solana-measure", "solana-metrics", + "solana-precompiles", "solana-pubkey", "solana-rent", "solana-sbpf", @@ -6546,11 +6546,10 @@ dependencies = [ [[package]] name = "solana-program-test" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd21a4746c9cda16b24158d9a9b15252adbea192e06be2c2b6c66ba39435c339" +checksum = "ef6caec3df83d39b8da9fd6e80a7847d788b3b869c646fbb8776c3e989e98c0c" dependencies = [ - "agave-feature-set", "assert_matches", "async-trait", "base64 0.22.1", @@ -6565,6 +6564,7 @@ dependencies = [ "solana-banks-server", "solana-bpf-loader-program", "solana-compute-budget", + "solana-feature-set", "solana-inline-spl", "solana-instruction", "solana-log-collector", @@ -6576,7 +6576,6 @@ dependencies = [ "solana-sdk-ids", "solana-svm", "solana-timings", - "solana-transaction-context", "solana-vote-program", "thiserror 2.0.12", "tokio", @@ -6611,9 +6610,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9633402b60b93f903d37c940a8ce0c1afc790b5a8678aaa8304f9099adf108b" +checksum = "0bd251d37c932105a684415db44bee52e75ad818dfecbf963a605289b5aaecc5" dependencies = [ "crossbeam-channel", "futures-util", @@ -6638,9 +6637,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826ec34b8d4181f0c46efaa84c6b7992a459ca129f21506656d79a1e62633d4b" +checksum = "0d072e6787b6fa9da86591bcf870823b0d6f87670df3c92628505db7a9131e44" dependencies = [ "async-lock", "async-trait", @@ -6678,9 +6677,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "423c912a1a68455fe4ed5175cf94eb8965e061cd257973c9a5659e2bf4ea8371" +checksum = "17f7b65ddd8ac75efcc31b627d4f161046312994313a4520b65a8b14202ab5d6" dependencies = [ "lazy_static", "num_cpus", @@ -6750,9 +6749,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3313bc969e1a8681f19a74181d301e5f91e5cc5a60975fb42e793caa9768f22e" +checksum = "7cb874b757d9d3c646f031132b20d43538309060a32d02b4aebb0f8fc2cd159a" dependencies = [ "async-trait", "base64 0.22.1", @@ -6788,9 +6787,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc3276b526100d0f55a7d1db2366781acdc75ce9fe4a9d1bc9c85a885a503f8" +checksum = "f7105452c4f039fd2c07e6fda811ff23bd270c99f91ac160308f02701eb19043" dependencies = [ "anyhow", "base64 0.22.1", @@ -6819,9 +6818,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "294874298fb4e52729bb0229e0cdda326d4393b7122b92823aa46e99960cb920" +checksum = "0244e2bf439ec424179414173cdc8b43e34371608752799c5610bf17430eee18" dependencies = [ "solana-account", "solana-commitment-config", @@ -6836,13 +6835,10 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be703a6c2a363663c642407ea6d474109c21760502c9c26e60c88e0665c3e859" +checksum = "5335e7925f6dc8d2fdcdc6ead3b190aca65f191a11cef74709a7a6ab5d0d5877" dependencies = [ - "agave-feature-set", - "agave-precompiles", - "agave-reserved-account-keys", "ahash", "aquamarine", "arrayref", @@ -6888,6 +6884,7 @@ dependencies = [ "solana-compute-budget-instruction", "solana-config-program", "solana-cost-model", + "solana-feature-set", "solana-fee", "solana-inline-spl", "solana-lattice-hash", @@ -6907,7 +6904,6 @@ dependencies = [ "solana-svm-rent-collector", "solana-svm-transaction", "solana-timings", - "solana-transaction-context", "solana-transaction-status-client-types", "solana-unified-scheduler-logic", "solana-version", @@ -6925,9 +6921,9 @@ dependencies = [ [[package]] name = "solana-runtime-transaction" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c1f6b65bcf3498b2c20e062a18de978ebf9ef773be823bc42329b2ec6ef7da" +checksum = "92ffec9b80cf744d36696b28ca089bef8058475a79a11b1cee9322a5aab1fa00" dependencies = [ "agave-transaction-view", "log", @@ -6969,9 +6965,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "2.2.2" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8af90d2ce445440e0548fa4a5f96fe8b265c22041a68c942012ffadd029667d" +checksum = "4808e8d7f3c931657e615042d4176b423e66f64dc99e3dc3c735a197e512029b" dependencies = [ "bincode", "bs58", @@ -7056,7 +7052,7 @@ dependencies = [ "bs58", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -7091,9 +7087,9 @@ dependencies = [ [[package]] name = "solana-secp256r1-program" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cda2aa1bbaceda14763c4f142a00b486f2f262cfd901bd0410649ad0404d5f7" +checksum = "cf903cbdc36a161533812f90acfccdb434ed48982bd5dd71f3217930572c4a80" dependencies = [ "bytemuck", "openssl", @@ -7131,9 +7127,9 @@ dependencies = [ [[package]] name = "solana-send-transaction-service" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a2a9dab16a9f7d11e06ee6f34ed7ce27923ae480c806513324b5620c73f09e" +checksum = "e51fb0567093cc4edbd701b995870fc41592fd90e8bc2965ef9f5ce214af22e7" dependencies = [ "crossbeam-channel", "itertools 0.12.1", @@ -7293,17 +7289,17 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c4872588e2a61166b6ece633be5de388dcc170294d717649e8963fae9468c" +checksum = "dabc713c25ff999424ec68ac4572f2ff6bfd6317922c7864435ccaf9c76504a8" dependencies = [ - "agave-feature-set", "bincode", "log", "solana-account", "solana-bincode", "solana-clock", "solana-config-program", + "solana-feature-set", "solana-genesis-config", "solana-instruction", "solana-log-collector", @@ -7322,9 +7318,9 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eaf5b216717d1d551716f3190878d028c689dabac40c8889767cead7e447481" +checksum = "68441234b1235afb242e7482cabf3e32eb29554e4c4159d5d58e19e54ccfd424" dependencies = [ "async-channel", "bytes", @@ -7369,12 +7365,10 @@ dependencies = [ [[package]] name = "solana-svm" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095be71c750f85287f37366e1975236b08dff2e02ec482473c975868d67fc542" +checksum = "0850baf834aba4a94a7558fa6cf6ca93fad284abf0363dec5fb9cab173a11fc4" dependencies = [ - "agave-feature-set", - "agave-precompiles", "ahash", "itertools 0.12.1", "log", @@ -7386,6 +7380,7 @@ dependencies = [ "solana-clock", "solana-compute-budget", "solana-compute-budget-instruction", + "solana-feature-set", "solana-fee-structure", "solana-hash", "solana-instruction", @@ -7396,6 +7391,7 @@ dependencies = [ "solana-message", "solana-nonce", "solana-nonce-account", + "solana-precompiles", "solana-program", "solana-program-runtime", "solana-pubkey", @@ -7414,19 +7410,18 @@ dependencies = [ [[package]] name = "solana-svm-rent-collector" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee563c1edcf5551b8b5acd86eb9383939a1d9591693c33e74a006dab4baaeb44" +checksum = "aa59aea7bfbadb4be9704a6f99c86dbdf48d6204c9291df79ecd6a4f1cc90b59" dependencies = [ "solana-sdk", - "solana-transaction-context", ] [[package]] name = "solana-svm-transaction" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221865f7355d5b0827c2d46dd53996361f6cf0c21919b965caa4ba6a1feb6b3a" +checksum = "4fc4392f0eed412141a376e99dfb052069b96f13697a9abb335504babe29387a" dependencies = [ "solana-hash", "solana-message", @@ -7454,9 +7449,9 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb0185e546f18f26451d274e018e5c4fd699c9765fbd69cbcbdb3475a6cb5bd" +checksum = "43c8f684977e4439031b3a27b954ab05a6bdf697d581692aaf8888cf92b73b9e" dependencies = [ "bincode", "log", @@ -7542,9 +7537,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255bda447fbff4526b6b19b16b3652281ec2b7c4952d019b369a5f4a9dba4e5c" +checksum = "721a034e94fcfaf8bde1ae4980e7eb58bfeb0c9a243b032b0761fdd19018afbf" dependencies = [ "bincode", "log", @@ -7577,9 +7572,9 @@ checksum = "6af261afb0e8c39252a04d026e3ea9c405342b08c871a2ad8aa5448e068c784c" [[package]] name = "solana-timings" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08862987485af7e3864b0ab9d4febeccaa34f1e982f08af9fa0460782d10773" +checksum = "49d9eabdce318cb07c60a23f1cc367b43e177c79225b5c2a081869ad182172ad" dependencies = [ "eager", "enum-iterator", @@ -7588,9 +7583,9 @@ dependencies = [ [[package]] name = "solana-tls-utils" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f227b3813b6c26c8ed38910b90a0b641baedb2ad075ea51ccfbff1992ee394" +checksum = "a228df037e560a02aac132193f492bdd761e2f90188cd16a440f149882f589b1" dependencies = [ "rustls 0.23.27", "solana-keypair", @@ -7601,9 +7596,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc74ecb664add683a18bb9f484a30ca8c9d71f3addcd3a771eaaaaec12125fd" +checksum = "aaceb9e9349de58740021f826ae72319513eca84ebb6d30326e2604fdad4cefb" dependencies = [ "async-trait", "bincode", @@ -7635,9 +7630,9 @@ dependencies = [ [[package]] name = "solana-transaction" -version = "2.2.2" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abec848d081beb15a324c633cd0e0ab33033318063230389895cae503ec9b544" +checksum = "753b3e9afed170e4cfc0ea1e87b5dfdc6d4a50270869414edd24c6ea1f529b29" dependencies = [ "bincode", "serde", @@ -7650,6 +7645,7 @@ dependencies = [ "solana-message", "solana-precompiles", "solana-pubkey", + "solana-reserved-account-keys", "solana-sanitize", "solana-sdk-ids", "solana-short-vec", @@ -7690,9 +7686,9 @@ dependencies = [ [[package]] name = "solana-transaction-metrics-tracker" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4c03abfcb923aaf71c228e81b54a804aa224a48577477d8e1096c3a1429d21b" +checksum = "e9256ea8a6cead9e03060fd8fdc24d400a57a719364db48a3e4d1776b09c2365" dependencies = [ "base64 0.22.1", "bincode", @@ -7707,9 +7703,9 @@ dependencies = [ [[package]] name = "solana-transaction-status-client-types" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaef59e8a54fc3a2dabfd85c32e35493c5e228f9d1efbcdcdc3c0819dddf7fd" +checksum = "d5ac91c8f0465c566164044ad7b3d18d15dfabab1b8b4a4a01cb83c047efdaae" dependencies = [ "base64 0.22.1", "bincode", @@ -7730,9 +7726,9 @@ dependencies = [ [[package]] name = "solana-type-overrides" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72735ae2d80d5556400b8fbb552688b3ac1413cd6c29e85db83d24ffe825a7f9" +checksum = "d39dc2e501edfea7ce1cec2fe2a2428aedfea1cc9c31747931e0d90d5c57b020" dependencies = [ "lazy_static", "rand 0.8.5", @@ -7740,9 +7736,9 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3e085a6adf81d51f678624934ffe266bd45a1c105849992b1af933c80bbf19" +checksum = "85085c0aa14ebb8e26219386fb7f4348d159f5a67858c2fdefef3cc5f4ce090c" dependencies = [ "async-trait", "solana-connection-cache", @@ -7756,9 +7752,9 @@ dependencies = [ [[package]] name = "solana-unified-scheduler-logic" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc4e998f9185355afcd5119c8b3715f00ac836460faedceac6a73840fc2621d" +checksum = "fe7e48cbf4e70c05199f50d5f14aafc58331ad39229747c795320bcb362ed063" dependencies = [ "assert_matches", "solana-pubkey", @@ -7775,23 +7771,23 @@ checksum = "7bbf6d7a3c0b28dd5335c52c0e9eae49d0ae489a8f324917faf0ded65a812c1d" [[package]] name = "solana-version" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a58e01912dc3d5ff4391fe49476461b3b9ebc4215f3713d2fe3ffcfeda7f8e2" +checksum = "4f60a01e2721bfd2e094b465440ae461d75acd363e9653565a73d2c586becb3b" dependencies = [ - "agave-feature-set", "semver", "serde", "serde_derive", + "solana-feature-set", "solana-sanitize", "solana-serde-varint", ] [[package]] name = "solana-vote" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f696980f793a5d7019d9da049bb9f18f109fcc14d9f7db568064f0ed5158273" +checksum = "b6cfd22290c8e63582acd8d8d10670f4de2f81a967b5e9821e2988b4a4d58c54" dependencies = [ "itertools 0.12.1", "log", @@ -7814,9 +7810,9 @@ dependencies = [ [[package]] name = "solana-vote-interface" -version = "2.2.3" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b630547b7f12ee742e1c5069951fedba0fe5cbd4786f6342a779384e2b11f71" +checksum = "d4507bb9d071fb81cfcf676f12fba3db4098f764524ef0b5567d671a81d41f3e" dependencies = [ "bincode", "num-derive", @@ -7838,11 +7834,10 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27cb01906f935beee9d64a6a7881a583b55c8ffe4f767b9b19b687a68cd7cf47" +checksum = "ab654bb2622d85b2ca0c36cb89c99fa1286268e0d784efec03a3d42e9c6a55f4" dependencies = [ - "agave-feature-set", "bincode", "log", "num-derive", @@ -7853,9 +7848,11 @@ dependencies = [ "solana-bincode", "solana-clock", "solana-epoch-schedule", + "solana-feature-set", "solana-hash", "solana-instruction", "solana-keypair", + "solana-metrics", "solana-packet", "solana-program-runtime", "solana-pubkey", @@ -7871,9 +7868,9 @@ dependencies = [ [[package]] name = "solana-zk-elgamal-proof-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d352601fa721288f0a3a2b48c930aa6badb83c95cab47b5b14015a2915f04995" +checksum = "4d241af6328b3e0e20695bb705c850119ec5881b386c338783b8c8bc79e76c65" dependencies = [ "bytemuck", "num-derive", @@ -7887,9 +7884,9 @@ dependencies = [ [[package]] name = "solana-zk-sdk" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a153bff0be31a58dacd7f40bc37fc80f5bb7cb3f38fb62e7a2777a8b48de25" +checksum = "d8318220b73552a2765c6545a4be04fc87fe21b6dd0cb8c2b545a66121bf5b8a" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -7924,14 +7921,14 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4086b331151047f6be5c71210e6690f3a4de222ccf43c90ec715ea60e860189" +checksum = "123b7c7d2f9e68190630b216781ca832af0ed78b69acd89a2ad2766cc460c312" dependencies = [ - "agave-feature-set", "bytemuck", "num-derive", "num-traits", + "solana-feature-set", "solana-instruction", "solana-log-collector", "solana-program-runtime", @@ -7941,9 +7938,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "2.2.7" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06d91b7c7651e776b848b67b6b58f032566be4cd554e6f6283bdf415e3a70b61" +checksum = "b3cf301f8d8e02ef58fc2ce85868f5c760720e1ce74ee4b3c3dcb64c8da7bcff" dependencies = [ "aes-gcm-siv", "base64 0.22.1", @@ -8030,7 +8027,7 @@ checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", "spl-discriminator-syn", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8042,7 +8039,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.101", + "syn 2.0.102", "thiserror 1.0.69", ] @@ -8115,7 +8112,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8422,9 +8419,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "f6397daf94fa90f058bd0fd88429dd9e5738999cca8d701813c80723add80462" dependencies = [ "proc-macro2", "quote", @@ -8466,7 +8463,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8626,7 +8623,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8637,7 +8634,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8732,7 +8729,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -8846,9 +8843,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", @@ -8858,18 +8855,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.26" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.9.0", "serde", @@ -8881,9 +8878,9 @@ dependencies = [ [[package]] name = "toml_write" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" @@ -8944,20 +8941,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -9040,9 +9037,9 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "unicode-xid" @@ -9171,9 +9168,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" @@ -9206,7 +9203,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", "wasm-bindgen-shared", ] @@ -9241,7 +9238,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9359,7 +9356,7 @@ dependencies = [ "windows-interface", "windows-link", "windows-result", - "windows-strings 0.4.2", + "windows-strings", ] [[package]] @@ -9370,7 +9367,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -9381,7 +9378,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -9392,13 +9389,13 @@ checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" dependencies = [ + "windows-link", "windows-result", - "windows-strings 0.3.1", - "windows-targets 0.53.0", + "windows-strings", ] [[package]] @@ -9410,15 +9407,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" -dependencies = [ - "windows-link", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -9503,29 +9491,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -9544,12 +9516,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -9568,12 +9534,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -9592,24 +9552,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -9628,12 +9576,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -9652,12 +9594,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -9676,12 +9612,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -9700,17 +9630,11 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "winnow" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" dependencies = [ "memchr", ] @@ -9797,7 +9721,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", "synstructure 0.13.2", ] @@ -9818,7 +9742,7 @@ checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -9838,7 +9762,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", "synstructure 0.13.2", ] @@ -9859,7 +9783,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] @@ -9892,7 +9816,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.102", ] [[package]] diff --git a/program/Cargo.toml b/program/Cargo.toml index 17d7274..cb9189f 100644 --- a/program/Cargo.toml +++ b/program/Cargo.toml @@ -15,22 +15,23 @@ cpi = [] default = ["cpi"] [dependencies] -solana-program = "2.2.1" -light-compressed-account = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba", features = ["anchor"] } -light-compressed-token-sdk = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba", features = ["anchor"] } +solana-program = "=2.2.1" +light-compressed-account = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6" } +light-compressed-token-sdk = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6" } thiserror = "2.0.11" borsh = "0.10.0" +light-sdk = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6" } + [dev-dependencies] -solana-sdk = "2.2.1" -light-compressed-token = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba" } -light-compressed-token-client = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba" } -light-program-test = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba", features = ["v2"] } -solana-program-test = "2.2.1" -light-client = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba", features = ["v2"] } +solana-sdk = "=2.2.1" +light-compressed-token = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6" } +light-compressed-token-client = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6" } +light-program-test = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6", features = ["v2"] } +solana-program-test = "=2.2.1" +light-client = { git = "https://github.com/lightprotocol/light-protocol", rev = "52437b6f281225b8546b2671ccc6dae2b3d5f0b6", features = ["v2"] } spl-token = "5.0.0" -light-sdk = { git = "https://github.com/lightprotocol/light-protocol", rev = "128b191ba" } [lib] crate-type = ["cdylib", "lib"] diff --git a/program/src/check_pda.rs b/program/src/check_pda.rs new file mode 100644 index 0000000..8d29fe5 --- /dev/null +++ b/program/src/check_pda.rs @@ -0,0 +1,22 @@ +use crate::error::ClaimError; +use solana_program::{msg, program_error::ProgramError, pubkey::Pubkey}; + +pub fn check_claim_pda( + seeds: &[&[u8]], + claim_program: &Pubkey, + airdrop_account: &Pubkey, +) -> Result<(), ProgramError> { + let derived_pda = + Pubkey::create_program_address(seeds, claim_program).expect("Invalid PDA seeds."); + + if derived_pda != *airdrop_account { + msg!( + "Invalid airdrop PDA provided. Expected: {}. Found: {}.", + derived_pda, + airdrop_account + ); + return Err(ClaimError::InvalidPDA.into()); + } + + Ok(()) +} diff --git a/program/src/constants.rs b/program/src/constants.rs new file mode 100644 index 0000000..e4448bf --- /dev/null +++ b/program/src/constants.rs @@ -0,0 +1,3 @@ +use solana_program::{pubkey, pubkey::Pubkey}; + +pub const CTOKEN_PROGRAM_ID: Pubkey = pubkey!("cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m"); diff --git a/program/src/instruction.rs b/program/src/instruction.rs index df0cda2..f8d1526 100644 --- a/program/src/instruction.rs +++ b/program/src/instruction.rs @@ -3,11 +3,18 @@ use light_compressed_account::compressed_account::PackedMerkleContext; use light_compressed_account::instruction_data::compressed_proof::CompressedProof; use solana_program::pubkey::Pubkey; -#[cfg(not(target_os = "solana"))] -use solana_program::instruction::{AccountMeta, Instruction}; - #[derive(BorshSerialize, BorshDeserialize, Debug, Clone)] pub enum ClaimProgramInstruction { + ClaimAndDecompress { + proof: Option, + root_index: u16, + merkle_context: PackedMerkleContext, + amount: u64, + lamports: Option, + mint: Pubkey, + unlock_slot: u64, + bump_seed: u8, + }, Claim { proof: Option, root_index: u16, @@ -21,132 +28,83 @@ pub enum ClaimProgramInstruction { } #[cfg(not(target_os = "solana"))] -#[derive(Debug)] -pub struct ClaimAccounts { - pub claimant: Pubkey, - pub fee_payer: Pubkey, - pub associated_airdrop_pda: Pubkey, - pub ctoken_cpi_authority_pda: Pubkey, - pub light_system_program: Pubkey, - pub registered_program_pda: Pubkey, - pub noop_program: Pubkey, - pub account_compression_authority: Pubkey, - pub account_compression_program: Pubkey, - pub ctoken_program: Pubkey, - pub token_pool_pda: Pubkey, - pub decompress_destination: Pubkey, - pub token_program: Pubkey, - pub system_program: Pubkey, - pub state_tree: Pubkey, - pub queue: Pubkey, -} - -/// Build a claim instruction in the client. -/// -/// Accounts expected by this instruction: -/// -/// 0. `[signer]` Claimant -/// 1. `[signer]` Fee payer -/// 2. `[]` Associated airdrop PDA -/// 3. `[]` CToken CPI authority PDA -/// 4. `[]` Light system program -/// 5. `[]` Registered program PDA -/// 6. `[]` Noop program -/// 7. `[]` Account compression authority -/// 8. `[]` Account compression program -/// 9. `[]` CToken program -/// 10. `[]` Token pool PDA -/// 11. `[writable]` Decompress destination -/// 12. `[]` Token program -/// 13. `[]` System program -/// 14. `[writable]` State tree -/// 15. `[writable]` Queue -#[cfg(not(target_os = "solana"))] -#[allow(clippy::too_many_arguments)] -pub fn build_claim_and_decompress_instruction( - accounts: &ClaimAccounts, - proof: Option, - root_index: u16, - merkle_context: PackedMerkleContext, - amount: u64, - lamports: Option, - mint: Pubkey, - unlock_slot: u64, - bump_seed: u8, -) -> Instruction { - let accounts = vec![ - AccountMeta::new(accounts.claimant, true), - AccountMeta::new(accounts.fee_payer, true), - AccountMeta::new_readonly(accounts.associated_airdrop_pda, false), - AccountMeta::new_readonly(accounts.ctoken_cpi_authority_pda, false), - AccountMeta::new_readonly(accounts.light_system_program, false), - AccountMeta::new_readonly(accounts.registered_program_pda, false), - AccountMeta::new_readonly(accounts.noop_program, false), - AccountMeta::new_readonly(accounts.account_compression_authority, false), - AccountMeta::new_readonly(accounts.account_compression_program, false), - AccountMeta::new_readonly(accounts.ctoken_program, false), - AccountMeta::new(accounts.token_pool_pda, false), - AccountMeta::new(accounts.decompress_destination, false), - AccountMeta::new_readonly(accounts.token_program, false), - AccountMeta::new_readonly(accounts.system_program, false), - AccountMeta::new(accounts.state_tree, false), - AccountMeta::new(accounts.queue, false), - ]; - - let instruction_data = ClaimProgramInstruction::Claim { - proof, - root_index, - merkle_context, - amount, - lamports, - mint, - unlock_slot, - bump_seed, - }; - - Instruction { - program_id: crate::id(), - accounts, - data: borsh::to_vec(&instruction_data).unwrap(), - } -} - -#[cfg(test)] -mod tests { +pub mod client { use super::*; + use solana_program::instruction::{AccountMeta, Instruction}; + #[derive(Debug)] + pub struct ClaimAccounts { + pub claimant: Pubkey, + pub fee_payer: Pubkey, + pub associated_airdrop_pda: Pubkey, + pub ctoken_cpi_authority_pda: Pubkey, + pub light_system_program: Pubkey, + pub registered_program_pda: Pubkey, + pub noop_program: Pubkey, + pub account_compression_authority: Pubkey, + pub account_compression_program: Pubkey, + pub ctoken_program: Pubkey, + pub token_pool_pda: Pubkey, + pub decompress_destination: Pubkey, + pub token_program: Pubkey, + pub system_program: Pubkey, + pub state_tree: Pubkey, + pub queue: Pubkey, + } - #[test] - fn test_build_claim() { - let accounts = ClaimAccounts { - claimant: Pubkey::new_unique(), - fee_payer: Pubkey::new_unique(), - associated_airdrop_pda: Pubkey::new_unique(), - ctoken_cpi_authority_pda: Pubkey::new_unique(), - light_system_program: Pubkey::new_unique(), - registered_program_pda: Pubkey::new_unique(), - noop_program: Pubkey::new_unique(), - account_compression_authority: Pubkey::new_unique(), - account_compression_program: Pubkey::new_unique(), - ctoken_program: Pubkey::new_unique(), - token_pool_pda: Pubkey::new_unique(), - decompress_destination: Pubkey::new_unique(), - token_program: Pubkey::new_unique(), - system_program: Pubkey::new_unique(), - state_tree: Pubkey::new_unique(), - queue: Pubkey::new_unique(), - }; - - let mint = Pubkey::new_unique(); - let root_index = 42; - let merkle_context = PackedMerkleContext::default(); - let amount = 1000; - let lamports = Some(1000); - let unlock_slot = 12345; - let bump_seed = 1; + /// Build a claim instruction in the client. + /// + /// Accounts expected by this instruction: + /// + /// 0. `[signer]` Claimant + /// 1. `[signer]` Fee payer + /// 2. `[]` Associated airdrop PDA + /// 3. `[]` CToken CPI authority PDA + /// 4. `[]` Light system program + /// 5. `[]` Registered program PDA + /// 6. `[]` Noop program + /// 7. `[]` Account compression authority + /// 8. `[]` Account compression program + /// 9. `[]` CToken program + /// 10. `[]` Token pool PDA + /// 11. `[writable]` Decompress destination + /// 12. `[]` Token program + /// 13. `[]` System program + /// 14. `[writable]` State tree + /// 15. `[writable]` Queue + #[cfg(not(target_os = "solana"))] + #[allow(clippy::too_many_arguments)] + pub fn build_claim_and_decompress_instruction( + accounts: &ClaimAccounts, + proof: Option, + root_index: u16, + merkle_context: PackedMerkleContext, + amount: u64, + lamports: Option, + mint: Pubkey, + unlock_slot: u64, + bump_seed: u8, + ) -> Instruction { + let accounts = vec![ + AccountMeta::new(accounts.claimant, true), + AccountMeta::new(accounts.fee_payer, true), + AccountMeta::new_readonly(accounts.associated_airdrop_pda, false), + AccountMeta::new_readonly(accounts.ctoken_cpi_authority_pda, false), + AccountMeta::new_readonly(accounts.light_system_program, false), + AccountMeta::new_readonly(accounts.registered_program_pda, false), + AccountMeta::new_readonly(accounts.noop_program, false), + AccountMeta::new_readonly(accounts.account_compression_authority, false), + AccountMeta::new_readonly(accounts.account_compression_program, false), + AccountMeta::new_readonly(accounts.ctoken_program, false), + AccountMeta::new(accounts.token_pool_pda, false), + AccountMeta::new(accounts.decompress_destination, false), + AccountMeta::new_readonly(accounts.token_program, false), + AccountMeta::new_readonly(accounts.system_program, false), + AccountMeta::new(accounts.state_tree, false), + AccountMeta::new(accounts.queue, false), + ]; - let instruction = build_claim_and_decompress_instruction( - &accounts, - None, + let instruction_data = ClaimProgramInstruction::ClaimAndDecompress { + proof, root_index, merkle_context, amount, @@ -154,36 +112,107 @@ mod tests { mint, unlock_slot, bump_seed, - ); + }; + + Instruction { + program_id: crate::id(), + accounts, + data: borsh::to_vec(&instruction_data).unwrap(), + } + } + + #[cfg(test)] + mod tests { + use super::*; + + #[test] + fn test_build_claim() { + let accounts = ClaimAccounts { + claimant: Pubkey::new_unique(), + fee_payer: Pubkey::new_unique(), + associated_airdrop_pda: Pubkey::new_unique(), + ctoken_cpi_authority_pda: Pubkey::new_unique(), + light_system_program: Pubkey::new_unique(), + registered_program_pda: Pubkey::new_unique(), + noop_program: Pubkey::new_unique(), + account_compression_authority: Pubkey::new_unique(), + account_compression_program: Pubkey::new_unique(), + ctoken_program: Pubkey::new_unique(), + token_pool_pda: Pubkey::new_unique(), + decompress_destination: Pubkey::new_unique(), + token_program: Pubkey::new_unique(), + system_program: Pubkey::new_unique(), + state_tree: Pubkey::new_unique(), + queue: Pubkey::new_unique(), + }; + + let mint = Pubkey::new_unique(); + let root_index = 42; + let merkle_context = PackedMerkleContext::default(); + let amount = 1000; + let lamports = Some(1000); + let unlock_slot = 12345; + let bump_seed = 1; + + let instruction = build_claim_and_decompress_instruction( + &accounts, + None, + root_index, + merkle_context, + amount, + lamports, + mint, + unlock_slot, + bump_seed, + ); - assert_eq!(instruction.accounts.len(), 16); - assert_eq!(instruction.accounts[0].pubkey, accounts.claimant); - assert!(instruction.accounts[0].is_signer); - assert_eq!(instruction.accounts[1].pubkey, accounts.fee_payer); - assert!(instruction.accounts[1].is_signer); - assert!(!instruction.accounts[2].is_signer); + assert_eq!(instruction.accounts.len(), 16); + assert_eq!(instruction.accounts[0].pubkey, accounts.claimant); + assert!(instruction.accounts[0].is_signer); + assert_eq!(instruction.accounts[1].pubkey, accounts.fee_payer); + assert!(instruction.accounts[1].is_signer); + assert!(!instruction.accounts[2].is_signer); - // Verify instruction can be deserialized - let deserialized: ClaimProgramInstruction = - ClaimProgramInstruction::try_from_slice(&instruction.data).unwrap(); - match deserialized { - ClaimProgramInstruction::Claim { - amount: _amount, - lamports: _lamports, - mint: _mint, - root_index: _root_index, - merkle_context: _merkle_context, - unlock_slot: _unlock_slot, - bump_seed: _bump_seed, - .. - } => { - assert_eq!(amount, _amount); - assert_eq!(lamports, _lamports); - assert_eq!(mint, _mint); - assert_eq!(root_index, _root_index); - assert_eq!(merkle_context, _merkle_context); - assert_eq!(unlock_slot, _unlock_slot); - assert_eq!(bump_seed, _bump_seed); + // Verify instruction can be deserialized + let deserialized: ClaimProgramInstruction = + ClaimProgramInstruction::try_from_slice(&instruction.data).unwrap(); + match deserialized { + ClaimProgramInstruction::ClaimAndDecompress { + amount: _amount, + lamports: _lamports, + mint: _mint, + root_index: _root_index, + merkle_context: _merkle_context, + unlock_slot: _unlock_slot, + bump_seed: _bump_seed, + .. + } => { + assert_eq!(amount, _amount); + assert_eq!(lamports, _lamports); + assert_eq!(mint, _mint); + assert_eq!(root_index, _root_index); + assert_eq!(merkle_context, _merkle_context); + assert_eq!(unlock_slot, _unlock_slot); + assert_eq!(bump_seed, _bump_seed); + } + ClaimProgramInstruction::Claim { + amount: _amount, + lamports: _lamports, + mint: _mint, + root_index: _root_index, + merkle_context: _merkle_context, + unlock_slot: _unlock_slot, + bump_seed: _bump_seed, + .. + } => { + assert_eq!(amount, _amount); + assert_eq!(lamports, _lamports); + assert_eq!(mint, _mint); + assert_eq!(root_index, _root_index); + assert_eq!(merkle_context, _merkle_context); + assert_eq!(unlock_slot, _unlock_slot); + assert_eq!(bump_seed, _bump_seed); + } } } } diff --git a/program/src/instructions/claim.rs b/program/src/instructions/claim.rs new file mode 100644 index 0000000..535f34b --- /dev/null +++ b/program/src/instructions/claim.rs @@ -0,0 +1,202 @@ +use crate::{check_pda::check_claim_pda, constants::CTOKEN_PROGRAM_ID, error::ClaimError}; +use light_compressed_account::{ + compressed_account::PackedMerkleContext, instruction_data::compressed_proof::CompressedProof, +}; +use light_compressed_token_sdk::{ + cpi::{ + self, account_info::get_compressed_token_account_info, + accounts::CompressedTokenDecompressCpiAccounts, + }, + state::InputTokenDataWithContext, +}; +use solana_program::{ + account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, + program::invoke_signed, program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, +}; + +// TODO: move to light-compressed-token-sdk +// TODO: deal with queue and tree separately (needs dynamic) +/// Number of accounts required for compressed token CPI +const CTOKEN_CPI_ACCOUNT_COUNT: usize = 15; + +/// Extract compressed token CPI accounts from instruction accounts +/// +/// # Arguments +/// * `accounts` - The instruction accounts array +/// * `start_index` - Index where CPI accounts begin +/// +/// # Returns +/// * Tuple of (CPI accounts struct, remaining accounts slice) +/// +/// # Example +/// ```ignore +/// let (cpi_accounts, remaining) = get_cpi_accounts!(accounts, 1)?; +/// ``` +macro_rules! get_cpi_accounts { + ($accounts:expr, $start_index:expr) => {{ + let accounts = $accounts; + let start_idx = $start_index; + let end_idx = start_idx + CTOKEN_CPI_ACCOUNT_COUNT; + + if accounts.len() < end_idx { + msg!( + "Not enough accounts for CPI: expected at least {}, got {}", + end_idx, + accounts.len() + ); + Err(ProgramError::NotEnoughAccountKeys) + } else { + let cpi_accounts = CompressedTokenDecompressCpiAccounts { + fee_payer: accounts[start_idx].clone(), + authority: accounts[start_idx + 1].clone(), + cpi_authority_pda: accounts[start_idx + 2].clone(), + light_system_program: accounts[start_idx + 3].clone(), + registered_program_pda: accounts[start_idx + 4].clone(), + noop_program: accounts[start_idx + 5].clone(), + account_compression_authority: accounts[start_idx + 6].clone(), + account_compression_program: accounts[start_idx + 7].clone(), + self_program: accounts[start_idx + 8].clone(), + token_pool_pda: accounts[start_idx + 9].clone(), + decompress_destination: accounts[start_idx + 10].clone(), + token_program: accounts[start_idx + 11].clone(), + system_program: accounts[start_idx + 12].clone(), + state_merkle_tree: accounts[start_idx + 13].clone(), + queue: accounts[start_idx + 14].clone(), + }; + + let remaining = &accounts[end_idx..]; + Ok::<_, ProgramError>((cpi_accounts, remaining)) + } + }}; +} + +/// Helper trait to convert CPI accounts to array for invoke_signed +trait ToAccountInfos<'a> { + fn to_account_infos(&self) -> [AccountInfo<'a>; CTOKEN_CPI_ACCOUNT_COUNT]; +} + +impl<'a> ToAccountInfos<'a> for CompressedTokenDecompressCpiAccounts<'a> { + fn to_account_infos(&self) -> [AccountInfo<'a>; CTOKEN_CPI_ACCOUNT_COUNT] { + [ + self.fee_payer.clone(), + self.authority.clone(), + self.cpi_authority_pda.clone(), + self.light_system_program.clone(), + self.registered_program_pda.clone(), + self.noop_program.clone(), + self.account_compression_authority.clone(), + self.account_compression_program.clone(), + self.self_program.clone(), + self.token_pool_pda.clone(), + self.decompress_destination.clone(), + self.token_program.clone(), + self.system_program.clone(), + self.state_merkle_tree.clone(), + self.queue.clone(), + ] + } +} + +#[allow(clippy::too_many_arguments)] +pub fn process_claim( + program_id: &Pubkey, + accounts: &[AccountInfo], + proof: Option, + root_index: u16, + merkle_context: PackedMerkleContext, + amount: u64, + lamports: Option, + mint: Pubkey, + unlock_slot: u64, + bump_seed: u8, +) -> ProgramResult { + let claimant_info = &accounts[0]; + + let (light_cpi_accounts, _remaining) = get_cpi_accounts!(accounts, 1)?; + + // CHECK: + if !claimant_info.is_signer { + msg!("Claimant must be a signer"); + claimant_info.key.log(); + return Err(ProgramError::MissingRequiredSignature); + } + // CHECK: + if !light_cpi_accounts.fee_payer.is_signer { + msg!("Fee payer must be a signer"); + light_cpi_accounts.fee_payer.key.log(); + return Err(ProgramError::MissingRequiredSignature); + } + // CHECK: + if light_cpi_accounts.self_program.key != &CTOKEN_PROGRAM_ID { + msg!("Invalid compressed token program.",); + light_cpi_accounts.self_program.key.log(); + return Err(ProgramError::InvalidArgument); + } + + let ctoken_account = + get_compressed_token_account_info(merkle_context, root_index, amount, lamports); + + // CHECK: + let current_slot = Clock::get()?.slot; + if current_slot < unlock_slot { + msg!( + "Tokens are still locked: current slot ({}) is less than unlock slot ({}).", + current_slot, + unlock_slot + ); + return Err(ClaimError::TokensLocked.into()); + } + + check_pda_and_claim_token( + program_id, + light_cpi_accounts, + ctoken_account, + &proof, + claimant_info.clone(), + mint, + unlock_slot, + bump_seed, + ) +} + +#[allow(clippy::too_many_arguments)] +fn check_pda_and_claim_token( + claim_program: &Pubkey, + light_cpi_accounts: CompressedTokenDecompressCpiAccounts, + compressed_token_account: InputTokenDataWithContext, + proof: &Option, + claimant: AccountInfo<'_>, + mint: Pubkey, + slot: u64, + bump_seed: u8, +) -> ProgramResult { + let claimant_bytes = claimant.key.to_bytes(); + let slot_bytes = slot.to_le_bytes(); + let mint_bytes = mint.to_bytes(); + + let seeds = &[ + &claimant_bytes[..32], + &mint_bytes[..32], + &slot_bytes[..8], + &[bump_seed], + ]; + + check_claim_pda(seeds, claim_program, light_cpi_accounts.authority.key)?; + + // TODO: replace with transfer cpi. (decompress_destination -> new owner) + let instruction = cpi::instruction::decompress( + &mint, + vec![compressed_token_account], + proof, + &light_cpi_accounts, + None, + )?; + + let signers_seeds: &[&[&[u8]]] = &[&seeds[..]]; + invoke_signed( + &instruction, + &light_cpi_accounts.to_account_infos()[..], + signers_seeds, + )?; + Ok(()) +} diff --git a/program/src/instructions/claim_and_decompress.rs b/program/src/instructions/claim_and_decompress.rs new file mode 100644 index 0000000..9c1a5ca --- /dev/null +++ b/program/src/instructions/claim_and_decompress.rs @@ -0,0 +1,169 @@ +use crate::{check_pda::check_claim_pda, constants::CTOKEN_PROGRAM_ID, error::ClaimError}; +use light_compressed_account::{ + compressed_account::PackedMerkleContext, instruction_data::compressed_proof::CompressedProof, +}; +use light_compressed_token_sdk::{ + cpi::{ + self, account_info::get_compressed_token_account_info, + accounts::CompressedTokenDecompressCpiAccounts, + }, + state::InputTokenDataWithContext, +}; +use solana_program::{ + account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, + program::invoke_signed, program_error::ProgramError, pubkey::Pubkey, sysvar::Sysvar, +}; + +#[allow(clippy::too_many_arguments)] +pub fn process_claim_and_decompress( + program_id: &Pubkey, + accounts: &[AccountInfo], + proof: Option, + root_index: u16, + merkle_context: PackedMerkleContext, + amount: u64, + lamports: Option, + mint: Pubkey, + unlock_slot: u64, + bump_seed: u8, +) -> ProgramResult { + let claimant_info = &accounts[0]; + let fee_payer_info = &accounts[1]; + let associated_airdrop_pda_info = &accounts[2]; + let ctoken_cpi_authority_pda_info = &accounts[3]; + let light_system_program_info = &accounts[4]; + let registered_program_pda_info = &accounts[5]; + let noop_program_info = &accounts[6]; + let account_compression_authority_info = &accounts[7]; + let account_compression_program_info = &accounts[8]; + let ctoken_program_info = &accounts[9]; + let token_pool_pda_info = &accounts[10]; + let decompress_destination_info = &accounts[11]; + let token_program_info = &accounts[12]; + let system_program_info = &accounts[13]; + let state_tree_info = &accounts[14]; + let queue_info = &accounts[15]; + + if accounts.len() != 16 { + msg!("Expected 16 accounts, got {}", accounts.len()); + return Err(ProgramError::NotEnoughAccountKeys); + } + + // CHECK: + if !claimant_info.is_signer { + msg!("Claimant must be a signer"); + claimant_info.key.log(); + return Err(ProgramError::MissingRequiredSignature); + } + // CHECK: + if !fee_payer_info.is_signer { + msg!("Fee payer must be a signer"); + fee_payer_info.key.log(); + return Err(ProgramError::MissingRequiredSignature); + } + // CHECK: + if ctoken_program_info.key != &CTOKEN_PROGRAM_ID { + msg!("Invalid compressed token program.",); + ctoken_program_info.key.log(); + return Err(ProgramError::InvalidArgument); + } + + let ctoken_account = + get_compressed_token_account_info(merkle_context, root_index, amount, lamports); + + // CHECK: + let current_slot = Clock::get()?.slot; + if current_slot < unlock_slot { + msg!( + "Tokens are still locked: current slot ({}) is less than unlock slot ({}).", + current_slot, + unlock_slot + ); + return Err(ClaimError::TokensLocked.into()); + } + + let light_cpi_accounts = CompressedTokenDecompressCpiAccounts { + fee_payer: fee_payer_info.clone(), + authority: associated_airdrop_pda_info.clone(), + cpi_authority_pda: ctoken_cpi_authority_pda_info.clone(), + light_system_program: light_system_program_info.clone(), + registered_program_pda: registered_program_pda_info.clone(), + noop_program: noop_program_info.clone(), + account_compression_authority: account_compression_authority_info.clone(), + account_compression_program: account_compression_program_info.clone(), + self_program: ctoken_program_info.clone(), + token_pool_pda: token_pool_pda_info.clone(), + decompress_destination: decompress_destination_info.clone(), + token_program: token_program_info.clone(), + system_program: system_program_info.clone(), + state_merkle_tree: state_tree_info.clone(), + queue: queue_info.clone(), + }; + check_pda_and_decompress_token( + program_id, + light_cpi_accounts, + ctoken_account, + &proof, + claimant_info.clone(), + mint, + unlock_slot, + bump_seed, + ) +} + +#[allow(clippy::too_many_arguments)] +fn check_pda_and_decompress_token( + claim_program: &Pubkey, + light_cpi_accounts: CompressedTokenDecompressCpiAccounts, + compressed_token_account: InputTokenDataWithContext, + proof: &Option, + claimant: AccountInfo<'_>, + mint: Pubkey, + slot: u64, + bump_seed: u8, +) -> ProgramResult { + let claimant_bytes = claimant.key.to_bytes(); + let slot_bytes = slot.to_le_bytes(); + let mint_bytes = mint.to_bytes(); + + let seeds = &[ + &claimant_bytes[..32], + &mint_bytes[..32], + &slot_bytes[..8], + &[bump_seed], + ]; + + check_claim_pda(seeds, claim_program, light_cpi_accounts.authority.key)?; + + let instruction = cpi::instruction::decompress( + &mint, + vec![compressed_token_account], + proof, + &light_cpi_accounts, + None, + )?; + + let signers_seeds: &[&[&[u8]]] = &[&seeds[..]]; + invoke_signed( + &instruction, + &[ + light_cpi_accounts.fee_payer, + light_cpi_accounts.authority, + light_cpi_accounts.cpi_authority_pda, + light_cpi_accounts.light_system_program, + light_cpi_accounts.registered_program_pda, + light_cpi_accounts.noop_program, + light_cpi_accounts.account_compression_authority, + light_cpi_accounts.account_compression_program, + light_cpi_accounts.self_program, + light_cpi_accounts.token_pool_pda, + light_cpi_accounts.decompress_destination, + light_cpi_accounts.token_program, + light_cpi_accounts.system_program, + light_cpi_accounts.state_merkle_tree, + light_cpi_accounts.queue, + ][..], + signers_seeds, + )?; + Ok(()) +} diff --git a/program/src/instructions/mod.rs b/program/src/instructions/mod.rs new file mode 100644 index 0000000..96b8320 --- /dev/null +++ b/program/src/instructions/mod.rs @@ -0,0 +1,2 @@ +pub mod claim; +pub mod claim_and_decompress; diff --git a/program/src/lib.rs b/program/src/lib.rs index 620d549..0d86951 100644 --- a/program/src/lib.rs +++ b/program/src/lib.rs @@ -14,9 +14,16 @@ pub fn process_instruction( crate::processor::process_instruction(program_id, accounts, instruction_data) } +solana_program::declare_id!("7UHB3CfWv7SugNhfdyP7aeZJPMjnpd9zJ7xYkHozB3Na"); + +mod check_pda; +mod constants; mod error; pub mod instruction; +mod instructions; pub mod processor; -pub use solana_program; -solana_program::declare_id!("7UHB3CfWv7SugNhfdyP7aeZJPMjnpd9zJ7xYkHozB3Na"); +#[cfg(not(target_os = "solana"))] +pub use instruction::client; + +pub use solana_program; diff --git a/program/src/processor.rs b/program/src/processor.rs index 1194028..335e381 100644 --- a/program/src/processor.rs +++ b/program/src/processor.rs @@ -1,22 +1,13 @@ -use crate::{error::ClaimError, instruction::ClaimProgramInstruction}; -use borsh::BorshDeserialize; -use light_compressed_account::{ - compressed_account::PackedMerkleContext, instruction_data::compressed_proof::CompressedProof, -}; -use light_compressed_token_sdk::{ - cpi::{ - self, account_info::get_compressed_token_account_info, - accounts::CompressedTokenDecompressCpiAccounts, - }, - state::InputTokenDataWithContext, +use crate::{ + instruction::ClaimProgramInstruction, + instructions::{claim::process_claim, claim_and_decompress::process_claim_and_decompress}, }; +use borsh::BorshDeserialize; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, msg, - program::invoke_signed, program_error::ProgramError, pubkey, pubkey::Pubkey, sysvar::Sysvar, + account_info::AccountInfo, entrypoint::ProgramResult, program_error::ProgramError, + pubkey::Pubkey, }; -const CTOKEN_PROGRAM_ID: Pubkey = pubkey!("cTokenmWW8bLPjZEBAUgYy3zKxQZW6VKi7bqNFEVv3m"); - pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], @@ -25,6 +16,27 @@ pub fn process_instruction( let instruction = ClaimProgramInstruction::try_from_slice(instruction_data) .map_err(|_| ProgramError::InvalidInstructionData)?; match instruction { + ClaimProgramInstruction::ClaimAndDecompress { + proof, + root_index, + merkle_context, + amount, + lamports, + mint, + unlock_slot, + bump_seed, + } => process_claim_and_decompress( + program_id, + accounts, + proof, + root_index, + merkle_context, + amount, + lamports, + mint, + unlock_slot, + bump_seed, + ), ClaimProgramInstruction::Claim { proof, root_index, @@ -48,177 +60,3 @@ pub fn process_instruction( ), } } - -#[allow(clippy::too_many_arguments)] -fn process_claim( - program_id: &Pubkey, - accounts: &[AccountInfo], - proof: Option, - root_index: u16, - merkle_context: PackedMerkleContext, - amount: u64, - lamports: Option, - mint: Pubkey, - unlock_slot: u64, - bump_seed: u8, -) -> ProgramResult { - let claimant_info = &accounts[0]; - let fee_payer_info = &accounts[1]; - let associated_airdrop_pda_info = &accounts[2]; - let ctoken_cpi_authority_pda_info = &accounts[3]; - let light_system_program_info = &accounts[4]; - let registered_program_pda_info = &accounts[5]; - let noop_program_info = &accounts[6]; - let account_compression_authority_info = &accounts[7]; - let account_compression_program_info = &accounts[8]; - let ctoken_program_info = &accounts[9]; - let token_pool_pda_info = &accounts[10]; - let decompress_destination_info = &accounts[11]; - let token_program_info = &accounts[12]; - let system_program_info = &accounts[13]; - let state_tree_info = &accounts[14]; - let queue_info = &accounts[15]; - - if accounts.len() != 16 { - msg!("Expected 16 accounts, got {}", accounts.len()); - return Err(ProgramError::NotEnoughAccountKeys); - } - - // CHECK: - if !claimant_info.is_signer { - msg!("Claimant must be a signer"); - claimant_info.key.log(); - return Err(ProgramError::MissingRequiredSignature); - } - // CHECK: - if !fee_payer_info.is_signer { - msg!("Fee payer must be a signer"); - fee_payer_info.key.log(); - return Err(ProgramError::MissingRequiredSignature); - } - // CHECK: - if ctoken_program_info.key != &CTOKEN_PROGRAM_ID { - msg!("Invalid compressed token program.",); - ctoken_program_info.key.log(); - return Err(ProgramError::InvalidArgument); - } - - let ctoken_account = - get_compressed_token_account_info(merkle_context, root_index, amount, lamports); - - // CHECK: - let current_slot = Clock::get()?.slot; - if current_slot < unlock_slot { - msg!( - "Tokens are still locked: current slot ({}) is less than unlock slot ({}).", - current_slot, - unlock_slot - ); - return Err(ClaimError::TokensLocked.into()); - } - - let light_cpi_accounts = CompressedTokenDecompressCpiAccounts { - fee_payer: fee_payer_info.clone(), - authority: associated_airdrop_pda_info.clone(), - cpi_authority_pda: ctoken_cpi_authority_pda_info.clone(), - light_system_program: light_system_program_info.clone(), - registered_program_pda: registered_program_pda_info.clone(), - noop_program: noop_program_info.clone(), - account_compression_authority: account_compression_authority_info.clone(), - account_compression_program: account_compression_program_info.clone(), - self_program: ctoken_program_info.clone(), - token_pool_pda: token_pool_pda_info.clone(), - decompress_destination: decompress_destination_info.clone(), - token_program: token_program_info.clone(), - system_program: system_program_info.clone(), - state_merkle_tree: state_tree_info.clone(), - queue: queue_info.clone(), - }; - check_pda_and_decompress_token( - program_id, - light_cpi_accounts, - ctoken_account, - &proof, - claimant_info.clone(), - mint, - unlock_slot, - bump_seed, - ) -} - -#[allow(clippy::too_many_arguments)] -fn check_pda_and_decompress_token( - claim_program: &Pubkey, - light_cpi_accounts: CompressedTokenDecompressCpiAccounts, - compressed_token_account: InputTokenDataWithContext, - proof: &Option, - claimant: AccountInfo<'_>, - mint: Pubkey, - slot: u64, - bump_seed: u8, -) -> ProgramResult { - let claimant_bytes = claimant.key.to_bytes(); - let slot_bytes = slot.to_le_bytes(); - let mint_bytes = mint.to_bytes(); - - let seeds = &[ - &claimant_bytes[..32], - &mint_bytes[..32], - &slot_bytes[..8], - &[bump_seed], - ]; - - check_claim_pda(seeds, claim_program, light_cpi_accounts.authority.key)?; - - let instruction = cpi::instruction::decompress( - &mint, - vec![compressed_token_account], - proof, - &light_cpi_accounts, - None, - )?; - - let signers_seeds: &[&[&[u8]]] = &[&seeds[..]]; - invoke_signed( - &instruction, - &[ - light_cpi_accounts.fee_payer, - light_cpi_accounts.authority, - light_cpi_accounts.cpi_authority_pda, - light_cpi_accounts.light_system_program, - light_cpi_accounts.registered_program_pda, - light_cpi_accounts.noop_program, - light_cpi_accounts.account_compression_authority, - light_cpi_accounts.account_compression_program, - light_cpi_accounts.self_program, - light_cpi_accounts.token_pool_pda, - light_cpi_accounts.decompress_destination, - light_cpi_accounts.token_program, - light_cpi_accounts.system_program, - light_cpi_accounts.state_merkle_tree, - light_cpi_accounts.queue, - ][..], - signers_seeds, - )?; - Ok(()) -} - -fn check_claim_pda( - seeds: &[&[u8]], - claim_program: &Pubkey, - airdrop_account: &Pubkey, -) -> Result<(), ProgramError> { - let derived_pda = - Pubkey::create_program_address(seeds, claim_program).expect("Invalid PDA seeds."); - - if derived_pda != *airdrop_account { - msg!( - "Invalid airdrop PDA provided. Expected: {}. Found: {}.", - derived_pda, - airdrop_account - ); - return Err(ClaimError::InvalidPDA.into()); - } - - Ok(()) -} diff --git a/program/tests/functional.rs b/program/tests/functional.rs index 93d69ed..2cbc57c 100644 --- a/program/tests/functional.rs +++ b/program/tests/functional.rs @@ -3,15 +3,13 @@ use light_client::indexer::GetCompressedTokenAccountsByOwnerOrDelegateOptions; use light_compressed_account::compressed_account::PackedMerkleContext; use light_compressed_account::constants::ACCOUNT_COMPRESSION_PROGRAM_ID; -use light_compressed_claim::instruction::{build_claim_and_decompress_instruction, ClaimAccounts}; +use light_compressed_claim::client::{build_claim_and_decompress_instruction, ClaimAccounts}; use light_compressed_token::mint_sdk::create_create_token_pool_instruction; use light_compressed_token_client::instructions::compress; use light_compressed_token_client::{get_token_pool_pda, LIGHT_SYSTEM_PROGRAM_ID}; use light_program_test::accounts::test_accounts::NOOP_PROGRAM_ID; use light_program_test::program_test::TestRpc; -use light_program_test::{ - program_test::LightProgramTest, Indexer, ProgramTestConfig, RpcConnection, -}; +use light_program_test::{program_test::LightProgramTest, Indexer, ProgramTestConfig, Rpc}; use solana_program_test::tokio; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, Signer}; @@ -133,12 +131,11 @@ async fn test_claim_and_decompress() { // SPL token account should be without the compressed tokens. let account_info = rpc - .context - .banks_client .get_account(token_account.pubkey()) .await + .unwrap() .unwrap(); - let account_data = Account::unpack(&account_info.unwrap().data).unwrap(); + let account_data = Account::unpack(&account_info.data).unwrap(); assert_eq!(account_data.amount, 10 - amount); // not yet unlocked. @@ -158,12 +155,11 @@ async fn test_claim_and_decompress() { .unwrap(); let account_info = rpc - .context - .banks_client .get_account(token_account.pubkey()) .await + .unwrap() .unwrap(); - let account_data = Account::unpack(&account_info.unwrap().data).unwrap(); + let account_data = Account::unpack(&account_info.data).unwrap(); assert_eq!(account_data.amount, 10); } @@ -194,8 +190,7 @@ pub async fn setup_spl_token_account(rpc: &mut LightProgramTest) -> (Keypair, Ke let mint_account = Keypair::new(); let owner = payer.insecure_clone(); let token_program = &id(); - let rent = rpc.context.banks_client.get_rent().await.unwrap(); - let mint_rent = rent.minimum_balance(Mint::LEN); + let mint_rent = rpc.context.minimum_balance_for_rent_exemption(Mint::LEN); let token_mint_a_account_ix = solana_program::system_instruction::create_account( &payer.pubkey(), @@ -224,7 +219,7 @@ pub async fn setup_spl_token_account(rpc: &mut LightProgramTest) -> (Keypair, Ke .unwrap(); // Create account that can hold the newly minted tokens - let account_rent = rent.minimum_balance(Account::LEN); + let account_rent = rpc.context.minimum_balance_for_rent_exemption(Account::LEN); let token_account = Keypair::new(); let new_token_account_ix = system_instruction::create_account( &payer.pubkey(), @@ -267,12 +262,10 @@ pub async fn setup_spl_token_account(rpc: &mut LightProgramTest) -> (Keypair, Ke .unwrap(); let token_account_info = rpc - .context - .banks_client - .get_account(token_account.pubkey().clone()) + .get_account(token_account.pubkey()) .await .unwrap() - .expect("could not fetch account information"); + .unwrap(); let account_data = Account::unpack(&token_account_info.data).unwrap(); assert_eq!(