From 9f53ada3567fe9d962769e22404f5b8227d063a3 Mon Sep 17 00:00:00 2001 From: Garrett Weber Date: Sun, 11 Feb 2024 09:58:20 -0700 Subject: [PATCH 1/6] Bump version to 1.17 --- Cargo.lock | 1282 ++++++++++++++++---------- Cargo.toml | 34 +- src/lib.rs | 18 +- src/programs.rs | 2 + src/programs/spl_token_2022-1.0.0.so | Bin 0 -> 535256 bytes 5 files changed, 823 insertions(+), 513 deletions(-) create mode 100644 src/programs/spl_token_2022-1.0.0.so diff --git a/Cargo.lock b/Cargo.lock index bc78218..03e1181 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,14 +76,15 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d" dependencies = [ "cfg-if", "getrandom 0.2.10", "once_cell", "version_check", + "zerocopy", ] [[package]] @@ -206,7 +207,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" dependencies = [ - "quote 1.0.33", + "quote", "syn 1.0.109", ] @@ -218,8 +219,8 @@ checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" dependencies = [ "num-bigint 0.4.4", "num-traits", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -254,8 +255,8 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -269,12 +270,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "array-bytes" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ad284aeb45c13f2fb4f084de4a420ebf447423bdf9386c0540ce33cb3ef4b8c" - [[package]] name = "arrayref" version = "0.3.7" @@ -315,8 +310,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", "synstructure", ] @@ -327,8 +322,8 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -389,9 +384,9 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -400,9 +395,9 @@ version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -551,12 +546,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease 0.2.15", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -570,6 +565,9 @@ name = "bitflags" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +dependencies = [ + "serde", +] [[package]] name = "bitmaps" @@ -648,7 +646,7 @@ dependencies = [ "borsh-derive-internal 0.9.3", "borsh-schema-derive-internal 0.9.3", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.67", + "proc-macro2", "syn 1.0.109", ] @@ -661,7 +659,7 @@ dependencies = [ "borsh-derive-internal 0.10.3", "borsh-schema-derive-internal 0.10.3", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.67", + "proc-macro2", "syn 1.0.109", ] @@ -671,8 +669,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -682,8 +680,8 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -693,8 +691,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -704,8 +702,8 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -754,9 +752,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" dependencies = [ "bytemuck_derive", ] @@ -767,9 +765,9 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -1135,10 +1133,10 @@ checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "strsim 0.10.0", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] @@ -1148,8 +1146,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", - "quote 1.0.33", - "syn 2.0.37", + "quote", + "syn 2.0.48", ] [[package]] @@ -1210,8 +1208,8 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -1283,32 +1281,32 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] -name = "dlopen" -version = "0.1.8" +name = "dlopen2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e80ad39f814a9abe68583cd50a2d45c8a67561c3361ab8da240587dda80937" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" dependencies = [ - "dlopen_derive", - "lazy_static", + "dlopen2_derive", "libc", + "once_cell", "winapi", ] [[package]] -name = "dlopen_derive" -version = "0.1.4" +name = "dlopen2_derive" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f236d9e1b1fbd81cea0f9cbdc8dcc7e8ebcd80e6659cd7cb2ad5f6c05946c581" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" dependencies = [ - "libc", - "quote 0.6.13", - "syn 0.15.44", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -1388,9 +1386,9 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -1518,6 +1516,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + [[package]] name = "fs_extra" version = "1.3.0" @@ -1578,9 +1585,9 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -1754,14 +1761,14 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.5", ] [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "headers" @@ -1950,9 +1957,9 @@ dependencies = [ "futures-util", "http", "hyper", - "rustls 0.21.7", + "rustls", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls", ] [[package]] @@ -2059,12 +2066,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", ] [[package]] @@ -2308,6 +2315,18 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.4", + "thiserror", +] + [[package]] name = "linux-raw-sys" version = "0.4.7" @@ -2359,12 +2378,6 @@ dependencies = [ "libc", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matchit" version = "0.7.3" @@ -2464,8 +2477,8 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -2568,11 +2581,22 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "num-integer" version = "0.1.45" @@ -2643,6 +2667,15 @@ dependencies = [ "num_enum_derive 0.6.1", ] +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive 0.7.2", +] + [[package]] name = "num_enum_derive" version = "0.5.11" @@ -2650,8 +2683,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -2662,9 +2695,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -2724,9 +2769,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -2781,8 +2826,8 @@ checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -2895,7 +2940,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.0", + "indexmap 2.2.2", ] [[package]] @@ -2913,9 +2958,9 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -2955,7 +3000,7 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "poc-framework" -version = "0.3.0" +version = "0.3.1" dependencies = [ "bincode", "borsh 0.9.3", @@ -2967,6 +3012,7 @@ dependencies = [ "serde", "sha2 0.10.7", "sha3 0.10.8", + "solana-accounts-db", "solana-bpf-loader-program", "solana-cli-output", "solana-client", @@ -2982,9 +3028,10 @@ dependencies = [ "solana-stake-program", "solana-transaction-status", "solana-vote-program", - "spl-associated-token-account", - "spl-memo", - "spl-token", + "spl-associated-token-account 1.1.3", + "spl-memo 3.0.1", + "spl-token 3.5.0", + "spl-token-2022 1.0.0", ] [[package]] @@ -3023,7 +3070,7 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2", "syn 1.0.109", ] @@ -3033,8 +3080,8 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ - "proc-macro2 1.0.67", - "syn 2.0.37", + "proc-macro2", + "syn 2.0.48", ] [[package]] @@ -3063,8 +3110,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", "version_check", ] @@ -3075,25 +3122,16 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "version_check", ] [[package]] name = "proc-macro2" -version = "0.4.30" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - -[[package]] -name = "proc-macro2" -version = "1.0.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -3138,8 +3176,8 @@ checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", ] @@ -3170,72 +3208,72 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "quinn" -version = "0.9.4" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.20.9", + "rustls", "thiserror", "tokio", "tracing", - "webpki", ] [[package]] name = "quinn-proto" -version = "0.9.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c956be1b23f4261676aed05a0046e204e8a6836e50203902683a718af0797989" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" dependencies = [ "bytes", "rand 0.8.5", "ring", "rustc-hash", - "rustls 0.20.9", + "rustls", "rustls-native-certs", "slab", "thiserror", "tinyvec", "tracing", - "webpki", ] [[package]] name = "quinn-udp" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" dependencies = [ + "bytes", "libc", - "quinn-proto", - "socket2 0.4.9", + "socket2 0.5.4", "tracing", - "windows-sys 0.42.0", -] - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", + "windows-sys 0.48.0", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ - "proc-macro2 1.0.67", + "proc-macro2", ] [[package]] @@ -3396,9 +3434,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.5" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -3408,9 +3446,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.8" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -3419,9 +3457,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" @@ -3449,14 +3487,14 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.7", + "rustls", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls 0.24.1", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -3556,18 +3594,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - [[package]] name = "rustls" version = "0.21.7" @@ -3662,9 +3688,9 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -3730,9 +3756,9 @@ version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -3775,9 +3801,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -3786,24 +3812,13 @@ version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.2", "itoa", "ryu", "serde", "unsafe-libyaml", ] -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha1" version = "0.10.6" @@ -3894,6 +3909,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a30f10c911c0355f80f1c2faa8096efc4a58cdf8590b954d5b395efa071c711" +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "sized-chunks" version = "0.6.5" @@ -3957,9 +3978,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ada16ccd5ca6884ae28b716211c4f09d22225a9ebde14eccd4f605cc321e42" +checksum = "059f3ef625b303fe2ed6aad853e8e9fc8aa54d26921083285bc9f9a7d7a84db1" dependencies = [ "Inflector", "base64 0.21.4", @@ -3970,25 +3991,85 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "solana-address-lookup-table-program", "solana-config-program", "solana-sdk", - "spl-token", - "spl-token-2022", + "spl-token 4.0.0", + "spl-token-2022 1.0.0", + "spl-token-group-interface", + "spl-token-metadata-interface", "thiserror", "zstd", ] +[[package]] +name = "solana-accounts-db" +version = "1.17.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bfec6bf5bb16c2fdf3f88a4c7b34633d5ddc065e99f56de4c62f6aefac29e89" +dependencies = [ + "arrayref", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder", + "bzip2", + "crossbeam-channel", + "dashmap", + "flate2", + "fnv", + "fs-err", + "im", + "index_list", + "itertools", + "lazy_static", + "log", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive 0.3.3", + "num-traits", + "num_cpus", + "num_enum 0.6.1", + "ouroboros", + "percentage", + "qualifier_attr", + "rand 0.8.5", + "rayon", + "regex", + "rustc_version", + "serde", + "serde_derive", + "solana-bucket-map", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", + "static_assertions", + "strum", + "strum_macros", + "tar", + "tempfile", + "thiserror", +] + [[package]] name = "solana-address-lookup-table-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248b435722d18100b70bb8f09fd38b8a8c46031a0de86f6b31768f64cf4092c5" +checksum = "c733fadd4e21b4f0e493cf6a5ab923ffc8ce3ca4db02cb3f0d5380c60fccba9a" dependencies = [ "bincode", "bytemuck", "log", - "num-derive", + "num-derive 0.3.3", "num-traits", "rustc_version", "serde", @@ -4002,15 +4083,15 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70b84a554f12f89c72f3c2dea973a5105740814aeebfb04998cc0afd9e2e6a2e" +checksum = "ae051c1fad1494adbb3b16c4af9ca5f99cd8d60fbc1a34ae89cb119a5f3ceb17" dependencies = [ "bincode", "byteorder", "libsecp256k1 0.6.0", "log", - "rand 0.7.3", + "scopeguard", "solana-measure", "solana-program-runtime", "solana-sdk", @@ -4021,16 +4102,17 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90e94b36eb9cdbe78a4d37c0ce1f96794c7fbae16baa0f6e51811ffbb25819b" +checksum = "b1ea0dd246b4ba2e7011adf61894a8f6a7ef0442066fde618f82f51991e6f42f" dependencies = [ "bv", + "bytemuck", "log", "memmap2", "modular-bitfield", "num_enum 0.6.1", - "rand 0.7.3", + "rand 0.8.5", "solana-measure", "solana-sdk", "tempfile", @@ -4038,14 +4120,13 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2782dc1178498135d438ea51998e5a28be05f2ed5b9ff97e224d8ca1f6b16fe5" +checksum = "8da92d3058faa4d39e527765a3f81f36e1dd6529eaa2d13268a0ac6b5ab00602" dependencies = [ "chrono", "clap 2.34.0", "rpassword", - "solana-perf", "solana-remote-wallet", "solana-sdk", "thiserror", @@ -4056,9 +4137,9 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538e8c1de6e6a948930a11f7debdbb21ff5492d09b67fb0d37a03c5208c233c7" +checksum = "3fec5a309a91978b21919f589f982a7eed9d88f76d388a09a50ae723bd623ead" dependencies = [ "dirs-next", "lazy_static", @@ -4072,9 +4153,9 @@ dependencies = [ [[package]] name = "solana-cli-output" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb41ef997e186c81a42d8b359eff0d8f0f3c61a02ad4a66111f189664a4f9d0d" +checksum = "771a534f67b832741a23bdb7404d3e1b0ee04150898ac705661b7ce60a896ebf" dependencies = [ "Inflector", "base64 0.21.4", @@ -4094,24 +4175,24 @@ dependencies = [ "solana-sdk", "solana-transaction-status", "solana-vote-program", - "spl-memo", + "spl-memo 4.0.0", ] [[package]] name = "solana-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969294bec354ba003bb4dc2e95e94beee4202d3244d6011434c282337601cc1f" +checksum = "7385e3d0590764c3b6e09aea493c28c4ccc5d4fc599656cc23579708cc38c270" dependencies = [ "async-trait", "bincode", + "dashmap", "futures", "futures-util", - "indexmap 1.9.3", + "indexmap 2.2.2", "indicatif", "log", "quinn", - "rand 0.7.3", "rayon", "solana-connection-cache", "solana-measure", @@ -4132,9 +4213,9 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33f864bd6ba7d6dfeb88b774edc31af0abd27df96763d4e8a3f91e34f4f0995" +checksum = "1bf6104df0eac32f834624ce86c032ac451472f15f2f784794082f60a85caaef" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -4142,9 +4223,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0622d8798d060c84883572483f214b0d5c1640450e4322483cfe2e72823a6d7" +checksum = "16e8dfaa1c61292a9e1bdf15ebb8d1315adb19e923a21c12a0a4d15db6d94e1e" dependencies = [ "bincode", "chrono", @@ -4156,16 +4237,17 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1439d38886d31690d8e2573e656e6767d3ae790229050dfe71ade309d5664cb" +checksum = "4c17e4089fc320627baee69e5aec0a41c9523596ae3d68c525e967d4c6324c2a" dependencies = [ "async-trait", "bincode", + "crossbeam-channel", "futures-util", - "indexmap 1.9.3", + "indexmap 2.2.2", "log", - "rand 0.7.3", + "rand 0.8.5", "rayon", "rcgen", "solana-measure", @@ -4175,19 +4257,42 @@ dependencies = [ "tokio", ] +[[package]] +name = "solana-cost-model" +version = "1.17.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96f567930e73f2ec1ef2f44e1b074ba5f119a222e9583deecc7ab9429154f1bc" +dependencies = [ + "lazy_static", + "log", + "rustc_version", + "solana-address-lookup-table-program", + "solana-bpf-loader-program", + "solana-compute-budget-program", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-metrics", + "solana-program-runtime", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", +] + [[package]] name = "solana-entry" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32fa8cf5f71c4bd9b08db79469811f1c47d3c577643da8d5544ef6ddd685683" +checksum = "a9b763848ab591e81a260581a2c469d9ea126093f494a403446fa60c1c56a0ca" dependencies = [ "bincode", "crossbeam-channel", - "dlopen", - "dlopen_derive", + "dlopen2", "lazy_static", "log", - "rand 0.7.3", + "rand 0.8.5", "rayon", "serde", "solana-measure", @@ -4200,9 +4305,9 @@ dependencies = [ [[package]] name = "solana-faucet" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec77384c3c93e9f755ef0352c0c90ec98017e9db9908a9e7878dad60ea3244b" +checksum = "382e396b56e66f81f387b405ff12dd4af25cd06f9c1fd4eed621d98e841704f4" dependencies = [ "bincode", "byteorder", @@ -4217,18 +4322,18 @@ dependencies = [ "solana-metrics", "solana-sdk", "solana-version", - "spl-memo", + "spl-memo 4.0.0", "thiserror", "tokio", ] [[package]] name = "solana-frozen-abi" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e74d294241df12a73a229e38a819e810d54234da494c3d43f8a1a828631047d" +checksum = "380a5173027b9d70fa033272ebc8ffe8e59c64274109ac99b05578a4c9434215" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.5", "blake3", "block-buffer 0.10.4", "bs58", @@ -4237,13 +4342,10 @@ dependencies = [ "cc", "either", "generic-array", - "getrandom 0.1.16", "im", "lazy_static", "log", "memmap2", - "once_cell", - "rand_core 0.6.4", "rustc_version", "serde", "serde_bytes", @@ -4257,25 +4359,25 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dabde7fbd88a68eb083ae9d6d5f6855b7ba1bfc45d200c786b1b448ac49da5f" +checksum = "d1017a631a72e211f8bd78e707c9424fb0ef074f3df5bb7b6baef6912a3b1b6b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "rustc_version", - "syn 2.0.37", + "syn 2.0.48", ] [[package]] name = "solana-ledger" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b139341b34e1dd43eb60a71d296688d0cf6101d4c21b21b2e8a62a912aecce" +checksum = "5f48907e7c8e991f5703de39f3c73e7a9d4b60c57d5fe4a48b01cb71355d3a3a" dependencies = [ "assert_matches", "bincode", - "bitflags 1.3.2", + "bitflags 2.4.0", "byteorder", "chrono", "chrono-humanize", @@ -4291,8 +4393,8 @@ dependencies = [ "num_cpus", "num_enum 0.6.1", "prost", - "rand 0.7.3", - "rand_chacha 0.2.2", + "rand 0.8.5", + "rand_chacha 0.3.1", "rayon", "reed-solomon-erasure", "rocksdb", @@ -4302,7 +4404,9 @@ dependencies = [ "serde_bytes", "sha2 0.10.7", "solana-account-decoder", + "solana-accounts-db", "solana-bpf-loader-program", + "solana-cost-model", "solana-entry", "solana-frozen-abi", "solana-frozen-abi-macro", @@ -4317,10 +4421,13 @@ dependencies = [ "solana-storage-bigtable", "solana-storage-proto", "solana-transaction-status", + "solana-vote", "solana-vote-program", - "spl-token", - "spl-token-2022", + "spl-token 4.0.0", + "spl-token-2022 1.0.0", "static_assertions", + "strum", + "strum_macros", "tempfile", "thiserror", "tokio", @@ -4330,12 +4437,11 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de634a9a00c745e42c3278458c0c85d0aa088db2cf872f06af8210991bf51574" +checksum = "87f06f3b3a5883ef11b2ce1f36d1f6be8e7c99e4fc5124bd6bf585b317a80f82" dependencies = [ "log", - "rand 0.7.3", "solana-measure", "solana-program-runtime", "solana-sdk", @@ -4344,9 +4450,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24dc0037a389d782c8de3c6f509b74efa1d60523ef9e5561cefe41f1a354fee0" +checksum = "dfcfc4dc59c2f64b0d78b27e5db0238e4f6be852454b0f915bd1f58806fe08c3" dependencies = [ "env_logger", "lazy_static", @@ -4355,9 +4461,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19563c27f12801e0e65b42d0f216db1d910dfeaad88d8f1335dd6369697eda60" +checksum = "5766f4f11b7c34ba0d1be3b94f303b57a826f5f773c29b90a96d0fb80286df29" dependencies = [ "log", "solana-sdk", @@ -4365,20 +4471,19 @@ dependencies = [ [[package]] name = "solana-merkle-tree" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10945018bc2fa7b773cbf519dfed76c6e8946daa1548abf2eb34591186915cb4" +checksum = "d72ddb3ea83c717bec0445d8514d206c6ecbcb3f750ce1e5aa3b3fa39aa8f727" dependencies = [ "fast-math", - "matches", "solana-program", ] [[package]] name = "solana-metrics" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f74c557e821c7ff48c9b4ef4ab3a296918d7fb745e3f2e820ebdb38e8e3555b" +checksum = "1bdbfd703709a927eb3bc35b478eefa91b354778a6692141abd1a13648acfceb" dependencies = [ "crossbeam-channel", "gethostname", @@ -4386,23 +4491,24 @@ dependencies = [ "log", "reqwest", "solana-sdk", + "thiserror", ] [[package]] name = "solana-net-utils" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d5599760f8a287c59d96a5c52752028c1c72c815fe74e0d7990bb90684cbfc" +checksum = "acc3d8b83882f630036a8c516462ffa15cf0b6f1d6430fe7fa91e66b890960bc" dependencies = [ "bincode", "clap 3.2.25", "crossbeam-channel", "log", "nix", - "rand 0.7.3", + "rand 0.8.5", "serde", "serde_derive", - "socket2 0.4.9", + "socket2 0.5.4", "solana-logger", "solana-sdk", "solana-version", @@ -4412,25 +4518,27 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b2adb00aa09d92cd3b4f614ddd4f81366524a0d8ae9dd63b64418f696171c6" +checksum = "a726d035d03e729d5ab3c40755c947aaccf138f4b7cd2dd9af38760321cc8768" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.5", "bincode", "bv", "caps", "curve25519-dalek", - "dlopen", - "dlopen_derive", + "dlopen2", "fnv", "lazy_static", "libc", "log", "nix", - "rand 0.7.3", + "rand 0.8.5", "rayon", + "rustc_version", "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", "solana-metrics", "solana-rayon-threadlimit", "solana-sdk", @@ -4439,18 +4547,17 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a2faeb9c89b354b547a229e3b39fa8fd6d11c78362ba8580f0c4721739725b6" +checksum = "e882d2ae4903aec8657d18075897cba532155d8f49a0aa39acc0f86fee8c5697" dependencies = [ "ark-bn254", "ark-ec", "ark-ff", "ark-serialize", - "array-bytes", "base64 0.21.4", "bincode", - "bitflags 1.3.2", + "bitflags 2.4.0", "blake3", "borsh 0.10.3", "borsh 0.9.3", @@ -4467,14 +4574,14 @@ dependencies = [ "lazy_static", "libc", "libsecp256k1 0.6.0", + "light-poseidon", "log", "memoffset 0.9.0", "num-bigint 0.4.4", - "num-derive", + "num-derive 0.3.3", "num-traits", "parking_lot 0.12.1", - "rand 0.7.3", - "rand_chacha 0.2.2", + "rand 0.8.5", "rustc_version", "rustversion", "serde", @@ -4494,9 +4601,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f65907a405764cda63be89335ffd2138ade18f065e5cae09d20adab7fb09502" +checksum = "d29040e56093c2d4951e621afc5addc24dead5028d4972ca741feb9e3b12ecef" dependencies = [ "base64 0.21.4", "bincode", @@ -4505,10 +4612,10 @@ dependencies = [ "itertools", "libc", "log", - "num-derive", + "num-derive 0.3.3", "num-traits", "percentage", - "rand 0.7.3", + "rand 0.8.5", "rustc_version", "serde", "solana-frozen-abi", @@ -4522,9 +4629,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "367e70572ebc81de7d8ca742342f7cf19b6b47d182dd9aa8932c7cfa71bb6dc4" +checksum = "b5898c476dbf30ec845d6f29d7e88458880049328f6c922a2ece708362e0f183" dependencies = [ "crossbeam-channel", "futures-util", @@ -4547,9 +4654,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87daa01ce0ecd6667425c7f19f10388cbce63a62f8f69767ea37b69293e814cf" +checksum = "381ec25d50d62f85da4d21d1378691494ec259b69286c8d1974b7d9b69257cf2" dependencies = [ "async-mutex", "async-trait", @@ -4559,9 +4666,8 @@ dependencies = [ "log", "quinn", "quinn-proto", - "quinn-udp", "rcgen", - "rustls 0.20.9", + "rustls", "solana-connection-cache", "solana-measure", "solana-metrics", @@ -4575,9 +4681,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb6593da84631b9b523dac91b04f4e2a366205f61112d677e8cbe2bfda57a176" +checksum = "cba4b7e8a99267776bae34c7787ec91b86361d787c3569ca67c8ea228950b83d" dependencies = [ "lazy_static", "num_cpus", @@ -4585,14 +4691,14 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a431bdda7679de1381722f6eef63dfc301f07cbd51a930a28e61ee42167448a5" +checksum = "a9ab92499e040a78053dbc6847088f3592c5e781be7550703af6d4e540d2b487" dependencies = [ "console", "dialoguer", "log", - "num-derive", + "num-derive 0.3.3", "num-traits", "parking_lot 0.12.1", "qstring", @@ -4604,9 +4710,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2771ac12cdbde1aa6b55a129947f1428bb44d14314059c1e69674e1d58aaf9e1" +checksum = "a11bfede52a585902745d9fcd17a1e36524e7d8f6c7ff6c919f06804f6be7372" dependencies = [ "async-trait", "base64 0.21.4", @@ -4630,9 +4736,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f401e2ae586fd60c1c8c0f406be521bfe4889c6c2854fbb76bd20e8bc2d57284" +checksum = "943e8e0250573fc8f3c4dc774f03841e3d47b52132d2b8dab11ecf48a1111a4e" dependencies = [ "base64 0.21.4", "bs58", @@ -4646,15 +4752,15 @@ dependencies = [ "solana-sdk", "solana-transaction-status", "solana-version", - "spl-token-2022", + "spl-token-2022 1.0.0", "thiserror", ] [[package]] name = "solana-rpc-client-nonce-utils" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46df2d20521eab49fadb9afe93808e9764767e193bd701c7d380a56d0dc7f8ad" +checksum = "ae09cb1b0ee09b2b49407f57aae538aae4c11abfa7b412f0a27672a3e20e338e" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -4665,11 +4771,12 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd836895d54bcda07566caab7825649f33dda7f900bf7660e5547468909989c" +checksum = "ff640ad07861b6f9eaa05ca0d6393c982b9042fb8aea1284a4f231b55fcb1696" dependencies = [ "arrayref", + "base64 0.21.4", "bincode", "blake3", "bv", @@ -4681,6 +4788,7 @@ dependencies = [ "dir-diff", "flate2", "fnv", + "fs-err", "im", "index_list", "itertools", @@ -4690,24 +4798,28 @@ dependencies = [ "lz4", "memmap2", "modular-bitfield", - "num-derive", + "num-derive 0.3.3", "num-traits", "num_cpus", "num_enum 0.6.1", - "once_cell", "ouroboros", "percentage", - "rand 0.7.3", + "qualifier_attr", + "rand 0.8.5", "rayon", "regex", "rustc_version", "serde", "serde_derive", + "serde_json", + "siphasher", + "solana-accounts-db", "solana-address-lookup-table-program", "solana-bpf-loader-program", "solana-bucket-map", "solana-compute-budget-program", "solana-config-program", + "solana-cost-model", "solana-frozen-abi", "solana-frozen-abi-macro", "solana-loader-v4-program", @@ -4719,6 +4831,8 @@ dependencies = [ "solana-sdk", "solana-stake-program", "solana-system-program", + "solana-version", + "solana-vote", "solana-vote-program", "solana-zk-token-proof-program", "solana-zk-token-sdk", @@ -4734,14 +4848,14 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57f4046d0d487e3d79be809ff29c63c1484793956e6ccbc5d3307b0aafbf989d" +checksum = "4b191352781d621b08b3513b02857c8e89f891a8e2aeeeecff977f9819e1a7d5" dependencies = [ "assert_matches", "base64 0.21.4", "bincode", - "bitflags 1.3.2", + "bitflags 2.4.0", "borsh 0.10.3", "bs58", "bytemuck", @@ -4759,13 +4873,14 @@ dependencies = [ "libsecp256k1 0.6.0", "log", "memmap2", - "num-derive", + "num-derive 0.3.3", "num-traits", "num_enum 0.6.1", "pbkdf2 0.11.0", "qstring", + "qualifier_attr", "rand 0.7.3", - "rand_chacha 0.2.2", + "rand 0.8.5", "rustc_version", "rustversion", "serde", @@ -4787,22 +4902,28 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760fdfd4b7edb02fd9173a6dcec899ffae06ac21b66b65f8c7c5f3d17b12fa64" +checksum = "c4a7d5483adb2e54e79160ff03fb20fc93e537cc06bef0fc964e2e6e3bbefdbd" dependencies = [ "bs58", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "rustversion", - "syn 2.0.37", + "syn 2.0.48", ] +[[package]] +name = "solana-security-txt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" + [[package]] name = "solana-stake-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2be095a8ec22b7856b182b9de2067e2ab91570f0cafbca46d39bebe119e791" +checksum = "e69e4c664dda629b8b24b935f223ce1989fda943e4df1d92d93cb7139ec5e849" dependencies = [ "bincode", "log", @@ -4815,9 +4936,9 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3729c426b3b7702b4d56c0f19a4056f324dd703de1a6d445e950967711fd720" +checksum = "46aef0676c669ecc9951d0a7c58f47021fcfe1002ce47e787ec590a6cab51bdd" dependencies = [ "backoff", "bincode", @@ -4849,9 +4970,9 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0124784702a3ad8d1cba35ec8868cda27b0cfe8d6bca744322b65e4ec0b0d76" +checksum = "15a98def46c054093f5fb1ead0607368d1d50bccf25f14b36c24ea69eab7f0d2" dependencies = [ "bincode", "bs58", @@ -4866,16 +4987,16 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0125d00ca7e8e67d12f7f192a18d1dff2801a9c3e3239033af40b3e72ad92d76" +checksum = "437010764fc78e4f195ea6175ae4146bce280304f1cba9131152ea362c40afd0" dependencies = [ "async-channel", "bytes", "crossbeam-channel", "futures-util", "histogram", - "indexmap 1.9.3", + "indexmap 2.2.2", "itertools", "libc", "log", @@ -4885,10 +5006,9 @@ dependencies = [ "pkcs8", "quinn", "quinn-proto", - "quinn-udp", - "rand 0.7.3", + "rand 0.8.5", "rcgen", - "rustls 0.20.9", + "rustls", "solana-metrics", "solana-perf", "solana-sdk", @@ -4899,9 +5019,9 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5d4305ec995efdf6c01ba055833e0f225461ed73c66fd715bb1d566b983bc1c" +checksum = "f58ab92849f22d25a1860ecfe700e707f9733ee00906750947f6c3963ca7b252" dependencies = [ "bincode", "log", @@ -4913,9 +5033,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b6137bb86d37323482474d841dd5baba41d5e3cb8827e4f0f5e37e9ff09153" +checksum = "1996604d2fcfb8809181cc923f4f2600ebc3dc8cf440532a016ae58b3fe99109" dependencies = [ "bincode", "log", @@ -4928,17 +5048,16 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe350f0f2e6a098c118e9a5820280bb3c512f27560ad848f793825f2cd76fa5" +checksum = "6a8845778aa98c7112654fe19ba4ee78d399a766e926d21c10d117ab3b1c3789" dependencies = [ "async-trait", "bincode", "futures-util", - "indexmap 1.9.3", + "indexmap 2.2.2", "indicatif", "log", - "rand 0.7.3", "rayon", "solana-connection-cache", "solana-measure", @@ -4953,14 +5072,14 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdf7379a72c051d7879f1c36cfdab5fed0653a2a613718bc5d343e44e603401" +checksum = "b0069b2d163939c4084f91b50b2e1de7848ce7e0e8ecde92f894771fb97fc786" dependencies = [ "Inflector", "base64 0.21.4", "bincode", - "borsh 0.9.3", + "borsh 0.10.3", "bs58", "lazy_static", "log", @@ -4968,20 +5087,19 @@ dependencies = [ "serde_derive", "serde_json", "solana-account-decoder", - "solana-address-lookup-table-program", "solana-sdk", - "spl-associated-token-account", - "spl-memo", - "spl-token", - "spl-token-2022", + "spl-associated-token-account 2.3.0", + "spl-memo 4.0.0", + "spl-token 4.0.0", + "spl-token-2022 1.0.0", "thiserror", ] [[package]] name = "solana-udp-client" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22c5d62db9c69e8eced8eb8fdb1f8317dbcb3ad37cb5cc0d495aec85b5a46f7f" +checksum = "e7fd2263d2392b6356f79339b4f512834d8c88856a078daa8dd5eeb3acb0dcd4" dependencies = [ "async-trait", "solana-connection-cache", @@ -4994,9 +5112,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d62712e119d6c616d1dea0fa5c1464f7316abe446e0b1eb4796cc9c77324c69" +checksum = "d8f4ce2228852ba69d67641086e70a6133502406ba28225eaf70465f63f1d9d4" dependencies = [ "log", "rustc_version", @@ -5008,15 +5126,34 @@ dependencies = [ "solana-sdk", ] +[[package]] +name = "solana-vote" +version = "1.17.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2f9464af623e140ddd68a2932332ffb4e444cd22b7a7c2ad66e66761ed97060" +dependencies = [ + "crossbeam-channel", + "itertools", + "log", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", + "solana-vote-program", + "thiserror", +] + [[package]] name = "solana-vote-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfde11af84827c25b484baf1743b5d0db068af32cf2e4f533148a2d2a31c2263" +checksum = "c3a83b8c25a3332669e4ef795c33e724b82acbfcd1f646a482b0966e63392300" dependencies = [ "bincode", "log", - "num-derive", + "num-derive 0.3.3", "num-traits", "rustc_version", "serde", @@ -5032,13 +5169,12 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2633ae5b15fd52b3c1c625d17b62284b328d67ee0b801c2bacb7e7429874e5bd" +checksum = "554794c9a4fcfda4a8a106d9419eeae02f7b7f3924411b8d97b2ba93d740a00b" dependencies = [ "bytemuck", - "getrandom 0.1.16", - "num-derive", + "num-derive 0.3.3", "num-traits", "solana-program-runtime", "solana-sdk", @@ -5047,9 +5183,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.16.14" +version = "1.17.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdec366a15133a70a8dfc4f027b5d0f508bd7cb46af11971076c9ebaf9ede2d" +checksum = "28bfe4443f550d37b0055d3dade5ae0dc951d8f80b9f58f1043b699fe9a2f326" dependencies = [ "aes-gcm-siv", "base64 0.21.4", @@ -5061,7 +5197,7 @@ dependencies = [ "itertools", "lazy_static", "merlin", - "num-derive", + "num-derive 0.3.3", "num-traits", "rand 0.7.3", "serde", @@ -5076,9 +5212,9 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.6.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17d4ba1e58947346e360fabde0697029d36ba83c42f669199b16a8931313cf29" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" dependencies = [ "byteorder", "combine", @@ -5123,11 +5259,62 @@ checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4" dependencies = [ "assert_matches", "borsh 0.9.3", - "num-derive", + "num-derive 0.3.3", "num-traits", "solana-program", - "spl-token", - "spl-token-2022", + "spl-token 3.5.0", + "spl-token-2022 0.6.1", + "thiserror", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "992d9c64c2564cc8f63a4b508bf3ebcdf2254b0429b13cd1d31adb6162432a5f" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-token 4.0.0", + "spl-token-2022 1.0.0", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa600f2fe56f32e923261719bae640d873edadbc5237681a39b8e37bfd4d263" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.48", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.7", + "syn 2.0.48", "thiserror", ] @@ -5140,6 +5327,67 @@ dependencies = [ "solana-program", ] +[[package]] +name = "spl-memo" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5db7e4efb1107b0b8e52a13f035437cdcb36ef99c58f6d467f089d9b2915a" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e0657b6490196971d9e729520ba934911ff41fbb2cb9004463dbe23cf8b4b4f" +dependencies = [ + "num-derive 0.4.2", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.7", + "syn 2.0.48", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f335787add7fa711819f9e7c573f8145a5358a709446fe2d24bf2a88117c90" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + [[package]] name = "spl-token" version = "3.5.0" @@ -5148,13 +5396,28 @@ checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" dependencies = [ "arrayref", "bytemuck", - "num-derive", + "num-derive 0.3.3", "num-traits", "num_enum 0.5.11", "solana-program", "thiserror", ] +[[package]] +name = "spl-token" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", +] + [[package]] name = "spl-token-2022" version = "0.6.1" @@ -5163,16 +5426,96 @@ checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" dependencies = [ "arrayref", "bytemuck", - "num-derive", + "num-derive 0.3.3", "num-traits", "num_enum 0.5.11", "solana-program", "solana-zk-token-sdk", - "spl-memo", - "spl-token", + "spl-memo 3.0.1", + "spl-token 3.5.0", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d697fac19fd74ff472dfcc13f0b442dd71403178ce1de7b5d16f83a33561c059" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.2", + "solana-program", + "solana-security-txt", + "solana-zk-token-sdk", + "spl-memo 4.0.0", + "spl-pod", + "spl-token 4.0.0", + "spl-token-group-interface", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", "thiserror", ] +[[package]] +name = "spl-token-group-interface" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b889509d49fa74a4a033ca5dae6c2307e9e918122d97e58562f5c4ffa795c75d" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aabdb7c471566f6ddcee724beb8618449ea24b399e58d464d6b5bc7db550259" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f9ebd75d29c5f48de5f6a9c114e08531030b75b8ac2c557600ac7da0b73b1e8" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -5207,8 +5550,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck", - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "rustversion", "syn 1.0.109", ] @@ -5225,36 +5568,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.37" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "unicode-ident", ] @@ -5270,10 +5602,10 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", + "proc-macro2", + "quote", "syn 1.0.109", - "unicode-xid 0.2.4", + "unicode-xid", ] [[package]] @@ -5326,22 +5658,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.48" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -5441,9 +5773,9 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -5456,24 +5788,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls 0.20.9", - "tokio", - "webpki", -] - [[package]] name = "tokio-rustls" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.7", + "rustls", "tokio", ] @@ -5490,18 +5811,17 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.17.2" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", - "rustls 0.20.9", + "rustls", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls", "tungstenite", - "webpki", - "webpki-roots 0.22.6", + "webpki-roots 0.25.2", ] [[package]] @@ -5539,21 +5859,21 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.2", "toml_datetime", "winnow", ] [[package]] name = "tonic" -version = "0.8.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.13.1", + "base64 0.21.4", "bytes", "futures-core", "futures-util", @@ -5565,29 +5885,26 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "prost-derive", "rustls-pemfile", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls", "tokio-stream", - "tokio-util", "tower", "tower-layer", "tower-service", "tracing", - "tracing-futures", ] [[package]] name = "tonic-build" -version = "0.8.4" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" +checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07" dependencies = [ "prettyplease 0.1.25", - "proc-macro2 1.0.67", + "proc-macro2", "prost-build", - "quote 1.0.33", + "quote", "syn 1.0.109", ] @@ -5630,6 +5947,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -5641,9 +5959,9 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] @@ -5655,16 +5973,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "trees" version = "0.4.2" @@ -5679,24 +5987,23 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.17.3" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64 0.13.1", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", "rand 0.8.5", - "rustls 0.20.9", - "sha-1", + "rustls", + "sha1", "thiserror", "url", "utf-8", - "webpki", - "webpki-roots 0.22.6", + "webpki-roots 0.24.0", ] [[package]] @@ -5732,12 +6039,6 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - [[package]] name = "unicode-xid" version = "0.2.4" @@ -5876,9 +6177,9 @@ dependencies = [ "bumpalo", "log", "once_cell", - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", "wasm-bindgen-shared", ] @@ -5900,7 +6201,7 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ - "quote 1.0.33", + "quote", "wasm-bindgen-macro-support", ] @@ -5910,9 +6211,9 @@ version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5933,23 +6234,13 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e74f82d49d545ad128049b7e88f6576df2da6b02e9ce565c6f533be576957e" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "webpki", + "rustls-webpki", ] [[package]] @@ -6010,21 +6301,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-sys" version = "0.45.0" @@ -6212,6 +6488,26 @@ dependencies = [ "time", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "zeroize" version = "1.3.0" @@ -6227,9 +6523,9 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ - "proc-macro2 1.0.67", - "quote 1.0.33", - "syn 2.0.37", + "proc-macro2", + "quote", + "syn 2.0.48", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 47925bf..6b18405 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poc-framework" -version = "0.3.0" +version = "0.3.1" authors = [] edition = "2018" repository = "https://github.com/neodyme-labs/solana-poc-framework" @@ -14,22 +14,24 @@ itertools = "0.10.1" bincode = "1.3.3" rand = "0.7.3" borsh = "0.9.1" -solana-sdk = "~1.16" -solana-program = "~1.16" -solana-logger = "~1.16" -solana-runtime = "~1.16" -solana-transaction-status = "~1.16" -solana-cli-output = "~1.16" -solana-bpf-loader-program = "~1.16" -solana-compute-budget-program = "~1.16" -solana-vote-program = "~1.16" -solana-stake-program = "~1.16" -solana-config-program = "~1.16" -solana-client = "~1.16" -solana-faucet = "~1.16" -solana-program-runtime = "~1.16" -solana-ledger = "~1.16" +solana-sdk = "~1.17" +solana-program = "~1.17" +solana-logger = "~1.17" +solana-runtime = "~1.17" +solana-transaction-status = "~1.17" +solana-cli-output = "~1.17" +solana-bpf-loader-program = "~1.17" +solana-compute-budget-program = "~1.17" +solana-vote-program = "~1.17" +solana-stake-program = "~1.17" +solana-config-program = "~1.17" +solana-client = "~1.17" +solana-faucet = "~1.17" +solana-program-runtime = "~1.17" +solana-ledger = "~1.17" +solana-accounts-db = "~1.17" spl-token = "3.3.0" +spl-token-2022 = "1.0.0" spl-memo = "3.0.1" spl-associated-token-account = "1.0.5" serde = "1.0.125" diff --git a/src/lib.rs b/src/lib.rs index 1d45633..18c5c98 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,6 +13,11 @@ use itertools::izip; use rand::{prelude::StdRng, rngs::OsRng, SeedableRng}; use serde::de::DeserializeOwned; use sha2::{Digest, Sha256}; +use solana_accounts_db::{ + accounts_db::AccountShrinkThreshold, + accounts_index::AccountSecondaryIndexes, + transaction_results::{TransactionExecutionResult, TransactionResults}, +}; use solana_cli_output::display::println_transaction; use solana_client::{rpc_client::RpcClient, rpc_config::RpcTransactionConfig}; use solana_program::{ @@ -28,9 +33,7 @@ use solana_program::{ sysvar::{self, rent}, }; use solana_runtime::{ - accounts_db::AccountShrinkThreshold, - accounts_index::AccountSecondaryIndexes, - bank::{Bank, TransactionBalancesSet, TransactionExecutionResult, TransactionResults}, + bank::{Bank, TransactionBalancesSet}, genesis_utils, runtime_config::RuntimeConfig, }; @@ -62,6 +65,7 @@ pub use solana_transaction_status; pub use spl_associated_token_account; pub use spl_memo; pub use spl_token; +pub use spl_token_2022; mod keys; mod programs; @@ -642,6 +646,12 @@ impl LocalEnvironmentBuilder { ); builder.add_account_with_data(spl_memo::ID, bpf_loader::ID, programs::SPL_MEMO3, true); builder.add_account_with_data(spl_token::ID, bpf_loader::ID, programs::SPL_TOKEN, true); + builder.add_account_with_data( + spl_token_2022::ID, + bpf_loader::ID, + programs::SPL_TOKEN_2022, + true, + ); builder.add_account_with_lamports(rent::ID, sysvar::ID, 1); builder } @@ -858,7 +868,7 @@ impl LocalEnvironmentBuilder { false, None, None, - &exit, + exit, ); let env = LocalEnvironment { diff --git a/src/programs.rs b/src/programs.rs index 61c2bf5..be6863c 100644 --- a/src/programs.rs +++ b/src/programs.rs @@ -6,3 +6,5 @@ pub const SPL_MEMO1: &[u8] = include_bytes!("programs/spl_memo-1.0.0.so"); pub const SPL_MEMO3: &[u8] = include_bytes!("programs/spl_memo-3.0.0.so"); pub const SPL_TOKEN: &[u8] = include_bytes!("programs/spl_token-4.0.0.so"); + +pub const SPL_TOKEN_2022: &[u8] = include_bytes!("programs/spl_token_2022-1.0.0.so"); diff --git a/src/programs/spl_token_2022-1.0.0.so b/src/programs/spl_token_2022-1.0.0.so new file mode 100644 index 0000000000000000000000000000000000000000..796fafc4cc13ab3b2e1b00551f2e0c5cb4107fe4 GIT binary patch literal 535256 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

re=z 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 z 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 Date: Fri, 16 Feb 2024 20:08:41 -0700 Subject: [PATCH 2/6] Add spl_shared_memory --- src/programs.rs | 2 ++ src/programs/spl_shared_memory-2.0.6.so | Bin 0 -> 2632 bytes 2 files changed, 2 insertions(+) create mode 100644 src/programs/spl_shared_memory-2.0.6.so diff --git a/src/programs.rs b/src/programs.rs index be6863c..ce763f6 100644 --- a/src/programs.rs +++ b/src/programs.rs @@ -8,3 +8,5 @@ pub const SPL_MEMO3: &[u8] = include_bytes!("programs/spl_memo-3.0.0.so"); pub const SPL_TOKEN: &[u8] = include_bytes!("programs/spl_token-4.0.0.so"); pub const SPL_TOKEN_2022: &[u8] = include_bytes!("programs/spl_token_2022-1.0.0.so"); + +pub const SPL_SHARED_MEMORY: &[u8] = include_bytes!("programs/spl_shared_memory-2.0.6.so"); \ No newline at end of file diff --git a/src/programs/spl_shared_memory-2.0.6.so b/src/programs/spl_shared_memory-2.0.6.so new file mode 100644 index 0000000000000000000000000000000000000000..4df7a140d1b7fad3c513cee8ab71db06d5f9afa6 GIT binary patch literal 2632 zcmb_eO>Y!O5Uri1S-!%6%@E6ium~Iou#24lf(zn9AR!@PAq?bXZ_FS-UfZ!(A`^r- zA@K*IT;aw)@Nxc%j~u!2aarE0>RM)5<$#oi?br3Xy1J^my2mfB-MpUEYT~UfAB0jf zQkUYyt8K0!a!Jlh9eqQ#s&1(0`#Q&WoJ4b!Jtouq7X02eOddg_3fneT&gpXnEu4YOKZW1g%1q{IdS*@01zLn;^7?khGB+yX}BZ55>f#~a5* z?g2mc`~CEa@x>AIkajp~&15>!sGDAK*b-L8yrt8&t~F}}?Q)bx|0vVW2KHBbXP7OK z;;4c=bG^8q>-&CF_0N5#_9cw|4cxG0h|dyEKk*+jd&~oPj*F9g35T*^5!0 z?3dlZEIA>&6i>+y!0Ngba*$i-sh?@ysLw641K;0VvW2ALe;ng1X^j_~w6=;;i{#rg_b9m72DQP64`=2=HUt8(leO#C9&m%wCqTnsIOU(kt9Eh&&J8r+;y;$_27t?^Vg$a~JVfw1&lIm;-AdCKlrYHmw; zj4a+KJ02;Xn*40lknaTTHDH%pwC;S+cjWnu*)JcMUdls8E2j)o7BkwPbB6183~7&c zy5k?!j_14V*u3Y%{q(%pYi@5DHF@T2({>zsw<$N-p~ZCjXGz}*^8Ot&?{Ur~(X1K} zYqZDOVLNW1cQOvY3mEGdB5rbkHXD(5KOTYd-W~W4Uh?JMTCuwFc)2I*D@*g8rKOd{ z`G;$HKCf~&?=G$u^RgKOq5ph`-^X{EvQ})nm;cq1_Jd-1y|*UqwS0+VBZ{tKr~7zO z+Ut*?(Chqxh5tii*!)Fz2Kn&34F3Lzd&OfI?A(lN?bhL(>~lB3*HP16L#tU*o@1Uf z&zw17^Ez-`P}b^;e)|4iAKZ?6`+BbvN3WA;Mq~9ck$05e0blQR>)6B`+aNv@2mbRl U_qjNwFdH5Htx94X%WS}Y0dYa1;s5{u literal 0 HcmV?d00001 From ab289916a05944c05998bce7c79215f9dd1cfe00 Mon Sep 17 00:00:00 2001 From: Garrett Weber Date: Fri, 16 Feb 2024 20:10:14 -0700 Subject: [PATCH 3/6] Lock solana version to 1.17.17 Disable delay_visibility_of_program_deployment feature allowing programs to be invoked on same tick as deployment Make execute_transaction more generic to invoke execute_transactions Finish adding shared memory program --- Cargo.lock | 204 +++++++++++++++++++++--------------------- Cargo.toml | 32 +++---- src/lib.rs | 257 +++++++++++++++++++++++++++++++---------------------- 3 files changed, 271 insertions(+), 222 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03e1181..4d661a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3978,9 +3978,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059f3ef625b303fe2ed6aad853e8e9fc8aa54d26921083285bc9f9a7d7a84db1" +checksum = "74a6ad350a6f633fd76e8bd1e77ad7a3ce75e3046d69957cdb042152e84d8957" dependencies = [ "Inflector", "base64 0.21.4", @@ -4003,9 +4003,9 @@ dependencies = [ [[package]] name = "solana-accounts-db" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bfec6bf5bb16c2fdf3f88a4c7b34633d5ddc065e99f56de4c62f6aefac29e89" +checksum = "15c4fff17148e7b81804cb7997d8dfcad5f36dea61b931fa71494602c6396bc3" dependencies = [ "arrayref", "bincode", @@ -4062,9 +4062,9 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c733fadd4e21b4f0e493cf6a5ab923ffc8ce3ca4db02cb3f0d5380c60fccba9a" +checksum = "4c33e0707e51db8467a61766a0dc382dc0e482c60ae70d4673c0396d62f5c983" dependencies = [ "bincode", "bytemuck", @@ -4083,9 +4083,9 @@ dependencies = [ [[package]] name = "solana-bpf-loader-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae051c1fad1494adbb3b16c4af9ca5f99cd8d60fbc1a34ae89cb119a5f3ceb17" +checksum = "a9e6afdc4cc3af5fa2bd2cdf654acae91a24300358a4370c82f4c34f026d52be" dependencies = [ "bincode", "byteorder", @@ -4102,9 +4102,9 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1ea0dd246b4ba2e7011adf61894a8f6a7ef0442066fde618f82f51991e6f42f" +checksum = "acda9b3df626889f88bf2ab8960facf1b131dd27924c6e2bcca41b29cc208305" dependencies = [ "bv", "bytemuck", @@ -4120,9 +4120,9 @@ dependencies = [ [[package]] name = "solana-clap-utils" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da92d3058faa4d39e527765a3f81f36e1dd6529eaa2d13268a0ac6b5ab00602" +checksum = "8cdf7db331e617e42df7793f40421b8b3ea74d893ec2306f401cde3ab816c5d7" dependencies = [ "chrono", "clap 2.34.0", @@ -4137,9 +4137,9 @@ dependencies = [ [[package]] name = "solana-cli-config" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fec5a309a91978b21919f589f982a7eed9d88f76d388a09a50ae723bd623ead" +checksum = "630ed0731474c3e4c1b2d2c1089671a10e82e56c6f65c2d43eceae723fcfa244" dependencies = [ "dirs-next", "lazy_static", @@ -4153,9 +4153,9 @@ dependencies = [ [[package]] name = "solana-cli-output" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771a534f67b832741a23bdb7404d3e1b0ee04150898ac705661b7ce60a896ebf" +checksum = "42320a45b29c4d8375be02a71d2df8b8ddd3ce97c4cff7addd1cc8ceaf0d4417" dependencies = [ "Inflector", "base64 0.21.4", @@ -4180,9 +4180,9 @@ dependencies = [ [[package]] name = "solana-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7385e3d0590764c3b6e09aea493c28c4ccc5d4fc599656cc23579708cc38c270" +checksum = "26e6ac6371d264548d314865daad18a0a2fb2ba8b5e1ea9b92de004f9887e42a" dependencies = [ "async-trait", "bincode", @@ -4213,9 +4213,9 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf6104df0eac32f834624ce86c032ac451472f15f2f784794082f60a85caaef" +checksum = "a4900e0d76d81564c0ea43396c5e9e24f34eba9cc36cab249b6ff6a576973855" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -4223,9 +4223,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e8dfaa1c61292a9e1bdf15ebb8d1315adb19e923a21c12a0a4d15db6d94e1e" +checksum = "5ce2f25dbe765208a79af782b79b2d06f382a82b13050890edd52dcab11078b8" dependencies = [ "bincode", "chrono", @@ -4237,9 +4237,9 @@ dependencies = [ [[package]] name = "solana-connection-cache" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c17e4089fc320627baee69e5aec0a41c9523596ae3d68c525e967d4c6324c2a" +checksum = "f81baf526f3c36c4ae07fdd6d924e352e89444a9c77771baab66fe00c681825d" dependencies = [ "async-trait", "bincode", @@ -4259,9 +4259,9 @@ dependencies = [ [[package]] name = "solana-cost-model" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f567930e73f2ec1ef2f44e1b074ba5f119a222e9583deecc7ab9429154f1bc" +checksum = "841b749107b994fb14ff14d80f3ffffdb68101b71b57d7d385e5e30a734cea1e" dependencies = [ "lazy_static", "log", @@ -4283,9 +4283,9 @@ dependencies = [ [[package]] name = "solana-entry" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b763848ab591e81a260581a2c469d9ea126093f494a403446fa60c1c56a0ca" +checksum = "e63abc6b205a9f6897772116a620f847b0d741bba4af5f84f0ee5570f4d9cc2b" dependencies = [ "bincode", "crossbeam-channel", @@ -4305,9 +4305,9 @@ dependencies = [ [[package]] name = "solana-faucet" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382e396b56e66f81f387b405ff12dd4af25cd06f9c1fd4eed621d98e841704f4" +checksum = "220737d8c607e3799b5bf10ba3425b13b347abec9d1a20c1dfdfd04a17c38dcf" dependencies = [ "bincode", "byteorder", @@ -4329,9 +4329,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380a5173027b9d70fa033272ebc8ffe8e59c64274109ac99b05578a4c9434215" +checksum = "62311c3a992af13c270d9bf219b6d7534f7ddc30074fa31a5261273e9f7d4b83" dependencies = [ "ahash 0.8.5", "blake3", @@ -4359,9 +4359,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1017a631a72e211f8bd78e707c9424fb0ef074f3df5bb7b6baef6912a3b1b6b" +checksum = "6a9b64778efc635c7cd8cae084fef4b034b7f2b5a0c022d5173179446c56e71f" dependencies = [ "proc-macro2", "quote", @@ -4371,9 +4371,9 @@ dependencies = [ [[package]] name = "solana-ledger" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f48907e7c8e991f5703de39f3c73e7a9d4b60c57d5fe4a48b01cb71355d3a3a" +checksum = "8fddcd3d11131039bddf4c1d98fe987c64ee3884626ad8c8f0c023e0ccd9e196" dependencies = [ "assert_matches", "bincode", @@ -4437,9 +4437,9 @@ dependencies = [ [[package]] name = "solana-loader-v4-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f06f3b3a5883ef11b2ce1f36d1f6be8e7c99e4fc5124bd6bf585b317a80f82" +checksum = "2a2c53ce07056371bf0998f872cfa4c23d156c9348f18f21e1f34b4bd956c51d" dependencies = [ "log", "solana-measure", @@ -4450,9 +4450,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfcfc4dc59c2f64b0d78b27e5db0238e4f6be852454b0f915bd1f58806fe08c3" +checksum = "6960f7149fb0ec738d04224f5f44b331c467e8fec4ede41c6c702562f0365688" dependencies = [ "env_logger", "lazy_static", @@ -4461,9 +4461,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5766f4f11b7c34ba0d1be3b94f303b57a826f5f773c29b90a96d0fb80286df29" +checksum = "0d14133e480bd877b8b4174fc7fc8c591b227d451d0fd48c917e5d3af7bac978" dependencies = [ "log", "solana-sdk", @@ -4471,9 +4471,9 @@ dependencies = [ [[package]] name = "solana-merkle-tree" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d72ddb3ea83c717bec0445d8514d206c6ecbcb3f750ce1e5aa3b3fa39aa8f727" +checksum = "5b54c0e9971bae72fd81d6de36ace4f895e83f47b7f454122bae7f7a61b4b5d9" dependencies = [ "fast-math", "solana-program", @@ -4481,9 +4481,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bdbfd703709a927eb3bc35b478eefa91b354778a6692141abd1a13648acfceb" +checksum = "9cf4c91c0dd58c83fa0065b777ebaf16a6977b145ae847937b4e8aa119993d96" dependencies = [ "crossbeam-channel", "gethostname", @@ -4496,9 +4496,9 @@ dependencies = [ [[package]] name = "solana-net-utils" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc3d8b83882f630036a8c516462ffa15cf0b6f1d6430fe7fa91e66b890960bc" +checksum = "dc57096f56badce23b05ca98da2490b2638e14c445be92bf7fdd011e0274aa45" dependencies = [ "bincode", "clap 3.2.25", @@ -4518,9 +4518,9 @@ dependencies = [ [[package]] name = "solana-perf" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a726d035d03e729d5ab3c40755c947aaccf138f4b7cd2dd9af38760321cc8768" +checksum = "f2bf7a94309c36fe1627a93ecc1001996bec1acc34cce557c0a64b43d32ad618" dependencies = [ "ahash 0.8.5", "bincode", @@ -4547,9 +4547,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e882d2ae4903aec8657d18075897cba532155d8f49a0aa39acc0f86fee8c5697" +checksum = "a75eabbb12920ffe88155f611450a17d6ae28b754b707ec63f83ada500014c8a" dependencies = [ "ark-bn254", "ark-ec", @@ -4601,9 +4601,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29040e56093c2d4951e621afc5addc24dead5028d4972ca741feb9e3b12ecef" +checksum = "917a320dca9f88fb3ca4f5549205b0525e47f51b6b98eb34f6728038df484b44" dependencies = [ "base64 0.21.4", "bincode", @@ -4629,9 +4629,9 @@ dependencies = [ [[package]] name = "solana-pubsub-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5898c476dbf30ec845d6f29d7e88458880049328f6c922a2ece708362e0f183" +checksum = "db1ed23c4d7d03e6d8003deb3bdd2dc1b364bcf6a9ca7cd41736a24ac2803d40" dependencies = [ "crossbeam-channel", "futures-util", @@ -4654,9 +4654,9 @@ dependencies = [ [[package]] name = "solana-quic-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381ec25d50d62f85da4d21d1378691494ec259b69286c8d1974b7d9b69257cf2" +checksum = "6c94e45645bb116a3519c346112e066950ce5e3701db66b25e7ca968026dacbf" dependencies = [ "async-mutex", "async-trait", @@ -4681,9 +4681,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba4b7e8a99267776bae34c7787ec91b86361d787c3569ca67c8ea228950b83d" +checksum = "2163dee2025e0a758c755fe8682ced64f40e81fee0d3641c39486a7c8acf8dc8" dependencies = [ "lazy_static", "num_cpus", @@ -4691,9 +4691,9 @@ dependencies = [ [[package]] name = "solana-remote-wallet" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ab92499e040a78053dbc6847088f3592c5e781be7550703af6d4e540d2b487" +checksum = "352a233e1bc3164559ee03dabe034d4b056d3df30cb20f9813fb1d81290d014c" dependencies = [ "console", "dialoguer", @@ -4710,9 +4710,9 @@ dependencies = [ [[package]] name = "solana-rpc-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11bfede52a585902745d9fcd17a1e36524e7d8f6c7ff6c919f06804f6be7372" +checksum = "89dd52108c0c7fea71f2417daf0310592f108459a4afc223f243e5021a7cea39" dependencies = [ "async-trait", "base64 0.21.4", @@ -4736,9 +4736,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-api" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943e8e0250573fc8f3c4dc774f03841e3d47b52132d2b8dab11ecf48a1111a4e" +checksum = "536fac51d733b6c73661da49859585c3e3e1427e8d94871db80c3f9e9b569f68" dependencies = [ "base64 0.21.4", "bs58", @@ -4758,9 +4758,9 @@ dependencies = [ [[package]] name = "solana-rpc-client-nonce-utils" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae09cb1b0ee09b2b49407f57aae538aae4c11abfa7b412f0a27672a3e20e338e" +checksum = "8381f6604e62058e106c3be4d1693264eaed7d066e5caa375beb51b539d7a579" dependencies = [ "clap 2.34.0", "solana-clap-utils", @@ -4771,9 +4771,9 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff640ad07861b6f9eaa05ca0d6393c982b9042fb8aea1284a4f231b55fcb1696" +checksum = "091b596a19845387cf761b49bb5a4a3334427cd90cb863f242e57e4135fcc46c" dependencies = [ "arrayref", "base64 0.21.4", @@ -4848,9 +4848,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b191352781d621b08b3513b02857c8e89f891a8e2aeeeecff977f9819e1a7d5" +checksum = "f1628655c50328b0a676b1a956bfbdd39e4ee8e1d48f59aaa907da16393c742b" dependencies = [ "assert_matches", "base64 0.21.4", @@ -4902,9 +4902,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a7d5483adb2e54e79160ff03fb20fc93e537cc06bef0fc964e2e6e3bbefdbd" +checksum = "a17489fa2101a7bfbd19629e53f6801f4428c584a5964acfc861d0151eb9b502" dependencies = [ "bs58", "proc-macro2", @@ -4921,9 +4921,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-stake-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e69e4c664dda629b8b24b935f223ce1989fda943e4df1d92d93cb7139ec5e849" +checksum = "73571d611f591e1bdfbf746bc4b574e9a8036f8f611e623922f3a5c5f458b15b" dependencies = [ "bincode", "log", @@ -4936,9 +4936,9 @@ dependencies = [ [[package]] name = "solana-storage-bigtable" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46aef0676c669ecc9951d0a7c58f47021fcfe1002ce47e787ec590a6cab51bdd" +checksum = "fdfb546939ab7dbb65c52f0d5057d576fa3662426a4c79fc44ec072cf741b9a6" dependencies = [ "backoff", "bincode", @@ -4970,9 +4970,9 @@ dependencies = [ [[package]] name = "solana-storage-proto" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a98def46c054093f5fb1ead0607368d1d50bccf25f14b36c24ea69eab7f0d2" +checksum = "0ab4a4b6e4e4a66174a7abad173c692affe018f4bed31dec7e9943073687be9b" dependencies = [ "bincode", "bs58", @@ -4987,9 +4987,9 @@ dependencies = [ [[package]] name = "solana-streamer" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437010764fc78e4f195ea6175ae4146bce280304f1cba9131152ea362c40afd0" +checksum = "2881a1815bccd67fc0a3587e1a753d17a04e55ac3a59820e30c43f8e47faac1f" dependencies = [ "async-channel", "bytes", @@ -5019,9 +5019,9 @@ dependencies = [ [[package]] name = "solana-system-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58ab92849f22d25a1860ecfe700e707f9733ee00906750947f6c3963ca7b252" +checksum = "5acb8e57fca3c5115e5c4fc7c71bd4c87e4d3fbfb5f75037579728b9b9d2b98a" dependencies = [ "bincode", "log", @@ -5033,9 +5033,9 @@ dependencies = [ [[package]] name = "solana-thin-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996604d2fcfb8809181cc923f4f2600ebc3dc8cf440532a016ae58b3fe99109" +checksum = "c9da32840c38fdbb5867ee8ec4501d48ccb5f6bfbc5d20e506af92fa5b6891c8" dependencies = [ "bincode", "log", @@ -5048,9 +5048,9 @@ dependencies = [ [[package]] name = "solana-tpu-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8845778aa98c7112654fe19ba4ee78d399a766e926d21c10d117ab3b1c3789" +checksum = "57763d8c245ccd9b06b7402ddb7bf3979ce0cd3be728a37d7612e15b71f5c86c" dependencies = [ "async-trait", "bincode", @@ -5072,9 +5072,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0069b2d163939c4084f91b50b2e1de7848ce7e0e8ecde92f894771fb97fc786" +checksum = "d374b4db545fe897d8f111d4b0150cd6417a94c7612724a2367fd268ff0d3bb2" dependencies = [ "Inflector", "base64 0.21.4", @@ -5097,9 +5097,9 @@ dependencies = [ [[package]] name = "solana-udp-client" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fd2263d2392b6356f79339b4f512834d8c88856a078daa8dd5eeb3acb0dcd4" +checksum = "8b4f8e8f987147c994c5b9ab78c0d85aa9d749fb82a01f7fd5d637eb0af8891a" dependencies = [ "async-trait", "solana-connection-cache", @@ -5112,9 +5112,9 @@ dependencies = [ [[package]] name = "solana-version" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8f4ce2228852ba69d67641086e70a6133502406ba28225eaf70465f63f1d9d4" +checksum = "4e712bd25a150e931a4abf20b1116d640b37a646446dd0e336b4431277d8b473" dependencies = [ "log", "rustc_version", @@ -5128,9 +5128,9 @@ dependencies = [ [[package]] name = "solana-vote" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f9464af623e140ddd68a2932332ffb4e444cd22b7a7c2ad66e66761ed97060" +checksum = "8b064b3a81238229ae29cab8866ffb7076067b8fe518d75e22923a7f000b419c" dependencies = [ "crossbeam-channel", "itertools", @@ -5147,9 +5147,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a83b8c25a3332669e4ef795c33e724b82acbfcd1f646a482b0966e63392300" +checksum = "ca84f0eab3aa693d5af43d062c2c54022fc7ca0ea8792bd74d03e5120b4ea0f6" dependencies = [ "bincode", "log", @@ -5169,9 +5169,9 @@ dependencies = [ [[package]] name = "solana-zk-token-proof-program" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "554794c9a4fcfda4a8a106d9419eeae02f7b7f3924411b8d97b2ba93d740a00b" +checksum = "cc617d1bc29188034a5e2780f9eaa25b8eb844387e09e6b9f1ec1e7e966b004a" dependencies = [ "bytemuck", "num-derive 0.3.3", @@ -5183,9 +5183,9 @@ dependencies = [ [[package]] name = "solana-zk-token-sdk" -version = "1.17.20" +version = "1.17.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28bfe4443f550d37b0055d3dade5ae0dc951d8f80b9f58f1043b699fe9a2f326" +checksum = "0800a272fd47a03ec1a322078e7bef1d988c3d3d576c9d79547af55cbe1f8eab" dependencies = [ "aes-gcm-siv", "base64 0.21.4", diff --git a/Cargo.toml b/Cargo.toml index 6b18405..83b24c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,22 +14,22 @@ itertools = "0.10.1" bincode = "1.3.3" rand = "0.7.3" borsh = "0.9.1" -solana-sdk = "~1.17" -solana-program = "~1.17" -solana-logger = "~1.17" -solana-runtime = "~1.17" -solana-transaction-status = "~1.17" -solana-cli-output = "~1.17" -solana-bpf-loader-program = "~1.17" -solana-compute-budget-program = "~1.17" -solana-vote-program = "~1.17" -solana-stake-program = "~1.17" -solana-config-program = "~1.17" -solana-client = "~1.17" -solana-faucet = "~1.17" -solana-program-runtime = "~1.17" -solana-ledger = "~1.17" -solana-accounts-db = "~1.17" +solana-sdk = "=1.17.17" +solana-program = "=1.17.17" +solana-logger = "=1.17.17" +solana-runtime = "=1.17.17" +solana-transaction-status = "=1.17.17" +solana-cli-output = "=1.17.17" +solana-bpf-loader-program = "=1.17.17" +solana-compute-budget-program = "=1.17.17" +solana-vote-program = "=1.17.17" +solana-stake-program = "=1.17.17" +solana-config-program = "=1.17.17" +solana-client = "=1.17.17" +solana-faucet = "=1.17.17" +solana-program-runtime = "=1.17.17" +solana-ledger = "=1.17.17" +solana-accounts-db = "=1.17.17" spl-token = "3.3.0" spl-token-2022 = "1.0.0" spl-memo = "3.0.1" diff --git a/src/lib.rs b/src/lib.rs index 18c5c98..df41281 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -162,7 +162,7 @@ pub trait Environment { signers: &[&Keypair], ) -> EncodedConfirmedTransactionWithStatusMeta { let tx = self.tx_with_instructions(instructions, signers); - return self.execute_transaction(tx); + self.execute_transaction(tx) } /// Assemble the given instructions into a transaction and sign it. All transactions executed by this method are signed and payed for by the payer. @@ -173,7 +173,7 @@ pub trait Environment { new_payer: Keypair, ) -> EncodedConfirmedTransactionWithStatusMeta { let tx = self.tx_with_instructions_with_payer(instructions, signers, new_payer); - return self.execute_transaction(tx); + self.execute_transaction(tx) } /// Assemble the given instructions into a transaction and sign it. All transactions executed by this method are signed and payed for by the payer. @@ -185,7 +185,7 @@ pub trait Environment { ) -> EncodedConfirmedTransactionWithStatusMeta { let tx = self.tx_with_instructions(instructions, signers); println!("{:#?}", &tx); - return self.execute_transaction(tx); + self.execute_transaction(tx) } /// Assemble the given instructions into a transaction and sign it. All transactions executed by this method are signed and payed for by the new_payer. @@ -198,7 +198,7 @@ pub trait Environment { ) -> EncodedConfirmedTransactionWithStatusMeta { let tx = self.tx_with_instructions_with_payer(instructions, signers, new_payer); println!("{:#?}", &tx); - return self.execute_transaction(tx); + self.execute_transaction(tx) } /// Executes a transaction constructing an empty account with the specified amount of space and lamports, owned by the provided program. @@ -437,31 +437,32 @@ impl LocalEnvironment { self.get_latest_blockhash() } -} - -impl Environment for LocalEnvironment { - fn payer(&self) -> Keypair { - clone_keypair(&self.faucet) - } - fn execute_transaction(&mut self, tx: T) -> EncodedConfirmedTransactionWithStatusMeta + pub fn execute_transactions( + &mut self, + txs: Vec, + ) -> Vec where VersionedTransaction: From, { - let tx = tx.into(); - let len = bincode::serialize(&tx).unwrap().len(); - if len > packet::PACKET_DATA_SIZE { - panic!( - "tx {:?} of size {} is {} too large", - tx, - len, - len - packet::PACKET_DATA_SIZE - ) - } - let txs = vec![tx]; - + let txs = txs + .into_iter() + .map(|tx| { + let tx = VersionedTransaction::from(tx); + let len = bincode::serialize(&tx).unwrap().len(); + if len > packet::PACKET_DATA_SIZE { + panic!( + "tx {:?} of size {} is {} too large", + tx, + len, + len - packet::PACKET_DATA_SIZE + ) + } + tx + }) + .collect::>(); let batch = self.bank.prepare_entry_batch(txs.clone()).unwrap(); - let tx_sanitized = batch.sanitized_transactions()[0].clone(); + let txs_sanitized = batch.sanitized_transactions(); let mut mint_decimals = HashMap::new(); let tx_pre_token_balances = solana_ledger::token_balances::collect_token_balances( @@ -496,103 +497,138 @@ impl Environment for LocalEnvironment { &batch, &mut mint_decimals, ); - let ( + + let mut encoded_confirmed_txs = vec![]; + + for ( tx, execution_result, pre_balances, post_balances, pre_token_balances, post_token_balances, - ) = izip!( + tx_sanitized, + ) in izip!( txs.iter(), execution_results.into_iter(), pre_balances.into_iter(), post_balances.into_iter(), tx_pre_token_balances.into_iter(), tx_post_token_balances.into_iter(), - ).next().expect("transaction could not be executed. Enable debug logging to get more information on why"); - - let fee = self - .bank - .get_fee_for_message(tx_sanitized.message()) - .expect("Fee calculation must succeed"); - - let status; - let inner_instructions; - let log_messages; - let return_data; - let compute_units_consumed; - - match execution_result { - TransactionExecutionResult::Executed { details, .. } => { - status = details.status; - inner_instructions = details.inner_instructions; - log_messages = details.log_messages; - return_data = details.return_data; - compute_units_consumed = Some(details.executed_units); - } - TransactionExecutionResult::NotExecuted(err) => { - status = Err(err); - inner_instructions = None; - log_messages = None; - return_data = None; - compute_units_consumed = None; + txs_sanitized.into_iter(), + ) { + let fee = self + .bank + .get_fee_for_message(tx_sanitized.message()) + .expect("Fee calculation must succeed"); + + let status; + let inner_instructions; + let log_messages; + let return_data; + let compute_units_consumed; + + match execution_result { + TransactionExecutionResult::Executed { details, .. } => { + status = details.status; + inner_instructions = details.inner_instructions; + log_messages = details.log_messages; + return_data = details.return_data; + compute_units_consumed = Some(details.executed_units); + } + TransactionExecutionResult::NotExecuted(err) => { + status = Err(err); + inner_instructions = None; + log_messages = None; + return_data = None; + compute_units_consumed = None; + } } + + let inner_instructions = inner_instructions.map(|inner_instructions| { + inner_instructions + .into_iter() + .enumerate() + .map(|(index, instructions)| { + let inner_ixs_mapped = instructions + .into_iter() + .map(|x| solana_transaction_status::InnerInstruction { + instruction: x.instruction, + stack_height: Some(x.stack_height as u32), + }) + .collect(); + InnerInstructions { + index: index as u8, + instructions: inner_ixs_mapped, + } + }) + .filter(|i| !i.instructions.is_empty()) + .collect() + }); + let tx_status_meta = TransactionStatusMeta { + status, + fee, + pre_balances, + post_balances, + pre_token_balances: Some(pre_token_balances), + post_token_balances: Some(post_token_balances), + inner_instructions, + log_messages, + rewards: None, + loaded_addresses: tx_sanitized.get_loaded_addresses(), + return_data, + compute_units_consumed, + }; + encoded_confirmed_txs.push( + ConfirmedTransactionWithStatusMeta { + slot, + tx_with_meta: TransactionWithStatusMeta::Complete( + VersionedTransactionWithStatusMeta { + transaction: tx.clone(), + meta: tx_status_meta, + }, + ), + block_time: Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs() + .try_into() + .unwrap(), + ), + } + .encode(UiTransactionEncoding::Binary, Some(0)) + .expect("Failed to encode transaction"), + ); } + encoded_confirmed_txs + } +} - let inner_instructions = inner_instructions.map(|inner_instructions| { - inner_instructions - .into_iter() - .enumerate() - .map(|(index, instructions)| { - let inner_ixs_mapped = instructions - .into_iter() - .map(|x| solana_transaction_status::InnerInstruction { - instruction: x.instruction, - stack_height: Some(x.stack_height as u32), - }) - .collect(); - InnerInstructions { - index: index as u8, - instructions: inner_ixs_mapped, - } - }) - .filter(|i| !i.instructions.is_empty()) - .collect() - }); - - let tx_status_meta = TransactionStatusMeta { - status, - fee, - pre_balances, - post_balances, - pre_token_balances: Some(pre_token_balances), - post_token_balances: Some(post_token_balances), - inner_instructions, - log_messages, - rewards: None, - loaded_addresses: tx_sanitized.get_loaded_addresses(), - return_data, - compute_units_consumed, - }; +impl Environment for LocalEnvironment { + fn payer(&self) -> Keypair { + clone_keypair(&self.faucet) + } - ConfirmedTransactionWithStatusMeta { - slot, - tx_with_meta: TransactionWithStatusMeta::Complete(VersionedTransactionWithStatusMeta { - transaction: tx.clone(), - meta: tx_status_meta, - }), - block_time: Some( - SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() - .try_into() - .unwrap(), - ), + fn execute_transaction(&mut self, tx: T) -> EncodedConfirmedTransactionWithStatusMeta + where + VersionedTransaction: From, + { + let tx: VersionedTransaction = tx.into(); + let len = bincode::serialize(&tx).unwrap().len(); + if len > packet::PACKET_DATA_SIZE { + panic!( + "tx {:?} of size {} is {} too large", + tx, + len, + len - packet::PACKET_DATA_SIZE + ) } - .encode(UiTransactionEncoding::Binary, Some(0)) - .expect("Failed to encode transaction") + + self.execute_transactions::(vec![tx]) + .into_iter() + .next() + .unwrap() } fn get_latest_blockhash(&self) -> Hash { @@ -629,6 +665,11 @@ impl LocalEnvironmentBuilder { .accounts .remove(&feature_set::fix_recent_blockhashes::id()); + // Deactiveate delay_visibility_of_program_deployment to allow to programs to run on the same slot they are deployed on + config + .accounts + .remove(&feature_set::delay_visibility_of_program_deployment::id()); + let mut builder = LocalEnvironmentBuilder { faucet, config }; builder.add_account_with_data( spl_associated_token_account::ID, @@ -652,6 +693,14 @@ impl LocalEnvironmentBuilder { programs::SPL_TOKEN_2022, true, ); + builder.add_account_with_data( + "shmem4EWT2sPdVGvTZCzXXRAURL9G5vpPxNwSeKhHUL" + .parse() + .unwrap(), + bpf_loader::ID, + programs::SPL_SHARED_MEMORY, + true, + ); builder.add_account_with_lamports(rent::ID, sysvar::ID, 1); builder } From 5b3da84c593812ff1896852b239d6a517891a744 Mon Sep 17 00:00:00 2001 From: Garrett Weber Date: Fri, 16 Feb 2024 20:15:21 -0700 Subject: [PATCH 4/6] Remove unnecessary check --- src/lib.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index df41281..4151f77 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -615,16 +615,6 @@ impl Environment for LocalEnvironment { VersionedTransaction: From, { let tx: VersionedTransaction = tx.into(); - let len = bincode::serialize(&tx).unwrap().len(); - if len > packet::PACKET_DATA_SIZE { - panic!( - "tx {:?} of size {} is {} too large", - tx, - len, - len - packet::PACKET_DATA_SIZE - ) - } - self.execute_transactions::(vec![tx]) .into_iter() .next() From ebe975a4122103642da122bcea9e9f540961e94e Mon Sep 17 00:00:00 2001 From: Garrett Weber Date: Sat, 17 Feb 2024 16:14:27 -0700 Subject: [PATCH 5/6] Fix #44 patch and cargo fmt Change advance_blockhash to create new bank --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/lib.rs | 30 ++++++++++-------------------- src/programs.rs | 2 +- 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d661a4..8964abb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3000,7 +3000,7 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "poc-framework" -version = "0.3.1" +version = "0.4.0" dependencies = [ "bincode", "borsh 0.9.3", diff --git a/Cargo.toml b/Cargo.toml index 83b24c9..bd6dab4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poc-framework" -version = "0.3.1" +version = "0.4.0" authors = [] edition = "2018" repository = "https://github.com/neodyme-labs/solana-poc-framework" diff --git a/src/lib.rs b/src/lib.rs index 4151f77..0b2da55 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -75,7 +75,7 @@ pub trait Environment { /// Returns the keypair used to pay for all transactions. All transaction fees and rent costs are payed for by this keypair. fn payer(&self) -> Keypair; /// Executes the batch of transactions in the right order and waits for them to be confirmed. The execution results are returned. - fn execute_transaction(&mut self, txs: T) -> EncodedConfirmedTransactionWithStatusMeta + fn execute_transaction(&mut self, tx: T) -> EncodedConfirmedTransactionWithStatusMeta where VersionedTransaction: From; /// Fetch a recent blockhash, for construction of transactions. @@ -421,21 +421,17 @@ impl LocalEnvironment { } /// Advance the bank to the next blockhash. - pub fn advance_blockhash(&self) -> Hash { - let parent_distance = if self.bank.slot() == 0 { - 1 - } else { - self.bank.slot() - self.bank.parent_slot() - }; + pub fn advance_blockhash(self) -> Self { + let new_slot = self.bank.slot().saturating_add(1); - for _ in 0..parent_distance { - let last_blockhash = self.bank.last_blockhash(); - while self.bank.last_blockhash() == last_blockhash { - self.bank.register_tick(&Hash::new_unique()) - } + while !self.bank.is_complete() { + self.bank.register_tick(&Hash::new_unique()); } - self.get_latest_blockhash() + LocalEnvironment { + bank: Bank::new_from_parent(Arc::new(self.bank), &self.faucet.pubkey(), new_slot), + faucet: self.faucet, + } } pub fn execute_transactions( @@ -650,10 +646,6 @@ impl LocalEnvironmentBuilder { &[], ); genesis_utils::activate_all_features(&mut config); - // Deactivate fix_recent_blockhashes feature to allow for advancing blockhashes without creating new banks - config - .accounts - .remove(&feature_set::fix_recent_blockhashes::id()); // Deactiveate delay_visibility_of_program_deployment to allow to programs to run on the same slot they are deployed on config @@ -914,9 +906,7 @@ impl LocalEnvironmentBuilder { bank, faucet: clone_keypair(&self.faucet), }; - env.advance_blockhash(); - - env + env.advance_blockhash() } } diff --git a/src/programs.rs b/src/programs.rs index ce763f6..e87c567 100644 --- a/src/programs.rs +++ b/src/programs.rs @@ -9,4 +9,4 @@ pub const SPL_TOKEN: &[u8] = include_bytes!("programs/spl_token-4.0.0.so"); pub const SPL_TOKEN_2022: &[u8] = include_bytes!("programs/spl_token_2022-1.0.0.so"); -pub const SPL_SHARED_MEMORY: &[u8] = include_bytes!("programs/spl_shared_memory-2.0.6.so"); \ No newline at end of file +pub const SPL_SHARED_MEMORY: &[u8] = include_bytes!("programs/spl_shared_memory-2.0.6.so"); From d38610f453399785077bafc8501f478bec1b2c88 Mon Sep 17 00:00:00 2001 From: Garrett Weber Date: Sun, 18 Feb 2024 06:09:10 -0700 Subject: [PATCH 6/6] Add account data serialization functions Add function that prefers spl_shared_memory over bpf_loader --- src/lib.rs | 81 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0b2da55..defb55f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,7 +7,7 @@ use std::{ time::{SystemTime, UNIX_EPOCH}, }; -use borsh::BorshDeserialize; +use borsh::{BorshDeserialize, BorshSerialize}; use bpf_loader_upgradeable::UpgradeableLoaderState; use itertools::izip; use rand::{prelude::StdRng, rngs::OsRng, SeedableRng}; @@ -23,7 +23,7 @@ use solana_client::{rpc_client::RpcClient, rpc_config::RpcTransactionConfig}; use solana_program::{ bpf_loader, bpf_loader_upgradeable, hash::Hash, - instruction::Instruction, + instruction::{AccountMeta, Instruction}, loader_instruction, message::Message, program_option::COption, @@ -42,9 +42,8 @@ use solana_sdk::{ commitment_config::CommitmentConfig, feature_set, genesis_config::GenesisConfig, - packet, - signature::Keypair, - signature::Signer, + packet::{self, PACKET_DATA_SIZE}, + signature::{Keypair, Signature, Signer}, system_transaction, transaction::{Transaction, VersionedTransaction}, }; @@ -325,9 +324,77 @@ pub trait Environment { acc } + /// Execute a transaction creating and filling a given account with the given data. + /// The account is required to be empty and will be owned by spl_shared_memory afterwards. + // Development note: Prefer this function due to efficiencies. + fn create_account_with_data(&mut self, account: &Keypair, data: &[u8]) { + let shared_memory_program_id: Pubkey = "shmem4EWT2sPdVGvTZCzXXRAURL9G5vpPxNwSeKhHUL" + .parse() + .unwrap(); + // Calculate the largest chunk size that can be written to the account in a single transaction. + let chunk_size = PACKET_DATA_SIZE.saturating_sub(1).saturating_sub( + bincode::serialized_size(&Transaction { + signatures: vec![Signature::default()], + message: Message::new( + &[Instruction::new_with_bincode( + shared_memory_program_id, + &[0u64], + vec![AccountMeta::new(account.pubkey(), false)], + )], + Some(&self.payer().pubkey()), + ), + }) + .unwrap() as usize, + ); + + self.execute_as_transaction( + &[system_instruction::create_account( + &self.payer().pubkey(), + &account.pubkey(), + self.get_rent_excemption(data.len()), + data.len() as u64, + &shared_memory_program_id, + )], + &[&self.payer(), account], + ) + .assert_success(); + + let mut offset = 0usize; + for chunk in data.chunks(chunk_size) { + println!("writing bytes {} to {}", offset, offset + chunk.len()); + let tx_data = [&(offset as u64).to_le_bytes(), chunk].concat(); + self.execute_as_transaction( + &[Instruction::new_with_bytes( + shared_memory_program_id, + &tx_data, + vec![AccountMeta::new(account.pubkey(), false)], + )], + &[], + ) + .assert_success(); + offset += chunk.len(); + } + } + + /// Execute a transaction creating and filling a given account with the given data. + /// Serializes the data using bincode. + fn create_account_with_bincode( + &mut self, + account: &Keypair, + data: &T, + ) { + self.create_account_with_data(account, &bincode::serialize(&data).unwrap()); + } + + /// Execute a transaction creating and filling a given account with the given data. + /// Serializes the data using borsh. + fn create_account_with_borsh(&mut self, account: &Keypair, data: &T) { + self.create_account_with_data(account, &data.try_to_vec().unwrap()); + } + /// Executes a transaction creating and filling the given account with the given data. /// The account is required to be empty and will be owned by bpf_loader afterwards. - fn create_account_with_data(&mut self, account: &Keypair, data: Vec) { + fn create_program_account_with_data(&mut self, account: &Keypair, data: &[u8]) { self.execute_transaction(system_transaction::create_account( &self.payer(), account, @@ -365,7 +432,7 @@ pub trait Environment { let keypair = Keypair::generate(&mut rng); if self.get_account(keypair.pubkey()).is_none() { - self.create_account_with_data(&keypair, data); + self.create_program_account_with_data(&keypair, &data); self.execute_as_transaction( &[loader_instruction::finalize( &keypair.pubkey(),