diff --git a/Cargo.lock b/Cargo.lock index f1ec8a2..80c2f28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -288,7 +288,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -416,6 +416,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.7.3" @@ -698,7 +704,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" dependencies = [ "libc", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1270,6 +1276,21 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" +[[package]] +name = "five8_const" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26dec3da8bc3ef08f2c04f61eab298c3ab334523e55f076354d6d6f613799a7b" +dependencies = [ + "five8_core", +] + +[[package]] +name = "five8_core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2551bf44bc5f776c15044b9b94153a00198be06743e262afaaa61f11ac7523a5" + [[package]] name = "flate2" version = "1.1.0" @@ -1539,6 +1560,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "histogram" version = "0.6.9" @@ -2004,7 +2031,7 @@ dependencies = [ "ark-bn254", "ark-ff", "num-bigint 0.4.6", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2557,7 +2584,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", ] @@ -2575,7 +2602,7 @@ dependencies = [ "rustls", "rustls-native-certs", "slab", - "thiserror", + "thiserror 1.0.69", "tinyvec", "tracing", ] @@ -3032,6 +3059,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + [[package]] name = "serde_bytes" version = "0.11.17" @@ -3223,6 +3259,19 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "solana-account" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f949fe4edaeaea78c844023bfc1c898e0b1f5a100f8a8d2d0f85d0a7b090258" +dependencies = [ + "solana-account-info", + "solana-clock", + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", +] + [[package]] name = "solana-account-decoder" version = "1.18.26" @@ -3240,14 +3289,49 @@ dependencies = [ "serde_json", "solana-config-program", "solana-sdk", - "spl-token", + "spl-token 4.0.0", "spl-token-2022", "spl-token-group-interface", "spl-token-metadata-interface", - "thiserror", + "thiserror 1.0.69", "zstd", ] +[[package]] +name = "solana-account-decoder-client-types" +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6329c4f360f5173dd6f65022708486cdd24d302841058e2310945a2502284105" +dependencies = [ + "base64 0.22.1", + "bs58 0.5.1", + "serde", + "serde_derive", + "serde_json", + "solana-account", + "solana-pubkey", +] + +[[package]] +name = "solana-account-info" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c17d606a298a205fae325489fbed88ee6dc4463c111672172327e741c8905d" +dependencies = [ + "solana-program-error", + "solana-program-memory", + "solana-pubkey", +] + +[[package]] +name = "solana-atomic-u64" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52e52720efe60465b052b9e7445a01c17550666beec855cce66f44766697bc2" +dependencies = [ + "parking_lot", +] + [[package]] name = "solana-clap-utils" version = "1.18.26" @@ -3259,7 +3343,7 @@ dependencies = [ "rpassword", "solana-remote-wallet", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tiny-bip39", "uriparse", "url", @@ -3294,10 +3378,29 @@ dependencies = [ "solana-thin-client", "solana-tpu-client", "solana-udp-client", - "thiserror", + "thiserror 1.0.69", "tokio", ] +[[package]] +name = "solana-clock" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c2177a1b9fe8326004f1151a5acd124420b737811080b1035df31349e4d892" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-commitment-config" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac49c4dde3edfa832de1697e9bcdb7c3b3f7cb7a1981b7c62526c8bb6700fb73" + [[package]] name = "solana-config-program" version = "1.18.26" @@ -3330,10 +3433,77 @@ dependencies = [ "solana-measure", "solana-metrics", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", ] +[[package]] +name = "solana-cpi" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc71126edddc2ba014622fc32d0f5e2e78ec6c5a1e0eb511b85618c09e9ea11" +dependencies = [ + "solana-account-info", + "solana-define-syscall", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-stable-layout", +] + +[[package]] +name = "solana-decode-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a6a6383af236708048f8bd8d03db8ca4ff7baf4a48e5d580f4cce545925470" +dependencies = [ + "num-traits", +] + +[[package]] +name = "solana-define-syscall" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf784bb2cb3e02cac9801813c30187344228d2ae952534902108f6150573a33d" + +[[package]] +name = "solana-epoch-rewards" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b575d3dd323b9ea10bb6fe89bf6bf93e249b215ba8ed7f68f1a3633f384db7" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-epoch-schedule" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce071fbddecc55d727b1d7ed16a629afe4f6e4c217bc8d00af3b785f6f67ed" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-fee-calculator" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89bc408da0fb3812bc3008189d148b4d3e08252c79ad810b245482a3f70cd8d" +dependencies = [ + "log", + "serde", + "serde_derive", +] + [[package]] name = "solana-frozen-abi" version = "1.18.26" @@ -3356,7 +3526,7 @@ dependencies = [ "sha2 0.10.8", "solana-frozen-abi-macro", "subtle", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3371,6 +3541,86 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "solana-hash" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf7bcb14392900fe02e4e34e90234fbf0c673d4e327888410ba99fa2ba0f4e99" +dependencies = [ + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "js-sys", + "serde", + "serde_derive", + "solana-atomic-u64", + "solana-sanitize", + "wasm-bindgen", +] + +[[package]] +name = "solana-instruction" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce496a475e5062ba5de97215ab39d9c358f9c9df4bb7f3a45a1f1a8bd9065ed" +dependencies = [ + "bincode", + "getrandom 0.2.15", + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-define-syscall", + "solana-pubkey", + "wasm-bindgen", +] + +[[package]] +name = "solana-instructions-sysvar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427f2d0d6dc0bb49f16cef5e7f975180d2e80aab9bdd3b2af68e2d029ec63f43" +dependencies = [ + "bitflags 2.9.0", + "solana-account-info", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-sanitize", + "solana-sdk-ids", + "solana-serialize-utils", + "solana-sysvar-id", +] + +[[package]] +name = "solana-keypair" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dbb7042c2e0c561afa07242b2099d55c57bd1b1da3b6476932197d84e15e3e4" +dependencies = [ + "bs58 0.5.1", + "ed25519-dalek", + "rand 0.7.3", + "solana-pubkey", + "solana-seed-phrase", + "solana-signature", + "solana-signer", + "wasm-bindgen", +] + +[[package]] +name = "solana-last-restart-slot" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6360ac2fdc72e7463565cd256eedcf10d7ef0c28a1249d261ec168c1b55cdd" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + [[package]] name = "solana-logger" version = "1.18.26" @@ -3392,6 +3642,25 @@ dependencies = [ "solana-sdk", ] +[[package]] +name = "solana-message" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268486ba8a294ed22a4d7c1ec05f540c3dbe71cfa7c6c54b6d4d13668d895678" +dependencies = [ + "lazy_static", + "serde", + "serde_derive", + "solana-hash", + "solana-instruction", + "solana-pubkey", + "solana-sanitize", + "solana-sdk-ids", + "solana-short-vec", + "solana-transaction-error", + "wasm-bindgen", +] + [[package]] name = "solana-metrics" version = "1.18.26" @@ -3404,7 +3673,16 @@ dependencies = [ "log", "reqwest", "solana-sdk", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "solana-msg" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36a1a14399afaabc2781a1db09cb14ee4cc4ee5c7a5a3cfcc601811379a8092" +dependencies = [ + "solana-define-syscall", ] [[package]] @@ -3506,13 +3784,63 @@ dependencies = [ "sha3 0.10.8", "solana-frozen-abi", "solana-frozen-abi-macro", - "solana-sdk-macro", - "thiserror", + "solana-sdk-macro 1.18.26", + "thiserror 1.0.69", "tiny-bip39", "wasm-bindgen", "zeroize", ] +[[package]] +name = "solana-program-entrypoint" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473ffe73c68d93e9f2aa726ad2985fe52760052709aaab188100a42c618060ec" +dependencies = [ + "solana-account-info", + "solana-msg", + "solana-program-error", + "solana-pubkey", +] + +[[package]] +name = "solana-program-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8ae2c1a8d0d4ae865882d5770a7ebca92bab9c685e43f0461682c6c05a35bfa" +dependencies = [ + "num-traits", + "solana-decode-error", + "solana-instruction", + "solana-msg", + "solana-pubkey", +] + +[[package]] +name = "solana-program-memory" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b0268f6c89825fb634a34bd0c3b8fdaeaecfc3728be1d622a8ee6dd577b60d4" +dependencies = [ + "num-traits", + "solana-define-syscall", +] + +[[package]] +name = "solana-program-option" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc677a2e9bc616eda6dbdab834d463372b92848b2bfe4a1ed4e4b4adba3397d0" + +[[package]] +name = "solana-program-pack" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "319f0ef15e6e12dc37c597faccb7d62525a509fec5f6975ecb9419efddeb277b" +dependencies = [ + "solana-program-error", +] + [[package]] name = "solana-program-runtime" version = "1.18.26" @@ -3538,7 +3866,30 @@ dependencies = [ "solana-metrics", "solana-sdk", "solana_rbpf", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "solana-pubkey" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40db1ff5a0f8aea2c158d78ab5f2cf897848964251d1df42fef78efd3c85b863" +dependencies = [ + "bs58 0.5.1", + "bytemuck", + "bytemuck_derive", + "five8_const", + "getrandom 0.2.15", + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-atomic-u64", + "solana-decode-error", + "solana-define-syscall", + "solana-sanitize", + "solana-sha256-hasher", + "wasm-bindgen", ] [[package]] @@ -3558,7 +3909,7 @@ dependencies = [ "solana-account-decoder", "solana-rpc-client-api", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-stream", "tokio-tungstenite", @@ -3589,7 +3940,7 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "solana-streamer", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -3618,10 +3969,33 @@ dependencies = [ "qstring", "semver", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "uriparse", ] +[[package]] +name = "solana-rent" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1aea8fdea9de98ca6e8c2da5827707fb3842833521b528a713810ca685d2480" +dependencies = [ + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-sysvar-id", +] + +[[package]] +name = "solana-reward-info" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18205b69139b1ae0ab8f6e11cdcb627328c0814422ad2482000fa2ca54ae4a2f" +dependencies = [ + "serde", + "serde_derive", +] + [[package]] name = "solana-rpc-client" version = "1.18.26" @@ -3667,7 +4041,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3680,9 +4054,15 @@ dependencies = [ "solana-clap-utils", "solana-rpc-client", "solana-sdk", - "thiserror", + "thiserror 1.0.69", ] +[[package]] +name = "solana-sanitize" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f1bc1357b8188d9c4a3af3fc55276e56987265eb7ad073ae6f8180ee54cecf" + [[package]] name = "solana-sdk" version = "1.18.26" @@ -3732,12 +4112,21 @@ dependencies = [ "solana-frozen-abi-macro", "solana-logger", "solana-program", - "solana-sdk-macro", - "thiserror", + "solana-sdk-macro 1.18.26", + "thiserror 1.0.69", "uriparse", "wasm-bindgen", ] +[[package]] +name = "solana-sdk-ids" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5d8b9cc68d5c88b062a33e23a6466722467dde0035152d8fb1afbcdf350a5f" +dependencies = [ + "solana-pubkey", +] + [[package]] name = "solana-sdk-macro" version = "1.18.26" @@ -3751,12 +4140,146 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "solana-sdk-macro" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86280da8b99d03560f6ab5aca9de2e38805681df34e0bb8f238e69b29433b9df" +dependencies = [ + "bs58 0.5.1", + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "solana-security-txt" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" +[[package]] +name = "solana-seed-phrase" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36187af2324f079f65a675ec22b31c24919cb4ac22c79472e85d819db9bbbc15" +dependencies = [ + "hmac 0.12.1", + "pbkdf2 0.11.0", + "sha2 0.10.8", +] + +[[package]] +name = "solana-serialize-utils" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "817a284b63197d2b27afdba829c5ab34231da4a9b4e763466a003c40ca4f535e" +dependencies = [ + "solana-instruction", + "solana-pubkey", + "solana-sanitize", +] + +[[package]] +name = "solana-sha256-hasher" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0037386961c0d633421f53560ad7c80675c0447cba4d1bb66d60974dd486c7ea" +dependencies = [ + "sha2 0.10.8", + "solana-define-syscall", + "solana-hash", +] + +[[package]] +name = "solana-short-vec" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c54c66f19b9766a56fa0057d060de8378676cb64987533fa088861858fc5a69" +dependencies = [ + "serde", +] + +[[package]] +name = "solana-signature" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d251c8f3dc015f320b4161daac7f108156c837428e5a8cc61136d25beb11d6" +dependencies = [ + "bs58 0.5.1", + "ed25519-dalek", + "serde", + "serde-big-array", + "serde_derive", + "solana-sanitize", +] + +[[package]] +name = "solana-signer" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c41991508a4b02f021c1342ba00bcfa098630b213726ceadc7cb032e051975b" +dependencies = [ + "solana-pubkey", + "solana-signature", + "solana-transaction-error", +] + +[[package]] +name = "solana-slot-hashes" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8691982114513763e88d04094c9caa0376b867a29577939011331134c301ce" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-sdk-ids", + "solana-sysvar-id", +] + +[[package]] +name = "solana-slot-history" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ccc1b2067ca22754d5283afb2b0126d61eae734fc616d23871b0943b0d935e" +dependencies = [ + "bv", + "serde", + "serde_derive", + "solana-sdk-ids", + "solana-sysvar-id", +] + +[[package]] +name = "solana-stable-layout" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f14f7d02af8f2bc1b5efeeae71bc1c2b7f0f65cd75bcc7d8180f2c762a57f54" +dependencies = [ + "solana-instruction", + "solana-pubkey", +] + +[[package]] +name = "solana-stake-interface" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5269e89fde216b4d7e1d1739cf5303f8398a1ff372a81232abbee80e554a838c" +dependencies = [ + "num-traits", + "serde", + "serde_derive", + "solana-clock", + "solana-cpi", + "solana-decode-error", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-system-interface", + "solana-sysvar-id", +] + [[package]] name = "solana-streamer" version = "1.18.26" @@ -3785,11 +4308,72 @@ dependencies = [ "solana-metrics", "solana-perf", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", "x509-parser", ] +[[package]] +name = "solana-system-interface" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94d7c18cb1a91c6be5f5a8ac9276a1d7c737e39a21beba9ea710ab4b9c63bc90" +dependencies = [ + "js-sys", + "num-traits", + "serde", + "serde_derive", + "solana-decode-error", + "solana-instruction", + "solana-pubkey", + "wasm-bindgen", +] + +[[package]] +name = "solana-sysvar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf6b44740d7f0c9f375d045c165bc0aab4a90658f92d6835aeb0649afaeaff9a" +dependencies = [ + "base64 0.22.1", + "bincode", + "lazy_static", + "serde", + "serde_derive", + "solana-account-info", + "solana-clock", + "solana-define-syscall", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-fee-calculator", + "solana-hash", + "solana-instruction", + "solana-instructions-sysvar", + "solana-last-restart-slot", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-pubkey", + "solana-rent", + "solana-sanitize", + "solana-sdk-ids", + "solana-sdk-macro 2.2.1", + "solana-slot-hashes", + "solana-slot-history", + "solana-stake-interface", + "solana-sysvar-id", +] + +[[package]] +name = "solana-sysvar-id" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5762b273d3325b047cfda250787f8d796d781746860d5d0a746ee29f3e8812c1" +dependencies = [ + "solana-pubkey", + "solana-sdk-ids", +] + [[package]] name = "solana-thin-client" version = "1.18.26" @@ -3825,10 +4409,55 @@ dependencies = [ "solana-rpc-client", "solana-rpc-client-api", "solana-sdk", - "thiserror", + "thiserror 1.0.69", "tokio", ] +[[package]] +name = "solana-transaction" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "753b3e9afed170e4cfc0ea1e87b5dfdc6d4a50270869414edd24c6ea1f529b29" +dependencies = [ + "serde", + "serde_derive", + "solana-hash", + "solana-instruction", + "solana-keypair", + "solana-message", + "solana-pubkey", + "solana-sanitize", + "solana-sdk-ids", + "solana-short-vec", + "solana-signature", + "solana-transaction-error", + "wasm-bindgen", +] + +[[package]] +name = "solana-transaction-context" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5022de04cbba05377f68bf848c8c1322ead733f88a657bf792bb40f3257b8218" +dependencies = [ + "solana-account", + "solana-instruction", + "solana-pubkey", + "solana-rent", +] + +[[package]] +name = "solana-transaction-error" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a9dc8fdb61c6088baab34fc3a8b8473a03a7a5fd404ed8dd502fa79b67cb1" +dependencies = [ + "serde", + "serde_derive", + "solana-instruction", + "solana-sanitize", +] + [[package]] name = "solana-transaction-status" version = "1.18.26" @@ -3849,9 +4478,32 @@ dependencies = [ "solana-sdk", "spl-associated-token-account", "spl-memo", - "spl-token", + "spl-token 4.0.0", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "solana-transaction-status-client-types" +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1458fc750d0df4439bb4c1b418a4fe61afbd2e83963e452256eca99dc0c1cf76" +dependencies = [ + "base64 0.22.1", + "bincode", + "bs58 0.5.1", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder-client-types", + "solana-commitment-config", + "solana-message", + "solana-reward-info", + "solana-signature", + "solana-transaction", + "solana-transaction-context", + "solana-transaction-error", + "thiserror 2.0.12", ] [[package]] @@ -3865,7 +4517,7 @@ dependencies = [ "solana-net-utils", "solana-sdk", "solana-streamer", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -3904,7 +4556,7 @@ dependencies = [ "solana-program", "solana-program-runtime", "solana-sdk", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3932,7 +4584,7 @@ dependencies = [ "solana-program", "solana-sdk", "subtle", - "thiserror", + "thiserror 1.0.69", "zeroize", ] @@ -3951,7 +4603,7 @@ dependencies = [ "rand 0.8.5", "rustc-demangle", "scroll", - "thiserror", + "thiserror 1.0.69", "winapi", ] @@ -3959,10 +4611,17 @@ dependencies = [ name = "solana_scanner" version = "0.1.0" dependencies = [ + "base64 0.22.1", + "bincode", "bs58 0.5.1", + "hex", "libc", "solana-client", + "solana-commitment-config", "solana-sdk", + "solana-transaction-status", + "solana-transaction-status-client-types", + "spl-token 8.0.0", ] [[package]] @@ -3992,9 +4651,9 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-token", + "spl-token 4.0.0", "spl-token-2022", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4029,7 +4688,7 @@ dependencies = [ "quote", "sha2 0.10.8", "syn 2.0.100", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4064,7 +4723,7 @@ dependencies = [ "num-traits", "solana-program", "spl-program-error-derive", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4105,7 +4764,35 @@ dependencies = [ "num-traits", "num_enum 0.6.1", "solana-program", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "spl-token" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053067c6a82c705004f91dae058b11b4780407e9ccd6799dc9e7d0fab5f242da" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.2", + "num-traits", + "num_enum 0.7.3", + "solana-account-info", + "solana-cpi", + "solana-decode-error", + "solana-instruction", + "solana-msg", + "solana-program-entrypoint", + "solana-program-error", + "solana-program-memory", + "solana-program-option", + "solana-program-pack", + "solana-pubkey", + "solana-rent", + "solana-sdk-ids", + "solana-sysvar", + "thiserror 2.0.12", ] [[package]] @@ -4124,12 +4811,12 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod", - "spl-token", + "spl-token 4.0.0", "spl-token-group-interface", "spl-token-metadata-interface", "spl-transfer-hook-interface", "spl-type-length-value", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4333,7 +5020,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", ] [[package]] @@ -4347,6 +5043,17 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "time" version = "0.3.41" @@ -4391,7 +5098,7 @@ dependencies = [ "rand 0.7.3", "rustc-hash", "sha2 0.9.9", - "thiserror", + "thiserror 1.0.69", "unicode-normalization", "wasm-bindgen", "zeroize", @@ -4596,7 +5303,7 @@ dependencies = [ "rand 0.8.5", "rustls", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", "webpki-roots 0.24.0", @@ -5122,7 +5829,7 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] diff --git a/Cargo.toml b/Cargo.toml index 7f1e4d6..f76dc28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,20 @@ [package] name = "solana_scanner" version = "0.1.0" -edition = "2021" +edition = "2024" [dependencies] solana-client = "1.17" solana-sdk = "1.17" bs58 = "0.5.0" +solana-commitment-config = "2.2.1" +solana-transaction-status-client-types = "2.2.4" +solana-transaction-status = "1.18.26" +spl-token = "8.0.0" +base64 = "0.22.1" +bincode = "1.3.3" +hex = "0.4" + [target.'cfg(target_os = "linux")'.dependencies] libc = "0.2" diff --git a/src/main.rs b/src/main.rs index bb8681e..39acf9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,33 +4,30 @@ use bs58; use solana_sdk::instruction::Instruction; use solana_sdk::message::Message; use solana_client::rpc_response::RpcConfirmedTransactionStatusWithSignature; -use solana_client::rpc_response::EncodedConfirmedTransactionWithStatusMeta; use solana_sdk::transaction::Transaction; +use solana_transaction_status::UiTransactionEncoding; +use solana_sdk::signature::Signature; +use std::str::FromStr; +use spl_token::state::Mint; +use solana_transaction_status::EncodedTransaction::{Json, Binary}; +use solana_transaction_status::UiMessage::{Parsed, Raw}; +use base64::prelude::*; +use solana_sdk::message::VersionedMessage; +use solana_sdk::transaction::VersionedTransaction; +use hex; -fn base58_to_pubkey(address: &str) -> Result> { - let decoded = bs58::decode(address).into_vec()?; - if decoded.len() != 32 { - return Err("Address must be 32 bytes long".into()); - } - let mut bytes = [0u8; 32]; - bytes.copy_from_slice(&decoded); - Ok(Pubkey::new_from_array(bytes)) -} -fn is_token_creation(instruction: &Instruction) -> bool { - // L'instruction de création de token a un discriminant de 0 - if instruction.data.len() < 1 { - return false; - } - instruction.data[0] == 0 -} +use solana_transaction_status_client_types::option_serializer; + fn main() { let rpc_url = "https://api.mainnet-beta.solana.com"; let client = RpcClient::new(rpc_url.to_string()); // Adresse du programme Token (SPL Token Program) - let token_program_address = "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"; + let token_program_address = "TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM"; + + let buy_router_address = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"; match base58_to_pubkey(token_program_address) { Ok(token_program) => { @@ -42,41 +39,117 @@ fn main() { match transactions { Ok(sigs) => { println!("Nombre total de transactions trouvées : {}", sigs.len()); - for sig in sigs.iter().take(10) { // Limiter à 10 transactions pour commencer - // Récupérer les détails de la transaction - match client.get_transaction(&sig.signature, solana_client::rpc_config::RpcTransactionConfig { - encoding: Some(solana_client::rpc_config::RpcTransactionEncoding::Base64), - commitment: Some(solana_client::rpc_config::RpcTransactionLogsConfig { - commitment: Some(solana_client::rpc_config::CommitmentConfig::confirmed()), - max_supported_transaction_version: Some(0), - }), + for sig in sigs.iter().take(1000) { // Limiter à 10 transactions pour commencer + // Convertir la signature en Signature + let signature = Signature::from_str(&sig.signature).unwrap(); + + + let config = solana_client::rpc_config::RpcTransactionConfig { + encoding: Some(UiTransactionEncoding::Base64), + commitment: Some(solana_sdk::commitment_config::CommitmentConfig::confirmed()), max_supported_transaction_version: Some(0), - }) { + }; + + // Récupérer les détails de la transaction + match client.get_transaction_with_config(&signature, config) { Ok(tx) => { - println!(tx.transaction.meta); + if let Some(meta) = tx.transaction.meta { + if let solana_transaction_status::option_serializer::OptionSerializer::Some(inner_instructions) = meta.inner_instructions { + //Vérifier si c'est une création de token + let is_token_creation = inner_instructions.iter().any(|inner| { + inner.instructions.iter().any(|ix| { + //println!("ix: {:?}", ix); + match ix { + solana_transaction_status::UiInstruction::Compiled(instruction) => { + is_token_creation(instruction) + }, + _ => false + } + }) + }); - //if let Some(meta) = tx.transaction.meta { - //println!(meta); - // Vérifier si c'est une création de token - //let is_token_creation = meta.inner_instructions.iter().any(|inner| { - // inner.instructions.iter().any(|ix| { - //if let Ok(instruction) = ix.try_into() { - //is_token_creation(&instruction) - //} else { - // false - //} - // }) - //}); + // if is_token_creation { + // println!("Création de token trouvée :"); + // println!(" Signature: {}", sig.signature); + // println!(" Slot: {}", sig.slot); + // println!(" Block time: {:?}", sig.block_time); + // println!(" Status: {:?}", meta.err); + // println!("---"); + // } - //if is_token_creation { - //println!("Création de token trouvée :"); - //println!(" Signature: {}", sig.signature); - //println!(" Slot: {}", sig.slot); - //println!(" Block time: {:?}", sig.block_time); - //println!(" Status: {:?}", meta.err); - //println!("---"); - //} - // } + //println!("tx.transaction.transaction: {:?}", tx.transaction.transaction); + + match tx.transaction.transaction { + Binary(data, encoding) => { + let decoded = BASE64_STANDARD.decode(data).unwrap(); + + // Try to deserialize as a VersionedTransaction + if let Ok(versioned_tx) = bincode::deserialize::(&decoded) { + + // dbg!(&versioned_tx); + + // Try to deserialize the message + if let Ok(message) = bincode::deserialize::(&versioned_tx.message.serialize()) { + + let account_keys = versioned_tx.message.static_account_keys(); + + println!("\nAccount Keys in Transaction:"); + println!(" Payer (account_keys[0]): {}", account_keys[0]); + println!(" Mint Account (account_keys[1]): {}", account_keys[1]); + println!(" Rent Account (account_keys[2]): {}", account_keys[2]); + println!(" Mint Authority (account_keys[3]): {}", account_keys[3]); + println!(" Token Program (account_keys[4]): {}", account_keys[4]); + // println!("Instructions: {:?}", message.compiled_instructions); + + + + match get_token_info(&client, account_keys[1].to_string().as_str()) { + Ok(token_info) => { + display_token_info(&token_info); + } + Err(e) => { + println!("Erreur lors de la récupération des informations du token : {:?}", e); + } + } + + } + } + + // If not a versioned transaction, try as a legacy transaction + if let Ok(legacy_tx) = bincode::deserialize::(&decoded) { + // dbg!(&legacy_tx); + + } + println!("--------------------------------"); + // match json_transaction.message { + // Parsed(msg) => { + // println!("binary msg: {:?}", msg); + + // // println!("Token trouvé : {}", &msg); + // // println!("Supply total : {}", &msg.supply); + // // println!("Decimals : {}", &msg.decimals); + + + // }, + // Raw(msg) => { + // println!("Raw msg: {:?}", msg); + // // println!("Token trouvé : {}", &msg); + // // println!("Supply total : {}", &msg.supply); + // // println!("Decimals : {}", &msg.decimals); + + + // } + // } + }, + _ => {} + } + + + } + + + + } } Err(err) => eprintln!("Erreur lors de la récupération de la transaction : {:?}", err), } @@ -89,3 +162,89 @@ fn main() { } } +fn base58_to_pubkey(address: &str) -> Result> { + let decoded = bs58::decode(address).into_vec()?; + if decoded.len() != 32 { + return Err("Address must be 32 bytes long".into()); + } + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(&decoded); + Ok(Pubkey::new_from_array(bytes)) +} + +fn is_token_creation(instruction: &solana_transaction_status::UiCompiledInstruction) -> bool { + // L'instruction de création de token a un discriminant de 0 + if instruction.data.len() < 1 { + return false; + } + + // instruction.data == "0".to_string() + println!("instruction: {:?}", instruction); + true + //instruction.data[0] == 0 +} + +#[derive(Debug)] +struct TokenInfo { + mint_address: String, + transaction_signature: String, + slot: u64, + block_time: Option, + decimals: u8, + mint_authority: Option, + freeze_authority: Option, + supply: u64, +} + +fn get_token_info(client: &RpcClient, mint_address: &str) -> Result> { + let mint_pubkey = Pubkey::from_str(mint_address)?; + + // Get the account data + let account = client.get_account(&mint_pubkey)?; + + // Afficher les données brutes en hexadécimal pour le débogage + println!("Données brutes en hex: {}", hex::encode(&account.data)); + + // Décoder les données en utilisant Mint::unpack + let mint = Mint::unpack(&account.data)?; + + // Afficher les informations décodées + println!("\nInformations du token décodées:"); + println!("Decimals: {}", mint.decimals); + println!("Supply: {}", mint.supply); + println!("Mint Authority: {:?}", mint.mint_authority); + println!("Freeze Authority: {:?}", mint.freeze_authority); + + Ok(TokenInfo { + mint_address: mint_address.to_string(), + transaction_signature: "".to_string(), + slot: 0, + block_time: None, + decimals: mint.decimals, + mint_authority: mint.mint_authority.map(|pk| pk.to_string()), + freeze_authority: mint.freeze_authority.map(|pk| pk.to_string()), + supply: mint.supply, + }) +} + +fn display_token_info(token: &TokenInfo) { + println!("\nToken Information:"); + println!(" Mint Address: {}", token.mint_address); + println!(" Decimals: {}", token.decimals); + println!(" Supply: {}", token.supply); + match &token.mint_authority { + Some(auth) => println!(" Mint Authority: {}", auth), + None => println!(" Mint Authority: None (immutable)"), + } + match &token.freeze_authority { + Some(auth) => println!(" Freeze Authority: {}", auth), + None => println!(" Freeze Authority: None (unfrozen)"), + } + println!(" Transaction: {}", token.transaction_signature); + println!(" Slot: {}", token.slot); + if let Some(time) = token.block_time { + println!(" Block Time: {}", time); + } + println!("---"); +} +